Merge pull request #28629 from netchampfaris/autoincrement-renaming
fix: allow renaming autoincrement documents
This commit is contained in:
commit
f7c005dc09
5 changed files with 59 additions and 16 deletions
|
|
@ -1486,8 +1486,8 @@ def reload_doc(
|
|||
@whitelist(methods=["POST", "PUT"])
|
||||
def rename_doc(
|
||||
doctype: str,
|
||||
old: str,
|
||||
new: str,
|
||||
old: str | int,
|
||||
new: str | int,
|
||||
force: bool = False,
|
||||
merge: bool = False,
|
||||
*,
|
||||
|
|
|
|||
|
|
@ -276,7 +276,6 @@
|
|||
},
|
||||
{
|
||||
"default": "1",
|
||||
"depends_on": "eval:doc.naming_rule !== \"Autoincrement\"",
|
||||
"fieldname": "allow_rename",
|
||||
"fieldtype": "Check",
|
||||
"label": "Allow Rename",
|
||||
|
|
@ -754,7 +753,7 @@
|
|||
"link_fieldname": "reference_doctype"
|
||||
}
|
||||
],
|
||||
"modified": "2024-08-14 17:04:47.278892",
|
||||
"modified": "2024-11-30 16:09:21.536704",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Core",
|
||||
"name": "DocType",
|
||||
|
|
|
|||
|
|
@ -193,7 +193,6 @@ class DocType(Document):
|
|||
self.validate_name()
|
||||
|
||||
self.set_defaults_for_single_and_table()
|
||||
self.set_defaults_for_autoincremented()
|
||||
self.scrub_field_names()
|
||||
self.set_default_in_list_view()
|
||||
self.set_default_translatable()
|
||||
|
|
@ -279,10 +278,6 @@ class DocType(Document):
|
|||
self.allow_import = 0
|
||||
self.permissions = []
|
||||
|
||||
def set_defaults_for_autoincremented(self):
|
||||
if self.autoname and self.autoname == "autoincrement":
|
||||
self.allow_rename = 0
|
||||
|
||||
def set_default_in_list_view(self):
|
||||
"""Set default in-list-view for first 4 mandatory fields"""
|
||||
not_allowed_in_list_view = get_fields_not_allowed_in_list_view(self.meta)
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ from frappe.model.dynamic_links import get_dynamic_link_map
|
|||
from frappe.model.naming import validate_name
|
||||
from frappe.model.utils.user_settings import sync_user_settings, update_user_settings_data
|
||||
from frappe.query_builder import Field
|
||||
from frappe.utils.data import sbool
|
||||
from frappe.utils.data import cint, cstr, sbool
|
||||
from frappe.utils.password import rename_password
|
||||
from frappe.utils.scheduler import is_scheduler_inactive
|
||||
|
||||
|
|
@ -118,8 +118,8 @@ def update_document_title(
|
|||
|
||||
def rename_doc(
|
||||
doctype: str | None = None,
|
||||
old: str | None = None,
|
||||
new: str | None = None,
|
||||
old: str | int | None = None,
|
||||
new: str | int | None = None,
|
||||
force: bool = False,
|
||||
merge: bool = False,
|
||||
ignore_permissions: bool = False,
|
||||
|
|
@ -157,6 +157,10 @@ def rename_doc(
|
|||
merge = sbool(merge)
|
||||
meta = frappe.get_meta(doctype)
|
||||
|
||||
if meta.naming_rule == "Autoincrement":
|
||||
old = cint(old)
|
||||
new = cint(new)
|
||||
|
||||
if validate:
|
||||
old_doc = doc or frappe.get_doc(doctype, old)
|
||||
out = old_doc.run_method("before_rename", old, new, merge) or {}
|
||||
|
|
@ -283,7 +287,7 @@ def update_user_settings(old: str, new: str, link_fields: list[dict]) -> None:
|
|||
user_settings_details = (
|
||||
frappe.qb.from_(UserSettings)
|
||||
.select("user", "doctype", "data")
|
||||
.where(UserSettings.data.like(old) & UserSettings.doctype.isin(linked_doctypes))
|
||||
.where(UserSettings.data.like(cstr(old)) & UserSettings.doctype.isin(linked_doctypes))
|
||||
.run(as_dict=True)
|
||||
)
|
||||
|
||||
|
|
@ -350,8 +354,8 @@ def update_autoname_field(doctype: str, new: str, meta: "Meta") -> None:
|
|||
|
||||
def validate_rename(
|
||||
doctype: str,
|
||||
old: str,
|
||||
new: str,
|
||||
old: str | int,
|
||||
new: str | int,
|
||||
meta: "Meta",
|
||||
merge: bool,
|
||||
force: bool = False,
|
||||
|
|
@ -459,7 +463,9 @@ def update_link_field_values(link_fields: list[dict], old: str, new: str, doctyp
|
|||
if parent == new and doctype == "DocType":
|
||||
parent = old
|
||||
|
||||
frappe.db.set_value(parent, {docfield: old}, docfield, new, update_modified=False)
|
||||
# when a document with autoincrement naming is renamed, the old and new values are int
|
||||
# but link field values are always stored as varchar, so casting the values to string
|
||||
frappe.db.set_value(parent, {docfield: cstr(old)}, docfield, cstr(new), update_modified=False)
|
||||
|
||||
# update cached link_fields as per new
|
||||
if doctype == "DocType" and field["parent"] == old:
|
||||
|
|
|
|||
|
|
@ -279,3 +279,46 @@ class TestRenameDoc(IntegrationTestCase):
|
|||
|
||||
self.assertEqual(len(parent_a_instance.test_table), 1)
|
||||
self.assertEqual(len(parent_b_instance.test_table), 1)
|
||||
|
||||
def test_rename_autoincrement_doc(self):
|
||||
if not frappe.db.exists("DocType", "Autoincrement DocType"):
|
||||
new_doctype(
|
||||
"Autoincrement DocType",
|
||||
naming_rule="Autoincrement",
|
||||
autoname="autoincrement",
|
||||
fields=[
|
||||
{
|
||||
"label": "First Name",
|
||||
"fieldname": "first_name",
|
||||
"fieldtype": "Data",
|
||||
}
|
||||
],
|
||||
).insert()
|
||||
|
||||
if not frappe.db.exists("DocType", "Autoincrement Linked DocType"):
|
||||
new_doctype(
|
||||
"Autoincrement Linked DocType",
|
||||
fields=[
|
||||
{
|
||||
"label": "Autoincrement DocType",
|
||||
"fieldname": "autoincrement_doctype",
|
||||
"fieldtype": "Link",
|
||||
"options": "Autoincrement DocType",
|
||||
}
|
||||
],
|
||||
).insert()
|
||||
|
||||
# create records
|
||||
mary = frappe.new_doc("Autoincrement DocType", first_name="Mary").insert()
|
||||
marilyn = frappe.new_doc("Autoincrement DocType", first_name="Marilyn").insert()
|
||||
linked_with_marilyn = frappe.new_doc(
|
||||
"Autoincrement Linked DocType", autoincrement_doctype=marilyn.name
|
||||
).insert()
|
||||
self.assertEqual(marilyn.name, linked_with_marilyn.autoincrement_doctype)
|
||||
|
||||
# rename marilyn to mary
|
||||
frappe.rename_doc("Autoincrement DocType", marilyn.name, mary.name, merge=True)
|
||||
linked_with_marilyn.reload()
|
||||
|
||||
self.assertTrue(frappe.db.exists("Autoincrement DocType", marilyn.name) is None)
|
||||
self.assertEqual(linked_with_marilyn.autoincrement_doctype, frappe.utils.cstr(mary.name))
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue