From 1223f5551f83b66e438060874abaf2e237071a23 Mon Sep 17 00:00:00 2001 From: khushi Date: Thu, 19 Jun 2025 14:03:42 +0530 Subject: [PATCH 1/9] fix: contract autoname (cherry picked from commit e13e2bffe264180c2effc3c2cf36c4f0b15c384f) --- erpnext/crm/doctype/contract/contract.py | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/erpnext/crm/doctype/contract/contract.py b/erpnext/crm/doctype/contract/contract.py index 64f89552062..559c89a9629 100644 --- a/erpnext/crm/doctype/contract/contract.py +++ b/erpnext/crm/doctype/contract/contract.py @@ -6,6 +6,7 @@ import frappe from frappe import _ from frappe.model.document import Document from frappe.utils import getdate, nowdate +from frappe.model.naming import append_number_if_name_exists class Contract(Document): @@ -52,12 +53,7 @@ class Contract(Document): if self.contract_template: name += f" - {self.contract_template} Agreement" - # If identical, append contract name with the next number in the iteration - if frappe.db.exists("Contract", name): - count = len(frappe.get_all("Contract", filters={"name": ["like", f"%{name}%"]})) - name = f"{name} - {count}" - - self.name = _(name) + self.name = append_number_if_name_exists("Contract", name) def validate(self): self.set_missing_values() From 194e15fe6e48a529cf863bf234ba28c3daac5c64 Mon Sep 17 00:00:00 2001 From: khushi Date: Thu, 19 Jun 2025 14:06:04 +0530 Subject: [PATCH 2/9] chore: test contract autoname (cherry picked from commit b55d1e61c7b9149fa180d46f0f4db536056feaf6) --- erpnext/crm/doctype/contract/test_contract.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/erpnext/crm/doctype/contract/test_contract.py b/erpnext/crm/doctype/contract/test_contract.py index 13901683de8..81ccf3300fe 100644 --- a/erpnext/crm/doctype/contract/test_contract.py +++ b/erpnext/crm/doctype/contract/test_contract.py @@ -12,6 +12,19 @@ class TestContract(unittest.TestCase): frappe.db.sql("delete from `tabContract`") self.contract_doc = get_contract() + def test_autoname_appends_suffix_for_duplicates(self): + contract_1 = self.contract_doc + contract_1.insert() + self.assertEqual(contract_1.name, "_Test Customer") + + contract_2 = get_contract() + contract_2.insert() + self.assertEqual(contract_2.name, "_Test Customer-1") + + contract_3 = get_contract() + contract_3.insert() + self.assertEqual(contract_3.name, "_Test Customer-2") + def test_validate_start_date_before_end_date(self): self.contract_doc.start_date = nowdate() self.contract_doc.end_date = add_days(nowdate(), -1) From 8150638519da38b69272095652741467c8bb26e0 Mon Sep 17 00:00:00 2001 From: khushi Date: Thu, 19 Jun 2025 15:07:44 +0530 Subject: [PATCH 3/9] chore: linters check (cherry picked from commit f7e63936a9a0119de44296390b8b632399daedd1) --- erpnext/crm/doctype/contract/contract.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/crm/doctype/contract/contract.py b/erpnext/crm/doctype/contract/contract.py index 559c89a9629..ea4398d7bfa 100644 --- a/erpnext/crm/doctype/contract/contract.py +++ b/erpnext/crm/doctype/contract/contract.py @@ -5,8 +5,8 @@ import frappe from frappe import _ from frappe.model.document import Document -from frappe.utils import getdate, nowdate from frappe.model.naming import append_number_if_name_exists +from frappe.utils import getdate, nowdate class Contract(Document): From 1005ee64cd670c7de8fb73e059039cb983a1b669 Mon Sep 17 00:00:00 2001 From: khushi Date: Thu, 19 Jun 2025 17:13:01 +0530 Subject: [PATCH 4/9] refactor: remove autoname (cherry picked from commit a4bb7c4e95c853fb0319a183c541e049242befae) --- erpnext/crm/doctype/contract/contract.py | 8 -------- 1 file changed, 8 deletions(-) diff --git a/erpnext/crm/doctype/contract/contract.py b/erpnext/crm/doctype/contract/contract.py index ea4398d7bfa..49988e546df 100644 --- a/erpnext/crm/doctype/contract/contract.py +++ b/erpnext/crm/doctype/contract/contract.py @@ -47,14 +47,6 @@ class Contract(Document): status: DF.Literal["Unsigned", "Active", "Inactive"] # end: auto-generated types - def autoname(self): - name = self.party_name - - if self.contract_template: - name += f" - {self.contract_template} Agreement" - - self.name = append_number_if_name_exists("Contract", name) - def validate(self): self.set_missing_values() self.validate_dates() From b3c43e85278e2d3da5ce44d8f53f9c40be2af504 Mon Sep 17 00:00:00 2001 From: khushi Date: Thu, 19 Jun 2025 17:45:22 +0530 Subject: [PATCH 5/9] feat: add naming series for Contract Doctype (cherry picked from commit bf56c73c6c7d84ac5dcebbbd693abc15ecf508b8) # Conflicts: # erpnext/crm/doctype/contract/contract.json --- erpnext/crm/doctype/contract/contract.json | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/erpnext/crm/doctype/contract/contract.json b/erpnext/crm/doctype/contract/contract.json index 948243402fe..118fb94cd6c 100755 --- a/erpnext/crm/doctype/contract/contract.json +++ b/erpnext/crm/doctype/contract/contract.json @@ -2,6 +2,7 @@ "actions": [], "allow_import": 1, "allow_rename": 1, + "autoname": "CON-.YYYY.-.#####", "creation": "2018-04-12 06:32:04.582486", "doctype": "DocType", "editable_grid": 1, @@ -256,10 +257,11 @@ "grid_page_length": 50, "is_submittable": 1, "links": [], - "modified": "2025-05-23 13:54:03.346537", + "modified": "2025-06-19 17:27:19.908421", "modified_by": "Administrator", "module": "CRM", "name": "Contract", + "naming_rule": "Expression (old style)", "owner": "Administrator", "permissions": [ { @@ -327,6 +329,11 @@ "show_name_in_global_search": 1, "sort_field": "modified", "sort_order": "DESC", +<<<<<<< HEAD +======= + "states": [], + "title_field": "party_name", +>>>>>>> bf56c73c6c (feat: add naming series for Contract Doctype) "track_changes": 1, "track_seen": 1 } From 27b5d9493a5eb38920e911687f5a8d21a8308263 Mon Sep 17 00:00:00 2001 From: khushi8112 Date: Thu, 19 Jun 2025 18:09:10 +0530 Subject: [PATCH 6/9] feat: add search field for contract doctype (cherry picked from commit 0665691b881ddf2cb2e5a5af43a7d1dd4f24dcfd) --- erpnext/crm/doctype/contract/contract.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/erpnext/crm/doctype/contract/contract.json b/erpnext/crm/doctype/contract/contract.json index 118fb94cd6c..5938701031e 100755 --- a/erpnext/crm/doctype/contract/contract.json +++ b/erpnext/crm/doctype/contract/contract.json @@ -257,7 +257,7 @@ "grid_page_length": 50, "is_submittable": 1, "links": [], - "modified": "2025-06-19 17:27:19.908421", + "modified": "2025-06-19 17:48:45.049007", "modified_by": "Administrator", "module": "CRM", "name": "Contract", @@ -326,6 +326,7 @@ } ], "row_format": "Dynamic", + "search_fields": "party_type, party_name, contract_template", "show_name_in_global_search": 1, "sort_field": "modified", "sort_order": "DESC", From 4c2f555379dd2fdbb41433993e8627aa64011c56 Mon Sep 17 00:00:00 2001 From: khushi8112 Date: Thu, 19 Jun 2025 18:09:54 +0530 Subject: [PATCH 7/9] refactor: remove test case (cherry picked from commit 4a027125bce7bb53e982eec0e960ba8027031b5c) --- erpnext/crm/doctype/contract/test_contract.py | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/erpnext/crm/doctype/contract/test_contract.py b/erpnext/crm/doctype/contract/test_contract.py index 81ccf3300fe..13901683de8 100644 --- a/erpnext/crm/doctype/contract/test_contract.py +++ b/erpnext/crm/doctype/contract/test_contract.py @@ -12,19 +12,6 @@ class TestContract(unittest.TestCase): frappe.db.sql("delete from `tabContract`") self.contract_doc = get_contract() - def test_autoname_appends_suffix_for_duplicates(self): - contract_1 = self.contract_doc - contract_1.insert() - self.assertEqual(contract_1.name, "_Test Customer") - - contract_2 = get_contract() - contract_2.insert() - self.assertEqual(contract_2.name, "_Test Customer-1") - - contract_3 = get_contract() - contract_3.insert() - self.assertEqual(contract_3.name, "_Test Customer-2") - def test_validate_start_date_before_end_date(self): self.contract_doc.start_date = nowdate() self.contract_doc.end_date = add_days(nowdate(), -1) From c07d5b6decbb80acce06b8d5f6f47691fdd7dc6d Mon Sep 17 00:00:00 2001 From: khushi8112 Date: Thu, 19 Jun 2025 18:40:37 +0530 Subject: [PATCH 8/9] chore: remove unused import (cherry picked from commit a1c0727d7b859737cc2265b98456577fb1b190c3) --- erpnext/crm/doctype/contract/contract.py | 1 - 1 file changed, 1 deletion(-) diff --git a/erpnext/crm/doctype/contract/contract.py b/erpnext/crm/doctype/contract/contract.py index 49988e546df..223e0549ede 100644 --- a/erpnext/crm/doctype/contract/contract.py +++ b/erpnext/crm/doctype/contract/contract.py @@ -5,7 +5,6 @@ import frappe from frappe import _ from frappe.model.document import Document -from frappe.model.naming import append_number_if_name_exists from frappe.utils import getdate, nowdate From 881dcf817f7528dacf5c9649bf24c5dd9df9ca9a Mon Sep 17 00:00:00 2001 From: Khushi Rawat <142375893+khushi8112@users.noreply.github.com> Date: Fri, 20 Jun 2025 14:23:02 +0530 Subject: [PATCH 9/9] fix: resolved conflicts --- erpnext/crm/doctype/contract/contract.json | 3 --- 1 file changed, 3 deletions(-) diff --git a/erpnext/crm/doctype/contract/contract.json b/erpnext/crm/doctype/contract/contract.json index 5938701031e..7fa7002b82d 100755 --- a/erpnext/crm/doctype/contract/contract.json +++ b/erpnext/crm/doctype/contract/contract.json @@ -330,11 +330,8 @@ "show_name_in_global_search": 1, "sort_field": "modified", "sort_order": "DESC", -<<<<<<< HEAD -======= "states": [], "title_field": "party_name", ->>>>>>> bf56c73c6c (feat: add naming series for Contract Doctype) "track_changes": 1, "track_seen": 1 }