diff --git a/rangeldigital/__pycache__/hooks.cpython-313.pyc b/rangeldigital/__pycache__/hooks.cpython-313.pyc index 16dc493..df83dd6 100644 Binary files a/rangeldigital/__pycache__/hooks.cpython-313.pyc and b/rangeldigital/__pycache__/hooks.cpython-313.pyc differ diff --git a/rangeldigital/hooks.py b/rangeldigital/hooks.py index e33309a..830f2b6 100644 --- a/rangeldigital/hooks.py +++ b/rangeldigital/hooks.py @@ -5,6 +5,12 @@ app_description = "Addons for rangeldigital" app_email = "jeremy.rangel@rangeldigital.com" app_license = "mit" +override_doctype_class = { + "Sales Invoice": "rangeldigital.rangel_digital.overrides.sales_invoice.SalesInvoice", + "Quotation": "rangeldigital.rangel_digital.overrides.quotation.Quotation" + +} + diff --git a/rangeldigital/rangel_digital/overrides/__pycache__/quotation.cpython-313.pyc b/rangeldigital/rangel_digital/overrides/__pycache__/quotation.cpython-313.pyc new file mode 100644 index 0000000..e2cac81 Binary files /dev/null and b/rangeldigital/rangel_digital/overrides/__pycache__/quotation.cpython-313.pyc differ diff --git a/rangeldigital/rangel_digital/overrides/__pycache__/sales_invoice.cpython-313.pyc b/rangeldigital/rangel_digital/overrides/__pycache__/sales_invoice.cpython-313.pyc new file mode 100644 index 0000000..aa5a2d1 Binary files /dev/null and b/rangeldigital/rangel_digital/overrides/__pycache__/sales_invoice.cpython-313.pyc differ diff --git a/rangeldigital/rangel_digital/overrides/quotation.py b/rangeldigital/rangel_digital/overrides/quotation.py new file mode 100644 index 0000000..b46811e --- /dev/null +++ b/rangeldigital/rangel_digital/overrides/quotation.py @@ -0,0 +1,26 @@ +import random +import frappe +from frappe.model.naming import parse_naming_series +from erpnext.selling.doctype.quotation.quotation import Quotation as OriginalQuotation + +class Quotation(OriginalQuotation): + def autoname(self): + # Use selected naming series or default from meta + naming_series_pattern = self.naming_series or frappe.get_meta(self.doctype).get_field("naming_series").options.split("\n")[0] + + # Step 1: Resolve dynamic placeholders (like .YYYY.) WITHOUT incrementing the counter + prefix = parse_naming_series(naming_series_pattern) + + # Remove any trailing dash if it exists + prefix = prefix.rstrip("-") + + # Step 2: Append a random 6-digit number + random_part = str(random.randint(100_000, 999_999)) # 6-digit number + name = f"{prefix}-{random_part}" + + # Step 3: Ensure name is unique + while frappe.db.exists(self.doctype, name): + random_part = str(random.randint(100_000, 999_999)) # 6-digit number + name = f"{prefix}-{random_part}" + + self.name = name diff --git a/rangeldigital/rangel_digital/overrides/sales_invoice.py b/rangeldigital/rangel_digital/overrides/sales_invoice.py new file mode 100644 index 0000000..e0be8e8 --- /dev/null +++ b/rangeldigital/rangel_digital/overrides/sales_invoice.py @@ -0,0 +1,26 @@ +import random +import frappe +from frappe.model.naming import parse_naming_series +from erpnext.accounts.doctype.sales_invoice.sales_invoice import SalesInvoice as OriginalSalesInvoice + +class SalesInvoice(OriginalSalesInvoice): + def autoname(self): + # Use selected naming series or default from meta + naming_series_pattern = self.naming_series or frappe.get_meta(self.doctype).get_field("naming_series").options.split("\n")[0] + + # Step 1: Resolve dynamic placeholders (like .YYYY.) WITHOUT incrementing the counter + prefix = parse_naming_series(naming_series_pattern) + + # Remove any trailing dash if it exists + prefix = prefix.rstrip("-") + + # Step 2: Append a random 6-digit number + random_part = str(random.randint(100_000, 999_999)) + name = f"{prefix}-{random_part}" + + # Step 3: Ensure name is unique + while frappe.db.exists(self.doctype, name): + random_part = str(random.randint(100_000, 999_999)) + name = f"{prefix}-{random_part}" + + self.name = name