From f31d01a2a645ea5c2aebaeeb02cdb97b086ef356 Mon Sep 17 00:00:00 2001 From: leela Date: Fri, 2 Jul 2021 17:43:16 +0530 Subject: [PATCH] Revert "Merge pull request #13244 from prssanna/amended-doc-naming" This reverts commit 58b95662c2f704258f83ad72d4a0c942ae14f778, reversing changes made to c553b7e23a5c70f1c05b08850a419ac23fba7aa7. --- frappe/core/doctype/doctype/doctype.py | 40 +++++--------- frappe/core/doctype/doctype/test_doctype.py | 4 -- frappe/model/document.py | 10 +--- frappe/model/naming.py | 52 ++----------------- frappe/patches.txt | 1 - ...l_name_docfield_to_submittable_doctypes.py | 11 ---- frappe/public/js/frappe/form/form.js | 24 ++++----- frappe/public/js/frappe/router.js | 6 --- frappe/tests/test_naming.py | 34 ------------ 9 files changed, 27 insertions(+), 155 deletions(-) delete mode 100644 frappe/patches/v13_0/add_original_name_docfield_to_submittable_doctypes.py diff --git a/frappe/core/doctype/doctype/doctype.py b/frappe/core/doctype/doctype/doctype.py index da410b3e0b..3cdc45ea08 100644 --- a/frappe/core/doctype/doctype/doctype.py +++ b/frappe/core/doctype/doctype/doctype.py @@ -70,7 +70,6 @@ class DocType(Document): if not self.istable: validate_permissions(self) - self.make_cancellable() self.make_amendable() self.make_repeatable() self.validate_nestedset() @@ -569,33 +568,18 @@ class DocType(Document): def make_amendable(self): """If is_submittable is set, add amended_from docfields.""" - if self.is_submittable and\ - not frappe.db.get_value('DocField', {'fieldname': 'amended_from', 'parent': self.name}): - - self.append("fields", { - "label": "Amended From", - "fieldtype": "Link", - "fieldname": "amended_from", - "options": self.name, - "read_only": 1, - "print_hide": 1, - "no_copy": 1 - }) - - def make_cancellable(self): - """If is_submittable is set, add original_name docfield.""" - if self.is_submittable and\ - not frappe.db.get_value('DocField', {'fieldname': 'original_name', 'parent': self.name}): - - self.append("fields", { - "label": "Original Name", - "fieldtype": "Text", - "fieldname": "original_name", - "read_only": 1, - "hidden": 1, - "print_hide": 1, - "no_copy": 1 - }) + if self.is_submittable: + if not frappe.db.sql("""select name from tabDocField + where fieldname = 'amended_from' and parent = %s""", self.name): + self.append("fields", { + "label": "Amended From", + "fieldtype": "Link", + "fieldname": "amended_from", + "options": self.name, + "read_only": 1, + "print_hide": 1, + "no_copy": 1 + }) def make_repeatable(self): """If allow_auto_repeat is set, add auto_repeat custom field.""" diff --git a/frappe/core/doctype/doctype/test_doctype.py b/frappe/core/doctype/doctype/test_doctype.py index fbb224fce7..1e1a01a685 100644 --- a/frappe/core/doctype/doctype/test_doctype.py +++ b/frappe/core/doctype/doctype/test_doctype.py @@ -348,7 +348,6 @@ class TestDocType(unittest.TestCase): dump_docs = json.dumps(docs.get('docs')) cancel_all_linked_docs(dump_docs) data_link_doc.cancel() - data_doc.name = '{}-1'.format(data_doc.name) data_doc.load_from_db() self.assertEqual(data_link_doc.docstatus, 2) self.assertEqual(data_doc.docstatus, 2) @@ -434,10 +433,7 @@ class TestDocType(unittest.TestCase): self.assertRaises(frappe.LinkExistsError, data_link_doc_1.cancel) data_doc.load_from_db() - - data_doc_2.name = '{}-1'.format(data_doc_2.name) data_doc_2.load_from_db() - self.assertEqual(data_link_doc_1.docstatus, 2) #linked doc is canceled diff --git a/frappe/model/document.py b/frappe/model/document.py index 99585bb26c..61160e1f01 100644 --- a/frappe/model/document.py +++ b/frappe/model/document.py @@ -5,7 +5,7 @@ import time from frappe import _, msgprint, is_whitelisted from frappe.utils import flt, cstr, now, get_datetime_str, file_lock, date_diff from frappe.model.base_document import BaseDocument, get_controller -from frappe.model.naming import set_new_name, rename_cancelled_doc +from frappe.model.naming import set_new_name from werkzeug.exceptions import NotFound, Forbidden import hashlib, json from frappe.model import optional_fields, table_fields @@ -917,14 +917,6 @@ class Document(BaseDocument): @whitelist.__func__ def _cancel(self): """Cancel the document. Sets `docstatus` = 2, then saves.""" - - # for backward compatibility - if self.amended_from and not self.original_name: - self.original_name = None - else: - self.original_name = self.name - - self.name = rename_cancelled_doc(self) self.docstatus = 2 self.save() diff --git a/frappe/model/naming.py b/frappe/model/naming.py index ed037adb0d..fe136adce8 100644 --- a/frappe/model/naming.py +++ b/frappe/model/naming.py @@ -221,16 +221,6 @@ def revert_series_if_last(key, name, doc=None): * prefix = #### and hashes = 2021 (hash doesn't exist) * will search hash in key then accordingly get prefix = "" """ - - if hasattr(doc, 'amended_from'): - # do not revert if doc is amended, since cancelled docs still exist - if doc.docstatus != 2 and doc.amended_from: - return - - # for first cancelled doc - if doc.docstatus == 2 and not doc.amended_from and doc.original_name: - name = doc.original_name - if ".#" in key: prefix, hashes = key.rsplit(".", 1) if "#" not in hashes: @@ -314,48 +304,14 @@ def append_number_if_name_exists(doctype, value, fieldname="name", separator="-" def _set_amended_name(doc): - if doc.original_name: - doc.name = doc.original_name - else: - original_name = get_original_name(doc) - doc.name = doc.amended_from - - # rename original doc to next name in series, and set amended doc name as original name - next_name_in_series = get_new_name_from_amended_from(doc) - frappe.rename_doc(doc.doctype, original_name, next_name_in_series, force=True, show_alert=False) - doc.name = original_name - doc.amended_from = next_name_in_series - doc.original_name = original_name - - return doc.name - -def get_original_name(doc): - # get original doc name from chain of amended docs - amended_from = original_name = doc.amended_from - while amended_from: - original_name = amended_from - amended_from = frappe.db.get_value(doc.doctype, amended_from, "amended_from") - - return original_name - -def get_new_name_from_amended_from(doc): am_id = 1 - am_prefix = doc.name - if frappe.db.get_value(doc.doctype, doc.name, "amended_from"): + am_prefix = doc.amended_from + if frappe.db.get_value(doc.doctype, doc.amended_from, "amended_from"): am_id = cint(doc.amended_from.split("-")[-1]) + 1 am_prefix = "-".join(doc.amended_from.split("-")[:-1]) # except the last hyphen - new_name = am_prefix + "-" + str(am_id) - if new_name == doc.name: - am_id += 1 - new_name = am_prefix + "-" + str(am_id) - return new_name - -def rename_cancelled_doc(doc): - doc = frappe.parse_json(doc) - new_name = get_new_name_from_amended_from(doc) - frappe.rename_doc(doc.doctype, doc.name, new_name, force=True, show_alert=False) - return new_name + doc.name = am_prefix + "-" + str(am_id) + return doc.name def _field_autoname(autoname, doc, skip_slicing=None): diff --git a/frappe/patches.txt b/frappe/patches.txt index 833d85423b..7605d8ea2b 100644 --- a/frappe/patches.txt +++ b/frappe/patches.txt @@ -180,4 +180,3 @@ frappe.patches.v12_0.rename_uploaded_files_with_proper_name frappe.patches.v13_0.queryreport_columns frappe.patches.v13_0.jinja_hook frappe.patches.v13_0.update_notification_channel_if_empty -frappe.patches.v13_0.add_original_name_docfield_to_submittable_doctypes diff --git a/frappe/patches/v13_0/add_original_name_docfield_to_submittable_doctypes.py b/frappe/patches/v13_0/add_original_name_docfield_to_submittable_doctypes.py deleted file mode 100644 index d17242e90a..0000000000 --- a/frappe/patches/v13_0/add_original_name_docfield_to_submittable_doctypes.py +++ /dev/null @@ -1,11 +0,0 @@ -import frappe -from frappe.database.schema import add_column - -def execute(): - for doctype in frappe.db.get_all('DocType'): - doctype = frappe.get_doc('DocType', doctype.name) - if doctype.is_submittable and frappe.db.table_exists(doctype.name): - doctype.make_cancellable() - if not frappe.db.has_column(doctype.name, 'original_name'): - add_column(doctype.name, 'original_name', 'Text') - doctype.db_update_all() diff --git a/frappe/public/js/frappe/form/form.js b/frappe/public/js/frappe/form/form.js index 30f023c987..8064f90a98 100644 --- a/frappe/public/js/frappe/form/form.js +++ b/frappe/public/js/frappe/form/form.js @@ -770,36 +770,32 @@ frappe.ui.form.Form = class FrappeForm { } _cancel(btn, callback, on_error, skip_confirm) { + const me = this; const cancel_doc = () => { frappe.validated = true; - this.script_manager.trigger("before_cancel").then(() => { + me.script_manager.trigger("before_cancel").then(() => { if (!frappe.validated) { - return this.handle_save_fail(btn, on_error); + return me.handle_save_fail(btn, on_error); } - const original_name = this.docname; - const after_cancel = (r) => { + var after_cancel = function(r) { if (r.exc) { - this.handle_save_fail(btn, on_error); + me.handle_save_fail(btn, on_error); } else { frappe.utils.play_sound("cancel"); + me.refresh(); callback && callback(); - this.script_manager.trigger("after_cancel"); - frappe.run_serially([ - () => this.rename_notify(this.doctype, original_name, r.docs[0].name), - () => frappe.router.clear_re_route(this.doctype, original_name), - () => this.refresh(), - ]); + me.script_manager.trigger("after_cancel"); } }; - frappe.ui.form.save(this, "cancel", after_cancel, btn); + frappe.ui.form.save(me, "cancel", after_cancel, btn); }); } if (skip_confirm) { cancel_doc(); } else { - frappe.confirm(__("Permanently Cancel {0}?", [this.docname]), cancel_doc, this.handle_save_fail(btn, on_error)); + frappe.confirm(__("Permanently Cancel {0}?", [this.docname]), cancel_doc, me.handle_save_fail(btn, on_error)); } }; @@ -821,7 +817,7 @@ frappe.ui.form.Form = class FrappeForm { 'docname': this.doc.name }).then(is_amended => { if (is_amended) { - frappe.throw(__('This document is already amended, you cannot amend it again')); + frappe.throw(__('This document is already amended, you cannot ammend it again')); } this.validate_form_action("Amend"); var me = this; diff --git a/frappe/public/js/frappe/router.js b/frappe/public/js/frappe/router.js index 46544db919..12caf4ab94 100644 --- a/frappe/public/js/frappe/router.js +++ b/frappe/public/js/frappe/router.js @@ -235,12 +235,6 @@ frappe.router = { } }, - clear_re_route(doctype, docname) { - delete frappe.re_route[ - `${encodeURIComponent(frappe.router.slug(doctype))}/${encodeURIComponent(docname)}` - ]; - }, - set_title(sub_path) { if (frappe.route_titles[sub_path]) { frappe.utils.set_title(frappe.route_titles[sub_path]); diff --git a/frappe/tests/test_naming.py b/frappe/tests/test_naming.py index b716f063c4..557993882f 100644 --- a/frappe/tests/test_naming.py +++ b/frappe/tests/test_naming.py @@ -116,37 +116,3 @@ class TestNaming(unittest.TestCase): self.assertEqual(current_index.get('current'), 2) frappe.db.sql("""delete from `tabSeries` where name = %s""", series) - - def test_naming_for_cancelled_and_amended_doc(self): - submittable_doctype = frappe.get_doc({ - "doctype": "DocType", - "module": "Core", - "custom": 1, - "is_submittable": 1, - "permissions": [{ - "role": "System Manager", - "read": 1 - }], - "name": 'Submittable Doctype' - }).insert() - - doc = frappe.new_doc('Submittable Doctype') - doc.save() - original_name = doc.name - - doc.submit() - doc.cancel() - cancelled_name = doc.name - self.assertEqual(cancelled_name, "{}-1".format(original_name)) - - amended_doc = frappe.copy_doc(doc) - amended_doc.docstatus = 0 - amended_doc.amended_from = doc.name - amended_doc.save() - self.assertEqual(amended_doc.name, original_name) - - amended_doc.submit() - amended_doc.cancel() - self.assertEqual(amended_doc.name, "{}-2".format(original_name)) - - submittable_doctype.delete() \ No newline at end of file