Revert "Merge pull request #13244 from prssanna/amended-doc-naming"

This reverts commit 58b95662c2, reversing
changes made to c553b7e23a.
This commit is contained in:
leela 2021-07-02 17:43:16 +05:30
parent dede680ceb
commit f31d01a2a6
9 changed files with 27 additions and 155 deletions

View file

@ -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."""

View file

@ -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

View file

@ -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()

View file

@ -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):

View file

@ -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

View file

@ -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()

View file

@ -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;

View file

@ -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]);

View file

@ -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()