From fbdc1f5b1f29084d98b5cbe3e9e176da7d234309 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Thu, 16 Jul 2026 16:51:37 +0530 Subject: [PATCH] feat(selling): add proforma invoice settings and tracking field - Selling Settings: "Enable Proforma Invoice" toggle (opt-in) and a default proforma print format - Sales Order Item: non-blocking proforma_qty counter --- .../sales_order_item/sales_order_item.json | 9 ++++++++ .../sales_order_item/sales_order_item.py | 1 + .../selling_settings/selling_settings.json | 23 +++++++++++++++++++ .../selling_settings/selling_settings.py | 2 ++ 4 files changed, 35 insertions(+) diff --git a/erpnext/selling/doctype/sales_order_item/sales_order_item.json b/erpnext/selling/doctype/sales_order_item/sales_order_item.json index df5d4b76617..512c59ad07b 100644 --- a/erpnext/selling/doctype/sales_order_item/sales_order_item.json +++ b/erpnext/selling/doctype/sales_order_item/sales_order_item.json @@ -102,6 +102,7 @@ "column_break_69", "work_order_qty", "delivered_qty", + "proforma_qty", "produced_qty", "returned_qty", "picked_qty", @@ -702,6 +703,14 @@ "read_only": 1, "width": "100px" }, + { + "fieldname": "proforma_qty", + "fieldtype": "Float", + "label": "Proforma Qty", + "no_copy": 1, + "print_hide": 1, + "read_only": 1 + }, { "fieldname": "work_order_qty", "fieldtype": "Float", diff --git a/erpnext/selling/doctype/sales_order_item/sales_order_item.py b/erpnext/selling/doctype/sales_order_item/sales_order_item.py index 98298f22036..386055eacc4 100644 --- a/erpnext/selling/doctype/sales_order_item/sales_order_item.py +++ b/erpnext/selling/doctype/sales_order_item/sales_order_item.py @@ -71,6 +71,7 @@ class SalesOrderItem(Document): price_list_rate: DF.Currency pricing_rules: DF.SmallText | None produced_qty: DF.Float + proforma_qty: DF.Float production_plan_qty: DF.Float project: DF.Link | None projected_qty: DF.Float diff --git a/erpnext/selling/doctype/selling_settings/selling_settings.json b/erpnext/selling/doctype/selling_settings/selling_settings.json index ebae841dde9..b72a39c5ede 100644 --- a/erpnext/selling/doctype/selling_settings/selling_settings.json +++ b/erpnext/selling/doctype/selling_settings/selling_settings.json @@ -60,6 +60,9 @@ "allow_delivery_of_overproduced_qty", "column_break_mla9", "deliver_secondary_items", + "proforma_invoice_section", + "enable_proforma_invoice", + "default_proforma_print_format", "default_naming_tab", "transaction_naming_html" ], @@ -341,6 +344,26 @@ "fieldtype": "Check", "label": "Deliver secondary Items" }, + { + "fieldname": "proforma_invoice_section", + "fieldtype": "Section Break", + "label": "Proforma Invoice" + }, + { + "default": "0", + "description": "Allow issuing Proforma Invoices against a Sales Order.", + "fieldname": "enable_proforma_invoice", + "fieldtype": "Check", + "label": "Enable Proforma Invoice" + }, + { + "depends_on": "enable_proforma_invoice", + "description": "Default print format used when generating a Proforma Invoice PDF.", + "fieldname": "default_proforma_print_format", + "fieldtype": "Link", + "label": "Default Proforma Print Format", + "options": "Print Format" + }, { "fieldname": "customer_defaults_tab", "fieldtype": "Tab Break", diff --git a/erpnext/selling/doctype/selling_settings/selling_settings.py b/erpnext/selling/doctype/selling_settings/selling_settings.py index bf8750cc1b8..66e4bf5d93a 100644 --- a/erpnext/selling/doctype/selling_settings/selling_settings.py +++ b/erpnext/selling/doctype/selling_settings/selling_settings.py @@ -41,6 +41,7 @@ class SellingSettings(Document): blanket_order_allowance: DF.Float cust_master_name: DF.Literal["Customer Name", "Naming Series", "Auto Name"] customer_group: DF.Link | None + default_proforma_print_format: DF.Link | None deliver_secondary_items: DF.Check dn_required: DF.Literal["No", "Yes"] dont_reserve_sales_order_qty_on_sales_return: DF.Check @@ -48,6 +49,7 @@ class SellingSettings(Document): editable_price_list_rate: DF.Check enable_cutoff_date_on_bulk_delivery_note_creation: DF.Check enable_discount_accounting: DF.Check + enable_proforma_invoice: DF.Check enable_tracking_sales_commissions: DF.Check enable_utm: DF.Check fallback_to_default_price_list: DF.Check