From a93c2caab21d9f8d44b4b92e456e76a475125fff Mon Sep 17 00:00:00 2001 From: Saqib Ansari Date: Tue, 6 Apr 2021 20:48:33 +0530 Subject: [PATCH 1/3] fix: reverting of series with a variable --- frappe/model/delete_doc.py | 4 ++-- frappe/model/naming.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/frappe/model/delete_doc.py b/frappe/model/delete_doc.py index ccdb8ca8b3..5fcc74a734 100644 --- a/frappe/model/delete_doc.py +++ b/frappe/model/delete_doc.py @@ -157,10 +157,10 @@ def update_naming_series(doc): if doc.meta.autoname: if doc.meta.autoname.startswith("naming_series:") \ and getattr(doc, "naming_series", None): - revert_series_if_last(doc.naming_series, doc.name) + revert_series_if_last(doc.naming_series, doc.name, doc) elif doc.meta.autoname.split(":")[0] not in ("Prompt", "field", "hash"): - revert_series_if_last(doc.meta.autoname, doc.name) + revert_series_if_last(doc.meta.autoname, doc.name, doc) def delete_from_table(doctype, name, ignore_doctypes, doc): if doctype!="DocType" and doctype==name: diff --git a/frappe/model/naming.py b/frappe/model/naming.py index e954debe6f..3882fb8f11 100644 --- a/frappe/model/naming.py +++ b/frappe/model/naming.py @@ -198,7 +198,7 @@ def getseries(key, digits): return ('%0'+str(digits)+'d') % current -def revert_series_if_last(key, name): +def revert_series_if_last(key, name, doc): if ".#" in key: prefix, hashes = key.rsplit(".", 1) if "#" not in hashes: @@ -207,7 +207,7 @@ def revert_series_if_last(key, name): prefix = key if '.' in prefix: - prefix = parse_naming_series(prefix.split('.')) + prefix = parse_naming_series(prefix.split('.'), doc=doc) count = cint(name.replace(prefix, "")) current = frappe.db.sql("SELECT `current` FROM `tabSeries` WHERE `name`=%s FOR UPDATE", (prefix,)) From a59e1ed0cabdeb50aa6bef43a60de319f1afb06c Mon Sep 17 00:00:00 2001 From: "hasnain2808@gmail.com" Date: Wed, 7 Apr 2021 10:12:21 +0530 Subject: [PATCH 2/3] test: pass doc --- frappe/tests/test_document.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frappe/tests/test_document.py b/frappe/tests/test_document.py index 2be92be1f5..74e3ce2239 100644 --- a/frappe/tests/test_document.py +++ b/frappe/tests/test_document.py @@ -244,7 +244,7 @@ class TestDocument(unittest.TestCase): prefix = parse_naming_series(prefix) old_current = frappe.db.get_value('Series', prefix, "current", order_by="name") - revert_series_if_last(series, name) + revert_series_if_last(series, name, doc) new_current = cint(frappe.db.get_value('Series', prefix, "current", order_by="name")) self.assertEqual(cint(old_current) - 1, new_current) From e95f7d201a061a74b7ee3fe17a75f81a51e53bc2 Mon Sep 17 00:00:00 2001 From: "hasnain2808@gmail.com" Date: Wed, 7 Apr 2021 11:15:34 +0530 Subject: [PATCH 3/3] fix: backwards compatibility --- frappe/model/naming.py | 2 +- frappe/tests/test_document.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/frappe/model/naming.py b/frappe/model/naming.py index 3882fb8f11..1a3f90da37 100644 --- a/frappe/model/naming.py +++ b/frappe/model/naming.py @@ -198,7 +198,7 @@ def getseries(key, digits): return ('%0'+str(digits)+'d') % current -def revert_series_if_last(key, name, doc): +def revert_series_if_last(key, name, doc=None): if ".#" in key: prefix, hashes = key.rsplit(".", 1) if "#" not in hashes: diff --git a/frappe/tests/test_document.py b/frappe/tests/test_document.py index 74e3ce2239..2be92be1f5 100644 --- a/frappe/tests/test_document.py +++ b/frappe/tests/test_document.py @@ -244,7 +244,7 @@ class TestDocument(unittest.TestCase): prefix = parse_naming_series(prefix) old_current = frappe.db.get_value('Series', prefix, "current", order_by="name") - revert_series_if_last(series, name, doc) + revert_series_if_last(series, name) new_current = cint(frappe.db.get_value('Series', prefix, "current", order_by="name")) self.assertEqual(cint(old_current) - 1, new_current)