From 6539e443a5eb5301826295723d64705f43a480ee Mon Sep 17 00:00:00 2001 From: ruthra kumar Date: Fri, 6 Feb 2026 16:18:58 +0530 Subject: [PATCH 01/62] refactor: hide UTM parameters (cherry picked from commit aaf5f923b0daff972c2a9c7a17cf894e257b1cba) # Conflicts: # erpnext/selling/doctype/quotation/quotation.json --- .../selling/doctype/quotation/quotation.json | 64 +++++++++++++++---- .../selling_settings/selling_settings.json | 17 ++++- .../selling_settings/selling_settings.py | 26 ++++++++ 3 files changed, 93 insertions(+), 14 deletions(-) diff --git a/erpnext/selling/doctype/quotation/quotation.json b/erpnext/selling/doctype/quotation/quotation.json index 78cf42ae753..be82453e419 100644 --- a/erpnext/selling/doctype/quotation/quotation.json +++ b/erpnext/selling/doctype/quotation/quotation.json @@ -123,19 +123,20 @@ "competitors", "column_break_117", "order_lost_reason", + "utm_analytics_section", + "utm_source", + "utm_medium", + "column_break_fozg", + "utm_campaign", + "utm_content", "additional_info_section", "status", "customer_group", "territory", "column_break_108", - "utm_source", - "utm_campaign", - "utm_medium", - "utm_content", - "column_break4", "opportunity", - "supplier_quotation", "enq_det", + "supplier_quotation", "connections_tab" ], "fields": [ @@ -862,13 +863,6 @@ "oldfieldtype": "Small Text", "print_hide": 1 }, - { - "fieldname": "column_break4", - "fieldtype": "Column Break", - "oldfieldtype": "Column Break", - "print_hide": 1, - "width": "50%" - }, { "default": "Draft", "fieldname": "status", @@ -1117,13 +1111,57 @@ "no_copy": 1, "options": "Item Wise Tax Detail", "print_hide": 1 +<<<<<<< HEAD +======= + }, + { + "collapsible": 1, + "fieldname": "additional_discount_section", + "fieldtype": "Section Break", + "label": "Additional Discount" + }, + { + "fieldname": "totals_section", + "fieldtype": "Section Break", + "label": "Totals", + "oldfieldtype": "Section Break", + "options": "fa fa-money", + "print_hide": 1 + }, + { + "fieldname": "base_totals_section", + "fieldtype": "Section Break", + "label": "Totals (Company Currency)" + }, + { + "fieldname": "column_break_vyhp", + "fieldtype": "Column Break" + }, + { + "fieldname": "column_break_bffp", + "fieldtype": "Column Break" + }, + { + "fieldname": "column_break_fozg", + "fieldtype": "Column Break" + }, + { + "collapsible": 1, + "fieldname": "utm_analytics_section", + "fieldtype": "Section Break", + "label": "UTM Analytics" +>>>>>>> aaf5f923b0 (refactor: hide UTM parameters) } ], "icon": "fa fa-shopping-cart", "idx": 82, "is_submittable": 1, "links": [], +<<<<<<< HEAD "modified": "2026-01-29 21:18:48.836168", +======= + "modified": "2026-02-06 17:34:22.170032", +>>>>>>> aaf5f923b0 (refactor: hide UTM parameters) "modified_by": "Administrator", "module": "Selling", "name": "Quotation", diff --git a/erpnext/selling/doctype/selling_settings/selling_settings.json b/erpnext/selling/doctype/selling_settings/selling_settings.json index 9fe14ae2a98..b7e4fce817d 100644 --- a/erpnext/selling/doctype/selling_settings/selling_settings.json +++ b/erpnext/selling/doctype/selling_settings/selling_settings.json @@ -41,6 +41,8 @@ "allow_zero_qty_in_quotation", "allow_zero_qty_in_sales_order", "set_zero_rate_for_expired_batch", + "section_break_avhb", + "enable_utm", "experimental_section", "use_legacy_js_reactivity", "subcontracting_inward_tab", @@ -305,6 +307,19 @@ "fieldname": "enable_tracking_sales_commissions", "fieldtype": "Check", "label": "Enable tracking sales commissions" + }, + { + "fieldname": "section_break_avhb", + "fieldtype": "Section Break", + "label": "Analytics" + }, + { + "default": "0", + "description": "Enable UTM parameters", + "documentation_url": "https://en.wikipedia.org/wiki/UTM_parameters", + "fieldname": "enable_utm", + "fieldtype": "Check", + "label": "Enable UTM" } ], "grid_page_length": 50, @@ -314,7 +329,7 @@ "index_web_pages_for_search": 1, "issingle": 1, "links": [], - "modified": "2026-02-04 16:16:57.618127", + "modified": "2026-02-06 16:11:13.538490", "modified_by": "Administrator", "module": "Selling", "name": "Selling Settings", diff --git a/erpnext/selling/doctype/selling_settings/selling_settings.py b/erpnext/selling/doctype/selling_settings/selling_settings.py index 775b5844c3e..8621f5f066d 100644 --- a/erpnext/selling/doctype/selling_settings/selling_settings.py +++ b/erpnext/selling/doctype/selling_settings/selling_settings.py @@ -10,6 +10,17 @@ from frappe.custom.doctype.property_setter.property_setter import make_property_ from frappe.model.document import Document from frappe.utils import cint +UTM_DOCTYPES = [ + "Lead", + "Quotation", + "POS Invoice", + "POS Profile", + "Opportunity", + "Sales Order", + "Sales Invoice", + "Delivery Note", +] + class SellingSettings(Document): # begin: auto-generated types @@ -38,6 +49,7 @@ class SellingSettings(Document): enable_cutoff_date_on_bulk_delivery_note_creation: DF.Check enable_discount_accounting: DF.Check enable_tracking_sales_commissions: DF.Check + enable_utm: DF.Check fallback_to_default_price_list: DF.Check hide_tax_id: DF.Check maintain_same_rate_action: DF.Literal["Stop", "Warn"] @@ -84,6 +96,9 @@ class SellingSettings(Document): if old_doc.enable_tracking_sales_commissions != self.enable_tracking_sales_commissions: toggle_tracking_sales_commissions_section(not self.enable_tracking_sales_commissions) + if old_doc.enable_utm != self.enable_utm: + toggle_utm_analytics_section(not self.enable_utm) + def validate_fallback_to_default_price_list(self): if ( self.fallback_to_default_price_list @@ -195,3 +210,14 @@ def toggle_tracking_sales_commissions_section(hide): create_property_setter_for_hiding_field(doctype, "commission_section", hide) if meta.has_field("sales_team_section"): create_property_setter_for_hiding_field(doctype, "sales_team_section", hide) + + +def toggle_utm_analytics_section(hide): + from erpnext.accounts.doctype.accounts_settings.accounts_settings import ( + create_property_setter_for_hiding_field, + ) + + for doctype in UTM_DOCTYPES: + meta = frappe.get_meta(doctype) + if meta.has_field("utm_analytics_section"): + create_property_setter_for_hiding_field(doctype, "utm_analytics_section", hide) From 774aa2b78ffb110cf445e681b995688f0ffbe225 Mon Sep 17 00:00:00 2001 From: ruthra kumar Date: Tue, 10 Feb 2026 11:56:32 +0530 Subject: [PATCH 02/62] refactor: utm section in sales order (cherry picked from commit c00bf7df6af08303aadd300045fee443efc59a97) # Conflicts: # erpnext/selling/doctype/sales_order/sales_order.json --- .../doctype/sales_order/sales_order.json | 29 +++++++++++++------ 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/erpnext/selling/doctype/sales_order/sales_order.json b/erpnext/selling/doctype/sales_order/sales_order.json index 4238e3438a3..33c0572183f 100644 --- a/erpnext/selling/doctype/sales_order/sales_order.json +++ b/erpnext/selling/doctype/sales_order/sales_order.json @@ -161,17 +161,18 @@ "column_break4", "select_print_heading", "language", + "utm_analytics_section", + "utm_source", + "utm_medium", + "column_break_ijxt", + "utm_campaign", + "utm_content", "additional_info_section", "is_internal_customer", "po_no", "po_date", "represents_company", "column_break_yvzv", - "utm_source", - "utm_campaign", - "utm_medium", - "utm_content", - "column_break_152", "inter_company_order_reference", "party_account_currency", "connections_tab" @@ -1567,10 +1568,6 @@ "fieldtype": "Section Break", "label": "Additional Info" }, - { - "fieldname": "column_break_152", - "fieldtype": "Column Break" - }, { "fieldname": "incoterm", "fieldtype": "Link", @@ -1717,6 +1714,16 @@ "hide_days": 1, "hide_seconds": 1, "label": "Additional Discount" + }, + { + "fieldname": "column_break_ijxt", + "fieldtype": "Column Break" + }, + { + "collapsible": 1, + "fieldname": "utm_analytics_section", + "fieldtype": "Section Break", + "label": "UTM Analytics" } ], "grid_page_length": 50, @@ -1724,7 +1731,11 @@ "idx": 105, "is_submittable": 1, "links": [], +<<<<<<< HEAD "modified": "2026-02-23 14:25:56.665392", +======= + "modified": "2026-02-10 11:55:52.796522", +>>>>>>> c00bf7df6a (refactor: utm section in sales order) "modified_by": "Administrator", "module": "Selling", "name": "Sales Order", From 964d75bd3ee768407776774f7c0efa4512cb1326 Mon Sep 17 00:00:00 2001 From: ruthra kumar Date: Tue, 10 Feb 2026 11:59:17 +0530 Subject: [PATCH 03/62] refactor: utm section in sales invoice (cherry picked from commit 678d261f4008610bf5faa5a0c2b7484f058c643f) # Conflicts: # erpnext/accounts/doctype/sales_invoice/sales_invoice.json --- .../doctype/sales_invoice/sales_invoice.json | 33 ++++++++++++------- 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.json b/erpnext/accounts/doctype/sales_invoice/sales_invoice.json index bfe52e8c7b1..0ec05b072aa 100644 --- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.json +++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.json @@ -219,16 +219,17 @@ "column_break_140", "to_date", "update_auto_repeat_reference", + "utm_analytics_section", + "utm_source", + "utm_medium", + "column_break_ixxw", + "utm_campaign", + "utm_content", "more_information", "status", "remarks", "customer_group", "column_break_imbx", - "utm_source", - "utm_campaign", - "utm_medium", - "utm_content", - "col_break23", "is_internal_customer", "represents_company", "inter_company_invoice_reference", @@ -1632,13 +1633,6 @@ "no_copy": 1, "read_only": 1 }, - { - "fieldname": "col_break23", - "fieldtype": "Column Break", - "hide_days": 1, - "hide_seconds": 1, - "width": "50%" - }, { "default": "Draft", "fieldname": "status", @@ -2307,12 +2301,23 @@ "print_hide": 1 }, { +<<<<<<< HEAD "fieldname": "section_break_vacb", "fieldtype": "Section Break" }, { "fieldname": "column_break_rdks", "fieldtype": "Column Break" +======= + "fieldname": "column_break_ixxw", + "fieldtype": "Column Break" + }, + { + "collapsible": 1, + "fieldname": "utm_analytics_section", + "fieldtype": "Section Break", + "label": "UTM Analytics" +>>>>>>> 678d261f40 (refactor: utm section in sales invoice) } ], "grid_page_length": 50, @@ -2326,7 +2331,11 @@ "link_fieldname": "consolidated_invoice" } ], +<<<<<<< HEAD "modified": "2026-02-23 14:29:00.301842", +======= + "modified": "2026-02-10 11:59:07.819903", +>>>>>>> 678d261f40 (refactor: utm section in sales invoice) "modified_by": "Administrator", "module": "Accounts", "name": "Sales Invoice", From 08df2a755e78ee009ef5c7f748a422b3a6763107 Mon Sep 17 00:00:00 2001 From: ruthra kumar Date: Tue, 10 Feb 2026 14:23:28 +0530 Subject: [PATCH 04/62] refactor: utm section pos invoice (cherry picked from commit 0bafa347a5ecf9e02ccf97265b0345be07b33803) --- .../doctype/pos_invoice/pos_invoice.json | 25 ++++++++++++------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/erpnext/accounts/doctype/pos_invoice/pos_invoice.json b/erpnext/accounts/doctype/pos_invoice/pos_invoice.json index 406e3fa7537..ff57c811c58 100644 --- a/erpnext/accounts/doctype/pos_invoice/pos_invoice.json +++ b/erpnext/accounts/doctype/pos_invoice/pos_invoice.json @@ -159,15 +159,16 @@ "language", "column_break_84", "select_print_heading", + "utm_analytics_section", + "utm_source", + "utm_medium", + "column_break_bhao", + "utm_campaign", "more_information", "inter_company_invoice_reference", "customer_group", "is_discounted", "col_break23", - "utm_source", - "utm_campaign", - "utm_medium", - "column_break_gpiw", "status", "more_info", "debit_to", @@ -1541,10 +1542,6 @@ "fieldtype": "Check", "label": "Update Billed Amount in Delivery Note" }, - { - "fieldname": "column_break_gpiw", - "fieldtype": "Column Break" - }, { "fieldname": "utm_medium", "fieldtype": "Link", @@ -1612,12 +1609,22 @@ "no_copy": 1, "options": "Item Wise Tax Detail", "print_hide": 1 + }, + { + "collapsible": 1, + "fieldname": "utm_analytics_section", + "fieldtype": "Section Break", + "label": "UTM Analytics" + }, + { + "fieldname": "column_break_bhao", + "fieldtype": "Column Break" } ], "icon": "fa fa-file-text", "is_submittable": 1, "links": [], - "modified": "2026-01-29 21:20:51.376875", + "modified": "2026-02-10 14:23:07.181782", "modified_by": "Administrator", "module": "Accounts", "name": "POS Invoice", From fc0a07b3b1eb49bdb92a784a348cad0939e6574a Mon Sep 17 00:00:00 2001 From: ruthra kumar Date: Tue, 10 Feb 2026 14:24:59 +0530 Subject: [PATCH 05/62] refactor: utm analytics section in pos profile (cherry picked from commit 7de0ca164dc85347d3efdf2cd8904de50bc39fc5) # Conflicts: # erpnext/accounts/doctype/pos_profile/pos_profile.json --- .../doctype/pos_profile/pos_profile.json | 117 ++++++++++++++++++ 1 file changed, 117 insertions(+) diff --git a/erpnext/accounts/doctype/pos_profile/pos_profile.json b/erpnext/accounts/doctype/pos_profile/pos_profile.json index c0e5c895403..b7e0cc1bb55 100644 --- a/erpnext/accounts/doctype/pos_profile/pos_profile.json +++ b/erpnext/accounts/doctype/pos_profile/pos_profile.json @@ -44,6 +44,7 @@ "column_break0", "tc_name", "select_print_heading", +<<<<<<< HEAD "section_break_19", "selling_price_list", "currency", @@ -62,6 +63,14 @@ "cost_center", "dimension_col_break", "project" +======= + "utm_analytics_section", + "utm_source", + "column_break_tvls", + "utm_campaign", + "column_break_xygw", + "utm_medium" +>>>>>>> 7de0ca164d (refactor: utm analytics section in pos profile) ], "fields": [ { @@ -430,6 +439,110 @@ "fieldname": "allow_partial_payment", "fieldtype": "Check", "label": "Allow Partial Payment" +<<<<<<< HEAD +======= + }, + { + "fieldname": "column_break_tvls", + "fieldtype": "Column Break" + }, + { + "fieldname": "column_break_xygw", + "fieldtype": "Column Break" + }, + { + "fieldname": "accounting_tab", + "fieldtype": "Tab Break", + "label": "Accounting" + }, + { + "fieldname": "more_info_tab", + "fieldtype": "Tab Break", + "label": "More Info" + }, + { + "fieldname": "pos_configurations_tab", + "fieldtype": "Tab Break", + "label": "POS Configurations" + }, + { + "fieldname": "price_list_and_currency_section", + "fieldtype": "Section Break", + "label": "Price List & Currency" + }, + { + "fieldname": "column_break_bptt", + "fieldtype": "Column Break" + }, + { + "fieldname": "write_off_section", + "fieldtype": "Section Break", + "label": "Write Off" + }, + { + "fieldname": "column_break_ukpz", + "fieldtype": "Column Break" + }, + { + "fieldname": "column_break_pkca", + "fieldtype": "Column Break" + }, + { + "fieldname": "income_and_expense_account", + "fieldtype": "Section Break", + "label": "Income and Expense" + }, + { + "fieldname": "column_break_byzk", + "fieldtype": "Column Break" + }, + { + "fieldname": "taxes_section", + "fieldtype": "Section Break", + "label": "Taxes" + }, + { + "fieldname": "column_break_cjpp", + "fieldtype": "Column Break" + }, + { + "fieldname": "pos_item_selector_section", + "fieldtype": "Section Break", + "label": "POS Item Selector" + }, + { + "fieldname": "column_break_rpny", + "fieldtype": "Column Break" + }, + { + "fieldname": "column_break_stcl", + "fieldtype": "Column Break" + }, + { + "fieldname": "pos_item_details_section", + "fieldtype": "Section Break", + "label": "POS Item Details" + }, + { + "fieldname": "column_break_hwfg", + "fieldtype": "Column Break" + }, + { + "fieldname": "column_break_egpi", + "fieldtype": "Column Break" + }, + { + "default": "0", + "fieldname": "allow_warehouse_change", + "fieldtype": "Check", + "label": "Allow User to Edit Warehouse" + }, + { + "collapsible": 1, + "fieldname": "utm_analytics_section", + "fieldtype": "Section Break", + "label": "Campaign" +>>>>>>> 7de0ca164d (refactor: utm analytics section in pos profile) } ], "grid_page_length": 50, @@ -458,7 +571,11 @@ "link_fieldname": "pos_profile" } ], +<<<<<<< HEAD "modified": "2025-06-24 11:19:19.834905", +======= + "modified": "2026-02-10 14:24:48.597412", +>>>>>>> 7de0ca164d (refactor: utm analytics section in pos profile) "modified_by": "Administrator", "module": "Accounts", "name": "POS Profile", From 3a8967b2a7d7141bae4b1d9dca1ded0c45b64e09 Mon Sep 17 00:00:00 2001 From: ruthra kumar Date: Tue, 10 Feb 2026 14:28:26 +0530 Subject: [PATCH 06/62] refactor: utm analytics section in lead (cherry picked from commit 71e8941285a6e084c3cf171ad726367dff7c7c41) --- erpnext/crm/doctype/lead/lead.json | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/erpnext/crm/doctype/lead/lead.json b/erpnext/crm/doctype/lead/lead.json index c4b0133e96e..925a60913f6 100644 --- a/erpnext/crm/doctype/lead/lead.json +++ b/erpnext/crm/doctype/lead/lead.json @@ -52,13 +52,12 @@ "country", "column_break2", "contact_html", - "section_break_analytics", + "utm_analytics_section", "utm_source", - "utm_content", + "utm_medium", "column_break_gkxo", "utm_campaign", - "column_break_gqka", - "utm_medium", + "utm_content", "qualification_tab", "qualification_status", "column_break_64", @@ -504,10 +503,6 @@ "fieldname": "column_break_gkxo", "fieldtype": "Column Break" }, - { - "fieldname": "column_break_gqka", - "fieldtype": "Column Break" - }, { "fieldname": "utm_content", "fieldtype": "Data", @@ -537,7 +532,8 @@ "options": "UTM Campaign" }, { - "fieldname": "section_break_analytics", + "collapsible": 1, + "fieldname": "utm_analytics_section", "fieldtype": "Section Break", "label": "Analytics" } @@ -547,7 +543,7 @@ "idx": 5, "image_field": "image", "links": [], - "modified": "2025-06-26 11:02:01.158901", + "modified": "2026-02-10 14:36:37.157961", "modified_by": "Administrator", "module": "CRM", "name": "Lead", From 2bb8c7c74ee992698e08389527298e793cf77f6c Mon Sep 17 00:00:00 2001 From: ruthra kumar Date: Tue, 10 Feb 2026 14:30:29 +0530 Subject: [PATCH 07/62] refactor: utm section in opportunity (cherry picked from commit 223d560b32f474e59633769de346253c1ee7cff4) --- .../crm/doctype/opportunity/opportunity.json | 24 ++++++++----------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/erpnext/crm/doctype/opportunity/opportunity.json b/erpnext/crm/doctype/opportunity/opportunity.json index cf8f36e04c7..50f8eb9aabf 100644 --- a/erpnext/crm/doctype/opportunity/opportunity.json +++ b/erpnext/crm/doctype/opportunity/opportunity.json @@ -44,13 +44,12 @@ "column_break_17", "opportunity_amount", "base_opportunity_amount", - "section_break_analytics", + "utm_analytics_section", "utm_source", - "utm_content", + "utm_medium", "column_break_emai", "utm_campaign", - "column_break_whcu", - "utm_medium", + "utm_content", "more_info", "company", "transaction_date", @@ -629,15 +628,6 @@ "options": "UTM Campaign", "print_hide": 1 }, - { - "fieldname": "section_break_analytics", - "fieldtype": "Section Break", - "label": "Analytics" - }, - { - "fieldname": "column_break_whcu", - "fieldtype": "Column Break" - }, { "fieldname": "utm_medium", "fieldtype": "Link", @@ -650,13 +640,19 @@ "fieldtype": "Data", "label": "Content", "print_hide": 1 + }, + { + "collapsible": 1, + "fieldname": "utm_analytics_section", + "fieldtype": "Section Break", + "label": "Analytics" } ], "grid_page_length": 50, "icon": "fa fa-info-sign", "idx": 195, "links": [], - "modified": "2025-08-11 13:35:39.476016", + "modified": "2026-02-10 14:36:01.387984", "modified_by": "Administrator", "module": "CRM", "name": "Opportunity", From 0433f73b03a4691cb1accd1235044fae04f8b9e3 Mon Sep 17 00:00:00 2001 From: ruthra kumar Date: Tue, 10 Feb 2026 14:33:01 +0530 Subject: [PATCH 08/62] refactor: utm analytics section delivery note (cherry picked from commit 578783af8e4e731fc0a3ee9a68f44b22a6d58d1f) # Conflicts: # erpnext/stock/doctype/delivery_note/delivery_note.json --- .../doctype/delivery_note/delivery_note.json | 29 +++++++++++++------ 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.json b/erpnext/stock/doctype/delivery_note/delivery_note.json index 3b2215fdae7..1f818cfcddd 100644 --- a/erpnext/stock/doctype/delivery_note/delivery_note.json +++ b/erpnext/stock/doctype/delivery_note/delivery_note.json @@ -156,17 +156,18 @@ "column_break_88", "select_print_heading", "language", + "utm_analytics_section", + "utm_source", + "utm_medium", + "column_break_neoj", + "utm_campaign", + "utm_content", "more_info", "is_internal_customer", "represents_company", "inter_company_reference", "customer_group", "territory", - "column_break_pxls", - "utm_source", - "utm_campaign", - "utm_medium", - "utm_content", "column_break5", "excise_page", "instructions", @@ -1366,10 +1367,6 @@ "options": "Delivery Trip", "print_hide": 1 }, - { - "fieldname": "column_break_pxls", - "fieldtype": "Column Break" - }, { "fieldname": "utm_medium", "fieldtype": "Link", @@ -1425,6 +1422,7 @@ "print_hide": 1 }, { +<<<<<<< HEAD "fieldname": "totals_section", "fieldtype": "Section Break", "label": "Totals", @@ -1439,6 +1437,15 @@ }, { "fieldname": "column_break_ydwe", +======= + "collapsible": 1, + "fieldname": "utm_analytics_section", + "fieldtype": "Section Break", + "label": "UTM Analytics" + }, + { + "fieldname": "column_break_neoj", +>>>>>>> 578783af8e (refactor: utm analytics section delivery note) "fieldtype": "Column Break" } ], @@ -1446,7 +1453,11 @@ "idx": 146, "is_submittable": 1, "links": [], +<<<<<<< HEAD "modified": "2026-02-23 23:05:39.097097", +======= + "modified": "2026-02-10 14:35:08.523130", +>>>>>>> 578783af8e (refactor: utm analytics section delivery note) "modified_by": "Administrator", "module": "Stock", "name": "Delivery Note", From 4acf404ae5f201c1b0c486042ea3740cde5ac078 Mon Sep 17 00:00:00 2001 From: ruthra kumar Date: Thu, 12 Feb 2026 10:38:50 +0530 Subject: [PATCH 09/62] refactor: better description on toggle (cherry picked from commit 20af546b26b18658f035e1199869b9122498536a) --- .../selling/doctype/selling_settings/selling_settings.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/erpnext/selling/doctype/selling_settings/selling_settings.json b/erpnext/selling/doctype/selling_settings/selling_settings.json index b7e4fce817d..53e9d42a7ab 100644 --- a/erpnext/selling/doctype/selling_settings/selling_settings.json +++ b/erpnext/selling/doctype/selling_settings/selling_settings.json @@ -315,7 +315,7 @@ }, { "default": "0", - "description": "Enable UTM parameters", + "description": "Enable Urchin Tracking Module parameters in Quotation, Sales Order, Sales Invoice, POS Invoice, Lead, and Delivery Note.", "documentation_url": "https://en.wikipedia.org/wiki/UTM_parameters", "fieldname": "enable_utm", "fieldtype": "Check", @@ -329,7 +329,7 @@ "index_web_pages_for_search": 1, "issingle": 1, "links": [], - "modified": "2026-02-06 16:11:13.538490", + "modified": "2026-02-12 10:38:34.605126", "modified_by": "Administrator", "module": "Selling", "name": "Selling Settings", From 270b09f936f244ce72e325886c9d709592e7330b Mon Sep 17 00:00:00 2001 From: ruthra kumar Date: Wed, 25 Feb 2026 13:46:50 +0530 Subject: [PATCH 10/62] chore: resolve conflicts --- .../doctype/pos_profile/pos_profile.json | 102 +----------------- .../doctype/sales_invoice/sales_invoice.json | 9 +- .../selling/doctype/quotation/quotation.json | 34 ------ .../doctype/sales_order/sales_order.json | 4 - .../doctype/delivery_note/delivery_note.json | 8 -- 5 files changed, 3 insertions(+), 154 deletions(-) diff --git a/erpnext/accounts/doctype/pos_profile/pos_profile.json b/erpnext/accounts/doctype/pos_profile/pos_profile.json index b7e0cc1bb55..78d568b60b1 100644 --- a/erpnext/accounts/doctype/pos_profile/pos_profile.json +++ b/erpnext/accounts/doctype/pos_profile/pos_profile.json @@ -12,9 +12,6 @@ "disabled", "column_break_9", "warehouse", - "utm_source", - "utm_campaign", - "utm_medium", "company_address", "section_break_15", "applicable_for_users", @@ -44,7 +41,6 @@ "column_break0", "tc_name", "select_print_heading", -<<<<<<< HEAD "section_break_19", "selling_price_list", "currency", @@ -62,15 +58,13 @@ "accounting_dimensions_section", "cost_center", "dimension_col_break", - "project" -======= + "project", "utm_analytics_section", "utm_source", "column_break_tvls", "utm_campaign", "column_break_xygw", "utm_medium" ->>>>>>> 7de0ca164d (refactor: utm analytics section in pos profile) ], "fields": [ { @@ -439,8 +433,6 @@ "fieldname": "allow_partial_payment", "fieldtype": "Check", "label": "Allow Partial Payment" -<<<<<<< HEAD -======= }, { "fieldname": "column_break_tvls", @@ -450,99 +442,11 @@ "fieldname": "column_break_xygw", "fieldtype": "Column Break" }, - { - "fieldname": "accounting_tab", - "fieldtype": "Tab Break", - "label": "Accounting" - }, - { - "fieldname": "more_info_tab", - "fieldtype": "Tab Break", - "label": "More Info" - }, - { - "fieldname": "pos_configurations_tab", - "fieldtype": "Tab Break", - "label": "POS Configurations" - }, - { - "fieldname": "price_list_and_currency_section", - "fieldtype": "Section Break", - "label": "Price List & Currency" - }, - { - "fieldname": "column_break_bptt", - "fieldtype": "Column Break" - }, - { - "fieldname": "write_off_section", - "fieldtype": "Section Break", - "label": "Write Off" - }, - { - "fieldname": "column_break_ukpz", - "fieldtype": "Column Break" - }, - { - "fieldname": "column_break_pkca", - "fieldtype": "Column Break" - }, - { - "fieldname": "income_and_expense_account", - "fieldtype": "Section Break", - "label": "Income and Expense" - }, - { - "fieldname": "column_break_byzk", - "fieldtype": "Column Break" - }, - { - "fieldname": "taxes_section", - "fieldtype": "Section Break", - "label": "Taxes" - }, - { - "fieldname": "column_break_cjpp", - "fieldtype": "Column Break" - }, - { - "fieldname": "pos_item_selector_section", - "fieldtype": "Section Break", - "label": "POS Item Selector" - }, - { - "fieldname": "column_break_rpny", - "fieldtype": "Column Break" - }, - { - "fieldname": "column_break_stcl", - "fieldtype": "Column Break" - }, - { - "fieldname": "pos_item_details_section", - "fieldtype": "Section Break", - "label": "POS Item Details" - }, - { - "fieldname": "column_break_hwfg", - "fieldtype": "Column Break" - }, - { - "fieldname": "column_break_egpi", - "fieldtype": "Column Break" - }, - { - "default": "0", - "fieldname": "allow_warehouse_change", - "fieldtype": "Check", - "label": "Allow User to Edit Warehouse" - }, { "collapsible": 1, "fieldname": "utm_analytics_section", "fieldtype": "Section Break", "label": "Campaign" ->>>>>>> 7de0ca164d (refactor: utm analytics section in pos profile) } ], "grid_page_length": 50, @@ -571,11 +475,7 @@ "link_fieldname": "pos_profile" } ], -<<<<<<< HEAD - "modified": "2025-06-24 11:19:19.834905", -======= "modified": "2026-02-10 14:24:48.597412", ->>>>>>> 7de0ca164d (refactor: utm analytics section in pos profile) "modified_by": "Administrator", "module": "Accounts", "name": "POS Profile", diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.json b/erpnext/accounts/doctype/sales_invoice/sales_invoice.json index 0ec05b072aa..9cfbd4f0053 100644 --- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.json +++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.json @@ -2301,14 +2301,14 @@ "print_hide": 1 }, { -<<<<<<< HEAD "fieldname": "section_break_vacb", "fieldtype": "Section Break" }, { "fieldname": "column_break_rdks", "fieldtype": "Column Break" -======= + }, + { "fieldname": "column_break_ixxw", "fieldtype": "Column Break" }, @@ -2317,7 +2317,6 @@ "fieldname": "utm_analytics_section", "fieldtype": "Section Break", "label": "UTM Analytics" ->>>>>>> 678d261f40 (refactor: utm section in sales invoice) } ], "grid_page_length": 50, @@ -2331,11 +2330,7 @@ "link_fieldname": "consolidated_invoice" } ], -<<<<<<< HEAD - "modified": "2026-02-23 14:29:00.301842", -======= "modified": "2026-02-10 11:59:07.819903", ->>>>>>> 678d261f40 (refactor: utm section in sales invoice) "modified_by": "Administrator", "module": "Accounts", "name": "Sales Invoice", diff --git a/erpnext/selling/doctype/quotation/quotation.json b/erpnext/selling/doctype/quotation/quotation.json index be82453e419..f4bad5d519b 100644 --- a/erpnext/selling/doctype/quotation/quotation.json +++ b/erpnext/selling/doctype/quotation/quotation.json @@ -1111,35 +1111,6 @@ "no_copy": 1, "options": "Item Wise Tax Detail", "print_hide": 1 -<<<<<<< HEAD -======= - }, - { - "collapsible": 1, - "fieldname": "additional_discount_section", - "fieldtype": "Section Break", - "label": "Additional Discount" - }, - { - "fieldname": "totals_section", - "fieldtype": "Section Break", - "label": "Totals", - "oldfieldtype": "Section Break", - "options": "fa fa-money", - "print_hide": 1 - }, - { - "fieldname": "base_totals_section", - "fieldtype": "Section Break", - "label": "Totals (Company Currency)" - }, - { - "fieldname": "column_break_vyhp", - "fieldtype": "Column Break" - }, - { - "fieldname": "column_break_bffp", - "fieldtype": "Column Break" }, { "fieldname": "column_break_fozg", @@ -1150,18 +1121,13 @@ "fieldname": "utm_analytics_section", "fieldtype": "Section Break", "label": "UTM Analytics" ->>>>>>> aaf5f923b0 (refactor: hide UTM parameters) } ], "icon": "fa fa-shopping-cart", "idx": 82, "is_submittable": 1, "links": [], -<<<<<<< HEAD - "modified": "2026-01-29 21:18:48.836168", -======= "modified": "2026-02-06 17:34:22.170032", ->>>>>>> aaf5f923b0 (refactor: hide UTM parameters) "modified_by": "Administrator", "module": "Selling", "name": "Quotation", diff --git a/erpnext/selling/doctype/sales_order/sales_order.json b/erpnext/selling/doctype/sales_order/sales_order.json index 33c0572183f..00a8f8d3b12 100644 --- a/erpnext/selling/doctype/sales_order/sales_order.json +++ b/erpnext/selling/doctype/sales_order/sales_order.json @@ -1731,11 +1731,7 @@ "idx": 105, "is_submittable": 1, "links": [], -<<<<<<< HEAD - "modified": "2026-02-23 14:25:56.665392", -======= "modified": "2026-02-10 11:55:52.796522", ->>>>>>> c00bf7df6a (refactor: utm section in sales order) "modified_by": "Administrator", "module": "Selling", "name": "Sales Order", diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.json b/erpnext/stock/doctype/delivery_note/delivery_note.json index 1f818cfcddd..08a8de10163 100644 --- a/erpnext/stock/doctype/delivery_note/delivery_note.json +++ b/erpnext/stock/doctype/delivery_note/delivery_note.json @@ -1422,7 +1422,6 @@ "print_hide": 1 }, { -<<<<<<< HEAD "fieldname": "totals_section", "fieldtype": "Section Break", "label": "Totals", @@ -1436,8 +1435,6 @@ "options": "Company:company:default_currency" }, { - "fieldname": "column_break_ydwe", -======= "collapsible": 1, "fieldname": "utm_analytics_section", "fieldtype": "Section Break", @@ -1445,7 +1442,6 @@ }, { "fieldname": "column_break_neoj", ->>>>>>> 578783af8e (refactor: utm analytics section delivery note) "fieldtype": "Column Break" } ], @@ -1453,11 +1449,7 @@ "idx": 146, "is_submittable": 1, "links": [], -<<<<<<< HEAD - "modified": "2026-02-23 23:05:39.097097", -======= "modified": "2026-02-10 14:35:08.523130", ->>>>>>> 578783af8e (refactor: utm analytics section delivery note) "modified_by": "Administrator", "module": "Stock", "name": "Delivery Note", From d922213dd78cdf5d2caa432e41189e8b14abe023 Mon Sep 17 00:00:00 2001 From: Matt Howard Date: Mon, 5 Jan 2026 14:55:19 -0500 Subject: [PATCH 11/62] fix(postgres): avoid UNSIGNED cast in customer autoname (cherry picked from commit 323636b39612a6d46fe9c60bf020876fab2c7178) --- erpnext/selling/doctype/customer/customer.py | 37 ++++++++++++++++---- 1 file changed, 31 insertions(+), 6 deletions(-) diff --git a/erpnext/selling/doctype/customer/customer.py b/erpnext/selling/doctype/customer/customer.py index 596f06d758c..d5e44e41a7f 100644 --- a/erpnext/selling/doctype/customer/customer.py +++ b/erpnext/selling/doctype/customer/customer.py @@ -118,12 +118,37 @@ class Customer(TransactionBase): def get_customer_name(self): self.customer_name = self.customer_name.strip() if frappe.db.get_value("Customer", self.customer_name) and not frappe.flags.in_import: - count = frappe.db.sql( - """select ifnull(MAX(CAST(SUBSTRING_INDEX(name, ' ', -1) AS UNSIGNED)), 0) from tabCustomer - where name like %s""", - f"%{self.customer_name} - %", - as_list=1, - )[0][0] + name_prefix = f"{self.customer_name} - %" + + if frappe.db.db_type == "postgres": + # Postgres: extract trailing digits (e.g. "Customer - 3") and cast to int. + # NOTE: PostgreSQL is strict about types; MySQL's UNSIGNED cast does not exist. + count = frappe.db.sql( + """ + SELECT COALESCE( + MAX(CAST(SUBSTRING(name FROM '\\d+$') AS INTEGER)), + 0 + ) + FROM tabCustomer + WHERE name LIKE %(name_prefix)s + """, + {"name_prefix": name_prefix}, + as_list=1, + )[0][0] + else: + # MariaDB/MySQL: keep existing behavior. + count = frappe.db.sql( + """ + SELECT COALESCE( + MAX(CAST(SUBSTRING_INDEX(name, ' ', -1) AS UNSIGNED)), + 0 + ) + FROM tabCustomer + WHERE name LIKE %(name_prefix)s + """, + {"name_prefix": name_prefix}, + as_list=1, + )[0][0] count = cint(count) + 1 new_customer_name = f"{self.customer_name} - {cstr(count)}" From 0f59da89cfc9c3685b099ee3a60c3b07b16aa20c Mon Sep 17 00:00:00 2001 From: ruthra kumar Date: Mon, 16 Feb 2026 16:10:19 +0530 Subject: [PATCH 12/62] refactor: Journal Entry form cleanup (cherry picked from commit 73d5aa35a1b0c428bf032f13b00089d870c7555a) # Conflicts: # erpnext/accounts/doctype/journal_entry_account/journal_entry_account.json --- .../doctype/journal_entry/journal_entry.js | 4 - .../doctype/journal_entry/journal_entry.json | 111 +++++++++++------- .../journal_entry_account.json | 5 +- 3 files changed, 71 insertions(+), 49 deletions(-) diff --git a/erpnext/accounts/doctype/journal_entry/journal_entry.js b/erpnext/accounts/doctype/journal_entry/journal_entry.js index 640ad3d9ad2..cc3b616d601 100644 --- a/erpnext/accounts/doctype/journal_entry/journal_entry.js +++ b/erpnext/accounts/doctype/journal_entry/journal_entry.js @@ -303,10 +303,6 @@ erpnext.accounts.JournalEntry = class JournalEntry extends frappe.ui.form.Contro erpnext.accounts.dimensions.setup_dimension_filters(this.frm, this.frm.doctype); } - onload_post_render() { - this.frm.get_field("accounts").grid.set_multiple_add("account"); - } - load_defaults() { //this.frm.show_print_first = true; if (this.frm.doc.__islocal && this.frm.doc.company) { diff --git a/erpnext/accounts/doctype/journal_entry/journal_entry.json b/erpnext/accounts/doctype/journal_entry/journal_entry.json index 29e6c1fb638..45e9c4eab85 100644 --- a/erpnext/accounts/doctype/journal_entry/journal_entry.json +++ b/erpnext/accounts/doctype/journal_entry/journal_entry.json @@ -10,18 +10,15 @@ "field_order": [ "entry_type_and_date", "company", - "is_system_generated", - "title", "voucher_type", - "naming_series", - "process_deferred_accounting", - "reversal_of", "column_break1", - "from_template", + "naming_series", "posting_date", - "finance_book", + "multi_currency", "apply_tds", "tax_withholding_category", + "is_system_generated", + "amended_from", "section_break_tcvw", "for_all_stock_asset_accounts", "column_break_wpau", @@ -30,52 +27,60 @@ "get_balance_for_periodic_accounting", "2_add_edit_gl_entries", "accounts", - "section_break99", - "cheque_no", - "cheque_date", - "user_remark", - "column_break99", + "section_break_ouaq", "total_debit", + "column_break_cixu", "total_credit", "difference", "get_balance", - "multi_currency", - "total_amount_currency", - "total_amount", - "total_amount_in_words", + "section_break99", + "cheque_no", + "cheque_date", + "clearance_date", + "column_break_oizh", + "user_remark", + "subscription_section", + "auto_repeat", + "tax_withholding_tab", "section_tax_withholding_entry", "tax_withholding_group", "ignore_tax_withholding_threshold", "override_tax_withholding_entries", "tax_withholding_entries", + "more_info_tab", "reference", - "clearance_date", - "remark", - "inter_company_journal_entry_reference", "column_break98", "bill_no", "bill_date", "due_date", + "column_break_isfa", + "inter_company_journal_entry_reference", + "process_deferred_accounting", + "reversal_of", + "payment_order", + "stock_entry", + "printing_settings", + "pay_to_recd_from", + "letter_head", + "select_print_heading", + "column_break_35", + "total_amount_currency", + "total_amount", + "total_amount_in_words", "write_off", "write_off_based_on", "get_outstanding_invoices", "column_break_30", "write_off_amount", - "printing_settings", - "pay_to_recd_from", - "column_break_35", - "letter_head", - "select_print_heading", "addtional_info", - "mode_of_payment", - "payment_order", - "party_not_required", - "column_break3", "is_opening", - "stock_entry", - "subscription_section", - "auto_repeat", - "amended_from" + "finance_book", + "from_template", + "title", + "column_break3", + "remark", + "mode_of_payment", + "party_not_required" ], "fields": [ { @@ -155,6 +160,7 @@ { "fieldname": "2_add_edit_gl_entries", "fieldtype": "Section Break", + "hide_border": 1, "oldfieldtype": "Section Break", "options": "fa fa-table" }, @@ -202,10 +208,6 @@ "oldfieldtype": "Small Text", "print_hide": 1 }, - { - "fieldname": "column_break99", - "fieldtype": "Column Break" - }, { "fieldname": "total_debit", "fieldtype": "Currency", @@ -429,7 +431,7 @@ "collapsible": 1, "fieldname": "addtional_info", "fieldtype": "Section Break", - "label": "More Information", + "label": "Additional Info", "oldfieldtype": "Section Break", "options": "fa fa-file-text" }, @@ -476,7 +478,7 @@ { "fieldname": "subscription_section", "fieldtype": "Section Break", - "label": "Subscription Section" + "label": "Subscription" }, { "allow_on_submit": 1, @@ -593,12 +595,10 @@ "no_copy": 1 }, { - "collapsible": 1, "collapsible_depends_on": "eval: doc.apply_tds && doc.docstatus == 0", "depends_on": "eval: doc.apply_tds", "fieldname": "section_tax_withholding_entry", - "fieldtype": "Section Break", - "label": "Tax Withholding Entry" + "fieldtype": "Section Break" }, { "fieldname": "tax_withholding_group", @@ -624,6 +624,33 @@ "label": "Tax Withholding Entries", "options": "Tax Withholding Entry", "read_only_depends_on": "eval: !doc.override_tax_withholding_entries" + }, + { + "fieldname": "more_info_tab", + "fieldtype": "Tab Break", + "label": "More Info" + }, + { + "fieldname": "section_break_ouaq", + "fieldtype": "Section Break" + }, + { + "fieldname": "column_break_cixu", + "fieldtype": "Column Break" + }, + { + "fieldname": "column_break_oizh", + "fieldtype": "Column Break" + }, + { + "fieldname": "column_break_isfa", + "fieldtype": "Column Break" + }, + { + "depends_on": "eval: doc.apply_tds", + "fieldname": "tax_withholding_tab", + "fieldtype": "Tab Break", + "label": "Tax Withholding" } ], "icon": "fa fa-file-text", @@ -638,7 +665,7 @@ "table_fieldname": "payment_entries" } ], - "modified": "2026-02-03 14:40:39.944524", + "modified": "2026-02-16 16:06:10.468482", "modified_by": "Administrator", "module": "Accounts", "name": "Journal Entry", diff --git a/erpnext/accounts/doctype/journal_entry_account/journal_entry_account.json b/erpnext/accounts/doctype/journal_entry_account/journal_entry_account.json index d027a38e08d..6eaec414e16 100644 --- a/erpnext/accounts/doctype/journal_entry_account/journal_entry_account.json +++ b/erpnext/accounts/doctype/journal_entry_account/journal_entry_account.json @@ -43,7 +43,7 @@ "fields": [ { "bold": 1, - "columns": 2, + "columns": 4, "fieldname": "account", "fieldtype": "Link", "in_global_search": 1, @@ -191,7 +191,6 @@ { "fieldname": "reference_name", "fieldtype": "Dynamic Link", - "in_list_view": 1, "label": "Reference Name", "no_copy": 1, "options": "reference_type", @@ -294,7 +293,7 @@ "idx": 1, "istable": 1, "links": [], - "modified": "2026-02-19 17:01:22.642454", + "modified": "2026-02-16 16:04:16.022407", "modified_by": "Administrator", "module": "Accounts", "name": "Journal Entry Account", From ab7e33f83dacb15e1d672633d6955132048b84cd Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Wed, 25 Feb 2026 14:23:38 +0530 Subject: [PATCH 13/62] fix: reposting creation slow for GL entries (cherry picked from commit d9ac198bad79c0de7df23cbccadcda48c09c72d6) --- .../repost_item_valuation.json | 5 +- .../repost_item_valuation.py | 66 +++++++++++++------ .../stock_reposting_settings.json | 20 +++++- .../stock_reposting_settings.py | 1 + 4 files changed, 69 insertions(+), 23 deletions(-) diff --git a/erpnext/stock/doctype/repost_item_valuation/repost_item_valuation.json b/erpnext/stock/doctype/repost_item_valuation/repost_item_valuation.json index 05d302dc4f1..e1ae6d00cd9 100644 --- a/erpnext/stock/doctype/repost_item_valuation/repost_item_valuation.json +++ b/erpnext/stock/doctype/repost_item_valuation/repost_item_valuation.json @@ -237,7 +237,8 @@ "fieldname": "reposting_reference", "fieldtype": "Data", "label": "Reposting Reference", - "read_only": 1 + "read_only": 1, + "search_index": 1 }, { "default": "0", @@ -252,7 +253,7 @@ "index_web_pages_for_search": 1, "is_submittable": 1, "links": [], - "modified": "2025-12-24 14:59:15.512898", + "modified": "2026-02-25 14:22:21.681549", "modified_by": "Administrator", "module": "Stock", "name": "Repost Item Valuation", diff --git a/erpnext/stock/doctype/repost_item_valuation/repost_item_valuation.py b/erpnext/stock/doctype/repost_item_valuation/repost_item_valuation.py index 7be0b09169e..d487fa091ed 100644 --- a/erpnext/stock/doctype/repost_item_valuation/repost_item_valuation.py +++ b/erpnext/stock/doctype/repost_item_valuation/repost_item_valuation.py @@ -470,7 +470,15 @@ def repost_gl_entries(doc): repost_affected_transaction = get_affected_transactions(doc) transactions = directly_dependent_transactions + list(repost_affected_transaction) - if doc.based_on == "Item and Warehouse" and not doc.repost_only_accounting_ledgers: + enable_separate_reposting_for_gl = frappe.db.get_single_value( + "Stock Reposting Settings", "enable_separate_reposting_for_gl" + ) + + if ( + enable_separate_reposting_for_gl + and doc.based_on == "Item and Warehouse" + and not doc.repost_only_accounting_ledgers + ): make_reposting_for_accounting_ledgers( transactions, doc.company, @@ -671,25 +679,43 @@ def execute_repost_item_valuation(): def make_reposting_for_accounting_ledgers(transactions, company, repost_doc): + reposting_map = get_existing_reposting_only_gl_entries(repost_doc.name) + for voucher_type, voucher_no in transactions: - if frappe.db.exists( - "Repost Item Valuation", - { - "voucher_type": voucher_type, - "voucher_no": voucher_no, - "docstatus": 1, - "reposting_reference": repost_doc.name, - "repost_only_accounting_ledgers": 1, - "status": "Queued", - }, - ): + if reposting_map.get((voucher_type, voucher_no)): continue - new_repost_doc = frappe.new_doc("Repost Item Valuation") - new_repost_doc.company = company - new_repost_doc.voucher_type = voucher_type - new_repost_doc.voucher_no = voucher_no - new_repost_doc.repost_only_accounting_ledgers = 1 - new_repost_doc.reposting_reference = repost_doc.name - new_repost_doc.flags.ignore_permissions = True - new_repost_doc.submit() + try: + new_repost_doc = frappe.new_doc("Repost Item Valuation") + new_repost_doc.company = company + new_repost_doc.voucher_type = voucher_type + new_repost_doc.voucher_no = voucher_no + new_repost_doc.repost_only_accounting_ledgers = 1 + new_repost_doc.reposting_reference = repost_doc.name + new_repost_doc.flags.ignore_permissions = True + new_repost_doc.submit() + except Exception: + pass + + +def get_existing_reposting_only_gl_entries(reposting_reference): + existing_reposting = frappe.get_all( + "Repost Item Valuation", + filters={ + "reposting_reference": reposting_reference, + "docstatus": 1, + "status": "Queued", + "repost_only_accounting_ledgers": 1, + }, + fields=["reposting_reference", "voucher_type", "voucher_no"], + ) + + if not existing_reposting: + return frappe._dict() + + reposting_map = {} + for d in existing_reposting: + key = (d.voucher_type, d.voucher_no) + reposting_map[key] = d.reposting_reference + + return reposting_map diff --git a/erpnext/stock/doctype/stock_reposting_settings/stock_reposting_settings.json b/erpnext/stock/doctype/stock_reposting_settings/stock_reposting_settings.json index 410c0cee62d..f72b50dc131 100644 --- a/erpnext/stock/doctype/stock_reposting_settings/stock_reposting_settings.json +++ b/erpnext/stock/doctype/stock_reposting_settings/stock_reposting_settings.json @@ -13,8 +13,11 @@ "end_time", "limits_dont_apply_on", "item_based_reposting", + "section_break_dxuf", "enable_parallel_reposting", "no_of_parallel_reposting", + "column_break_itvd", + "enable_separate_reposting_for_gl", "errors_notification_section", "notify_reposting_error_to_role" ], @@ -81,13 +84,28 @@ "fieldname": "no_of_parallel_reposting", "fieldtype": "Int", "label": "No of Parallel Reposting (Per Item)" + }, + { + "fieldname": "section_break_dxuf", + "fieldtype": "Section Break" + }, + { + "fieldname": "column_break_itvd", + "fieldtype": "Column Break" + }, + { + "default": "0", + "depends_on": "item_based_reposting", + "fieldname": "enable_separate_reposting_for_gl", + "fieldtype": "Check", + "label": "Enable Separate Reposting for GL" } ], "hide_toolbar": 1, "index_web_pages_for_search": 1, "issingle": 1, "links": [], - "modified": "2026-01-02 18:18:57.115176", + "modified": "2026-02-25 14:11:33.461173", "modified_by": "Administrator", "module": "Stock", "name": "Stock Reposting Settings", diff --git a/erpnext/stock/doctype/stock_reposting_settings/stock_reposting_settings.py b/erpnext/stock/doctype/stock_reposting_settings/stock_reposting_settings.py index 7924c9042c0..40f9f1f6d69 100644 --- a/erpnext/stock/doctype/stock_reposting_settings/stock_reposting_settings.py +++ b/erpnext/stock/doctype/stock_reposting_settings/stock_reposting_settings.py @@ -17,6 +17,7 @@ class StockRepostingSettings(Document): from frappe.types import DF enable_parallel_reposting: DF.Check + enable_separate_reposting_for_gl: DF.Check end_time: DF.Time | None item_based_reposting: DF.Check limit_reposting_timeslot: DF.Check From 941a78e1a8d2932bb15c022d05739cfc5bcf2eac Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Wed, 25 Feb 2026 17:23:57 +0530 Subject: [PATCH 14/62] fix: patch to complete onboarding stpes for existing records (cherry picked from commit d90ec49241d1e65aad267a09a92d61ea2bb3e82c) # Conflicts: # erpnext/patches.txt --- .../asset_onboarding/asset_onboarding.json | 4 +-- .../learn_asset/learn_asset.json | 2 +- .../buying_onboarding/buying_onboarding.json | 4 +-- .../create_item/create_item.json | 4 +-- .../create_purchase_invoice.json | 2 +- .../create_purchase_order.json | 2 +- .../create_supplier/create_supplier.json | 2 +- .../review_buying_settings.json | 2 +- .../setup_company/setup_company.json | 21 ----------- .../view_purchase_order_analysis.json | 2 +- .../manufacturing_onboarding.json | 4 +-- .../view_work_order_summary_report.json | 2 +- erpnext/patches.txt | 4 +++ ...mplete_onboarding_steps_for_older_sites.py | 36 +++++++++++++++++++ .../projects_onboarding.json | 4 +-- .../selling_onboarding.json | 4 +-- .../create_customer/create_customer.json | 2 +- .../create_item/create_item.json | 4 +-- .../setup_company/setup_company.json | 21 ----------- .../stock_onboarding/stock_onboarding.json | 4 +-- .../create_item/create_item.json | 4 +-- .../subcontracting_onboarding.json | 4 +-- 22 files changed, 68 insertions(+), 70 deletions(-) delete mode 100644 erpnext/buying/onboarding_step/setup_company/setup_company.json create mode 100644 erpnext/patches/v16_0/complete_onboarding_steps_for_older_sites.py delete mode 100644 erpnext/selling/onboarding_step/setup_company/setup_company.json diff --git a/erpnext/assets/module_onboarding/asset_onboarding/asset_onboarding.json b/erpnext/assets/module_onboarding/asset_onboarding/asset_onboarding.json index fe4bac23091..b0b4b35094f 100644 --- a/erpnext/assets/module_onboarding/asset_onboarding/asset_onboarding.json +++ b/erpnext/assets/module_onboarding/asset_onboarding/asset_onboarding.json @@ -15,7 +15,7 @@ "doctype": "Module Onboarding", "idx": 0, "is_complete": 0, - "modified": "2026-02-23 22:51:11.027665", + "modified": "2026-02-25 16:59:52.159087", "modified_by": "Administrator", "module": "Assets", "name": "Asset Onboarding", @@ -40,5 +40,5 @@ "step": "View Balance Sheet" } ], - "title": "Assets Setup!" + "title": "Assets Setup" } diff --git a/erpnext/assets/onboarding_step/learn_asset/learn_asset.json b/erpnext/assets/onboarding_step/learn_asset/learn_asset.json index 54377ef0ac2..baf2f186592 100644 --- a/erpnext/assets/onboarding_step/learn_asset/learn_asset.json +++ b/erpnext/assets/onboarding_step/learn_asset/learn_asset.json @@ -8,7 +8,7 @@ "is_complete": 0, "is_single": 0, "is_skipped": 0, - "modified": "2026-02-23 22:44:25.734547", + "modified": "2026-02-25 15:09:37.450763", "modified_by": "Administrator", "name": "Learn Asset", "owner": "Administrator", diff --git a/erpnext/buying/module_onboarding/buying_onboarding/buying_onboarding.json b/erpnext/buying/module_onboarding/buying_onboarding/buying_onboarding.json index 96d08fecb1a..814c87f27d0 100644 --- a/erpnext/buying/module_onboarding/buying_onboarding/buying_onboarding.json +++ b/erpnext/buying/module_onboarding/buying_onboarding/buying_onboarding.json @@ -12,7 +12,7 @@ "doctype": "Module Onboarding", "idx": 0, "is_complete": 0, - "modified": "2026-02-24 16:57:55.172763", + "modified": "2026-02-25 16:59:28.328912", "modified_by": "Administrator", "module": "Buying", "name": "Buying Onboarding", @@ -37,5 +37,5 @@ "step": "Review Buying Settings" } ], - "title": "Buying Setup! " + "title": "Buying Setup" } diff --git a/erpnext/buying/onboarding_step/create_item/create_item.json b/erpnext/buying/onboarding_step/create_item/create_item.json index f1dc6a0ac91..8e1420e2add 100644 --- a/erpnext/buying/onboarding_step/create_item/create_item.json +++ b/erpnext/buying/onboarding_step/create_item/create_item.json @@ -4,11 +4,11 @@ "creation": "2026-02-19 12:38:40.865013", "docstatus": 0, "doctype": "Onboarding Step", - "idx": 7, + "idx": 8, "is_complete": 0, "is_single": 0, "is_skipped": 0, - "modified": "2026-02-24 16:57:14.098288", + "modified": "2026-02-25 16:58:56.384284", "modified_by": "Administrator", "name": "Create Item", "owner": "Administrator", diff --git a/erpnext/buying/onboarding_step/create_purchase_invoice/create_purchase_invoice.json b/erpnext/buying/onboarding_step/create_purchase_invoice/create_purchase_invoice.json index 8c35d155793..a3c63749621 100644 --- a/erpnext/buying/onboarding_step/create_purchase_invoice/create_purchase_invoice.json +++ b/erpnext/buying/onboarding_step/create_purchase_invoice/create_purchase_invoice.json @@ -8,7 +8,7 @@ "is_complete": 0, "is_single": 0, "is_skipped": 0, - "modified": "2026-02-23 20:26:00.223899", + "modified": "2026-02-25 16:58:56.386439", "modified_by": "Administrator", "name": "Create Purchase Invoice", "owner": "Administrator", diff --git a/erpnext/buying/onboarding_step/create_purchase_order/create_purchase_order.json b/erpnext/buying/onboarding_step/create_purchase_order/create_purchase_order.json index c39c5404046..b743a06c086 100644 --- a/erpnext/buying/onboarding_step/create_purchase_order/create_purchase_order.json +++ b/erpnext/buying/onboarding_step/create_purchase_order/create_purchase_order.json @@ -9,7 +9,7 @@ "is_complete": 0, "is_single": 0, "is_skipped": 0, - "modified": "2026-02-24 16:57:37.904322", + "modified": "2026-02-25 16:58:56.379480", "modified_by": "Administrator", "name": "Create Purchase Order", "owner": "Administrator", diff --git a/erpnext/buying/onboarding_step/create_supplier/create_supplier.json b/erpnext/buying/onboarding_step/create_supplier/create_supplier.json index 580fefedf16..470011efd5e 100644 --- a/erpnext/buying/onboarding_step/create_supplier/create_supplier.json +++ b/erpnext/buying/onboarding_step/create_supplier/create_supplier.json @@ -10,7 +10,7 @@ "is_complete": 0, "is_single": 0, "is_skipped": 0, - "modified": "2026-02-23 22:16:40.903633", + "modified": "2026-02-25 16:58:56.375824", "modified_by": "Administrator", "name": "Create Supplier", "owner": "Administrator", diff --git a/erpnext/buying/onboarding_step/review_buying_settings/review_buying_settings.json b/erpnext/buying/onboarding_step/review_buying_settings/review_buying_settings.json index 2703b14c6f9..52038d11800 100644 --- a/erpnext/buying/onboarding_step/review_buying_settings/review_buying_settings.json +++ b/erpnext/buying/onboarding_step/review_buying_settings/review_buying_settings.json @@ -8,7 +8,7 @@ "is_complete": 0, "is_single": 1, "is_skipped": 0, - "modified": "2026-02-24 16:57:14.031766", + "modified": "2026-02-25 16:58:56.388794", "modified_by": "Administrator", "name": "Review Buying Settings", "owner": "Administrator", diff --git a/erpnext/buying/onboarding_step/setup_company/setup_company.json b/erpnext/buying/onboarding_step/setup_company/setup_company.json deleted file mode 100644 index 89ae9a52553..00000000000 --- a/erpnext/buying/onboarding_step/setup_company/setup_company.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "action": "Go to Page", - "action_label": "Set up company", - "creation": "2026-02-20 11:12:50.373049", - "docstatus": 0, - "doctype": "Onboarding Step", - "idx": 1, - "is_complete": 0, - "is_single": 0, - "is_skipped": 0, - "modified": "2026-02-22 16:44:20.499954", - "modified_by": "Administrator", - "name": "Setup Company", - "owner": "Administrator", - "path": "company", - "reference_document": "Company", - "show_form_tour": 0, - "show_full_form": 0, - "title": "Setup Company", - "validate_action": 1 -} diff --git a/erpnext/buying/onboarding_step/view_purchase_order_analysis/view_purchase_order_analysis.json b/erpnext/buying/onboarding_step/view_purchase_order_analysis/view_purchase_order_analysis.json index 656b5c1fb44..9583034f337 100644 --- a/erpnext/buying/onboarding_step/view_purchase_order_analysis/view_purchase_order_analysis.json +++ b/erpnext/buying/onboarding_step/view_purchase_order_analysis/view_purchase_order_analysis.json @@ -8,7 +8,7 @@ "is_complete": 0, "is_single": 0, "is_skipped": 0, - "modified": "2026-02-23 22:44:35.794807", + "modified": "2026-02-25 10:33:43.731928", "modified_by": "Administrator", "name": "View Purchase Order Analysis", "owner": "Administrator", diff --git a/erpnext/manufacturing/module_onboarding/manufacturing_onboarding/manufacturing_onboarding.json b/erpnext/manufacturing/module_onboarding/manufacturing_onboarding/manufacturing_onboarding.json index 613b855aee4..be86ce22c9b 100644 --- a/erpnext/manufacturing/module_onboarding/manufacturing_onboarding/manufacturing_onboarding.json +++ b/erpnext/manufacturing/module_onboarding/manufacturing_onboarding/manufacturing_onboarding.json @@ -12,7 +12,7 @@ "doctype": "Module Onboarding", "idx": 0, "is_complete": 0, - "modified": "2026-02-23 22:51:27.390568", + "modified": "2026-02-25 16:59:39.508221", "modified_by": "Administrator", "module": "Manufacturing", "name": "Manufacturing Onboarding", @@ -40,5 +40,5 @@ "step": "Review Manufacturing Settings" } ], - "title": "Manufacturing Setup!" + "title": "Manufacturing Setup" } diff --git a/erpnext/manufacturing/onboarding_step/view_work_order_summary_report/view_work_order_summary_report.json b/erpnext/manufacturing/onboarding_step/view_work_order_summary_report/view_work_order_summary_report.json index 62875c8904f..16b8a54b13a 100644 --- a/erpnext/manufacturing/onboarding_step/view_work_order_summary_report/view_work_order_summary_report.json +++ b/erpnext/manufacturing/onboarding_step/view_work_order_summary_report/view_work_order_summary_report.json @@ -8,7 +8,7 @@ "is_complete": 0, "is_single": 0, "is_skipped": 0, - "modified": "2026-02-23 22:44:32.658354", + "modified": "2026-02-25 16:49:31.440969", "modified_by": "Administrator", "name": "View Work Order Summary Report", "owner": "Administrator", diff --git a/erpnext/patches.txt b/erpnext/patches.txt index 1a488324212..d90b4eda72a 100644 --- a/erpnext/patches.txt +++ b/erpnext/patches.txt @@ -467,3 +467,7 @@ erpnext.patches.v16_0.update_company_custom_field_in_bin erpnext.patches.v15_0.replace_http_with_https_in_sales_partner erpnext.patches.v15_0.delete_quotation_lost_record_detail erpnext.patches.v16_0.add_portal_redirects +<<<<<<< HEAD +======= +erpnext.patches.v16_0.complete_onboarding_steps_for_older_sites #2 +>>>>>>> d90ec49241 (fix: patch to complete onboarding stpes for existing records) diff --git a/erpnext/patches/v16_0/complete_onboarding_steps_for_older_sites.py b/erpnext/patches/v16_0/complete_onboarding_steps_for_older_sites.py new file mode 100644 index 00000000000..73d50a976ee --- /dev/null +++ b/erpnext/patches/v16_0/complete_onboarding_steps_for_older_sites.py @@ -0,0 +1,36 @@ +import frappe +from frappe.utils import date_diff, getdate, today + + +def execute(): + steps = frappe.get_all( + "Onboarding Step", + filters={"is_complete": 0}, + fields=["name", "action", "reference_document"], + ) + + if not steps: + return + + company_creation = frappe.get_all("Company", fields=["creation"], order_by="creation asc", limit=1) + days_diff = date_diff(getdate(today()), getdate(company_creation[0].creation)) + + if days_diff > 15: + complete_all_onboarding_steps(steps) + else: + complete_onboarding_steps_if_record_exists(steps) + + +def complete_all_onboarding_steps(steps): + for step in steps: + frappe.db.set_value("Onboarding Step", step.name, "is_complete", 1, update_modified=False) + + +def complete_onboarding_steps_if_record_exists(steps): + for step in steps: + if ( + step.action == "Create Entry" + and step.reference_document + and frappe.get_all(step.reference_document, limit=1) + ): + frappe.db.set_value("Onboarding Step", step.name, "is_complete", 1, update_modified=False) diff --git a/erpnext/projects/module_onboarding/projects_onboarding/projects_onboarding.json b/erpnext/projects/module_onboarding/projects_onboarding/projects_onboarding.json index 64cc95e1b2d..1316558a0bb 100644 --- a/erpnext/projects/module_onboarding/projects_onboarding/projects_onboarding.json +++ b/erpnext/projects/module_onboarding/projects_onboarding/projects_onboarding.json @@ -12,7 +12,7 @@ "doctype": "Module Onboarding", "idx": 0, "is_complete": 0, - "modified": "2026-02-23 22:50:58.003699", + "modified": "2026-02-25 16:59:59.005097", "modified_by": "Administrator", "module": "Projects", "name": "Projects Onboarding", @@ -31,5 +31,5 @@ "step": "View Project Summary" } ], - "title": "Projects Setup!" + "title": "Projects Setup" } diff --git a/erpnext/selling/module_onboarding/selling_onboarding/selling_onboarding.json b/erpnext/selling/module_onboarding/selling_onboarding/selling_onboarding.json index d211ab6abf1..10e7ce5b33f 100644 --- a/erpnext/selling/module_onboarding/selling_onboarding/selling_onboarding.json +++ b/erpnext/selling/module_onboarding/selling_onboarding/selling_onboarding.json @@ -12,7 +12,7 @@ "doctype": "Module Onboarding", "idx": 1, "is_complete": 0, - "modified": "2026-02-24 16:57:50.753045", + "modified": "2026-02-25 16:59:32.154164", "modified_by": "Administrator", "module": "Selling", "name": "Selling Onboarding", @@ -37,5 +37,5 @@ "step": "Review Selling Settings" } ], - "title": "Selling Setup!" + "title": "Selling Setup" } diff --git a/erpnext/selling/onboarding_step/create_customer/create_customer.json b/erpnext/selling/onboarding_step/create_customer/create_customer.json index 142c395e55c..bd03a710b80 100644 --- a/erpnext/selling/onboarding_step/create_customer/create_customer.json +++ b/erpnext/selling/onboarding_step/create_customer/create_customer.json @@ -5,7 +5,7 @@ "docstatus": 0, "doctype": "Onboarding Step", "form_tour": "Customer Form Tour", - "idx": 0, + "idx": 1, "is_complete": 0, "is_single": 0, "is_skipped": 0, diff --git a/erpnext/selling/onboarding_step/create_item/create_item.json b/erpnext/selling/onboarding_step/create_item/create_item.json index f1dc6a0ac91..8e1420e2add 100644 --- a/erpnext/selling/onboarding_step/create_item/create_item.json +++ b/erpnext/selling/onboarding_step/create_item/create_item.json @@ -4,11 +4,11 @@ "creation": "2026-02-19 12:38:40.865013", "docstatus": 0, "doctype": "Onboarding Step", - "idx": 7, + "idx": 8, "is_complete": 0, "is_single": 0, "is_skipped": 0, - "modified": "2026-02-24 16:57:14.098288", + "modified": "2026-02-25 16:58:56.384284", "modified_by": "Administrator", "name": "Create Item", "owner": "Administrator", diff --git a/erpnext/selling/onboarding_step/setup_company/setup_company.json b/erpnext/selling/onboarding_step/setup_company/setup_company.json deleted file mode 100644 index 98c2d9fa693..00000000000 --- a/erpnext/selling/onboarding_step/setup_company/setup_company.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "action": "Go to Page", - "action_label": "Setup Company", - "creation": "2026-02-20 11:12:50.373049", - "docstatus": 0, - "doctype": "Onboarding Step", - "idx": 1, - "is_complete": 0, - "is_single": 0, - "is_skipped": 0, - "modified": "2026-02-20 11:37:46.922137", - "modified_by": "Administrator", - "name": "Setup Company", - "owner": "Administrator", - "path": "company", - "reference_document": "Company", - "show_form_tour": 0, - "show_full_form": 0, - "title": "Setup Company", - "validate_action": 1 -} diff --git a/erpnext/stock/module_onboarding/stock_onboarding/stock_onboarding.json b/erpnext/stock/module_onboarding/stock_onboarding/stock_onboarding.json index dbc838eb83c..a910f1a5c22 100644 --- a/erpnext/stock/module_onboarding/stock_onboarding/stock_onboarding.json +++ b/erpnext/stock/module_onboarding/stock_onboarding/stock_onboarding.json @@ -12,7 +12,7 @@ "doctype": "Module Onboarding", "idx": 0, "is_complete": 0, - "modified": "2026-02-23 22:51:17.460108", + "modified": "2026-02-25 16:59:45.630766", "modified_by": "Administrator", "module": "Stock", "name": "Stock Onboarding", @@ -40,5 +40,5 @@ "step": "Review Stock Settings" } ], - "title": "Stock Setup!" + "title": "Stock Setup" } diff --git a/erpnext/stock/onboarding_step/create_item/create_item.json b/erpnext/stock/onboarding_step/create_item/create_item.json index eb917d65b4f..8e1420e2add 100644 --- a/erpnext/stock/onboarding_step/create_item/create_item.json +++ b/erpnext/stock/onboarding_step/create_item/create_item.json @@ -4,11 +4,11 @@ "creation": "2026-02-19 12:38:40.865013", "docstatus": 0, "doctype": "Onboarding Step", - "idx": 7, + "idx": 8, "is_complete": 0, "is_single": 0, "is_skipped": 0, - "modified": "2026-02-23 20:30:37.698459", + "modified": "2026-02-25 16:58:56.384284", "modified_by": "Administrator", "name": "Create Item", "owner": "Administrator", diff --git a/erpnext/subcontracting/module_onboarding/subcontracting_onboarding/subcontracting_onboarding.json b/erpnext/subcontracting/module_onboarding/subcontracting_onboarding/subcontracting_onboarding.json index afd9160103b..867dca4a380 100644 --- a/erpnext/subcontracting/module_onboarding/subcontracting_onboarding/subcontracting_onboarding.json +++ b/erpnext/subcontracting/module_onboarding/subcontracting_onboarding/subcontracting_onboarding.json @@ -15,7 +15,7 @@ "doctype": "Module Onboarding", "idx": 1, "is_complete": 0, - "modified": "2026-02-23 22:51:04.595547", + "modified": "2026-02-25 16:59:55.409759", "modified_by": "Administrator", "module": "Subcontracting", "name": "Subcontracting Onboarding", @@ -43,5 +43,5 @@ "step": "Create Subcontracting Order" } ], - "title": "Subcontracting Setup!" + "title": "Subcontracting Setup" } From 8f922382e4780d9591a53e37bfb9c477df22e2b4 Mon Sep 17 00:00:00 2001 From: rohitwaghchaure Date: Wed, 25 Feb 2026 18:13:42 +0530 Subject: [PATCH 15/62] chore: fix conflicts --- erpnext/patches.txt | 3 --- 1 file changed, 3 deletions(-) diff --git a/erpnext/patches.txt b/erpnext/patches.txt index d90b4eda72a..3c59e1ff550 100644 --- a/erpnext/patches.txt +++ b/erpnext/patches.txt @@ -467,7 +467,4 @@ erpnext.patches.v16_0.update_company_custom_field_in_bin erpnext.patches.v15_0.replace_http_with_https_in_sales_partner erpnext.patches.v15_0.delete_quotation_lost_record_detail erpnext.patches.v16_0.add_portal_redirects -<<<<<<< HEAD -======= erpnext.patches.v16_0.complete_onboarding_steps_for_older_sites #2 ->>>>>>> d90ec49241 (fix: patch to complete onboarding stpes for existing records) From 2495cb8b2aca77eae8973bd2d3d5da3946b238f2 Mon Sep 17 00:00:00 2001 From: ljain112 Date: Wed, 25 Feb 2026 19:27:52 +0530 Subject: [PATCH 16/62] fix: ensure cache is cleared on fiscal year update and trash (cherry picked from commit 39b0e3522a71b5b4460cd25666f11a1ab641fb8e) --- erpnext/accounts/doctype/fiscal_year/fiscal_year.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/erpnext/accounts/doctype/fiscal_year/fiscal_year.py b/erpnext/accounts/doctype/fiscal_year/fiscal_year.py index 38f3a91c8fe..52fe3cd148c 100644 --- a/erpnext/accounts/doctype/fiscal_year/fiscal_year.py +++ b/erpnext/accounts/doctype/fiscal_year/fiscal_year.py @@ -33,6 +33,12 @@ class FiscalYear(Document): self.validate_dates() self.validate_overlap() + def on_update(self): + frappe.cache().delete_key("fiscal_years") + + def on_trash(self): + frappe.cache().delete_key("fiscal_years") + def validate_dates(self): self.validate_from_to_dates("year_start_date", "year_end_date") if self.is_short_year: From 2349ebbb2963bde64cf79ed90ce3fc838c100ddd Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Wed, 25 Feb 2026 15:47:17 +0000 Subject: [PATCH 17/62] Merge pull request #52977 from frappe/mergify/bp/version-16-hotfix/pr-52952 fix: customer field made mandatory for sales invoice (backport #52952) --- erpnext/accounts/doctype/sales_invoice/sales_invoice.json | 3 ++- erpnext/accounts/doctype/sales_invoice/sales_invoice.py | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.json b/erpnext/accounts/doctype/sales_invoice/sales_invoice.json index 9cfbd4f0053..f33576f6d9c 100644 --- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.json +++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.json @@ -271,6 +271,7 @@ "oldfieldtype": "Link", "options": "Customer", "print_hide": 1, + "reqd": 1, "search_index": 1 }, { @@ -2330,7 +2331,7 @@ "link_fieldname": "consolidated_invoice" } ], - "modified": "2026-02-10 11:59:07.819903", + "modified": "2026-02-25 12:41:57.043459", "modified_by": "Administrator", "module": "Accounts", "name": "Sales Invoice", diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py index b6261cc5707..d586d091707 100644 --- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py +++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py @@ -119,7 +119,7 @@ class SalesInvoice(SellingController): cost_center: DF.Link | None coupon_code: DF.Link | None currency: DF.Link - customer: DF.Link | None + customer: DF.Link customer_address: DF.Link | None customer_group: DF.Link | None customer_name: DF.SmallText | None From 5c48f74d4c1a833f40e6eca37de087080ebb2b49 Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Thu, 26 Feb 2026 10:47:56 +0530 Subject: [PATCH 18/62] fix: broekn link of docs in asset onboarding (cherry picked from commit 1cdf439e38f4d0364e238e972bc0996d374f961b) --- .../module_onboarding/asset_onboarding/asset_onboarding.json | 2 +- erpnext/assets/onboarding_step/learn_asset/learn_asset.json | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/erpnext/assets/module_onboarding/asset_onboarding/asset_onboarding.json b/erpnext/assets/module_onboarding/asset_onboarding/asset_onboarding.json index b0b4b35094f..eb75add1aba 100644 --- a/erpnext/assets/module_onboarding/asset_onboarding/asset_onboarding.json +++ b/erpnext/assets/module_onboarding/asset_onboarding/asset_onboarding.json @@ -15,7 +15,7 @@ "doctype": "Module Onboarding", "idx": 0, "is_complete": 0, - "modified": "2026-02-25 16:59:52.159087", + "modified": "2026-02-26 10:45:47.970714", "modified_by": "Administrator", "module": "Assets", "name": "Asset Onboarding", diff --git a/erpnext/assets/onboarding_step/learn_asset/learn_asset.json b/erpnext/assets/onboarding_step/learn_asset/learn_asset.json index baf2f186592..8feef0073f5 100644 --- a/erpnext/assets/onboarding_step/learn_asset/learn_asset.json +++ b/erpnext/assets/onboarding_step/learn_asset/learn_asset.json @@ -8,11 +8,11 @@ "is_complete": 0, "is_single": 0, "is_skipped": 0, - "modified": "2026-02-25 15:09:37.450763", + "modified": "2026-02-26 10:44:59.557156", "modified_by": "Administrator", "name": "Learn Asset", "owner": "Administrator", - "path": "https://docs.frappe.io/erpnext/assets/setup/asset-category", + "path": "https://docs.frappe.io/erpnext/assets/introduction", "show_form_tour": 0, "show_full_form": 0, "title": "Learn Asset", From b76e0c645b270715c3cebf6a29a5be992306be82 Mon Sep 17 00:00:00 2001 From: ravibharathi656 Date: Thu, 29 Jan 2026 16:05:22 +0530 Subject: [PATCH 19/62] fix(payment entry): round unallocated amount (cherry picked from commit b0d67517778daa3a5f527c7729c9862b1194d36e) --- .../doctype/payment_entry/payment_entry.py | 32 +++++++++++++------ 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry.py b/erpnext/accounts/doctype/payment_entry/payment_entry.py index 350e8b700a9..b7cd768a829 100644 --- a/erpnext/accounts/doctype/payment_entry/payment_entry.py +++ b/erpnext/accounts/doctype/payment_entry/payment_entry.py @@ -1082,20 +1082,32 @@ class PaymentEntry(AccountsController): self.base_paid_amount + deductions_to_consider ): self.unallocated_amount = ( - self.base_paid_amount - + deductions_to_consider - - self.base_total_allocated_amount - - included_taxes - ) / self.source_exchange_rate + flt( + ( + self.base_paid_amount + + deductions_to_consider + - self.base_total_allocated_amount + - included_taxes + ), + self.precision("unallocated_amount"), + ) + / self.source_exchange_rate + ) elif self.payment_type == "Pay" and self.base_total_allocated_amount < ( self.base_received_amount - deductions_to_consider ): self.unallocated_amount = ( - self.base_received_amount - - deductions_to_consider - - self.base_total_allocated_amount - - included_taxes - ) / self.target_exchange_rate + flt( + ( + self.base_received_amount + - deductions_to_consider + - self.base_total_allocated_amount + - included_taxes + ), + self.precision("unallocated_amount"), + ) + / self.target_exchange_rate + ) def set_exchange_gain_loss(self): exchange_gain_loss = flt( From 429bd245d15dc26da71fa32ff2fef48c1bf1082f Mon Sep 17 00:00:00 2001 From: Luis Mendoza Date: Wed, 11 Feb 2026 20:49:15 +0000 Subject: [PATCH 20/62] fix(accounts): compute tax net_amount in JS controller (cherry picked from commit 153ad99f85ad5ef8a1b52663cd121328bf589f73) --- erpnext/public/js/controllers/taxes_and_totals.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/erpnext/public/js/controllers/taxes_and_totals.js b/erpnext/public/js/controllers/taxes_and_totals.js index daffda5d4be..255037e5af7 100644 --- a/erpnext/public/js/controllers/taxes_and_totals.js +++ b/erpnext/public/js/controllers/taxes_and_totals.js @@ -191,6 +191,7 @@ erpnext.taxes_and_totals = class TaxesAndTotals extends erpnext.payments { tax.item_wise_tax_detail = {}; } var tax_fields = [ + "net_amount", "total", "tax_amount_after_discount_amount", "tax_amount_for_current_item", @@ -400,7 +401,7 @@ erpnext.taxes_and_totals = class TaxesAndTotals extends erpnext.payments { var item_tax_map = me._load_item_tax_rate(item.item_tax_rate); $.each(doc.taxes, function (i, tax) { // tax_amount represents the amount of tax for the current step - var current_tax_amount = me.get_current_tax_amount(item, tax, item_tax_map); + var [current_net_amount, current_tax_amount] = me.get_current_tax_amount(item, tax, item_tax_map); if (frappe.flags.round_row_wise_tax) { current_tax_amount = flt(current_tax_amount, precision("tax_amount", tax)); } @@ -419,6 +420,7 @@ erpnext.taxes_and_totals = class TaxesAndTotals extends erpnext.payments { !(me.discount_amount_applied && me.frm.doc.apply_discount_on == "Grand Total") ) { tax.tax_amount += current_tax_amount; + tax.net_amount += current_net_amount; } // store tax_amount for current item as it will be used for @@ -555,7 +557,7 @@ erpnext.taxes_and_totals = class TaxesAndTotals extends erpnext.payments { current_tax_amount = tax_rate * item.qty; } - return current_tax_amount; + return [current_net_amount, current_tax_amount]; } round_off_totals(tax) { @@ -565,6 +567,7 @@ erpnext.taxes_and_totals = class TaxesAndTotals extends erpnext.payments { } tax.tax_amount = flt(tax.tax_amount, precision("tax_amount", tax)); + tax.net_amount = flt(tax.net_amount, precision("net_amount", tax)); tax.tax_amount_after_discount_amount = flt( tax.tax_amount_after_discount_amount, precision("tax_amount", tax) From adb4023ba4273eaea7907d8ed2c5645d27e76062 Mon Sep 17 00:00:00 2001 From: Luis Mendoza Date: Wed, 11 Feb 2026 21:18:44 +0000 Subject: [PATCH 21/62] style: prettier formatting (cherry picked from commit 485166b668b372ecff00e6638ced930b73bff3bc) --- erpnext/public/js/controllers/taxes_and_totals.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/erpnext/public/js/controllers/taxes_and_totals.js b/erpnext/public/js/controllers/taxes_and_totals.js index 255037e5af7..00b7be1c5fe 100644 --- a/erpnext/public/js/controllers/taxes_and_totals.js +++ b/erpnext/public/js/controllers/taxes_and_totals.js @@ -401,7 +401,11 @@ erpnext.taxes_and_totals = class TaxesAndTotals extends erpnext.payments { var item_tax_map = me._load_item_tax_rate(item.item_tax_rate); $.each(doc.taxes, function (i, tax) { // tax_amount represents the amount of tax for the current step - var [current_net_amount, current_tax_amount] = me.get_current_tax_amount(item, tax, item_tax_map); + var [current_net_amount, current_tax_amount] = me.get_current_tax_amount( + item, + tax, + item_tax_map + ); if (frappe.flags.round_row_wise_tax) { current_tax_amount = flt(current_tax_amount, precision("tax_amount", tax)); } From 3f284f0c55a64284e9c327c14199d734306ea2db Mon Sep 17 00:00:00 2001 From: Luis Mendoza Date: Wed, 18 Feb 2026 16:44:56 +0000 Subject: [PATCH 22/62] fix(accounts): round and convert net_amount to company currency in JS tax controller (cherry picked from commit b10b20539471879da0fcaf64648cf22d598b7f82) --- erpnext/public/js/controllers/taxes_and_totals.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/erpnext/public/js/controllers/taxes_and_totals.js b/erpnext/public/js/controllers/taxes_and_totals.js index 00b7be1c5fe..c53c1f8aef5 100644 --- a/erpnext/public/js/controllers/taxes_and_totals.js +++ b/erpnext/public/js/controllers/taxes_and_totals.js @@ -408,6 +408,7 @@ erpnext.taxes_and_totals = class TaxesAndTotals extends erpnext.payments { ); if (frappe.flags.round_row_wise_tax) { current_tax_amount = flt(current_tax_amount, precision("tax_amount", tax)); + current_net_amount = flt(current_net_amount, precision("net_amount", tax)); } // Adjust divisional loss to the last item @@ -486,7 +487,7 @@ erpnext.taxes_and_totals = class TaxesAndTotals extends erpnext.payments { for (const [i, tax] of doc.taxes.entries()) { me.round_off_totals(tax); - me.set_in_company_currency(tax, ["tax_amount", "tax_amount_after_discount_amount"]); + me.set_in_company_currency(tax, ["tax_amount", "tax_amount_after_discount_amount", "net_amount"]); me.round_off_base_values(tax); From c61c748cbd21eb84725c9e8425884a4d330fc8cc Mon Sep 17 00:00:00 2001 From: diptanilsaha Date: Thu, 26 Feb 2026 14:28:25 +0530 Subject: [PATCH 23/62] fix(payment_entry): fix precision for `total_allocated_amount` and `base_total_allocated_amount` Co-authored-by: Ahuahuachi (cherry picked from commit d82a0a9455e83ad6dadd15e8bfa7dad59e36c0f8) --- erpnext/accounts/doctype/payment_entry/payment_entry.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry.py b/erpnext/accounts/doctype/payment_entry/payment_entry.py index b7cd768a829..c68672466c2 100644 --- a/erpnext/accounts/doctype/payment_entry/payment_entry.py +++ b/erpnext/accounts/doctype/payment_entry/payment_entry.py @@ -1065,8 +1065,12 @@ class PaymentEntry(AccountsController): total_allocated_amount += flt(d.allocated_amount) base_total_allocated_amount += self.calculate_base_allocated_amount_for_reference(d) - self.total_allocated_amount = abs(total_allocated_amount) - self.base_total_allocated_amount = abs(base_total_allocated_amount) + self.total_allocated_amount = flt( + abs(total_allocated_amount), self.precision("total_allocated_amount") + ) + self.base_total_allocated_amount = flt( + abs(base_total_allocated_amount), self.precision("base_total_allocated_amount") + ) def set_unallocated_amount(self): self.unallocated_amount = 0 From 865895649e7f70219f7a753d933ce568b02fbf6e Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 27 Feb 2026 07:40:41 +0000 Subject: [PATCH 24/62] fix: `Trial Balance` and `Consolidated Trial Balance` total row calculation (backport #53014) (#53015) Co-authored-by: diptanilsaha --- .../consolidated_trial_balance.js | 6 ++ .../consolidated_trial_balance.py | 64 +++++++------------ .../report/trial_balance/trial_balance.py | 22 +++++-- 3 files changed, 43 insertions(+), 49 deletions(-) diff --git a/erpnext/accounts/report/consolidated_trial_balance/consolidated_trial_balance.js b/erpnext/accounts/report/consolidated_trial_balance/consolidated_trial_balance.js index 65f2e3b905a..df023f91c02 100644 --- a/erpnext/accounts/report/consolidated_trial_balance/consolidated_trial_balance.js +++ b/erpnext/accounts/report/consolidated_trial_balance/consolidated_trial_balance.js @@ -86,6 +86,12 @@ frappe.query_reports["Consolidated Trial Balance"] = { fieldtype: "Check", default: 1, }, + { + fieldname: "show_net_values", + label: __("Show net values in opening and closing columns"), + fieldtype: "Check", + default: 1, + }, { fieldname: "show_group_accounts", label: __("Show Group Accounts"), diff --git a/erpnext/accounts/report/consolidated_trial_balance/consolidated_trial_balance.py b/erpnext/accounts/report/consolidated_trial_balance/consolidated_trial_balance.py index 78201ca63c6..fc4affad3a7 100644 --- a/erpnext/accounts/report/consolidated_trial_balance/consolidated_trial_balance.py +++ b/erpnext/accounts/report/consolidated_trial_balance/consolidated_trial_balance.py @@ -14,6 +14,7 @@ from erpnext.accounts.report.financial_statements import ( ) from erpnext.accounts.report.trial_balance.trial_balance import ( accumulate_values_into_parents, + calculate_total_row, calculate_values, get_opening_balances, hide_group_accounts, @@ -44,7 +45,6 @@ def execute(filters: dict | None = None): def validate_filters(filters): validate_companies(filters) - filters.show_net_values = True tb_validate_filters(filters) @@ -99,16 +99,20 @@ def get_data(filters) -> list[list]: tb_data = get_company_wise_tb_data(company_filter, reporting_currency, ignore_reporting_currency) consolidate_trial_balance_data(data, tb_data) - for d in data: - prepare_opening_closing(d) - - total_row = calculate_total_row(data, reporting_currency) - - data.extend([{}, total_row]) + if filters.get("show_net_values"): + prepare_opening_closing_for_ctb(data) if not filters.get("show_group_accounts"): data = hide_group_accounts(data) + total_row = calculate_total_row( + data, reporting_currency, show_group_accounts=filters.get("show_group_accounts") + ) + + calculate_foreign_currency_translation_reserve(total_row, data, filters=filters) + + data.extend([total_row]) + if filters.get("presentation_currency"): update_to_presentation_currency( data, @@ -207,10 +211,6 @@ def prepare_companywise_tb_data(accounts, filters, parent_children_map, reportin data = [] for d in accounts: - # Prepare opening closing for group account - if parent_children_map.get(d.account) and filters.get("show_net_values"): - prepare_opening_closing(d) - has_value = False row = { "account": d.name, @@ -242,35 +242,9 @@ def prepare_companywise_tb_data(accounts, filters, parent_children_map, reportin return data -def calculate_total_row(data, reporting_currency): - total_row = { - "account": "'" + _("Total") + "'", - "account_name": "'" + _("Total") + "'", - "warn_if_negative": True, - "opening_debit": 0.0, - "opening_credit": 0.0, - "debit": 0.0, - "credit": 0.0, - "closing_debit": 0.0, - "closing_credit": 0.0, - "parent_account": None, - "indent": 0, - "has_value": True, - "currency": reporting_currency, - } - - for d in data: - if not d.get("parent_account"): - for field in value_fields: - total_row[field] += d[field] - - if data: - calculate_foreign_currency_translation_reserve(total_row, data) - - return total_row - - -def calculate_foreign_currency_translation_reserve(total_row, data): +def calculate_foreign_currency_translation_reserve(total_row, data, filters): + if not data or not total_row: + return opening_dr_cr_diff = total_row["opening_debit"] - total_row["opening_credit"] dr_cr_diff = total_row["debit"] - total_row["credit"] @@ -289,7 +263,7 @@ def calculate_foreign_currency_translation_reserve(total_row, data): "root_type": data[idx].get("root_type"), "account_type": "Equity", "parent_account": data[idx].get("account"), - "indent": data[idx].get("indent") + 1, + "indent": data[idx].get("indent") + 1 if filters.get("show_group_accounts") else 0, "has_value": True, "currency": total_row.get("currency"), } @@ -297,7 +271,8 @@ def calculate_foreign_currency_translation_reserve(total_row, data): fctr_row["closing_debit"] = fctr_row["opening_debit"] + fctr_row["debit"] fctr_row["closing_credit"] = fctr_row["opening_credit"] + fctr_row["credit"] - prepare_opening_closing(fctr_row) + if filters.get("show_net_values"): + prepare_opening_closing(fctr_row) data.insert(idx + 1, fctr_row) @@ -396,6 +371,11 @@ def update_to_presentation_currency(data, from_currency, to_currency, date, igno d.update(currency=to_currency) +def prepare_opening_closing_for_ctb(data): + for d in data: + prepare_opening_closing(d) + + def get_columns(): return [ { diff --git a/erpnext/accounts/report/trial_balance/trial_balance.py b/erpnext/accounts/report/trial_balance/trial_balance.py index 66185c94297..186a9eb71f0 100644 --- a/erpnext/accounts/report/trial_balance/trial_balance.py +++ b/erpnext/accounts/report/trial_balance/trial_balance.py @@ -390,7 +390,7 @@ def calculate_values( prepare_opening_closing(d) -def calculate_total_row(accounts, company_currency): +def calculate_total_row(data, company_currency, show_group_accounts=True): total_row = { "account": "'" + _("Total") + "'", "account_name": "'" + _("Total") + "'", @@ -407,10 +407,16 @@ def calculate_total_row(accounts, company_currency): "currency": company_currency, } - for d in accounts: - if not d.parent_account: - for field in value_fields: - total_row[field] += d[field] + def sum_value_fields(row): + for field in value_fields: + total_row[field] += row[field] + + for d in data: + if not show_group_accounts: + sum_value_fields(d) + + elif show_group_accounts and not d.get("parent_account"): + sum_value_fields(d) return total_row @@ -456,11 +462,13 @@ def prepare_data(accounts, filters, parent_children_map, company_currency): row["has_value"] = has_value data.append(row) - total_row = calculate_total_row(accounts, company_currency) - if not filters.get("show_group_accounts"): data = hide_group_accounts(data) + total_row = calculate_total_row( + data, company_currency, show_group_accounts=filters.get("show_group_accounts") + ) + data.extend([{}, total_row]) return data From 6727c86d0a762a084d764e507f5d3a590d5eebc6 Mon Sep 17 00:00:00 2001 From: Thomas antony <77287334+thomasantony12@users.noreply.github.com> Date: Fri, 27 Feb 2026 11:11:28 +0530 Subject: [PATCH 25/62] feat: UOM query filter for opportunity items Add UOM query filter based on item code in opportunity form. (cherry picked from commit b33f06701c13a9c6d543349c73de1f13f9155a6b) --- erpnext/crm/doctype/opportunity/opportunity.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/erpnext/crm/doctype/opportunity/opportunity.js b/erpnext/crm/doctype/opportunity/opportunity.js index 74251e21b3c..1bda0e5568f 100644 --- a/erpnext/crm/doctype/opportunity/opportunity.js +++ b/erpnext/crm/doctype/opportunity/opportunity.js @@ -307,6 +307,21 @@ erpnext.crm.Opportunity = class Opportunity extends frappe.ui.form.Controller { }; }); + this.frm.set_query("uom", "items", function (doc, cdt, cdn) { + let row = locals[cdt][cdn]; + + if (!row.item_code) { + return; + } + + return { + query: "erpnext.controllers.queries.get_item_uom_query", + filters: { + item_code: row.item_code, + }, + }; + }); + me.frm.set_query("contact_person", erpnext.queries["contact_query"]); if (me.frm.doc.opportunity_from == "Lead") { From ea5ad3179cf4a4601f8035b0b8ef7df8a3362b22 Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Fri, 27 Feb 2026 12:00:16 +0530 Subject: [PATCH 26/62] fix: old stock reco entries causing issue in the stock balance report (cherry picked from commit 0874cbc268b6e33072a18c220de43e317308e732) --- .../report/stock_balance/stock_balance.py | 37 +++++++++++++++++-- .../stock_ledger_invariant_check.js | 2 +- 2 files changed, 35 insertions(+), 4 deletions(-) diff --git a/erpnext/stock/report/stock_balance/stock_balance.py b/erpnext/stock/report/stock_balance/stock_balance.py index ccee40ce25f..c4c67c4abaf 100644 --- a/erpnext/stock/report/stock_balance/stock_balance.py +++ b/erpnext/stock/report/stock_balance/stock_balance.py @@ -8,7 +8,7 @@ from typing import Any, TypedDict import frappe from frappe import _ -from frappe.query_builder.functions import Coalesce +from frappe.query_builder.functions import Coalesce, Count from frappe.utils import add_days, cint, date_diff, flt, getdate from frappe.utils.nestedset import get_descendants_of @@ -165,6 +165,7 @@ class StockBalanceReport: sle.serial_no, sle.serial_and_batch_bundle, sle.has_serial_no, + sle.voucher_detail_no, item_table.item_group, item_table.stock_uom, item_table.item_name, @@ -190,6 +191,8 @@ class StockBalanceReport: if self.filters.get("show_stock_ageing_data"): self.sle_entries = self.sle_query.run(as_dict=True) + self.prepare_stock_reco_voucher_wise_count() + # HACK: This is required to avoid causing db query in flt _system_settings = frappe.get_cached_doc("System Settings") with frappe.db.unbuffered_cursor(): @@ -207,6 +210,30 @@ class StockBalanceReport: self.item_warehouse_map, self.float_precision, self.inventory_dimensions ) + def prepare_stock_reco_voucher_wise_count(self): + self.stock_reco_voucher_wise_count = frappe._dict() + + doctype = frappe.qb.DocType("Stock Ledger Entry") + item = frappe.qb.DocType("Item") + + query = ( + frappe.qb.from_(doctype) + .inner_join(item) + .on(doctype.item_code == item.name) + .select(doctype.voucher_detail_no, Count(doctype.name).as_("count")) + .where( + (doctype.voucher_type == "Stock Reconciliation") + & (doctype.docstatus < 2) + & (doctype.is_cancelled == 0) + & (item.has_serial_no == 1) + ) + .groupby(doctype.voucher_detail_no) + ) + + data = query.run(as_list=True) + if data: + self.stock_reco_voucher_wise_count = frappe._dict(data) + def prepare_new_data(self): if self.filters.get("show_stock_ageing_data"): self.filters["show_warehouse_wise_stock"] = True @@ -283,9 +310,13 @@ class StockBalanceReport: qty_dict[field] = entry.get(field) if entry.voucher_type == "Stock Reconciliation" and ( - not entry.batch_no and not entry.serial_no and not entry.serial_and_batch_bundle + not entry.batch_no or entry.serial_no or entry.serial_and_batch_bundle ): - qty_diff = flt(entry.qty_after_transaction) - flt(qty_dict.bal_qty) + if entry.serial_no and self.stock_reco_voucher_wise_count.get(entry.voucher_detail_no, 0) == 1: + qty_dict.bal_qty = 0.0 + qty_diff = flt(entry.actual_qty) + else: + qty_diff = flt(entry.qty_after_transaction) - flt(qty_dict.bal_qty) else: qty_diff = flt(entry.actual_qty) diff --git a/erpnext/stock/report/stock_ledger_invariant_check/stock_ledger_invariant_check.js b/erpnext/stock/report/stock_ledger_invariant_check/stock_ledger_invariant_check.js index df65654e36b..1f405cda78f 100644 --- a/erpnext/stock/report/stock_ledger_invariant_check/stock_ledger_invariant_check.js +++ b/erpnext/stock/report/stock_ledger_invariant_check/stock_ledger_invariant_check.js @@ -21,7 +21,7 @@ frappe.query_reports["Stock Ledger Invariant Check"] = { options: "Item", get_query: function () { return { - filters: { is_stock_item: 1, has_serial_no: 0 }, + filters: { is_stock_item: 1 }, }; }, }, From c28568f4fd026be07f20a80f954bd7f3e3886f25 Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Thu, 26 Feb 2026 12:14:05 +0530 Subject: [PATCH 27/62] fix: same reposting entry picked by multiple rq jobs (cherry picked from commit 4dfbacfd9230365b2f4ce0875bb4d0f4c36628c5) --- .../repost_item_valuation.py | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/erpnext/stock/doctype/repost_item_valuation/repost_item_valuation.py b/erpnext/stock/doctype/repost_item_valuation/repost_item_valuation.py index d487fa091ed..f5b4ef3e8f5 100644 --- a/erpnext/stock/doctype/repost_item_valuation/repost_item_valuation.py +++ b/erpnext/stock/doctype/repost_item_valuation/repost_item_valuation.py @@ -570,7 +570,20 @@ def run_parallel_reposting(): riv_entries = get_repost_item_valuation_entries() + rq_jobs = frappe.get_all( + "RQ Job", + fields=["arguments"], + filters={ + "status": ("like", "%started%"), + "job_name": "erpnext.stock.doctype.repost_item_valuation.repost_item_valuation.execute_reposting_entry", + }, + ) + for row in riv_entries: + if rq_jobs: + if job_running_for_entry(row.name, rq_jobs): + continue + if row.based_on != "Item and Warehouse" or row.repost_only_accounting_ledgers: execute_reposting_entry(row.name) continue @@ -719,3 +732,19 @@ def get_existing_reposting_only_gl_entries(reposting_reference): reposting_map[key] = d.reposting_reference return reposting_map + + +def job_running_for_entry(reposting_entry, rq_jobs): + for job in rq_jobs: + if not job.arguments: + continue + + try: + job_args = json.loads(job.arguments) + except (TypeError, json.JSONDecodeError): + continue + + if isinstance(job_args, dict) and job_args.get("kwargs", {}).get("name") == reposting_entry: + return True + + return False From f939e980a693e296656e126610837469dca421c3 Mon Sep 17 00:00:00 2001 From: Mihir Kandoi Date: Sun, 1 Mar 2026 14:48:17 +0530 Subject: [PATCH 28/62] fix: use conversion factor when creating stock entry from pick list (cherry picked from commit 5f12b0db3f2927acbab85da8fda41887bae7a604) --- erpnext/stock/doctype/pick_list/pick_list.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/stock/doctype/pick_list/pick_list.py b/erpnext/stock/doctype/pick_list/pick_list.py index 4d7f4586d6b..472502bd80e 100644 --- a/erpnext/stock/doctype/pick_list/pick_list.py +++ b/erpnext/stock/doctype/pick_list/pick_list.py @@ -1587,7 +1587,7 @@ def update_common_item_properties(item, location): item.item_code = location.item_code item.s_warehouse = location.warehouse item.transfer_qty = location.picked_qty - item.qty = location.qty + item.qty = flt(location.picked_qty / (location.conversion_factor or 1), location.precision("qty")) item.uom = location.uom item.conversion_factor = location.conversion_factor item.stock_uom = location.stock_uom From b26631d8b187df97ba81bccae1d79f41321af335 Mon Sep 17 00:00:00 2001 From: frappe-pr-bot Date: Sun, 1 Mar 2026 09:43:26 +0000 Subject: [PATCH 29/62] chore: update POT file --- erpnext/locale/main.pot | 1808 +++++++++++++++++++++++++-------------- 1 file changed, 1166 insertions(+), 642 deletions(-) diff --git a/erpnext/locale/main.pot b/erpnext/locale/main.pot index af2482560fe..7d4ba39e4a8 100644 --- a/erpnext/locale/main.pot +++ b/erpnext/locale/main.pot @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ERPNext VERSION\n" "Report-Msgid-Bugs-To: hello@frappe.io\n" -"POT-Creation-Date: 2026-02-22 09:43+0000\n" -"PO-Revision-Date: 2026-02-22 09:43+0000\n" +"POT-Creation-Date: 2026-03-01 09:43+0000\n" +"PO-Revision-Date: 2026-03-01 09:43+0000\n" "Last-Translator: hello@frappe.io\n" "Language-Team: hello@frappe.io\n" "MIME-Version: 1.0\n" @@ -16,7 +16,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.16.0\n" -#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:1475 +#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:1485 msgid "" "\n" "\t\t\tThe Batch {0} of an item {1} has negative stock in the warehouse {2}{3}.\n" @@ -288,7 +288,7 @@ msgstr "" #: erpnext/stock/report/batch_item_expiry_status/batch_item_expiry_status.py:24 #: erpnext/stock/report/batch_wise_balance_history/batch_wise_balance_history.py:127 -#: erpnext/stock/report/stock_analytics/stock_analytics.py:312 +#: erpnext/stock/report/stock_analytics/stock_analytics.py:322 msgid "'From Date' is required" msgstr "" @@ -315,7 +315,7 @@ msgstr "" #: erpnext/stock/report/batch_item_expiry_status/batch_item_expiry_status.py:27 #: erpnext/stock/report/batch_wise_balance_history/batch_wise_balance_history.py:129 -#: erpnext/stock/report/stock_analytics/stock_analytics.py:318 +#: erpnext/stock/report/stock_analytics/stock_analytics.py:328 msgid "'To Date' is required" msgstr "" @@ -914,11 +914,11 @@ msgstr "" msgid "Your Shortcuts" msgstr "" -#: erpnext/accounts/doctype/payment_request/payment_request.py:1008 +#: erpnext/accounts/doctype/payment_request/payment_request.py:1133 msgid "Grand Total: {0}" msgstr "" -#: erpnext/accounts/doctype/payment_request/payment_request.py:1009 +#: erpnext/accounts/doctype/payment_request/payment_request.py:1134 msgid "Outstanding Amount: {0}" msgstr "" @@ -973,7 +973,7 @@ msgstr "" msgid "A - C" msgstr "" -#: erpnext/selling/doctype/customer/customer.py:329 +#: erpnext/selling/doctype/customer/customer.py:353 msgid "A Customer Group exists with same name please change the Customer name or rename the Customer Group" msgstr "" @@ -1182,7 +1182,7 @@ msgstr "" #. Label of the qty (Float) field in DocType 'Purchase Receipt Item' #. Label of the qty (Float) field in DocType 'Subcontracting Receipt Item' -#: erpnext/public/js/controllers/transaction.js:2807 +#: erpnext/public/js/controllers/transaction.js:2914 #: erpnext/stock/doctype/purchase_receipt_item/purchase_receipt_item.json #: erpnext/subcontracting/doctype/subcontracting_receipt_item/subcontracting_receipt_item.json msgid "Accepted Quantity" @@ -1346,9 +1346,9 @@ msgstr "" #: erpnext/accounts/doctype/bank_account/bank_account.json #: erpnext/accounts/doctype/ledger_merge/ledger_merge.json #: erpnext/accounts/doctype/ledger_merge_accounts/ledger_merge_accounts.json -#: erpnext/accounts/report/consolidated_trial_balance/consolidated_trial_balance.py:409 +#: erpnext/accounts/report/consolidated_trial_balance/consolidated_trial_balance.py:389 #: erpnext/accounts/report/financial_statements.py:678 -#: erpnext/accounts/report/trial_balance/trial_balance.py:480 +#: erpnext/accounts/report/trial_balance/trial_balance.py:488 msgid "Account Name" msgstr "" @@ -1359,9 +1359,9 @@ msgstr "" #. Label of the account_number (Data) field in DocType 'Account' #: erpnext/accounts/doctype/account/account.json #: erpnext/accounts/doctype/account/account_tree.js:133 -#: erpnext/accounts/report/consolidated_trial_balance/consolidated_trial_balance.py:416 +#: erpnext/accounts/report/consolidated_trial_balance/consolidated_trial_balance.py:396 #: erpnext/accounts/report/financial_statements.py:685 -#: erpnext/accounts/report/trial_balance/trial_balance.py:487 +#: erpnext/accounts/report/trial_balance/trial_balance.py:495 msgid "Account Number" msgstr "" @@ -1563,7 +1563,7 @@ msgstr "" msgid "Account: {0} can only be updated via Stock Transactions" msgstr "" -#: erpnext/accounts/doctype/payment_entry/payment_entry.py:2709 +#: erpnext/accounts/doctype/payment_entry/payment_entry.py:2721 msgid "Account: {0} is not permitted under Payment Entry" msgstr "" @@ -1893,7 +1893,7 @@ msgstr "" #: erpnext/accounts/doctype/invoice_discounting/invoice_discounting.js:193 #: erpnext/assets/doctype/asset_repair/asset_repair.js:171 -#: erpnext/buying/doctype/supplier/supplier.js:92 +#: erpnext/buying/doctype/supplier/supplier.js:98 #: erpnext/public/js/controllers/stock_controller.js:88 #: erpnext/public/js/utils/ledger_preview.js:8 #: erpnext/selling/doctype/customer/customer.js:173 @@ -1906,6 +1906,11 @@ msgstr "" msgid "Accounting Masters" msgstr "" +#. Title of the Module Onboarding 'Accounting Onboarding' +#: erpnext/accounts/module_onboarding/accounting_onboarding/accounting_onboarding.json +msgid "Accounting Onboarding" +msgstr "" + #. Name of a DocType #. Label of a Link in the Invoicing Workspace #. Label of a Workspace Sidebar Item @@ -1954,7 +1959,7 @@ msgstr "" #: erpnext/setup/doctype/email_digest/email_digest.json #: erpnext/setup/doctype/incoterm/incoterm.json #: erpnext/setup/doctype/supplier_group/supplier_group.json -#: erpnext/setup/install.py:337 +#: erpnext/setup/install.py:368 msgid "Accounts" msgstr "" @@ -1989,7 +1994,7 @@ msgstr "" #: erpnext/accounts/doctype/journal_entry/journal_entry.json #: erpnext/accounts/report/accounts_payable/accounts_payable.json #: erpnext/accounts/report/accounts_payable_summary/accounts_payable_summary.js:113 -#: erpnext/buying/doctype/supplier/supplier.js:104 +#: erpnext/buying/doctype/supplier/supplier.js:110 #: erpnext/workspace_sidebar/financial_reports.json #: erpnext/workspace_sidebar/invoicing.json #: erpnext/workspace_sidebar/payments.json @@ -2497,7 +2502,7 @@ msgstr "" msgid "Actual qty in stock" msgstr "" -#: erpnext/accounts/doctype/payment_entry/payment_entry.js:1542 +#: erpnext/accounts/doctype/payment_entry/payment_entry.js:1545 #: erpnext/public/js/controllers/accounts.js:197 msgid "Actual type tax cannot be included in Item rate in row {0}" msgstr "" @@ -2736,7 +2741,7 @@ msgstr "" msgid "Added On" msgstr "" -#: erpnext/buying/doctype/supplier/supplier.py:134 +#: erpnext/buying/doctype/supplier/supplier.py:135 msgid "Added Supplier Role to User {0}." msgstr "" @@ -2802,14 +2807,15 @@ msgstr "" #. Label of the section_break_49 (Section Break) field in DocType 'POS Invoice' #. Label of the section_break_44 (Section Break) field in DocType 'Purchase #. Invoice' -#. Label of the section_break_49 (Section Break) field in DocType 'Sales -#. Invoice' +#. Label of the additional_discount_section (Section Break) field in DocType +#. 'Sales Invoice' #. Label of the discount_section (Section Break) field in DocType 'Purchase #. Order' #. Label of the section_break_41 (Section Break) field in DocType 'Supplier #. Quotation' #. Label of the section_break_44 (Section Break) field in DocType 'Quotation' -#. Label of the section_break_48 (Section Break) field in DocType 'Sales Order' +#. Label of the additional_discount_section (Section Break) field in DocType +#. 'Sales Order' #. Label of the section_break_49 (Section Break) field in DocType 'Delivery #. Note' #. Label of the section_break_42 (Section Break) field in DocType 'Purchase @@ -2835,6 +2841,7 @@ msgstr "" #. Label of the discount_amount (Currency) field in DocType 'Supplier #. Quotation' #. Label of the discount_amount (Currency) field in DocType 'Quotation' +#. Label of the base_discount_amount (Currency) field in DocType 'Sales Order' #. Label of the discount_amount (Currency) field in DocType 'Sales Order' #. Label of the discount_amount (Currency) field in DocType 'Delivery Note' #. Label of the discount_amount (Currency) field in DocType 'Purchase Receipt' @@ -2861,7 +2868,6 @@ msgstr "" #. Label of the base_discount_amount (Currency) field in DocType 'Supplier #. Quotation' #. Label of the base_discount_amount (Currency) field in DocType 'Quotation' -#. Label of the base_discount_amount (Currency) field in DocType 'Sales Order' #. Label of the base_discount_amount (Currency) field in DocType 'Delivery #. Note' #. Label of the base_discount_amount (Currency) field in DocType 'Purchase @@ -2872,13 +2878,12 @@ msgstr "" #: erpnext/buying/doctype/purchase_order/purchase_order.json #: erpnext/buying/doctype/supplier_quotation/supplier_quotation.json #: erpnext/selling/doctype/quotation/quotation.json -#: erpnext/selling/doctype/sales_order/sales_order.json #: erpnext/stock/doctype/delivery_note/delivery_note.json #: erpnext/stock/doctype/purchase_receipt/purchase_receipt.json msgid "Additional Discount Amount (Company Currency)" msgstr "" -#: erpnext/controllers/taxes_and_totals.py:791 +#: erpnext/controllers/taxes_and_totals.py:796 msgid "Additional Discount Amount ({discount_amount}) cannot exceed the total before such discount ({total_before_discount})" msgstr "" @@ -2915,6 +2920,7 @@ msgstr "" msgid "Additional Discount Percentage" msgstr "" +#. Label of the addtional_info (Section Break) field in DocType 'Journal Entry' #. Label of the additional_info_section (Section Break) field in DocType #. 'Purchase Invoice' #. Label of the more_information (Section Break) field in DocType 'Sales @@ -2930,6 +2936,7 @@ msgstr "" #. Label of the more_info (Section Break) field in DocType 'Delivery Note' #. Label of the additional_info_section (Section Break) field in DocType #. 'Purchase Receipt' +#: erpnext/accounts/doctype/journal_entry/journal_entry.json #: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json #: erpnext/accounts/doctype/sales_invoice/sales_invoice.json #: erpnext/assets/doctype/asset/asset.json @@ -3179,13 +3186,16 @@ msgstr "" msgid "Advance Amount" msgstr "" -#. Label of the advance_paid (Currency) field in DocType 'Purchase Order' #. Label of the advance_paid (Currency) field in DocType 'Sales Order' -#: erpnext/buying/doctype/purchase_order/purchase_order.json #: erpnext/selling/doctype/sales_order/sales_order.json msgid "Advance Paid" msgstr "" +#. Label of the advance_paid (Currency) field in DocType 'Purchase Order' +#: erpnext/buying/doctype/purchase_order/purchase_order.json +msgid "Advance Paid (Company Currency)" +msgstr "" + #: erpnext/buying/doctype/purchase_order/purchase_order_list.js:75 #: erpnext/selling/doctype/sales_order/sales_order_list.js:122 msgid "Advance Payment" @@ -3256,7 +3266,7 @@ msgstr "" msgid "Advance amount" msgstr "" -#: erpnext/controllers/taxes_and_totals.py:928 +#: erpnext/controllers/taxes_and_totals.py:933 msgid "Advance amount cannot be greater than {0} {1}" msgstr "" @@ -3574,7 +3584,7 @@ msgstr "" #: erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.js:165 #: erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.js:185 #: erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.py:166 -#: erpnext/accounts/utils.py:1554 erpnext/public/js/setup_wizard.js:184 +#: erpnext/accounts/utils.py:1555 erpnext/public/js/setup_wizard.js:184 msgid "All Accounts" msgstr "" @@ -3747,7 +3757,7 @@ msgstr "" msgid "All items have already been transferred for this Work Order." msgstr "" -#: erpnext/public/js/controllers/transaction.js:2915 +#: erpnext/public/js/controllers/transaction.js:3022 msgid "All items in this document already have a linked Quality Inspection." msgstr "" @@ -3792,7 +3802,7 @@ msgstr "" msgid "Allocate Advances Automatically (FIFO)" msgstr "" -#: erpnext/accounts/doctype/payment_entry/payment_entry.js:931 +#: erpnext/accounts/doctype/payment_entry/payment_entry.js:935 msgid "Allocate Payment Amount" msgstr "" @@ -3802,7 +3812,7 @@ msgstr "" msgid "Allocate Payment Based On Payment Terms" msgstr "" -#: erpnext/accounts/doctype/payment_entry/payment_entry.js:1732 +#: erpnext/accounts/doctype/payment_entry/payment_entry.js:1735 msgid "Allocate Payment Request" msgstr "" @@ -3828,7 +3838,7 @@ msgstr "" #. Payment Entries' #: erpnext/accounts/doctype/bank_transaction/bank_transaction.json #: erpnext/accounts/doctype/bank_transaction_payments/bank_transaction_payments.json -#: erpnext/accounts/doctype/payment_entry/payment_entry.js:1723 +#: erpnext/accounts/doctype/payment_entry/payment_entry.js:1726 #: erpnext/accounts/doctype/payment_reconciliation_allocation/payment_reconciliation_allocation.json #: erpnext/accounts/doctype/process_payment_reconciliation_log_allocations/process_payment_reconciliation_log_allocations.json #: erpnext/accounts/doctype/purchase_invoice_advance/purchase_invoice_advance.json @@ -3854,11 +3864,11 @@ msgstr "" msgid "Allocated amount" msgstr "" -#: erpnext/accounts/utils.py:657 +#: erpnext/accounts/utils.py:658 msgid "Allocated amount cannot be greater than unadjusted amount" msgstr "" -#: erpnext/accounts/utils.py:655 +#: erpnext/accounts/utils.py:656 msgid "Allocated amount cannot be negative" msgstr "" @@ -3960,7 +3970,7 @@ msgstr "" msgid "Allow Item To Be Added Multiple Times in a Transaction" msgstr "" -#: erpnext/controllers/selling_controller.py:847 +#: erpnext/controllers/selling_controller.py:854 msgid "Allow Item to Be Added Multiple Times in a Transaction" msgstr "" @@ -4380,6 +4390,7 @@ msgstr "" #. Invoice' #. Label of the amount (Currency) field in DocType 'Payment Reconciliation #. Payment' +#. Label of the amount (Currency) field in DocType 'Payment Reference' #. Label of the grand_total (Currency) field in DocType 'Payment Request' #. Option for the 'Discount Type' (Select) field in DocType 'Payment Schedule' #. Option for the 'Discount Type' (Select) field in DocType 'Payment Term' @@ -4466,7 +4477,7 @@ msgstr "" #: erpnext/accounts/doctype/bank_guarantee/bank_guarantee.json #: erpnext/accounts/doctype/budget_distribution/budget_distribution.json #: erpnext/accounts/doctype/cashier_closing_payments/cashier_closing_payments.json -#: erpnext/accounts/doctype/journal_entry/journal_entry.js:627 +#: erpnext/accounts/doctype/journal_entry/journal_entry.js:623 #: erpnext/accounts/doctype/journal_entry_account/journal_entry_account.json #: erpnext/accounts/doctype/payment_entry/payment_entry.json #: erpnext/accounts/doctype/payment_ledger_entry/payment_ledger_entry.json @@ -4474,6 +4485,7 @@ msgstr "" #: erpnext/accounts/doctype/payment_reconciliation_allocation/payment_reconciliation_allocation.json #: erpnext/accounts/doctype/payment_reconciliation_invoice/payment_reconciliation_invoice.json #: erpnext/accounts/doctype/payment_reconciliation_payment/payment_reconciliation_payment.json +#: erpnext/accounts/doctype/payment_reference/payment_reference.json #: erpnext/accounts/doctype/payment_request/payment_request.json #: erpnext/accounts/doctype/payment_schedule/payment_schedule.json #: erpnext/accounts/doctype/payment_term/payment_term.json @@ -4521,6 +4533,7 @@ msgstr "" #: erpnext/manufacturing/doctype/bom_item/bom_item.json #: erpnext/manufacturing/doctype/bom_scrap_item/bom_scrap_item.json #: erpnext/manufacturing/doctype/work_order_item/work_order_item.json +#: erpnext/public/js/controllers/transaction.js:506 #: erpnext/selling/doctype/quotation/quotation.js:316 #: erpnext/selling/doctype/quotation_item/quotation_item.json #: erpnext/selling/doctype/sales_order_item/sales_order_item.json @@ -4673,19 +4686,19 @@ msgstr "" msgid "Amount to Bill" msgstr "" -#: erpnext/accounts/doctype/payment_entry/payment_entry.py:1243 +#: erpnext/accounts/doctype/payment_entry/payment_entry.py:1255 msgid "Amount {0} {1} against {2} {3}" msgstr "" -#: erpnext/accounts/doctype/payment_entry/payment_entry.py:1254 +#: erpnext/accounts/doctype/payment_entry/payment_entry.py:1266 msgid "Amount {0} {1} deducted against {2}" msgstr "" -#: erpnext/accounts/doctype/payment_entry/payment_entry.py:1218 +#: erpnext/accounts/doctype/payment_entry/payment_entry.py:1230 msgid "Amount {0} {1} transferred from {2} to {3}" msgstr "" -#: erpnext/accounts/doctype/payment_entry/payment_entry.py:1224 +#: erpnext/accounts/doctype/payment_entry/payment_entry.py:1236 msgid "Amount {0} {1} {2} {3}" msgstr "" @@ -4724,7 +4737,7 @@ msgstr "" msgid "An Item Group is a way to classify items based on types." msgstr "" -#: erpnext/stock/doctype/repost_item_valuation/repost_item_valuation.py:527 +#: erpnext/stock/doctype/repost_item_valuation/repost_item_valuation.py:535 msgid "An error has been appeared while reposting item valuation via {0}" msgstr "" @@ -4745,6 +4758,12 @@ msgstr "" msgid "Analyst" msgstr "" +#. Label of the analytics_section (Section Break) field in DocType 'Accounts +#. Settings' +#: erpnext/accounts/doctype/accounts_settings/accounts_settings.json +msgid "Analytical Accounting" +msgstr "" + #: erpnext/public/js/utils.js:93 msgid "Annual Billing: {0}" msgstr "" @@ -4784,7 +4803,7 @@ msgstr "" msgid "Another Cost Center Allocation record {0} applicable from {1}, hence this allocation will be applicable upto {2}" msgstr "" -#: erpnext/accounts/doctype/payment_request/payment_request.py:758 +#: erpnext/accounts/doctype/payment_request/payment_request.py:883 msgid "Another Payment Request is already processed" msgstr "" @@ -5040,6 +5059,12 @@ msgstr "" msgid "Apply SLA for Resolution Time" msgstr "" +#. Description of the 'Enable Discounts and Margin' (Check) field in DocType +#. 'Accounts Settings' +#: erpnext/accounts/doctype/accounts_settings/accounts_settings.json +msgid "Apply discounts and margins on products" +msgstr "" + #. Label of the apply_restriction_on_values (Check) field in DocType #. 'Accounting Dimension Filter' #: erpnext/accounts/doctype/accounting_dimension_filter/accounting_dimension_filter.json @@ -5775,7 +5800,7 @@ msgstr "" #. Title of a Workspace Sidebar #: erpnext/accounts/doctype/accounts_settings/accounts_settings.json #: erpnext/accounts/doctype/finance_book/finance_book_dashboard.py:9 -#: erpnext/accounts/report/balance_sheet/balance_sheet.py:249 +#: erpnext/accounts/report/balance_sheet/balance_sheet.py:250 #: erpnext/assets/doctype/asset_capitalization/asset_capitalization.json #: erpnext/assets/doctype/asset_movement/asset_movement.json #: erpnext/assets/workspace/assets/assets.json erpnext/desktop_icon/assets.json @@ -5783,6 +5808,11 @@ msgstr "" msgid "Assets" msgstr "" +#. Title of the Module Onboarding 'Asset Onboarding' +#: erpnext/assets/module_onboarding/asset_onboarding/asset_onboarding.json +msgid "Assets Setup" +msgstr "" + #: erpnext/controllers/buying_controller.py:1048 msgid "Assets not created for {item_code}. You will have to create asset manually." msgstr "" @@ -5819,7 +5849,7 @@ msgstr "" msgid "At Row #{0}: The picked quantity {1} for the item {2} is greater than available stock {3} in the warehouse {4}." msgstr "" -#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:1358 +#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:1368 msgid "At Row {0}: In Serial and Batch Bundle {1} must have docstatus as 1 and not 0" msgstr "" @@ -5876,7 +5906,7 @@ msgstr "" msgid "At row #{0}: you have selected the Difference Account {1}, which is a Cost of Goods Sold type account. Please select a different account" msgstr "" -#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:1120 +#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:1130 msgid "At row {0}: Batch No is mandatory for Item {1}" msgstr "" @@ -5884,11 +5914,11 @@ msgstr "" msgid "At row {0}: Parent Row No cannot be set for item {1}" msgstr "" -#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:1105 +#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:1115 msgid "At row {0}: Qty is mandatory for the batch {1}" msgstr "" -#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:1112 +#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:1122 msgid "At row {0}: Serial No is mandatory for Item {1}" msgstr "" @@ -6154,7 +6184,7 @@ msgstr "" msgid "Auto Reserve Stock for Sales Order on Purchase" msgstr "" -#: erpnext/accounts/doctype/accounts_settings/accounts_settings.py:148 +#: erpnext/accounts/doctype/accounts_settings/accounts_settings.py:185 msgid "Auto Tax Settings Error" msgstr "" @@ -6243,6 +6273,12 @@ msgstr "" msgid "Available" msgstr "" +#. Label of the available__future_inventory_section (Section Break) field in +#. DocType 'Bin' +#: erpnext/stock/doctype/bin/bin.json +msgid "Available / Future Inventory" +msgstr "" + #. Label of the actual_batch_qty (Float) field in DocType 'Delivery Note Item' #: erpnext/stock/doctype/delivery_note_item/delivery_note_item.json msgid "Available Batch Qty at From Warehouse" @@ -6376,7 +6412,7 @@ msgstr "" #: erpnext/stock/report/stock_ageing/stock_ageing.py:170 #: erpnext/stock/report/stock_ageing/stock_ageing.py:204 -#: erpnext/stock/report/stock_balance/stock_balance.py:517 +#: erpnext/stock/report/stock_balance/stock_balance.py:548 msgid "Average Age" msgstr "" @@ -6494,7 +6530,7 @@ msgstr "" #: erpnext/selling/doctype/sales_order/sales_order.js:1415 #: erpnext/stock/doctype/material_request/material_request.js:351 #: erpnext/stock/doctype/purchase_receipt_item/purchase_receipt_item.json -#: erpnext/stock/doctype/stock_entry/stock_entry.js:689 +#: erpnext/stock/doctype/stock_entry/stock_entry.js:706 #: erpnext/stock/report/bom_search/bom_search.py:38 #: erpnext/subcontracting/doctype/subcontracting_inward_order_item/subcontracting_inward_order_item.json #: erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.js:525 @@ -6750,7 +6786,7 @@ msgstr "" msgid "BOM and Finished Good Quantity is mandatory for Disassembly" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.js:1327 +#: erpnext/stock/doctype/stock_entry/stock_entry.js:1344 msgid "BOM and Manufacturing Quantity are required" msgstr "" @@ -6761,7 +6797,7 @@ msgid "BOM and Production" msgstr "" #: erpnext/stock/doctype/material_request/material_request.js:386 -#: erpnext/stock/doctype/stock_entry/stock_entry.js:741 +#: erpnext/stock/doctype/stock_entry/stock_entry.js:758 msgid "BOM does not contain any stock item" msgstr "" @@ -6875,7 +6911,7 @@ msgstr "" #: erpnext/stock/report/available_batch_report/available_batch_report.py:63 #: erpnext/stock/report/available_serial_no/available_serial_no.py:126 #: erpnext/stock/report/batch_wise_balance_history/batch_wise_balance_history.py:84 -#: erpnext/stock/report/stock_balance/stock_balance.py:445 +#: erpnext/stock/report/stock_balance/stock_balance.py:476 #: erpnext/stock/report/stock_ledger/stock_ledger.py:251 msgid "Balance Qty" msgstr "" @@ -6940,7 +6976,7 @@ msgstr "" #: erpnext/stock/report/available_serial_no/available_serial_no.py:174 #: erpnext/stock/report/batch_wise_balance_history/batch_wise_balance_history.py:86 -#: erpnext/stock/report/stock_balance/stock_balance.py:452 +#: erpnext/stock/report/stock_balance/stock_balance.py:483 #: erpnext/stock/report/stock_ledger/stock_ledger.py:308 msgid "Balance Value" msgstr "" @@ -7064,7 +7100,7 @@ msgstr "" msgid "Bank Account Type" msgstr "" -#: erpnext/accounts/doctype/bank_transaction/bank_transaction.py:381 +#: erpnext/accounts/doctype/bank_transaction/bank_transaction.py:382 msgid "Bank Account {} in Bank Transaction {} is not matching with Bank Account {}" msgstr "" @@ -7515,7 +7551,7 @@ msgstr "" #: erpnext/manufacturing/doctype/job_card/job_card.json #: erpnext/manufacturing/report/cost_of_poor_quality_report/cost_of_poor_quality_report.js:89 #: erpnext/manufacturing/report/cost_of_poor_quality_report/cost_of_poor_quality_report.py:115 -#: erpnext/public/js/controllers/transaction.js:2833 +#: erpnext/public/js/controllers/transaction.js:2940 #: erpnext/public/js/utils/barcode_scanner.js:281 #: erpnext/public/js/utils/serial_no_batch_selector.js:438 #: erpnext/stock/doctype/delivery_note_item/delivery_note_item.json @@ -7546,19 +7582,19 @@ msgstr "" msgid "Batch No" msgstr "" -#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:1123 +#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:1133 msgid "Batch No is mandatory" msgstr "" -#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:3285 +#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:3321 msgid "Batch No {0} does not exists" msgstr "" -#: erpnext/stock/utils.py:618 +#: erpnext/stock/utils.py:619 msgid "Batch No {0} is linked with Item {1} which has serial no. Please scan serial no instead." msgstr "" -#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:438 +#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:448 msgid "Batch No {0} is not present in the original {1} {2}, hence you can't return it against the {1} {2}" msgstr "" @@ -7573,7 +7609,7 @@ msgstr "" msgid "Batch Nos" msgstr "" -#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:1876 +#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:1886 msgid "Batch Nos are created successfully" msgstr "" @@ -7627,7 +7663,7 @@ msgstr "" msgid "Batch and Serial No" msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.py:896 +#: erpnext/manufacturing/doctype/work_order/work_order.py:897 msgid "Batch not created for item {} since it does not have a batch series." msgstr "" @@ -7710,10 +7746,12 @@ msgstr "" #. Label of a Card Break in the Manufacturing Workspace #. Label of a Link in the Manufacturing Workspace +#. Label of a Workspace Sidebar Item #: erpnext/manufacturing/doctype/bom/bom.py:1318 #: erpnext/manufacturing/workspace/manufacturing/manufacturing.json #: erpnext/stock/doctype/material_request/material_request.js:139 -#: erpnext/stock/doctype/stock_entry/stock_entry.js:675 +#: erpnext/stock/doctype/stock_entry/stock_entry.js:692 +#: erpnext/workspace_sidebar/subcontracting.json msgid "Bill of Materials" msgstr "" @@ -7919,7 +7957,7 @@ msgstr "" msgid "Billing Zipcode" msgstr "" -#: erpnext/accounts/party.py:609 +#: erpnext/accounts/party.py:597 msgid "Billing currency must be equal to either default company's currency or party account currency" msgstr "" @@ -8526,6 +8564,11 @@ msgstr "" msgid "Buying Settings" msgstr "" +#. Title of the Module Onboarding 'Buying Onboarding' +#: erpnext/buying/module_onboarding/buying_onboarding/buying_onboarding.json +msgid "Buying Setup" +msgstr "" + #. Label of the buying_and_selling_tab (Tab Break) field in DocType 'Company' #: erpnext/setup/doctype/company/company.json msgid "Buying and Selling" @@ -8848,7 +8891,7 @@ msgstr "" msgid "Can be approved by {0}" msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.py:2504 +#: erpnext/manufacturing/doctype/work_order/work_order.py:2500 msgid "Can not close Work Order. Since {0} Job Cards are in Work In Progress state." msgstr "" @@ -8877,11 +8920,11 @@ msgid "Can not filter based on Voucher No, if grouped by Voucher" msgstr "" #: erpnext/accounts/doctype/journal_entry/journal_entry.py:1378 -#: erpnext/accounts/doctype/payment_entry/payment_entry.py:2863 +#: erpnext/accounts/doctype/payment_entry/payment_entry.py:2875 msgid "Can only make payment against unbilled {0}" msgstr "" -#: erpnext/accounts/doctype/payment_entry/payment_entry.js:1514 +#: erpnext/accounts/doctype/payment_entry/payment_entry.js:1517 #: erpnext/controllers/accounts_controller.py:3175 #: erpnext/public/js/controllers/accounts.js:103 msgid "Can refer row only if the charge type is 'On Previous Row Amount' or 'Previous Row Total'" @@ -8947,7 +8990,7 @@ msgstr "" msgid "Cannot Optimize Route as Driver Address is Missing." msgstr "" -#: erpnext/setup/doctype/employee/employee.py:182 +#: erpnext/setup/doctype/employee/employee.py:181 msgid "Cannot Relieve Employee" msgstr "" @@ -8955,7 +8998,7 @@ msgstr "" msgid "Cannot Resubmit Ledger entries for vouchers in Closed fiscal year." msgstr "" -#: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py:202 +#: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py:204 msgid "Cannot add child table {0} to deletion list. Child tables are automatically deleted with their parent DocTypes." msgstr "" @@ -8987,7 +9030,7 @@ msgstr "" msgid "Cannot cancel as processing of cancelled documents is pending." msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.py:1081 +#: erpnext/manufacturing/doctype/work_order/work_order.py:1075 msgid "Cannot cancel because submitted Stock Entry {0} exists" msgstr "" @@ -9081,7 +9124,7 @@ msgstr "" msgid "Cannot deduct when category is for 'Valuation' or 'Valuation and Total'" msgstr "" -#: erpnext/accounts/doctype/payment_entry/payment_entry.js:1829 +#: erpnext/accounts/doctype/payment_entry/payment_entry.js:1832 msgid "Cannot delete Exchange Gain/Loss row" msgstr "" @@ -9093,12 +9136,12 @@ msgstr "" msgid "Cannot delete an item which has been ordered" msgstr "" -#: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py:195 -#: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py:780 +#: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py:197 +#: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py:782 msgid "Cannot delete protected core DocType: {0}" msgstr "" -#: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py:211 +#: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py:213 msgid "Cannot delete virtual DocType: {0}. Virtual DocTypes do not have database tables." msgstr "" @@ -9119,6 +9162,10 @@ msgstr "" msgid "Cannot ensure delivery by Serial No as Item {0} is added with and without Ensure Delivery by Serial No." msgstr "" +#: erpnext/accounts/doctype/payment_request/payment_request.js:111 +msgid "Cannot fetch selected rows for submitted Payment Request" +msgstr "" + #: erpnext/public/js/utils/barcode_scanner.js:62 msgid "Cannot find Item or Warehouse with this Barcode" msgstr "" @@ -9131,7 +9178,7 @@ msgstr "" msgid "Cannot find a default warehouse for item {0}. Please set one in the Item Master or in Stock Settings." msgstr "" -#: erpnext/accounts/party.py:1075 +#: erpnext/accounts/party.py:1063 msgid "Cannot merge {0} '{1}' into '{2}' as both have existing accounting entries in different currencies for company '{3}'." msgstr "" @@ -9139,11 +9186,11 @@ msgstr "" msgid "Cannot produce more Item {0} than Sales Order quantity {1} {2}" msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.py:1436 +#: erpnext/manufacturing/doctype/work_order/work_order.py:1426 msgid "Cannot produce more item for {0}" msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.py:1440 +#: erpnext/manufacturing/doctype/work_order/work_order.py:1430 msgid "Cannot produce more than {0} items for {1}" msgstr "" @@ -9155,7 +9202,7 @@ msgstr "" msgid "Cannot reduce quantity than ordered or purchased quantity" msgstr "" -#: erpnext/accounts/doctype/payment_entry/payment_entry.js:1527 +#: erpnext/accounts/doctype/payment_entry/payment_entry.js:1530 #: erpnext/controllers/accounts_controller.py:3190 #: erpnext/public/js/controllers/accounts.js:120 msgid "Cannot refer row number greater than or equal to current row number for this Charge type" @@ -9169,12 +9216,12 @@ msgstr "" msgid "Cannot retrieve link token. Check Error Log for more information" msgstr "" -#: erpnext/accounts/doctype/payment_entry/payment_entry.js:1520 -#: erpnext/accounts/doctype/payment_entry/payment_entry.js:1698 -#: erpnext/accounts/doctype/payment_entry/payment_entry.py:1811 +#: erpnext/accounts/doctype/payment_entry/payment_entry.js:1523 +#: erpnext/accounts/doctype/payment_entry/payment_entry.js:1701 +#: erpnext/accounts/doctype/payment_entry/payment_entry.py:1823 #: erpnext/controllers/accounts_controller.py:3180 #: erpnext/public/js/controllers/accounts.js:112 -#: erpnext/public/js/controllers/taxes_and_totals.js:524 +#: erpnext/public/js/controllers/taxes_and_totals.js:531 msgid "Cannot select charge type as 'On Previous Row Amount' or 'On Previous Row Total' for first row" msgstr "" @@ -9202,11 +9249,11 @@ msgstr "" msgid "Cannot set the field {0} for copying in variants" msgstr "" -#: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py:264 +#: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py:266 msgid "Cannot start deletion. Another deletion {0} is already queued/running. Please wait for it to complete." msgstr "" -#: erpnext/accounts/doctype/payment_entry/payment_entry.py:1921 +#: erpnext/accounts/doctype/payment_entry/payment_entry.py:1933 msgid "Cannot {0} from {1} without any negative outstanding invoice" msgstr "" @@ -9225,12 +9272,6 @@ msgstr "" msgid "Capacity" msgstr "" -#. Label of the capacity_in_days_section (Section Break) field in DocType -#. 'Item' -#: erpnext/stock/doctype/item/item.json -msgid "Capacity (In Days)" -msgstr "" - #: erpnext/stock/page/warehouse_capacity_summary/warehouse_capacity_summary.js:69 msgid "Capacity (Stock UOM)" msgstr "" @@ -9241,7 +9282,7 @@ msgstr "" msgid "Capacity Planning" msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.py:1067 +#: erpnext/manufacturing/doctype/work_order/work_order.py:1061 msgid "Capacity Planning Error, planned start time can not be same as end time" msgstr "" @@ -9598,7 +9639,7 @@ msgstr "" msgid "Change this date manually to setup the next synchronization start date" msgstr "" -#: erpnext/selling/doctype/customer/customer.py:133 +#: erpnext/selling/doctype/customer/customer.py:157 msgid "Changed customer name to '{}' as '{}' already exists." msgstr "" @@ -9620,7 +9661,7 @@ msgstr "" msgid "Channel Partner" msgstr "" -#: erpnext/accounts/doctype/payment_entry/payment_entry.py:2240 +#: erpnext/accounts/doctype/payment_entry/payment_entry.py:2252 #: erpnext/controllers/accounts_controller.py:3243 msgid "Charge of type 'Actual' in row {0} cannot be included in Item Rate or Paid Amount" msgstr "" @@ -9807,7 +9848,7 @@ msgstr "" #. Label of the reference_date (Date) field in DocType 'Payment Entry' #: erpnext/accounts/doctype/payment_entry/payment_entry.json -#: erpnext/public/js/controllers/transaction.js:2744 +#: erpnext/public/js/controllers/transaction.js:2851 msgid "Cheque/Reference Date" msgstr "" @@ -9861,12 +9902,12 @@ msgstr "" #. Label of the child_row_reference (Data) field in DocType 'Quality #. Inspection' -#: erpnext/public/js/controllers/transaction.js:2839 +#: erpnext/public/js/controllers/transaction.js:2946 #: erpnext/stock/doctype/quality_inspection/quality_inspection.json msgid "Child Row Reference" msgstr "" -#: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py:205 +#: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py:207 msgid "Child Table Not Allowed" msgstr "" @@ -10029,7 +10070,7 @@ msgstr "" msgid "Closed Documents" msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.py:2427 +#: erpnext/manufacturing/doctype/work_order/work_order.py:2423 msgid "Closed Work Order can not be stopped or Re-opened" msgstr "" @@ -10042,14 +10083,14 @@ msgstr "" msgid "Closing" msgstr "" -#: erpnext/accounts/report/consolidated_trial_balance/consolidated_trial_balance.py:465 -#: erpnext/accounts/report/trial_balance/trial_balance.py:536 +#: erpnext/accounts/report/consolidated_trial_balance/consolidated_trial_balance.py:445 +#: erpnext/accounts/report/trial_balance/trial_balance.py:544 #: erpnext/accounts/report/trial_balance_for_party/trial_balance_for_party.py:226 msgid "Closing (Cr)" msgstr "" -#: erpnext/accounts/report/consolidated_trial_balance/consolidated_trial_balance.py:458 -#: erpnext/accounts/report/trial_balance/trial_balance.py:529 +#: erpnext/accounts/report/consolidated_trial_balance/consolidated_trial_balance.py:438 +#: erpnext/accounts/report/trial_balance/trial_balance.py:537 #: erpnext/accounts/report/trial_balance_for_party/trial_balance_for_party.py:219 msgid "Closing (Dr)" msgstr "" @@ -10184,8 +10225,8 @@ msgstr "" #. Label of the sales_team_section_break (Section Break) field in DocType 'POS #. Invoice' -#. Label of the sales_team_section_break (Section Break) field in DocType -#. 'Sales Invoice' +#. Label of the commission_section (Section Break) field in DocType 'Sales +#. Invoice' #. Label of the sales_team_section_break (Section Break) field in DocType #. 'Sales Order' #. Label of the sales_team_section_break (Section Break) field in DocType @@ -10261,7 +10302,7 @@ msgstr "" msgid "Communication Medium Type" msgstr "" -#: erpnext/setup/install.py:97 +#: erpnext/setup/install.py:98 msgid "Compact Item Print" msgstr "" @@ -10652,8 +10693,8 @@ msgstr "" #: erpnext/setup/doctype/employee/employee_tree.js:8 #: erpnext/setup/doctype/employee_external_work_history/employee_external_work_history.json #: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.json -#: erpnext/setup/doctype/vehicle/vehicle.json erpnext/setup/install.py:156 -#: erpnext/setup/install.py:165 erpnext/setup/workspace/home/home.json +#: erpnext/setup/doctype/vehicle/vehicle.json erpnext/setup/install.py:157 +#: erpnext/setup/install.py:166 erpnext/setup/workspace/home/home.json #: erpnext/stock/dashboard_chart_source/stock_value_by_item_group/stock_value_by_item_group.js:8 #: erpnext/stock/dashboard_chart_source/warehouse_wise_stock_value/warehouse_wise_stock_value.js:8 #: erpnext/stock/doctype/bin/bin.json @@ -10704,7 +10745,7 @@ msgstr "" #: erpnext/stock/report/stock_analytics/stock_analytics.js:41 #: erpnext/stock/report/stock_and_account_value_comparison/stock_and_account_value_comparison.js:7 #: erpnext/stock/report/stock_balance/stock_balance.js:8 -#: erpnext/stock/report/stock_balance/stock_balance.py:506 +#: erpnext/stock/report/stock_balance/stock_balance.py:537 #: erpnext/stock/report/stock_ledger/stock_ledger.js:8 #: erpnext/stock/report/stock_ledger/stock_ledger.py:358 #: erpnext/stock/report/stock_ledger_variance/stock_ledger_variance.js:18 @@ -10860,7 +10901,7 @@ msgid "Company Field" msgstr "" #. Label of the company_logo (Attach Image) field in DocType 'Company' -#: erpnext/public/js/print.js:64 erpnext/setup/doctype/company/company.json +#: erpnext/public/js/print.js:75 erpnext/setup/doctype/company/company.json msgid "Company Logo" msgstr "" @@ -10891,7 +10932,7 @@ msgid "Company currencies of both the companies should match for Inter Company T msgstr "" #: erpnext/stock/doctype/material_request/material_request.js:380 -#: erpnext/stock/doctype/stock_entry/stock_entry.js:735 +#: erpnext/stock/doctype/stock_entry/stock_entry.js:752 msgid "Company field is required" msgstr "" @@ -11034,7 +11075,7 @@ msgstr "" msgid "Completed Qty" msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.py:1350 +#: erpnext/manufacturing/doctype/work_order/work_order.py:1344 msgid "Completed Qty cannot be greater than 'Qty to Manufacture'" msgstr "" @@ -11130,6 +11171,11 @@ msgstr "" msgid "Conditions will be applied on all the selected items combined. " msgstr "" +#. Label of an action in the Onboarding Step 'Review Chart of Accounts' +#: erpnext/accounts/onboarding_step/chart_of_accounts/chart_of_accounts.json +msgid "Configure Chart of Accounts" +msgstr "" + #: erpnext/public/js/bom_configurator/bom_configurator.bundle.js:56 msgid "Configure Product Assembly" msgstr "" @@ -11273,7 +11319,7 @@ msgstr "" msgid "Consolidated Trial Balance can be generated for Companies having same root Company." msgstr "" -#: erpnext/accounts/report/consolidated_trial_balance/consolidated_trial_balance.py:153 +#: erpnext/accounts/report/consolidated_trial_balance/consolidated_trial_balance.py:157 msgid "Consolidated Trial balance could not be generated as Exchange Rate from {0} to {1} is not available for {2}." msgstr "" @@ -11356,7 +11402,7 @@ msgstr "" msgid "Consumed Qty" msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.py:1729 +#: erpnext/manufacturing/doctype/work_order/work_order.py:1720 msgid "Consumed Qty cannot be greater than Reserved Qty for item {0}" msgstr "" @@ -12252,12 +12298,50 @@ msgstr "" msgid "Cr" msgstr "" +#. Title of an Onboarding Step +#. Label of an action in the Onboarding Step 'Create Asset Category' +#: erpnext/assets/onboarding_step/create_asset_category/create_asset_category.json +msgid "Create Asset Category" +msgstr "" + +#. Title of an Onboarding Step +#. Label of an action in the Onboarding Step 'Create Asset Item' +#: erpnext/assets/onboarding_step/create_asset_item/create_asset_item.json +msgid "Create Asset Item" +msgstr "" + +#. Title of an Onboarding Step +#. Label of an action in the Onboarding Step 'Create Asset Location' +#: erpnext/assets/onboarding_step/create_asset_location/create_asset_location.json +msgid "Create Asset Location" +msgstr "" + +#. Title of an Onboarding Step +#. Label of an action in the Onboarding Step 'Create Bill of Materials' +#: erpnext/manufacturing/onboarding_step/create_bill_of_materials/create_bill_of_materials.json +#: erpnext/subcontracting/onboarding_step/create_bill_of_materials/create_bill_of_materials.json +msgid "Create Bill of Materials" +msgstr "" + #. Label of the create_chart_of_accounts_based_on (Select) field in DocType #. 'Company' #: erpnext/setup/doctype/company/company.json msgid "Create Chart Of Accounts Based On" msgstr "" +#. Title of an Onboarding Step +#. Label of an action in the Onboarding Step 'Create Customer' +#: erpnext/selling/onboarding_step/create_customer/create_customer.json +msgid "Create Customer" +msgstr "" + +#. Title of an Onboarding Step +#. Label of an action in the Onboarding Step 'Create Delivery Note' +#: erpnext/selling/onboarding_step/create_delivery_note/create_delivery_note.json +#: erpnext/stock/onboarding_step/create_delivery_note/create_delivery_note.json +msgid "Create Delivery Note" +msgstr "" + #: erpnext/stock/doctype/delivery_note/delivery_note_list.js:63 msgid "Create Delivery Trip" msgstr "" @@ -12278,6 +12362,22 @@ msgstr "" msgid "Create Employee records." msgstr "" +#. Title of an Onboarding Step +#. Label of an action in the Onboarding Step 'Create Existing Asset' +#: erpnext/assets/onboarding_step/create_existing_asset/create_existing_asset.json +msgid "Create Existing Asset" +msgstr "" + +#. Label of an action in the Onboarding Step 'Create Finished Goods' +#: erpnext/manufacturing/onboarding_step/create_finished_goods/create_finished_goods.json +msgid "Create Finished Good" +msgstr "" + +#. Title of an Onboarding Step +#: erpnext/manufacturing/onboarding_step/create_finished_goods/create_finished_goods.json +msgid "Create Finished Goods" +msgstr "" + #. Label of the is_grouped_asset (Check) field in DocType 'Item' #: erpnext/stock/doctype/item/item.json msgid "Create Grouped Asset" @@ -12291,6 +12391,14 @@ msgstr "" msgid "Create Invoices" msgstr "" +#. Title of an Onboarding Step +#. Label of an action in the Onboarding Step 'Create Item' +#: erpnext/buying/onboarding_step/create_item/create_item.json +#: erpnext/selling/onboarding_step/create_item/create_item.json +#: erpnext/stock/onboarding_step/create_item/create_item.json +msgid "Create Item" +msgstr "" + #: erpnext/manufacturing/doctype/work_order/work_order.js:206 msgid "Create Job Card" msgstr "" @@ -12322,7 +12430,7 @@ msgstr "" msgid "Create Ledger Entries for Change Amount" msgstr "" -#: erpnext/buying/doctype/supplier/supplier.js:218 +#: erpnext/buying/doctype/supplier/supplier.js:216 #: erpnext/selling/doctype/customer/customer.js:285 msgid "Create Link" msgstr "" @@ -12353,6 +12461,16 @@ msgstr "" msgid "Create New Lead" msgstr "" +#. Label of an action in the Onboarding Step 'Create Operations' +#: erpnext/manufacturing/onboarding_step/create_operations/create_operations.json +msgid "Create Operation" +msgstr "" + +#. Title of an Onboarding Step +#: erpnext/manufacturing/onboarding_step/create_operations/create_operations.json +msgid "Create Operations" +msgstr "" + #: erpnext/crm/doctype/lead/lead.js:161 msgid "Create Opportunity" msgstr "" @@ -12361,7 +12479,10 @@ msgstr "" msgid "Create POS Opening Entry" msgstr "" +#. Title of an Onboarding Step +#. Label of an action in the Onboarding Step 'Create Payment Entry' #: erpnext/accounts/doctype/payment_request/payment_request.js:66 +#: erpnext/accounts/onboarding_step/create_payment_entry/create_payment_entry.json msgid "Create Payment Entry" msgstr "" @@ -12369,6 +12490,10 @@ msgstr "" msgid "Create Payment Entry for Consolidated POS Invoices." msgstr "" +#: erpnext/public/js/controllers/transaction.js:513 +msgid "Create Payment Request" +msgstr "" + #: erpnext/manufacturing/doctype/work_order/work_order.js:766 msgid "Create Pick List" msgstr "" @@ -12377,10 +12502,25 @@ msgstr "" msgid "Create Print Format" msgstr "" +#. Title of an Onboarding Step +#. Label of an action in the Onboarding Step 'Create Project' +#: erpnext/projects/onboarding_step/create_project/create_project.json +msgid "Create Project" +msgstr "" + #: erpnext/crm/doctype/lead/lead_list.js:8 msgid "Create Prospect" msgstr "" +#. Title of an Onboarding Step +#. Label of an action in the Onboarding Step 'Create Purchase Invoice' +#: erpnext/buying/onboarding_step/create_purchase_invoice/create_purchase_invoice.json +msgid "Create Purchase Invoice" +msgstr "" + +#. Title of an Onboarding Step +#. Label of an action in the Onboarding Step 'Create Purchase Order' +#: erpnext/buying/onboarding_step/create_purchase_order/create_purchase_order.json #: erpnext/selling/doctype/sales_order/sales_order.js:1668 #: erpnext/utilities/activation.py:106 msgid "Create Purchase Order" @@ -12390,10 +12530,28 @@ msgstr "" msgid "Create Purchase Orders" msgstr "" +#. Title of an Onboarding Step +#. Label of an action in the Onboarding Step 'Create Purchase Receipt' +#: erpnext/stock/onboarding_step/create_purchase_receipt/create_purchase_receipt.json +msgid "Create Purchase Receipt" +msgstr "" + #: erpnext/utilities/activation.py:88 msgid "Create Quotation" msgstr "" +#. Label of an action in the Onboarding Step 'Create Raw Materials' +#: erpnext/manufacturing/onboarding_step/create_raw_materials/create_raw_materials.json +#: erpnext/subcontracting/onboarding_step/create_raw_materials/create_raw_materials.json +msgid "Create Raw Material" +msgstr "" + +#. Title of an Onboarding Step +#: erpnext/manufacturing/onboarding_step/create_raw_materials/create_raw_materials.json +#: erpnext/subcontracting/onboarding_step/create_raw_materials/create_raw_materials.json +msgid "Create Raw Materials" +msgstr "" + #. Label of the create_receiver_list (Button) field in DocType 'SMS Center' #: erpnext/selling/doctype/sms_center/sms_center.json msgid "Create Receiver List" @@ -12408,12 +12566,19 @@ msgstr "" msgid "Create Reposting Entry" msgstr "" +#. Title of an Onboarding Step +#. Label of an action in the Onboarding Step 'Create Sales Invoice' +#: erpnext/accounts/onboarding_step/create_sales_invoice/create_sales_invoice.json #: erpnext/projects/doctype/timesheet/timesheet.js:55 #: erpnext/projects/doctype/timesheet/timesheet.js:231 #: erpnext/projects/doctype/timesheet/timesheet.js:235 +#: erpnext/selling/onboarding_step/create_sales_invoice/create_sales_invoice.json msgid "Create Sales Invoice" msgstr "" +#. Title of an Onboarding Step +#. Label of an action in the Onboarding Step 'Create Sales Order' +#: erpnext/selling/onboarding_step/create_sales_order/create_sales_order.json #: erpnext/utilities/activation.py:97 msgid "Create Sales Order" msgstr "" @@ -12422,23 +12587,75 @@ msgstr "" msgid "Create Sales Orders to help you plan your work and deliver on-time" msgstr "" +#. Title of an Onboarding Step +#. Label of an action in the Onboarding Step 'Create Service Item' +#: erpnext/subcontracting/onboarding_step/create_service_item/create_service_item.json +msgid "Create Service Item" +msgstr "" + #: erpnext/stock/dashboard/item_dashboard.js:283 #: erpnext/stock/doctype/material_request/material_request.js:500 msgid "Create Stock Entry" msgstr "" +#. Title of an Onboarding Step +#. Label of an action in the Onboarding Step 'Create Subcontracted Item' +#: erpnext/subcontracting/onboarding_step/create_subcontracted_item/create_subcontracted_item.json +msgid "Create Subcontracted Item" +msgstr "" + +#. Title of an Onboarding Step +#. Label of an action in the Onboarding Step 'Create Subcontracting Order' +#: erpnext/subcontracting/onboarding_step/create_subcontracting_order/create_subcontracting_order.json +msgid "Create Subcontracting Order" +msgstr "" + +#. Title of an Onboarding Step +#: erpnext/subcontracting/onboarding_step/create_subcontracting_po/create_subcontracting_po.json +msgid "Create Subcontracting PO" +msgstr "" + +#. Label of an action in the Onboarding Step 'Create Subcontracting PO' +#: erpnext/subcontracting/onboarding_step/create_subcontracting_po/create_subcontracting_po.json +msgid "Create Subcontracting Purchase Order" +msgstr "" + +#. Title of an Onboarding Step +#: erpnext/buying/onboarding_step/create_supplier/create_supplier.json +msgid "Create Supplier" +msgstr "" + #: erpnext/buying/doctype/request_for_quotation/request_for_quotation.js:184 msgid "Create Supplier Quotation" msgstr "" +#. Label of an action in the Onboarding Step 'Create Tasks' +#: erpnext/projects/onboarding_step/create_tasks/create_tasks.json +msgid "Create Task" +msgstr "" + +#. Title of an Onboarding Step +#: erpnext/projects/onboarding_step/create_tasks/create_tasks.json +msgid "Create Tasks" +msgstr "" + #: erpnext/setup/doctype/company/company.js:157 msgid "Create Tax Template" msgstr "" +#. Title of an Onboarding Step +#. Label of an action in the Onboarding Step 'Create Timesheet' +#: erpnext/projects/onboarding_step/create_timesheet/create_timesheet.json #: erpnext/utilities/activation.py:128 msgid "Create Timesheet" msgstr "" +#. Title of an Onboarding Step +#. Label of an action in the Onboarding Step 'Create Transfer Entry' +#: erpnext/stock/onboarding_step/create_transfer_entry/create_transfer_entry.json +msgid "Create Transfer Entry" +msgstr "" + #. Label of the create_user (Button) field in DocType 'Employee' #: erpnext/setup/doctype/employee/employee.json #: erpnext/utilities/activation.py:117 @@ -12463,6 +12680,17 @@ msgstr "" msgid "Create Variants" msgstr "" +#. Label of an action in the Onboarding Step 'Setup Warehouse' +#: erpnext/stock/onboarding_step/setup_warehouse/setup_warehouse.json +msgid "Create Warehouses" +msgstr "" + +#. Title of an Onboarding Step +#. Label of an action in the Onboarding Step 'Create Work Order' +#: erpnext/manufacturing/onboarding_step/create_work_order/create_work_order.json +msgid "Create Work Order" +msgstr "" + #: erpnext/manufacturing/doctype/plant_floor/plant_floor.js:10 msgid "Create Workstation" msgstr "" @@ -12472,7 +12700,7 @@ msgstr "" msgid "Create a variant with the template image." msgstr "" -#: erpnext/stock/stock_ledger.py:2013 +#: erpnext/stock/stock_ledger.py:2011 msgid "Create an incoming stock transaction for the Item." msgstr "" @@ -12480,6 +12708,11 @@ msgstr "" msgid "Create customer quotes" msgstr "" +#. Label of an action in the Onboarding Step 'Create Delivery Note' +#: erpnext/selling/onboarding_step/create_delivery_note/create_delivery_note.json +msgid "Create delivery note" +msgstr "" + #. Label of the create_pr_in_draft_status (Check) field in DocType 'Accounts #. Settings' #: erpnext/accounts/doctype/accounts_settings/accounts_settings.json @@ -12492,6 +12725,11 @@ msgstr "" msgid "Create missing customer or supplier." msgstr "" +#. Label of an action in the Onboarding Step 'Create Supplier' +#: erpnext/buying/onboarding_step/create_supplier/create_supplier.json +msgid "Create supplier" +msgstr "" + #: erpnext/public/js/bulk_transaction_processing.js:14 msgid "Create {0} {1} ?" msgstr "" @@ -12539,7 +12777,7 @@ msgid "Creating Purchase Order ..." msgstr "" #: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js:704 -#: erpnext/buying/doctype/purchase_order/purchase_order.js:518 +#: erpnext/buying/doctype/purchase_order/purchase_order.js:497 #: erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.js:73 msgid "Creating Purchase Receipt ..." msgstr "" @@ -12557,7 +12795,7 @@ msgstr "" msgid "Creating Subcontracting Inward Order ..." msgstr "" -#: erpnext/buying/doctype/purchase_order/purchase_order.js:533 +#: erpnext/buying/doctype/purchase_order/purchase_order.js:512 msgid "Creating Subcontracting Order ..." msgstr "" @@ -12604,11 +12842,11 @@ msgstr "" #: erpnext/accounts/report/bank_reconciliation_statement/bank_reconciliation_statement.html:11 #: erpnext/accounts/report/bank_reconciliation_statement/bank_reconciliation_statement.py:84 #: erpnext/accounts/report/cheques_and_deposits_incorrectly_cleared/cheques_and_deposits_incorrectly_cleared.py:146 -#: erpnext/accounts/report/consolidated_trial_balance/consolidated_trial_balance.py:451 +#: erpnext/accounts/report/consolidated_trial_balance/consolidated_trial_balance.py:431 #: erpnext/accounts/report/general_ledger/general_ledger.html:93 #: erpnext/accounts/report/purchase_register/purchase_register.py:241 #: erpnext/accounts/report/sales_register/sales_register.py:277 -#: erpnext/accounts/report/trial_balance/trial_balance.py:522 +#: erpnext/accounts/report/trial_balance/trial_balance.py:530 #: erpnext/accounts/report/trial_balance_for_party/trial_balance_for_party.py:212 #: erpnext/accounts/report/voucher_wise_balance/voucher_wise_balance.py:34 msgid "Credit" @@ -12622,7 +12860,7 @@ msgstr "" msgid "Credit ({0})" msgstr "" -#: erpnext/accounts/doctype/journal_entry/journal_entry.js:641 +#: erpnext/accounts/doctype/journal_entry/journal_entry.js:637 msgid "Credit Account" msgstr "" @@ -12700,7 +12938,7 @@ msgstr "" msgid "Credit Limit" msgstr "" -#: erpnext/selling/doctype/customer/customer.py:606 +#: erpnext/selling/doctype/customer/customer.py:630 msgid "Credit Limit Crossed" msgstr "" @@ -12793,16 +13031,16 @@ msgstr "" msgid "Credit in Company Currency" msgstr "" -#: erpnext/selling/doctype/customer/customer.py:572 -#: erpnext/selling/doctype/customer/customer.py:627 +#: erpnext/selling/doctype/customer/customer.py:596 +#: erpnext/selling/doctype/customer/customer.py:651 msgid "Credit limit has been crossed for customer {0} ({1}/{2})" msgstr "" -#: erpnext/selling/doctype/customer/customer.py:358 +#: erpnext/selling/doctype/customer/customer.py:382 msgid "Credit limit is already defined for the Company {0}" msgstr "" -#: erpnext/selling/doctype/customer/customer.py:626 +#: erpnext/selling/doctype/customer/customer.py:650 msgid "Credit limit reached for customer {0}" msgstr "" @@ -12857,7 +13095,7 @@ msgstr "" msgid "Criteria weights must add up to 100%" msgstr "" -#: erpnext/accounts/doctype/accounts_settings/accounts_settings.py:135 +#: erpnext/accounts/doctype/accounts_settings/accounts_settings.py:172 msgid "Cron Interval should be between 1 and 59 Min" msgstr "" @@ -12984,9 +13222,9 @@ msgstr "" msgid "Currency filters are currently unsupported in Custom Financial Report." msgstr "" -#: erpnext/accounts/doctype/payment_entry/payment_entry.py:1588 -#: erpnext/accounts/doctype/payment_entry/payment_entry.py:1656 -#: erpnext/accounts/utils.py:2455 +#: erpnext/accounts/doctype/payment_entry/payment_entry.py:1600 +#: erpnext/accounts/doctype/payment_entry/payment_entry.py:1668 +#: erpnext/accounts/utils.py:2456 msgid "Currency for {0} must be {1}" msgstr "" @@ -13132,11 +13370,6 @@ msgstr "" msgid "Current Stock" msgstr "" -#. Label of the current_time (Int) field in DocType 'Job Card' -#: erpnext/manufacturing/doctype/job_card/job_card.json -msgid "Current Time" -msgstr "" - #. Label of the current_valuation_rate (Currency) field in DocType 'Stock #. Reconciliation Item' #: erpnext/stock/doctype/stock_reconciliation_item/stock_reconciliation_item.json @@ -13278,7 +13511,7 @@ msgstr "" #: erpnext/accounts/report/sales_register/sales_register.py:187 #: erpnext/assets/doctype/asset/asset.json #: erpnext/buying/doctype/purchase_order/purchase_order.json -#: erpnext/buying/doctype/supplier/supplier.js:186 +#: erpnext/buying/doctype/supplier/supplier.js:184 #: erpnext/crm/doctype/contract/contract.json #: erpnext/crm/doctype/lead/lead.js:32 #: erpnext/crm/doctype/opportunity/opportunity.js:99 @@ -13731,7 +13964,7 @@ msgstr "" #. Label of the customer_pos_id (Data) field in DocType 'Customer' #: erpnext/selling/doctype/customer/customer.json -msgid "Customer POS id" +msgid "Customer POS ID" msgstr "" #. Label of the portal_users (Table) field in DocType 'Customer' @@ -14018,7 +14251,7 @@ msgstr "" msgid "Date of Birth" msgstr "" -#: erpnext/setup/doctype/employee/employee.py:147 +#: erpnext/setup/doctype/employee/employee.py:146 msgid "Date of Birth cannot be greater than today." msgstr "" @@ -14173,11 +14406,11 @@ msgstr "" #: erpnext/accounts/report/bank_reconciliation_statement/bank_reconciliation_statement.html:10 #: erpnext/accounts/report/bank_reconciliation_statement/bank_reconciliation_statement.py:77 #: erpnext/accounts/report/cheques_and_deposits_incorrectly_cleared/cheques_and_deposits_incorrectly_cleared.py:139 -#: erpnext/accounts/report/consolidated_trial_balance/consolidated_trial_balance.py:444 +#: erpnext/accounts/report/consolidated_trial_balance/consolidated_trial_balance.py:424 #: erpnext/accounts/report/general_ledger/general_ledger.html:92 #: erpnext/accounts/report/purchase_register/purchase_register.py:240 #: erpnext/accounts/report/sales_register/sales_register.py:276 -#: erpnext/accounts/report/trial_balance/trial_balance.py:515 +#: erpnext/accounts/report/trial_balance/trial_balance.py:523 #: erpnext/accounts/report/trial_balance_for_party/trial_balance_for_party.py:205 #: erpnext/accounts/report/voucher_wise_balance/voucher_wise_balance.py:27 msgid "Debit" @@ -14197,7 +14430,7 @@ msgstr "" msgid "Debit / Credit Note Posting Date" msgstr "" -#: erpnext/accounts/doctype/journal_entry/journal_entry.js:631 +#: erpnext/accounts/doctype/journal_entry/journal_entry.js:627 msgid "Debit Account" msgstr "" @@ -14311,11 +14544,11 @@ msgstr "" msgid "Debtor Turnover Ratio" msgstr "" -#: erpnext/accounts/party.py:616 +#: erpnext/accounts/party.py:604 msgid "Debtor/Creditor" msgstr "" -#: erpnext/accounts/party.py:619 +#: erpnext/accounts/party.py:607 msgid "Debtor/Creditor Advance" msgstr "" @@ -14444,7 +14677,7 @@ msgstr "" msgid "Default BOM ({0}) must be active for this item or its template" msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.py:2229 +#: erpnext/manufacturing/doctype/work_order/work_order.py:2220 msgid "Default BOM for {0} not found" msgstr "" @@ -14452,7 +14685,7 @@ msgstr "" msgid "Default BOM not found for FG Item {0}" msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.py:2226 +#: erpnext/manufacturing/doctype/work_order/work_order.py:2217 msgid "Default BOM not found for Item {0} and Project {1}" msgstr "" @@ -14814,11 +15047,14 @@ msgstr "" msgid "Default Valuation Method" msgstr "" +#. Label of the default_warehouse_section (Section Break) field in DocType +#. 'BOM' #. Label of the default_warehouse (Link) field in DocType 'Item Default' #. Label of the section_break_jwgn (Section Break) field in DocType 'Stock #. Entry' #. Label of the set_warehouse (Link) field in DocType 'Stock Reconciliation' #. Label of the default_warehouse (Link) field in DocType 'Stock Settings' +#: erpnext/manufacturing/doctype/bom/bom.json #: erpnext/stock/doctype/item_default/item_default.json #: erpnext/stock/doctype/stock_entry/stock_entry.json #: erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.json @@ -15028,8 +15264,8 @@ msgstr "" msgid "Deleting {0} and all associated Common Code documents..." msgstr "" -#: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py:1097 -#: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py:1116 +#: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py:1099 +#: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py:1118 msgid "Deletion in Progress!" msgstr "" @@ -15894,7 +16130,7 @@ msgstr "" msgid "Disabled Account Selected" msgstr "" -#: erpnext/stock/utils.py:422 +#: erpnext/stock/utils.py:423 msgid "Disabled Warehouse {0} cannot be used for this transaction." msgstr "" @@ -16142,7 +16378,7 @@ msgstr "" msgid "Discount must be less than 100" msgstr "" -#: erpnext/accounts/doctype/payment_entry/payment_entry.py:3341 +#: erpnext/accounts/doctype/payment_entry/payment_entry.py:3353 msgid "Discount of {} applied as per Payment Term" msgstr "" @@ -16490,8 +16726,8 @@ msgstr "" msgid "Do you want to submit the stock entry?" msgstr "" -#: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py:180 -#: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py:443 +#: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py:182 +#: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py:445 msgid "DocType {0} does not exist" msgstr "" @@ -16542,7 +16778,7 @@ msgstr "" msgid "Document Type already used as a dimension" msgstr "" -#: erpnext/setup/install.py:188 +#: erpnext/setup/install.py:189 msgid "Documentation" msgstr "" @@ -16725,11 +16961,11 @@ msgstr "" msgid "Drops existing SQL Procedures and Function setup by Accounts Receivable report" msgstr "" -#: erpnext/accounts/party.py:702 +#: erpnext/accounts/party.py:690 msgid "Due Date cannot be after {0}" msgstr "" -#: erpnext/accounts/party.py:678 +#: erpnext/accounts/party.py:666 msgid "Due Date cannot be before {0}" msgstr "" @@ -16792,7 +17028,7 @@ msgstr "" msgid "Duplicate Customer Group" msgstr "" -#: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py:188 +#: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py:190 msgid "Duplicate DocType" msgstr "" @@ -16826,6 +17062,10 @@ msgstr "" msgid "Duplicate POS Invoices found" msgstr "" +#: erpnext/accounts/doctype/payment_request/payment_request.py:133 +msgid "Duplicate Payment Schedule selected" +msgstr "" + #: erpnext/projects/doctype/project/project.js:83 msgid "Duplicate Project with Tasks" msgstr "" @@ -16850,7 +17090,7 @@ msgstr "" msgid "Duplicate entry against the item code {0} and manufacturer {1}" msgstr "" -#: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py:187 +#: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py:189 msgid "Duplicate entry: {0}{1}" msgstr "" @@ -16962,7 +17202,7 @@ msgstr "" msgid "Earliest" msgstr "" -#: erpnext/stock/report/stock_balance/stock_balance.py:518 +#: erpnext/stock/report/stock_balance/stock_balance.py:549 msgid "Earliest Age" msgstr "" @@ -17358,10 +17598,14 @@ msgstr "" msgid "Employee User Id" msgstr "" -#: erpnext/setup/doctype/employee/employee.py:214 +#: erpnext/setup/doctype/employee/employee.py:213 msgid "Employee cannot report to himself." msgstr "" +#: erpnext/setup/doctype/employee/employee.py:445 +msgid "Employee is required" +msgstr "" + #: erpnext/assets/doctype/asset_movement/asset_movement.py:109 msgid "Employee is required while issuing Asset {0}" msgstr "" @@ -17371,10 +17615,14 @@ msgstr "" msgid "Employee {0} does not belong to the company {1}" msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.py:359 +#: erpnext/manufacturing/doctype/job_card/job_card.py:357 msgid "Employee {0} is currently working on another workstation. Please assign another employee." msgstr "" +#: erpnext/setup/doctype/employee/employee.py:470 +msgid "Employee {0} not found" +msgstr "" + #: erpnext/manufacturing/doctype/workstation/workstation.js:351 msgid "Employees" msgstr "" @@ -17383,7 +17631,7 @@ msgstr "" msgid "Empty" msgstr "" -#: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py:752 +#: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py:754 msgid "Empty To Delete List" msgstr "" @@ -17392,6 +17640,12 @@ msgstr "" msgid "Ems(Pica)" msgstr "" +#. Label of the enable_accounting_dimensions (Check) field in DocType 'Accounts +#. Settings' +#: erpnext/accounts/doctype/accounts_settings/accounts_settings.json +msgid "Enable Accounting Dimensions" +msgstr "" + #: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1721 msgid "Enable Allow Partial Reservation in the Stock Settings to reserve partial stock." msgstr "" @@ -17461,6 +17715,12 @@ msgstr "" msgid "Enable Discount Accounting for Selling" msgstr "" +#. Label of the enable_discounts_and_margin (Check) field in DocType 'Accounts +#. Settings' +#: erpnext/accounts/doctype/accounts_settings/accounts_settings.json +msgid "Enable Discounts and Margin" +msgstr "" + #. Label of the enable_european_access (Check) field in DocType 'Plaid #. Settings' #: erpnext/erpnext_integrations/doctype/plaid_settings/plaid_settings.json @@ -17491,6 +17751,12 @@ msgstr "" msgid "Enable Item-wise Inventory Account" msgstr "" +#. Label of the enable_loyalty_point_program (Check) field in DocType 'Accounts +#. Settings' +#: erpnext/accounts/doctype/accounts_settings/accounts_settings.json +msgid "Enable Loyalty Point Program" +msgstr "" + #. Label of the enable_parallel_reposting (Check) field in DocType 'Stock #. Reposting Settings' #: erpnext/stock/doctype/stock_reposting_settings/stock_reposting_settings.json @@ -17508,18 +17774,40 @@ msgstr "" msgid "Enable Provisional Accounting For Non Stock Items" msgstr "" +#. Label of the enable_separate_reposting_for_gl (Check) field in DocType +#. 'Stock Reposting Settings' +#: erpnext/stock/doctype/stock_reposting_settings/stock_reposting_settings.json +msgid "Enable Separate Reposting for GL" +msgstr "" + #. Label of the enable_stock_reservation (Check) field in DocType 'Stock #. Settings' #: erpnext/stock/doctype/stock_settings/stock_settings.json msgid "Enable Stock Reservation" msgstr "" +#. Label of the enable_utm (Check) field in DocType 'Selling Settings' +#: erpnext/selling/doctype/selling_settings/selling_settings.json +msgid "Enable UTM" +msgstr "" + +#. Description of the 'Enable UTM' (Check) field in DocType 'Selling Settings' +#: erpnext/selling/doctype/selling_settings/selling_settings.json +msgid "Enable Urchin Tracking Module parameters in Quotation, Sales Order, Sales Invoice, POS Invoice, Lead, and Delivery Note." +msgstr "" + #. Label of the enable_youtube_tracking (Check) field in DocType 'Video #. Settings' #: erpnext/utilities/doctype/video_settings/video_settings.json msgid "Enable YouTube Tracking" msgstr "" +#. Description of the 'Enable Accounting Dimensions' (Check) field in DocType +#. 'Accounts Settings' +#: erpnext/accounts/doctype/accounts_settings/accounts_settings.json +msgid "Enable cost center, projects and other custom accounting dimensions" +msgstr "" + #. Description of the 'Consider Rejected Warehouses' (Check) field in DocType #. 'Pick List' #: erpnext/stock/doctype/pick_list/pick_list.json @@ -17541,6 +17829,12 @@ msgstr "" msgid "Enable to apply SLA on every {0}" msgstr "" +#. Label of the enable_tracking_sales_commissions (Check) field in DocType +#. 'Selling Settings' +#: erpnext/selling/doctype/selling_settings/selling_settings.json +msgid "Enable tracking sales commissions" +msgstr "" + #. Description of the 'Fetch Timesheet in Sales Invoice' (Check) field in #. DocType 'Projects Settings' #: erpnext/projects/doctype/projects_settings/projects_settings.json @@ -17664,7 +17958,7 @@ msgstr "" msgid "Enter API key in Google Settings." msgstr "" -#: erpnext/public/js/print.js:51 +#: erpnext/public/js/print.js:62 msgid "Enter Company Details" msgstr "" @@ -17802,7 +18096,7 @@ msgstr "" #: erpnext/accounts/doctype/ledger_merge/ledger_merge.json #: erpnext/accounts/report/account_balance/account_balance.js:29 #: erpnext/accounts/report/account_balance/account_balance.js:45 -#: erpnext/accounts/report/balance_sheet/balance_sheet.py:253 +#: erpnext/accounts/report/balance_sheet/balance_sheet.py:254 #: erpnext/setup/setup_wizard/operations/install_fixtures.py:306 msgid "Equity" msgstr "" @@ -17854,7 +18148,7 @@ msgstr "" msgid "Error while processing deferred accounting for {0}" msgstr "" -#: erpnext/stock/doctype/repost_item_valuation/repost_item_valuation.py:523 +#: erpnext/stock/doctype/repost_item_valuation/repost_item_valuation.py:531 msgid "Error while reposting item valuation" msgstr "" @@ -17865,7 +18159,7 @@ msgid "" "\t\t\t\t\tPlease correct the dates accordingly." msgstr "" -#: erpnext/accounts/doctype/payment_entry/payment_entry.js:983 +#: erpnext/accounts/doctype/payment_entry/payment_entry.js:987 msgid "Error: {0} is mandatory field" msgstr "" @@ -17927,7 +18221,7 @@ msgstr "" msgid "Example: ABCD.#####. If series is set and Batch No is not mentioned in transactions, then automatic batch number will be created based on this series. If you always want to explicitly mention Batch No for this item, leave this blank. Note: this setting will take priority over the Naming Series Prefix in Stock Settings." msgstr "" -#: erpnext/stock/stock_ledger.py:2279 +#: erpnext/stock/stock_ledger.py:2275 msgid "Example: Serial No {0} reserved in {1}." msgstr "" @@ -17941,7 +18235,7 @@ msgstr "" msgid "Excess Materials Consumed" msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.py:1117 +#: erpnext/manufacturing/doctype/job_card/job_card.py:1115 msgid "Excess Transfer" msgstr "" @@ -18082,7 +18376,7 @@ msgstr "" msgid "Excise Entry" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.js:1395 +#: erpnext/stock/doctype/stock_entry/stock_entry.js:1412 msgid "Excise Invoice" msgstr "" @@ -18268,7 +18562,7 @@ msgstr "" #: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:605 #: erpnext/accounts/report/account_balance/account_balance.js:28 #: erpnext/accounts/report/deferred_revenue_and_expense/deferred_revenue_and_expense.js:89 -#: erpnext/accounts/report/profit_and_loss_statement/profit_and_loss_statement.py:182 +#: erpnext/accounts/report/profit_and_loss_statement/profit_and_loss_statement.py:183 #: erpnext/accounts/report/profitability_analysis/profitability_analysis.py:199 msgid "Expense" msgstr "" @@ -18441,7 +18735,7 @@ msgstr "" msgid "Extra Consumed Qty" msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.py:256 +#: erpnext/manufacturing/doctype/job_card/job_card.py:254 msgid "Extra Job Card Quantity" msgstr "" @@ -18656,16 +18950,10 @@ msgid "Fetch Value From" msgstr "" #: erpnext/stock/doctype/material_request/material_request.js:372 -#: erpnext/stock/doctype/stock_entry/stock_entry.js:712 +#: erpnext/stock/doctype/stock_entry/stock_entry.js:729 msgid "Fetch exploded BOM (including sub-assemblies)" msgstr "" -#. Description of the 'Get Items from Open Material Requests' (Button) field in -#. DocType 'Purchase Order' -#: erpnext/buying/doctype/purchase_order/purchase_order.json -msgid "Fetch items based on Default Supplier." -msgstr "" - #: erpnext/selling/page/point_of_sale/pos_item_details.js:455 msgid "Fetched only {0} available serial numbers." msgstr "" @@ -18683,7 +18971,7 @@ msgid "Fetching Sales Orders..." msgstr "" #: erpnext/accounts/doctype/dunning/dunning.js:135 -#: erpnext/public/js/controllers/transaction.js:1489 +#: erpnext/public/js/controllers/transaction.js:1588 msgid "Fetching exchange rates ..." msgstr "" @@ -18691,7 +18979,7 @@ msgstr "" msgid "Fetching..." msgstr "" -#: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py:222 +#: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py:224 msgid "Field '{0}' is not a valid Company link field for DocType {1}" msgstr "" @@ -18713,15 +19001,15 @@ msgstr "" msgid "Fields will be copied over only at time of creation." msgstr "" -#: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py:1064 +#: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py:1066 msgid "File does not belong to this Transaction Deletion Record" msgstr "" -#: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py:1058 +#: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py:1060 msgid "File not found" msgstr "" -#: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py:1072 +#: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py:1074 msgid "File not found on server" msgstr "" @@ -19180,7 +19468,7 @@ msgstr "" msgid "Fiscal Year Details" msgstr "" -#: erpnext/accounts/doctype/fiscal_year/fiscal_year.py:47 +#: erpnext/accounts/doctype/fiscal_year/fiscal_year.py:53 msgid "Fiscal Year End Date should be one year after Fiscal Year Start Date" msgstr "" @@ -19324,7 +19612,7 @@ msgstr "" msgid "Following Material Requests have been raised automatically based on Item's re-order level" msgstr "" -#: erpnext/selling/doctype/customer/customer.py:797 +#: erpnext/selling/doctype/customer/customer.py:821 msgid "Following fields are mandatory to create address:" msgstr "" @@ -19496,7 +19784,7 @@ msgstr "" msgid "For operation {0} at row {1}, please add raw materials or set a BOM against it." msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.py:2574 +#: erpnext/manufacturing/doctype/work_order/work_order.py:2570 msgid "For operation {0}: Quantity ({1}) can not be greater than pending quantity({2})" msgstr "" @@ -19522,7 +19810,7 @@ msgstr "" msgid "For reference" msgstr "" -#: erpnext/accounts/doctype/payment_entry/payment_entry.js:1549 +#: erpnext/accounts/doctype/payment_entry/payment_entry.js:1552 #: erpnext/public/js/controllers/accounts.js:204 msgid "For row {0} in {1}. To include {2} in Item rate, rows {3} must also be included" msgstr "" @@ -19550,7 +19838,7 @@ msgstr "" msgid "For the item {0}, the consumed quantity should be {1} according to the BOM {2}." msgstr "" -#: erpnext/public/js/controllers/transaction.js:1299 +#: erpnext/public/js/controllers/transaction.js:1398 msgctxt "Clear payment terms template and/or payment schedule when due date is changed" msgid "For the new {0} to take effect, would you like to clear the current {1}?" msgstr "" @@ -19587,8 +19875,8 @@ msgstr "" msgid "Forecasting" msgstr "" -#: erpnext/accounts/report/consolidated_trial_balance/consolidated_trial_balance.py:280 -#: erpnext/accounts/report/consolidated_trial_balance/consolidated_trial_balance.py:281 +#: erpnext/accounts/report/consolidated_trial_balance/consolidated_trial_balance.py:254 +#: erpnext/accounts/report/consolidated_trial_balance/consolidated_trial_balance.py:255 #: erpnext/accounts/report/consolidated_trial_balance/test_consolidated_trial_balance.py:88 msgid "Foreign Currency Translation Reserve" msgstr "" @@ -19627,7 +19915,7 @@ msgstr "" msgid "Forum URL" msgstr "" -#: erpnext/setup/install.py:200 +#: erpnext/setup/install.py:201 msgid "Frappe School" msgstr "" @@ -19841,11 +20129,6 @@ msgstr "" msgid "From Invoice Date" msgstr "" -#. Label of the lead_name (Link) field in DocType 'Customer' -#: erpnext/selling/doctype/customer/customer.json -msgid "From Lead" -msgstr "" - #. Label of the from_no (Int) field in DocType 'Share Balance' #. Label of the from_no (Int) field in DocType 'Share Transfer' #: erpnext/accounts/doctype/share_balance/share_balance.json @@ -19853,11 +20136,6 @@ msgstr "" msgid "From No" msgstr "" -#. Label of the opportunity_name (Link) field in DocType 'Customer' -#: erpnext/selling/doctype/customer/customer.json -msgid "From Opportunity" -msgstr "" - #. Label of the from_case_no (Int) field in DocType 'Packing Slip' #: erpnext/stock/doctype/packing_slip/packing_slip.json msgid "From Package No." @@ -19877,11 +20155,6 @@ msgstr "" msgid "From Posting Date" msgstr "" -#. Label of the prospect_name (Link) field in DocType 'Customer' -#: erpnext/selling/doctype/customer/customer.json -msgid "From Prospect" -msgstr "" - #. Label of the from_range (Float) field in DocType 'Item Attribute' #. Label of the from_range (Float) field in DocType 'Item Variant Attribute' #: erpnext/stock/doctype/item_attribute/item_attribute.json @@ -20290,7 +20563,7 @@ msgstr "" msgid "General Ledger" msgstr "" -#: erpnext/stock/doctype/warehouse/warehouse.js:77 +#: erpnext/stock/doctype/warehouse/warehouse.js:82 msgctxt "Warehouse" msgid "General Ledger" msgstr "" @@ -20349,7 +20622,7 @@ msgstr "" msgid "Generate To Delete List" msgstr "" -#: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py:470 +#: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py:472 msgid "Generate To Delete list first" msgstr "" @@ -20454,8 +20727,8 @@ msgstr "" #: erpnext/accounts/doctype/sales_invoice/sales_invoice.js:325 #: erpnext/accounts/doctype/sales_invoice/sales_invoice.js:359 #: erpnext/accounts/doctype/sales_invoice/sales_invoice.js:1125 -#: erpnext/buying/doctype/purchase_order/purchase_order.js:561 -#: erpnext/buying/doctype/purchase_order/purchase_order.js:584 +#: erpnext/buying/doctype/purchase_order/purchase_order.js:540 +#: erpnext/buying/doctype/purchase_order/purchase_order.js:563 #: erpnext/buying/doctype/request_for_quotation/request_for_quotation.js:376 #: erpnext/buying/doctype/request_for_quotation/request_for_quotation.js:398 #: erpnext/buying/doctype/request_for_quotation/request_for_quotation.js:443 @@ -20480,7 +20753,7 @@ msgstr "" #: erpnext/stock/doctype/stock_entry/stock_entry.js:398 #: erpnext/stock/doctype/stock_entry/stock_entry.js:431 #: erpnext/stock/doctype/stock_entry/stock_entry.js:522 -#: erpnext/stock/doctype/stock_entry/stock_entry.js:679 +#: erpnext/stock/doctype/stock_entry/stock_entry.js:696 #: erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.js:164 msgid "Get Items From" msgstr "" @@ -20496,8 +20769,8 @@ msgid "Get Items for Purchase Only" msgstr "" #: erpnext/stock/doctype/material_request/material_request.js:346 -#: erpnext/stock/doctype/stock_entry/stock_entry.js:715 -#: erpnext/stock/doctype/stock_entry/stock_entry.js:728 +#: erpnext/stock/doctype/stock_entry/stock_entry.js:732 +#: erpnext/stock/doctype/stock_entry/stock_entry.js:745 msgid "Get Items from BOM" msgstr "" @@ -20505,12 +20778,6 @@ msgstr "" msgid "Get Items from Material Requests against this Supplier" msgstr "" -#. Label of the get_items_from_open_material_requests (Button) field in DocType -#. 'Purchase Order' -#: erpnext/buying/doctype/purchase_order/purchase_order.json -msgid "Get Items from Open Material Requests" -msgstr "" - #: erpnext/public/js/controllers/buying.js:604 msgid "Get Items from Product Bundle" msgstr "" @@ -20597,10 +20864,6 @@ msgstr "" msgid "Get Sub Assembly Items" msgstr "" -#: erpnext/buying/doctype/supplier/supplier.js:115 -msgid "Get Supplier Group Details" -msgstr "" - #: erpnext/buying/doctype/request_for_quotation/request_for_quotation.js:457 #: erpnext/buying/doctype/request_for_quotation/request_for_quotation.js:477 msgid "Get Suppliers" @@ -20763,6 +21026,7 @@ msgstr "" #. Option for the 'Apply Discount On' (Select) field in DocType 'Pricing Rule' #. Option for the 'Apply Additional Discount On' (Select) field in DocType #. 'Purchase Invoice' +#. Label of the base_grand_total (Currency) field in DocType 'Purchase Invoice' #. Label of the grand_total (Currency) field in DocType 'Purchase Invoice' #. Option for the 'Apply Additional Discount On' (Select) field in DocType #. 'Sales Invoice' @@ -20771,6 +21035,7 @@ msgstr "" #. 'Subscription' #. Option for the 'Apply Additional Discount On' (Select) field in DocType #. 'Purchase Order' +#. Label of the base_grand_total (Currency) field in DocType 'Purchase Order' #. Label of the grand_total (Currency) field in DocType 'Purchase Order' #. Option for the 'Apply Additional Discount On' (Select) field in DocType #. 'Supplier Quotation' @@ -20782,16 +21047,19 @@ msgstr "" #. Label of the grand_total (Currency) field in DocType 'Quotation' #. Option for the 'Apply Additional Discount On' (Select) field in DocType #. 'Sales Order' +#. Label of the base_grand_total (Currency) field in DocType 'Sales Order' #. Label of the grand_total (Currency) field in DocType 'Sales Order' #. Option for the 'Based On' (Select) field in DocType 'Authorization Rule' #. Option for the 'Apply Additional Discount On' (Select) field in DocType #. 'Delivery Note' +#. Label of the base_grand_total (Currency) field in DocType 'Delivery Note' #. Label of the grand_total (Currency) field in DocType 'Delivery Note' #. Label of the grand_total (Currency) field in DocType 'Delivery Stop' #. Label of the grand_total (Currency) field in DocType 'Landed Cost Purchase #. Receipt' #. Option for the 'Apply Additional Discount On' (Select) field in DocType #. 'Purchase Receipt' +#. Label of the base_grand_total (Currency) field in DocType 'Purchase Receipt' #. Label of the grand_total (Currency) field in DocType 'Purchase Receipt' #: erpnext/accounts/doctype/dunning/dunning.json #: erpnext/accounts/doctype/payment_entry_reference/payment_entry_reference.json @@ -20826,26 +21094,19 @@ msgstr "" msgid "Grand Total" msgstr "" -#. Label of the base_grand_total (Currency) field in DocType 'POS Invoice' -#. Label of the base_grand_total (Currency) field in DocType 'Purchase Invoice' #. Label of the base_grand_total (Currency) field in DocType 'Sales Invoice' -#. Label of the base_grand_total (Currency) field in DocType 'Purchase Order' +#: erpnext/accounts/doctype/sales_invoice/sales_invoice.json +msgid "Grand Total (Company Currency" +msgstr "" + +#. Label of the base_grand_total (Currency) field in DocType 'POS Invoice' #. Label of the base_grand_total (Currency) field in DocType 'Supplier #. Quotation' #. Label of the base_grand_total (Currency) field in DocType 'Quotation' -#. Label of the base_grand_total (Currency) field in DocType 'Sales Order' -#. Label of the base_grand_total (Currency) field in DocType 'Delivery Note' -#. Label of the base_grand_total (Currency) field in DocType 'Purchase Receipt' #: erpnext/accounts/doctype/pos_invoice/pos_invoice.json -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json -#: erpnext/accounts/doctype/sales_invoice/sales_invoice.json #: erpnext/accounts/report/tax_withholding_details/tax_withholding_details.py:169 -#: erpnext/buying/doctype/purchase_order/purchase_order.json #: erpnext/buying/doctype/supplier_quotation/supplier_quotation.json #: erpnext/selling/doctype/quotation/quotation.json -#: erpnext/selling/doctype/sales_order/sales_order.json -#: erpnext/stock/doctype/delivery_note/delivery_note.json -#: erpnext/stock/doctype/purchase_receipt/purchase_receipt.json msgid "Grand Total (Company Currency)" msgstr "" @@ -20853,6 +21114,10 @@ msgstr "" msgid "Grand Total (Transaction Currency)" msgstr "" +#: erpnext/accounts/doctype/payment_request/payment_request.py:125 +msgid "Grand Total must match sum of Payment References" +msgstr "" + #. Label of the grant_commission (Check) field in DocType 'POS Invoice Item' #. Label of the grant_commission (Check) field in DocType 'Sales Invoice Item' #. Label of the grant_commission (Check) field in DocType 'Sales Order Item' @@ -20866,7 +21131,7 @@ msgstr "" msgid "Grant Commission" msgstr "" -#: erpnext/accounts/doctype/payment_entry/payment_entry.js:902 +#: erpnext/accounts/doctype/payment_entry/payment_entry.js:906 msgid "Greater Than Amount" msgstr "" @@ -21006,7 +21271,7 @@ msgstr "" msgid "Group by Voucher" msgstr "" -#: erpnext/stock/utils.py:416 +#: erpnext/stock/utils.py:417 msgid "Group node warehouse is not allowed to select for transactions" msgstr "" @@ -21282,7 +21547,7 @@ msgstr "" msgid "Here are the error logs for the aforementioned failed depreciation entries: {0}" msgstr "" -#: erpnext/stock/stock_ledger.py:1998 +#: erpnext/stock/stock_ledger.py:1996 msgid "Here are the options to proceed:" msgstr "" @@ -21310,7 +21575,7 @@ msgstr "" msgid "Hertz" msgstr "" -#: erpnext/stock/doctype/repost_item_valuation/repost_item_valuation.py:525 +#: erpnext/stock/doctype/repost_item_valuation/repost_item_valuation.py:533 msgid "Hi," msgstr "" @@ -21772,7 +22037,7 @@ msgstr "" #. Description of the 'Allow Internal Transfers at Arm's Length Price' (Check) #. field in DocType 'Stock Settings' #: erpnext/stock/doctype/stock_settings/stock_settings.json -msgid "If enabled, the item rate won't adjust to the valuation rate during internal transfers, but accounting will still use the valuation rate." +msgid "If enabled, the item rate won't adjust to the valuation rate during internal transfers, but accounting will still use the valuation rate. This will allow the user to specify a different rate for printing or taxation purposes." msgstr "" #. Description of the 'Validate Material Transfer Warehouses' (Check) field in @@ -21867,7 +22132,7 @@ msgstr "" msgid "If no taxes are set, and Taxes and Charges Template is selected, the system will automatically apply the taxes from the chosen template." msgstr "" -#: erpnext/stock/stock_ledger.py:2008 +#: erpnext/stock/stock_ledger.py:2006 msgid "If not, you can Cancel / Submit this entry" msgstr "" @@ -21896,7 +22161,7 @@ msgstr "" msgid "If the account is frozen, entries are allowed to restricted users." msgstr "" -#: erpnext/stock/stock_ledger.py:2001 +#: erpnext/stock/stock_ledger.py:1999 msgid "If the item is transacting as a Zero Valuation Rate item in this entry, please enable 'Allow Zero Valuation Rate' in the {0} Item table." msgstr "" @@ -22208,7 +22473,7 @@ msgstr "" msgid "Import Successful" msgstr "" -#: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py:562 +#: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py:564 msgid "Import Summary" msgstr "" @@ -22288,7 +22553,7 @@ msgstr "" #: erpnext/stock/report/available_serial_no/available_serial_no.py:112 #: erpnext/stock/report/batch_wise_balance_history/batch_wise_balance_history.py:82 -#: erpnext/stock/report/stock_balance/stock_balance.py:473 +#: erpnext/stock/report/stock_balance/stock_balance.py:504 #: erpnext/stock/report/stock_ledger/stock_ledger.py:237 msgid "In Qty" msgstr "" @@ -22320,19 +22585,25 @@ msgstr "" msgid "In Transit Warehouse" msgstr "" -#: erpnext/stock/report/stock_balance/stock_balance.py:479 +#: erpnext/stock/report/stock_balance/stock_balance.py:510 msgid "In Value" msgstr "" #. Label of the in_words (Small Text) field in DocType 'Payment Entry' #. Label of the in_words (Data) field in DocType 'POS Invoice' +#. Label of the base_in_words (Data) field in DocType 'Purchase Invoice' #. Label of the in_words (Data) field in DocType 'Purchase Invoice' +#. Label of the base_in_words (Small Text) field in DocType 'Sales Invoice' #. Label of the in_words (Small Text) field in DocType 'Sales Invoice' +#. Label of the base_in_words (Data) field in DocType 'Purchase Order' #. Label of the in_words (Data) field in DocType 'Purchase Order' #. Label of the in_words (Data) field in DocType 'Supplier Quotation' #. Label of the in_words (Data) field in DocType 'Quotation' +#. Label of the base_in_words (Data) field in DocType 'Sales Order' #. Label of the in_words (Data) field in DocType 'Sales Order' +#. Label of the base_in_words (Data) field in DocType 'Delivery Note' #. Label of the in_words (Data) field in DocType 'Delivery Note' +#. Label of the base_in_words (Data) field in DocType 'Purchase Receipt' #. Label of the in_words (Data) field in DocType 'Purchase Receipt' #. Label of the in_words (Data) field in DocType 'Subcontracting Receipt' #: erpnext/accounts/doctype/payment_entry/payment_entry.json @@ -22351,24 +22622,12 @@ msgstr "" #. Label of the base_in_words (Small Text) field in DocType 'Payment Entry' #. Label of the base_in_words (Data) field in DocType 'POS Invoice' -#. Label of the base_in_words (Data) field in DocType 'Purchase Invoice' -#. Label of the base_in_words (Small Text) field in DocType 'Sales Invoice' -#. Label of the base_in_words (Data) field in DocType 'Purchase Order' #. Label of the base_in_words (Data) field in DocType 'Supplier Quotation' #. Label of the base_in_words (Data) field in DocType 'Quotation' -#. Label of the base_in_words (Data) field in DocType 'Sales Order' -#. Label of the base_in_words (Data) field in DocType 'Delivery Note' -#. Label of the base_in_words (Data) field in DocType 'Purchase Receipt' #: erpnext/accounts/doctype/payment_entry/payment_entry.json #: erpnext/accounts/doctype/pos_invoice/pos_invoice.json -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json -#: erpnext/accounts/doctype/sales_invoice/sales_invoice.json -#: erpnext/buying/doctype/purchase_order/purchase_order.json #: erpnext/buying/doctype/supplier_quotation/supplier_quotation.json #: erpnext/selling/doctype/quotation/quotation.json -#: erpnext/selling/doctype/sales_order/sales_order.json -#: erpnext/stock/doctype/delivery_note/delivery_note.json -#: erpnext/stock/doctype/purchase_receipt/purchase_receipt.json msgid "In Words (Company Currency)" msgstr "" @@ -22377,23 +22636,20 @@ msgstr "" msgid "In Words (Export) will be visible once you save the Delivery Note." msgstr "" -#. Description of the 'In Words (Company Currency)' (Data) field in DocType -#. 'Delivery Note' +#. Description of the 'In Words' (Data) field in DocType 'Delivery Note' #: erpnext/stock/doctype/delivery_note/delivery_note.json msgid "In Words will be visible once you save the Delivery Note." msgstr "" #. Description of the 'In Words (Company Currency)' (Data) field in DocType #. 'POS Invoice' -#. Description of the 'In Words (Company Currency)' (Small Text) field in -#. DocType 'Sales Invoice' +#. Description of the 'In Words' (Small Text) field in DocType 'Sales Invoice' #: erpnext/accounts/doctype/pos_invoice/pos_invoice.json #: erpnext/accounts/doctype/sales_invoice/sales_invoice.json msgid "In Words will be visible once you save the Sales Invoice." msgstr "" -#. Description of the 'In Words (Company Currency)' (Data) field in DocType -#. 'Sales Order' +#. Description of the 'In Words' (Data) field in DocType 'Sales Order' #: erpnext/selling/doctype/sales_order/sales_order.json msgid "In Words will be visible once you save the Sales Order." msgstr "" @@ -22664,7 +22920,7 @@ msgstr "" #: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:439 #: erpnext/accounts/report/account_balance/account_balance.js:27 #: erpnext/accounts/report/financial_statements.py:773 -#: erpnext/accounts/report/profit_and_loss_statement/profit_and_loss_statement.py:180 +#: erpnext/accounts/report/profit_and_loss_statement/profit_and_loss_statement.py:181 #: erpnext/accounts/report/profitability_analysis/profitability_analysis.py:192 msgid "Income" msgstr "" @@ -22951,7 +23207,7 @@ msgid "Inspected By" msgstr "" #: erpnext/controllers/stock_controller.py:1453 -#: erpnext/manufacturing/doctype/job_card/job_card.py:817 +#: erpnext/manufacturing/doctype/job_card/job_card.py:815 msgid "Inspection Rejected" msgstr "" @@ -22975,7 +23231,7 @@ msgid "Inspection Required before Purchase" msgstr "" #: erpnext/controllers/stock_controller.py:1438 -#: erpnext/manufacturing/doctype/job_card/job_card.py:798 +#: erpnext/manufacturing/doctype/job_card/job_card.py:796 msgid "Inspection Submission" msgstr "" @@ -23055,11 +23311,11 @@ msgstr "" #: erpnext/stock/doctype/pick_list/pick_list.py:1019 #: erpnext/stock/doctype/stock_entry/stock_entry.py:957 #: erpnext/stock/serial_batch_bundle.py:1197 erpnext/stock/stock_ledger.py:1710 -#: erpnext/stock/stock_ledger.py:2170 +#: erpnext/stock/stock_ledger.py:2166 msgid "Insufficient Stock" msgstr "" -#: erpnext/stock/stock_ledger.py:2185 +#: erpnext/stock/stock_ledger.py:2181 msgid "Insufficient Stock for Batch" msgstr "" @@ -23195,7 +23451,7 @@ msgstr "" msgid "Interest Income" msgstr "" -#: erpnext/accounts/doctype/payment_entry/payment_entry.py:2975 +#: erpnext/accounts/doctype/payment_entry/payment_entry.py:2987 msgid "Interest and/or dunning fee" msgstr "" @@ -23217,10 +23473,10 @@ msgstr "" #. Label of the internal_customer_section (Section Break) field in DocType #. 'Customer' #: erpnext/selling/doctype/customer/customer.json -msgid "Internal Customer" +msgid "Internal Customer Accounting" msgstr "" -#: erpnext/selling/doctype/customer/customer.py:230 +#: erpnext/selling/doctype/customer/customer.py:254 msgid "Internal Customer for company {0} already exists" msgstr "" @@ -23243,10 +23499,10 @@ msgstr "" #. Label of the internal_supplier_section (Section Break) field in DocType #. 'Supplier' #: erpnext/buying/doctype/supplier/supplier.json -msgid "Internal Supplier" +msgid "Internal Supplier Accounting" msgstr "" -#: erpnext/buying/doctype/supplier/supplier.py:182 +#: erpnext/buying/doctype/supplier/supplier.py:181 msgid "Internal Supplier for company {0} already exists" msgstr "" @@ -23306,11 +23562,11 @@ msgid "Invalid Account" msgstr "" #: erpnext/accounts/doctype/payment_entry/payment_entry.py:400 -#: erpnext/accounts/doctype/payment_request/payment_request.py:879 +#: erpnext/accounts/doctype/payment_request/payment_request.py:1004 msgid "Invalid Allocated Amount" msgstr "" -#: erpnext/accounts/doctype/payment_request/payment_request.py:124 +#: erpnext/accounts/doctype/payment_request/payment_request.py:147 msgid "Invalid Amount" msgstr "" @@ -23326,11 +23582,11 @@ msgstr "" msgid "Invalid Barcode. There is no Item attached to this barcode." msgstr "" -#: erpnext/public/js/controllers/transaction.js:3099 +#: erpnext/public/js/controllers/transaction.js:3206 msgid "Invalid Blanket Order for the selected Customer and Item" msgstr "" -#: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py:496 +#: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py:498 msgid "Invalid CSV format. Expected column: doctype_name" msgstr "" @@ -23338,7 +23594,7 @@ msgstr "" msgid "Invalid Child Procedure" msgstr "" -#: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py:225 +#: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py:227 msgid "Invalid Company Field" msgstr "" @@ -23360,7 +23616,7 @@ msgstr "" msgid "Invalid Discount" msgstr "" -#: erpnext/controllers/taxes_and_totals.py:798 +#: erpnext/controllers/taxes_and_totals.py:803 msgid "Invalid Discount Amount" msgstr "" @@ -23489,7 +23745,7 @@ msgstr "" msgid "Invalid Warehouse" msgstr "" -#: erpnext/accounts/doctype/bank_transaction/bank_transaction.py:398 +#: erpnext/accounts/doctype/bank_transaction/bank_transaction.py:399 msgid "Invalid amount in accounting entries of {} {} for Account {}: {}" msgstr "" @@ -23497,7 +23753,7 @@ msgstr "" msgid "Invalid condition expression" msgstr "" -#: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py:1053 +#: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py:1055 msgid "Invalid file URL" msgstr "" @@ -23513,7 +23769,7 @@ msgstr "" msgid "Invalid naming series (. missing) for {0}" msgstr "" -#: erpnext/accounts/doctype/payment_request/payment_request.py:547 +#: erpnext/accounts/doctype/payment_request/payment_request.py:570 msgid "Invalid parameter. 'dn' should be of type str" msgstr "" @@ -23550,7 +23806,7 @@ msgid "Invalid {0}: {1}" msgstr "" #. Label of the inventory_section (Tab Break) field in DocType 'Item' -#: erpnext/setup/install.py:327 erpnext/stock/doctype/item/item.json +#: erpnext/setup/install.py:358 erpnext/stock/doctype/item/item.json msgid "Inventory" msgstr "" @@ -23589,6 +23845,12 @@ msgstr "" msgid "Inventory Turnover Ratio" msgstr "" +#. Label of the inventory_valuation_section (Section Break) field in DocType +#. 'Item' +#: erpnext/stock/doctype/item/item.json +msgid "Inventory Valuation" +msgstr "" + #: erpnext/setup/setup_wizard/data/industry_type.txt:29 msgid "Investment Banking" msgstr "" @@ -24447,7 +24709,7 @@ msgstr "" msgid "It can take upto few hours for accurate stock values to be visible after merging items." msgstr "" -#: erpnext/public/js/controllers/transaction.js:2501 +#: erpnext/public/js/controllers/transaction.js:2608 msgid "It is needed to fetch Item Details." msgstr "" @@ -24506,7 +24768,7 @@ msgstr "" #: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.js:33 #: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.py:204 #: erpnext/buying/workspace/buying/buying.json -#: erpnext/controllers/taxes_and_totals.py:1207 +#: erpnext/controllers/taxes_and_totals.py:1212 #: erpnext/manufacturing/doctype/blanket_order/blanket_order.json #: erpnext/manufacturing/doctype/bom/bom.js:1058 #: erpnext/manufacturing/doctype/bom/bom.json @@ -24563,8 +24825,8 @@ msgstr "" #: erpnext/stock/report/serial_and_batch_summary/serial_and_batch_summary.js:28 #: erpnext/stock/report/stock_ageing/stock_ageing.js:46 #: erpnext/stock/report/stock_analytics/stock_analytics.js:15 -#: erpnext/stock/report/stock_analytics/stock_analytics.py:28 -#: erpnext/stock/report/stock_balance/stock_balance.py:400 +#: erpnext/stock/report/stock_analytics/stock_analytics.py:43 +#: erpnext/stock/report/stock_balance/stock_balance.py:431 #: erpnext/stock/report/stock_ledger/stock_ledger.py:207 #: erpnext/stock/report/stock_ledger_variance/stock_ledger_variance.js:27 #: erpnext/stock/report/stock_ledger_variance/stock_ledger_variance.py:51 @@ -24580,10 +24842,11 @@ msgstr "" #: erpnext/templates/form_grid/stock_entry_grid.html:8 #: erpnext/templates/generators/bom.html:19 #: erpnext/templates/pages/material_request_info.html:42 -#: erpnext/templates/pages/order.html:94 erpnext/workspace_sidebar/buying.json -#: erpnext/workspace_sidebar/home.json +#: erpnext/templates/pages/order.html:94 erpnext/workspace_sidebar/assets.json +#: erpnext/workspace_sidebar/buying.json erpnext/workspace_sidebar/home.json #: erpnext/workspace_sidebar/manufacturing.json #: erpnext/workspace_sidebar/selling.json erpnext/workspace_sidebar/stock.json +#: erpnext/workspace_sidebar/subcontracting.json #: erpnext/workspace_sidebar/subscription.json msgid "Item" msgstr "" @@ -24810,7 +25073,7 @@ msgstr "" #: erpnext/manufacturing/report/quality_inspection_summary/quality_inspection_summary.py:86 #: erpnext/manufacturing/report/work_order_stock_report/work_order_stock_report.py:119 #: erpnext/projects/doctype/timesheet/timesheet.js:214 -#: erpnext/public/js/controllers/transaction.js:2795 +#: erpnext/public/js/controllers/transaction.js:2902 #: erpnext/public/js/stock_reservation.js:112 #: erpnext/public/js/stock_reservation.js:318 erpnext/public/js/utils.js:488 #: erpnext/public/js/utils.js:645 @@ -25072,9 +25335,9 @@ msgstr "" #: erpnext/stock/report/product_bundle_balance/product_bundle_balance.py:100 #: erpnext/stock/report/stock_ageing/stock_ageing.py:141 #: erpnext/stock/report/stock_analytics/stock_analytics.js:8 -#: erpnext/stock/report/stock_analytics/stock_analytics.py:37 +#: erpnext/stock/report/stock_analytics/stock_analytics.py:52 #: erpnext/stock/report/stock_balance/stock_balance.js:32 -#: erpnext/stock/report/stock_balance/stock_balance.py:408 +#: erpnext/stock/report/stock_balance/stock_balance.py:439 #: erpnext/stock/report/stock_ledger/stock_ledger.js:71 #: erpnext/stock/report/stock_ledger/stock_ledger.py:265 #: erpnext/stock/report/stock_projected_qty/stock_projected_qty.js:39 @@ -25292,7 +25555,7 @@ msgstr "" #: erpnext/manufacturing/report/production_planning_report/production_planning_report.py:371 #: erpnext/manufacturing/report/quality_inspection_summary/quality_inspection_summary.py:92 #: erpnext/manufacturing/report/work_order_consumed_materials/work_order_consumed_materials.py:138 -#: erpnext/public/js/controllers/transaction.js:2801 +#: erpnext/public/js/controllers/transaction.js:2908 #: erpnext/public/js/utils.js:740 #: erpnext/selling/doctype/quotation_item/quotation_item.json #: erpnext/selling/doctype/sales_order/sales_order.js:1252 @@ -25332,8 +25595,8 @@ msgstr "" #: erpnext/stock/report/serial_and_batch_summary/serial_and_batch_summary.py:131 #: erpnext/stock/report/serial_no_and_batch_traceability/serial_no_and_batch_traceability.py:440 #: erpnext/stock/report/stock_ageing/stock_ageing.py:138 -#: erpnext/stock/report/stock_analytics/stock_analytics.py:30 -#: erpnext/stock/report/stock_balance/stock_balance.py:406 +#: erpnext/stock/report/stock_analytics/stock_analytics.py:45 +#: erpnext/stock/report/stock_balance/stock_balance.py:437 #: erpnext/stock/report/stock_ledger/stock_ledger.py:213 #: erpnext/stock/report/stock_projected_qty/stock_projected_qty.py:110 #: erpnext/stock/report/stock_qty_vs_batch_qty/stock_qty_vs_batch_qty.py:31 @@ -25598,7 +25861,7 @@ msgstr "" msgid "Item Variants updated" msgstr "" -#: erpnext/stock/doctype/stock_reposting_settings/stock_reposting_settings.py:85 +#: erpnext/stock/doctype/stock_reposting_settings/stock_reposting_settings.py:86 msgid "Item Warehouse based reposting has been enabled." msgstr "" @@ -25672,8 +25935,11 @@ msgstr "" #. Label of the section_break_rrrx (Section Break) field in DocType 'Sales #. Forecast' +#. Label of the item_and_warehouse_section (Section Break) field in DocType +#. 'Bin' #. Option for the 'Based On' (Select) field in DocType 'Repost Item Valuation' #: erpnext/manufacturing/doctype/sales_forecast/sales_forecast.json +#: erpnext/stock/doctype/bin/bin.json #: erpnext/stock/doctype/repost_item_valuation/repost_item_valuation.json msgid "Item and Warehouse" msgstr "" @@ -25735,7 +26001,7 @@ msgstr "" msgid "Item valuation rate is recalculated considering landed cost voucher amount" msgstr "" -#: erpnext/stock/utils.py:531 +#: erpnext/stock/utils.py:532 msgid "Item valuation reposting in progress. Report might show incorrect item valuation." msgstr "" @@ -25768,7 +26034,7 @@ msgstr "" msgid "Item {0} does not exist." msgstr "" -#: erpnext/controllers/selling_controller.py:844 +#: erpnext/controllers/selling_controller.py:851 msgid "Item {0} entered multiple times." msgstr "" @@ -26037,7 +26303,7 @@ msgstr "" #: erpnext/buying/doctype/purchase_order_item/purchase_order_item.json #: erpnext/manufacturing/doctype/bom/bom.json #: erpnext/manufacturing/doctype/job_card/job_card.json -#: erpnext/manufacturing/doctype/job_card/job_card.py:982 +#: erpnext/manufacturing/doctype/job_card/job_card.py:980 #: erpnext/manufacturing/doctype/operation/operation.json #: erpnext/manufacturing/doctype/work_order/work_order.js:396 #: erpnext/manufacturing/doctype/work_order/work_order.json @@ -26101,7 +26367,7 @@ msgstr "" msgid "Job Card and Capacity Planning" msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.py:1458 +#: erpnext/manufacturing/doctype/job_card/job_card.py:1456 msgid "Job Card {0} has been completed" msgstr "" @@ -26177,7 +26443,7 @@ msgstr "" msgid "Job Worker Warehouse" msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.py:2627 +#: erpnext/manufacturing/doctype/work_order/work_order.py:2623 msgid "Job card {0} created" msgstr "" @@ -26204,7 +26470,7 @@ msgstr "" msgid "Journal Entries" msgstr "" -#: erpnext/accounts/utils.py:1063 +#: erpnext/accounts/utils.py:1064 msgid "Journal Entries {0} are un-linked" msgstr "" @@ -26393,7 +26659,7 @@ msgstr "" msgid "Kilowatt-Hour" msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.py:984 +#: erpnext/manufacturing/doctype/job_card/job_card.py:982 msgid "Kindly cancel the Manufacturing Entries first against the work order {0}." msgstr "" @@ -26599,7 +26865,7 @@ msgstr "" msgid "Latest" msgstr "" -#: erpnext/stock/report/stock_balance/stock_balance.py:519 +#: erpnext/stock/report/stock_balance/stock_balance.py:550 msgid "Latest Age" msgstr "" @@ -26616,6 +26882,7 @@ msgstr "" #. Name of a DocType #. Option for the 'Status' (Select) field in DocType 'Lead' #. Label of the lead (Link) field in DocType 'Prospect Lead' +#. Label of the lead_name (Link) field in DocType 'Customer' #. Label of a Link in the Home Workspace #. Label of the lead (Link) field in DocType 'Issue' #. Label of a Workspace Sidebar Item @@ -26627,7 +26894,9 @@ msgstr "" #: erpnext/crm/report/lead_details/lead_details.py:18 #: erpnext/crm/report/prospects_engaged_but_not_converted/prospects_engaged_but_not_converted.js:8 #: erpnext/crm/report/prospects_engaged_but_not_converted/prospects_engaged_but_not_converted.py:28 -#: erpnext/public/js/communication.js:25 erpnext/setup/workspace/home/home.json +#: erpnext/public/js/communication.js:25 +#: erpnext/selling/doctype/customer/customer.json +#: erpnext/setup/workspace/home/home.json #: erpnext/support/doctype/issue/issue.json erpnext/workspace_sidebar/crm.json msgid "Lead" msgstr "" @@ -26739,10 +27008,22 @@ msgstr "" msgid "Leads help you get business, add all your contacts and more as your leads" msgstr "" +#. Title of an Onboarding Step +#. Label of an action in the Onboarding Step 'Learn Asset' +#: erpnext/assets/onboarding_step/learn_asset/learn_asset.json +msgid "Learn Asset" +msgstr "" + +#. Title of an Onboarding Step +#. Label of an action in the Onboarding Step 'Learn Subcontracting' +#: erpnext/subcontracting/onboarding_step/learn_subcontracting/learn_subcontracting.json +msgid "Learn Subcontracting" +msgstr "" + #. Description of the 'Enable Common Party Accounting' (Check) field in DocType #. 'Accounts Settings' #: erpnext/accounts/doctype/accounts_settings/accounts_settings.json -msgid "Learn about Common Party" +msgid "Learn about Common Party" msgstr "" #. Label of the leave_encashed (Select) field in DocType 'Employee' @@ -26842,7 +27123,7 @@ msgstr "" msgid "Length (cm)" msgstr "" -#: erpnext/accounts/doctype/payment_entry/payment_entry.js:907 +#: erpnext/accounts/doctype/payment_entry/payment_entry.js:911 msgid "Less Than Amount" msgstr "" @@ -26871,7 +27152,7 @@ msgstr "" msgid "Lft" msgstr "" -#: erpnext/accounts/report/balance_sheet/balance_sheet.py:251 +#: erpnext/accounts/report/balance_sheet/balance_sheet.py:252 msgid "Liabilities" msgstr "" @@ -26947,7 +27228,7 @@ msgstr "" msgid "Link existing Quality Procedure." msgstr "" -#: erpnext/buying/doctype/purchase_order/purchase_order.js:603 +#: erpnext/buying/doctype/purchase_order/purchase_order.js:582 msgid "Link to Material Request" msgstr "" @@ -26956,7 +27237,7 @@ msgstr "" msgid "Link to Material Requests" msgstr "" -#: erpnext/buying/doctype/supplier/supplier.js:127 +#: erpnext/buying/doctype/supplier/supplier.js:125 msgid "Link with Customer" msgstr "" @@ -26985,12 +27266,12 @@ msgstr "" msgid "Linked with submitted documents" msgstr "" -#: erpnext/buying/doctype/supplier/supplier.js:212 +#: erpnext/buying/doctype/supplier/supplier.js:210 #: erpnext/selling/doctype/customer/customer.js:279 msgid "Linking Failed" msgstr "" -#: erpnext/buying/doctype/supplier/supplier.js:211 +#: erpnext/buying/doctype/supplier/supplier.js:209 msgid "Linking to Customer Failed. Please try again." msgstr "" @@ -27697,6 +27978,12 @@ msgstr "" msgid "Manage cost of operations" msgstr "" +#. Description of the 'Enable tracking sales commissions' (Check) field in +#. DocType 'Selling Settings' +#: erpnext/selling/doctype/selling_settings/selling_settings.json +msgid "Manage sales partner's and sales team's commissions" +msgstr "" + #: erpnext/utilities/activation.py:95 msgid "Manage your orders" msgstr "" @@ -27921,11 +28208,12 @@ msgstr "" #: erpnext/manufacturing/doctype/production_plan_sub_assembly_item/production_plan_sub_assembly_item.json #: erpnext/manufacturing/workspace/manufacturing/manufacturing.json #: erpnext/selling/doctype/sales_order/sales_order_dashboard.py:29 -#: erpnext/setup/doctype/company/company.json erpnext/setup/install.py:332 +#: erpnext/setup/doctype/company/company.json erpnext/setup/install.py:363 #: erpnext/setup/setup_wizard/data/industry_type.txt:31 #: erpnext/stock/doctype/batch/batch.json erpnext/stock/doctype/item/item.json #: erpnext/stock/doctype/item_lead_time/item_lead_time.json #: erpnext/stock/doctype/material_request/material_request_dashboard.py:18 +#: erpnext/stock/doctype/pick_list/pick_list_dashboard.py:20 #: erpnext/subcontracting/doctype/subcontracting_inward_order/subcontracting_inward_order_dashboard.py:13 #: erpnext/workspace_sidebar/manufacturing.json msgid "Manufacturing" @@ -27984,6 +28272,11 @@ msgstr "" msgid "Manufacturing Settings" msgstr "" +#. Title of the Module Onboarding 'Manufacturing Onboarding' +#: erpnext/manufacturing/module_onboarding/manufacturing_onboarding/manufacturing_onboarding.json +msgid "Manufacturing Setup" +msgstr "" + #. Label of the manufacturing_time_in_mins (Int) field in DocType 'Item Lead #. Time' #. Label of the manufacturing_time_tab (Tab Break) field in DocType 'Item Lead @@ -28196,7 +28489,7 @@ msgstr "" msgid "Material Consumption for Manufacture" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.js:559 +#: erpnext/stock/doctype/stock_entry/stock_entry.js:576 msgid "Material Consumption is not set in Manufacturing Settings." msgstr "" @@ -28262,7 +28555,7 @@ msgstr "" #. Service Item' #. Label of a Workspace Sidebar Item #: erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.json -#: erpnext/buying/doctype/purchase_order/purchase_order.js:540 +#: erpnext/buying/doctype/purchase_order/purchase_order.js:519 #: erpnext/buying/doctype/purchase_order_item/purchase_order_item.json #: erpnext/buying/doctype/request_for_quotation/request_for_quotation.js:357 #: erpnext/buying/doctype/request_for_quotation_item/request_for_quotation_item.json @@ -28505,8 +28798,8 @@ msgstr "" msgid "Materials are already received against the {0} {1}" msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.py:183 -#: erpnext/manufacturing/doctype/job_card/job_card.py:838 +#: erpnext/manufacturing/doctype/job_card/job_card.py:181 +#: erpnext/manufacturing/doctype/job_card/job_card.py:836 msgid "Materials needs to be transferred to the work in progress warehouse for the job card {0}" msgstr "" @@ -28656,7 +28949,7 @@ msgstr "" msgid "Megawatt" msgstr "" -#: erpnext/stock/stock_ledger.py:2014 +#: erpnext/stock/stock_ledger.py:2012 msgid "Mention Valuation Rate in the Item master." msgstr "" @@ -28743,7 +29036,7 @@ msgstr "" msgid "Messages greater than 160 characters will be split into multiple messages" msgstr "" -#: erpnext/setup/install.py:127 +#: erpnext/setup/install.py:128 msgid "Messaging CRM Campaign" msgstr "" @@ -29044,7 +29337,7 @@ msgstr "" msgid "Missing Cost Center" msgstr "" -#: erpnext/accounts/doctype/payment_entry/payment_entry.py:1132 +#: erpnext/accounts/doctype/payment_entry/payment_entry.py:1144 msgid "Missing Default in Company" msgstr "" @@ -29068,6 +29361,10 @@ msgstr "" msgid "Missing Item" msgstr "" +#: erpnext/setup/doctype/employee/employee.py:445 +msgid "Missing Parameter" +msgstr "" + #: erpnext/utilities/__init__.py:53 msgid "Missing Payments App" msgstr "" @@ -29085,7 +29382,7 @@ msgid "Missing required filter: {0}" msgstr "" #: erpnext/manufacturing/doctype/bom/bom.py:1183 -#: erpnext/manufacturing/doctype/work_order/work_order.py:1462 +#: erpnext/manufacturing/doctype/work_order/work_order.py:1452 msgid "Missing value" msgstr "" @@ -29329,7 +29626,7 @@ msgstr "" msgid "Multi-level BOM Creator" msgstr "" -#: erpnext/selling/doctype/customer/customer.py:403 +#: erpnext/selling/doctype/customer/customer.py:427 msgid "Multiple Loyalty Programs found for Customer {}. Please select manually." msgstr "" @@ -29372,7 +29669,7 @@ msgid "Music" msgstr "" #. Label of the must_be_whole_number (Check) field in DocType 'UOM' -#: erpnext/manufacturing/doctype/work_order/work_order.py:1409 +#: erpnext/manufacturing/doctype/work_order/work_order.py:1399 #: erpnext/setup/doctype/uom/uom.json #: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:267 #: erpnext/utilities/transaction_base.py:566 @@ -29452,7 +29749,7 @@ msgstr "" msgid "Naming Series is mandatory" msgstr "" -#: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py:934 +#: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py:936 msgid "Naming series '{0}' for DocType '{1}' does not contain standard '.' or '{{' separator. Using fallback extraction." msgstr "" @@ -29500,7 +29797,7 @@ msgstr "" msgid "Negative Quantity is not allowed" msgstr "" -#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:1492 +#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:1502 #: erpnext/stock/serial_batch_bundle.py:1520 msgid "Negative Stock Error" msgstr "" @@ -29609,7 +29906,7 @@ msgid "Net Change in Accounts Receivable" msgstr "" #: erpnext/accounts/report/cash_flow/cash_flow.py:134 -#: erpnext/accounts/report/consolidated_financial_statement/consolidated_financial_statement.py:254 +#: erpnext/accounts/report/consolidated_financial_statement/consolidated_financial_statement.py:257 msgid "Net Change in Cash" msgstr "" @@ -29642,7 +29939,7 @@ msgstr "" msgid "Net Profit Ratio" msgstr "" -#: erpnext/accounts/report/profit_and_loss_statement/profit_and_loss_statement.py:184 +#: erpnext/accounts/report/profit_and_loss_statement/profit_and_loss_statement.py:185 msgid "Net Profit/Loss" msgstr "" @@ -29984,7 +30281,7 @@ msgstr "" msgid "New Workplace" msgstr "" -#: erpnext/selling/doctype/customer/customer.py:368 +#: erpnext/selling/doctype/customer/customer.py:392 msgid "New credit limit is less than current outstanding amount for the customer. Credit limit has to be atleast {0}" msgstr "" @@ -30064,7 +30361,7 @@ msgstr "" msgid "No Delivery Note selected for Customer {}" msgstr "" -#: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py:751 +#: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py:753 msgid "No DocTypes in To Delete list. Please generate or import the list before submitting." msgstr "" @@ -30080,7 +30377,7 @@ msgstr "" msgid "No Item with Serial No {0}" msgstr "" -#: erpnext/controllers/subcontracting_controller.py:1484 +#: erpnext/controllers/subcontracting_controller.py:1488 msgid "No Items selected for transfer." msgstr "" @@ -30350,7 +30647,7 @@ msgstr "" msgid "No outstanding invoices require exchange rate revaluation" msgstr "" -#: erpnext/accounts/doctype/payment_entry/payment_entry.py:2415 +#: erpnext/accounts/doctype/payment_entry/payment_entry.py:2427 msgid "No outstanding {0} found for the {1} {2} which qualify the filters you have specified." msgstr "" @@ -30358,6 +30655,10 @@ msgstr "" msgid "No pending Material Requests found to link for the given items." msgstr "" +#: erpnext/public/js/controllers/transaction.js:468 +msgid "No pending payment schedules available." +msgstr "" + #: erpnext/accounts/doctype/process_statement_of_accounts/process_statement_of_accounts.py:502 msgid "No primary email found for customer: {0}" msgstr "" @@ -30474,8 +30775,8 @@ msgid "None of the items have any change in quantity or value." msgstr "" #. Name of a UOM -#: erpnext/setup/setup_wizard/data/uom_data.json erpnext/stock/utils.py:683 -#: erpnext/stock/utils.py:685 +#: erpnext/setup/setup_wizard/data/uom_data.json erpnext/stock/utils.py:684 +#: erpnext/stock/utils.py:686 msgid "Nos" msgstr "" @@ -30575,7 +30876,7 @@ msgstr "" msgid "Note: Automatic log deletion only applies to logs of type Update Cost" msgstr "" -#: erpnext/accounts/party.py:697 +#: erpnext/accounts/party.py:685 msgid "Note: Due Date exceeds allowed {0} credit days by {1} day(s)" msgstr "" @@ -30957,6 +31258,11 @@ msgstr "" msgid "On-machine press checks" msgstr "" +#. Title of the Module Onboarding 'Stock Onboarding' +#: erpnext/selling/module_onboarding/stock_onboarding/stock_onboarding.json +msgid "Onboarding for Stock!" +msgstr "" + #. Description of the 'Release Date' (Date) field in DocType 'Purchase Invoice' #: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json msgid "Once set, this invoice will be on hold till the set date" @@ -31002,7 +31308,7 @@ msgstr "" msgid "Only CSV and Excel files can be used to for importing data. Please check the file format you are trying to upload" msgstr "" -#: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py:1067 +#: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py:1069 msgid "Only CSV files are allowed" msgstr "" @@ -31214,14 +31520,14 @@ msgstr "" msgid "Opening & Closing" msgstr "" -#: erpnext/accounts/report/consolidated_trial_balance/consolidated_trial_balance.py:437 -#: erpnext/accounts/report/trial_balance/trial_balance.py:508 +#: erpnext/accounts/report/consolidated_trial_balance/consolidated_trial_balance.py:417 +#: erpnext/accounts/report/trial_balance/trial_balance.py:516 #: erpnext/accounts/report/trial_balance_for_party/trial_balance_for_party.py:198 msgid "Opening (Cr)" msgstr "" -#: erpnext/accounts/report/consolidated_trial_balance/consolidated_trial_balance.py:430 -#: erpnext/accounts/report/trial_balance/trial_balance.py:501 +#: erpnext/accounts/report/consolidated_trial_balance/consolidated_trial_balance.py:410 +#: erpnext/accounts/report/trial_balance/trial_balance.py:509 #: erpnext/accounts/report/trial_balance_for_party/trial_balance_for_party.py:191 msgid "Opening (Dr)" msgstr "" @@ -31350,7 +31656,7 @@ msgid "Opening Purchase Invoices have been created." msgstr "" #: erpnext/stock/report/batch_wise_balance_history/batch_wise_balance_history.py:81 -#: erpnext/stock/report/stock_balance/stock_balance.py:459 +#: erpnext/stock/report/stock_balance/stock_balance.py:490 msgid "Opening Qty" msgstr "" @@ -31370,7 +31676,7 @@ msgstr "" msgid "Opening Time" msgstr "" -#: erpnext/stock/report/stock_balance/stock_balance.py:466 +#: erpnext/stock/report/stock_balance/stock_balance.py:497 msgid "Opening Value" msgstr "" @@ -31488,7 +31794,7 @@ msgstr "" msgid "Operation Time" msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.py:1468 +#: erpnext/manufacturing/doctype/work_order/work_order.py:1458 msgid "Operation Time must be greater than 0 for Operation {0}" msgstr "" @@ -31507,11 +31813,11 @@ msgstr "" msgid "Operation {0} added multiple times in the work order {1}" msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.py:1231 +#: erpnext/manufacturing/doctype/job_card/job_card.py:1229 msgid "Operation {0} does not belong to the work order {1}" msgstr "" -#: erpnext/manufacturing/doctype/workstation/workstation.py:432 +#: erpnext/manufacturing/doctype/workstation/workstation.py:433 msgid "Operation {0} longer than any available working hours in workstation {1}, break down the operation into multiple operations" msgstr "" @@ -31583,6 +31889,7 @@ msgstr "" #. Option for the 'Status' (Select) field in DocType 'Lead' #. Name of a DocType #. Label of the opportunity (Link) field in DocType 'Prospect Opportunity' +#. Label of the opportunity_name (Link) field in DocType 'Customer' #. Label of the opportunity (Link) field in DocType 'Quotation' #. Label of a Workspace Sidebar Item #: erpnext/buying/doctype/request_for_quotation/request_for_quotation.js:381 @@ -31596,6 +31903,7 @@ msgstr "" #: erpnext/crm/report/lead_details/lead_details.js:36 #: erpnext/crm/report/lost_opportunity/lost_opportunity.py:17 #: erpnext/public/js/communication.js:35 +#: erpnext/selling/doctype/customer/customer.json #: erpnext/selling/doctype/quotation/quotation.js:155 #: erpnext/selling/doctype/quotation/quotation.json #: erpnext/workspace_sidebar/crm.json @@ -31953,12 +32261,12 @@ msgstr "" #: erpnext/stock/report/available_serial_no/available_serial_no.py:119 #: erpnext/stock/report/batch_wise_balance_history/batch_wise_balance_history.py:83 -#: erpnext/stock/report/stock_balance/stock_balance.py:481 +#: erpnext/stock/report/stock_balance/stock_balance.py:512 #: erpnext/stock/report/stock_ledger/stock_ledger.py:244 msgid "Out Qty" msgstr "" -#: erpnext/stock/report/stock_balance/stock_balance.py:487 +#: erpnext/stock/report/stock_balance/stock_balance.py:518 msgid "Out Value" msgstr "" @@ -32045,7 +32353,7 @@ msgstr "" #: erpnext/accounts/doctype/cashier_closing/cashier_closing.json #: erpnext/accounts/doctype/discounted_invoice/discounted_invoice.json #: erpnext/accounts/doctype/opening_invoice_creation_tool_item/opening_invoice_creation_tool_item.json -#: erpnext/accounts/doctype/payment_entry/payment_entry.js:899 +#: erpnext/accounts/doctype/payment_entry/payment_entry.js:903 #: erpnext/accounts/doctype/payment_reconciliation_invoice/payment_reconciliation_invoice.json #: erpnext/accounts/doctype/payment_request/payment_request.json #: erpnext/accounts/doctype/pos_invoice/pos_invoice.js:300 @@ -32720,7 +33028,7 @@ msgstr "" msgid "Paid Amount After Tax (Company Currency)" msgstr "" -#: erpnext/accounts/doctype/payment_entry/payment_entry.py:1928 +#: erpnext/accounts/doctype/payment_entry/payment_entry.py:1940 msgid "Paid Amount cannot be greater than total negative outstanding amount {0}" msgstr "" @@ -33345,7 +33653,7 @@ msgstr "" msgid "Party Type" msgstr "" -#: erpnext/accounts/party.py:826 +#: erpnext/accounts/party.py:814 msgid "Party Type and Party can only be set for Receivable / Payable account

{0}" msgstr "" @@ -33358,7 +33666,7 @@ msgid "Party Type and Party is required for Receivable / Payable account {0}" msgstr "" #: erpnext/accounts/doctype/payment_entry/payment_entry.py:520 -#: erpnext/accounts/party.py:427 +#: erpnext/accounts/party.py:415 msgid "Party Type is mandatory" msgstr "" @@ -33575,7 +33883,7 @@ msgstr "" msgid "Payment Entries" msgstr "" -#: erpnext/accounts/utils.py:1150 +#: erpnext/accounts/utils.py:1151 msgid "Payment Entries {0} are un-linked" msgstr "" @@ -33615,16 +33923,16 @@ msgstr "" msgid "Payment Entry Reference" msgstr "" -#: erpnext/accounts/doctype/payment_request/payment_request.py:453 +#: erpnext/accounts/doctype/payment_request/payment_request.py:476 msgid "Payment Entry already exists" msgstr "" -#: erpnext/accounts/utils.py:649 +#: erpnext/accounts/utils.py:650 msgid "Payment Entry has been modified after you pulled it. Please pull it again." msgstr "" -#: erpnext/accounts/doctype/payment_request/payment_request.py:131 -#: erpnext/accounts/doctype/payment_request/payment_request.py:559 +#: erpnext/accounts/doctype/payment_request/payment_request.py:154 +#: erpnext/accounts/doctype/payment_request/payment_request.py:636 msgid "Payment Entry is already created" msgstr "" @@ -33662,7 +33970,7 @@ msgstr "" msgid "Payment Gateway Account" msgstr "" -#: erpnext/accounts/utils.py:1436 +#: erpnext/accounts/utils.py:1437 msgid "Payment Gateway Account not created, please create one manually." msgstr "" @@ -33709,6 +34017,12 @@ msgstr "" msgid "Payment Mode" msgstr "" +#. Label of the payment_options_section (Section Break) field in DocType +#. 'Accounts Settings' +#: erpnext/accounts/doctype/accounts_settings/accounts_settings.json +msgid "Payment Options" +msgstr "" + #. Label of the payment_order (Link) field in DocType 'Journal Entry' #. Label of the payment_order (Link) field in DocType 'Payment Entry' #. Name of a DocType @@ -33772,7 +34086,7 @@ msgid "Payment Received" msgstr "" #. Label of a Workspace Sidebar Item -#: erpnext/workspace_sidebar/payments.json +#: erpnext/workspace_sidebar/invoicing.json msgid "Payment Reconciliaition" msgstr "" @@ -33782,7 +34096,7 @@ msgstr "" #. Label of a Workspace Sidebar Item #: erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.json #: erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.json -#: erpnext/workspace_sidebar/invoicing.json +#: erpnext/workspace_sidebar/payments.json msgid "Payment Reconciliation" msgstr "" @@ -33813,7 +34127,11 @@ msgstr "" #. Label of the payment_reference (Data) field in DocType 'Payment Order #. Reference' +#. Name of a DocType +#. Label of the payment_reference (Table) field in DocType 'Payment Request' #: erpnext/accounts/doctype/payment_order_reference/payment_order_reference.json +#: erpnext/accounts/doctype/payment_reference/payment_reference.json +#: erpnext/accounts/doctype/payment_request/payment_request.json msgid "Payment Reference" msgstr "" @@ -33833,7 +34151,7 @@ msgstr "" #. Name of a DocType #. Label of a Workspace Sidebar Item #: erpnext/accounts/doctype/accounts_settings/accounts_settings.json -#: erpnext/accounts/doctype/payment_entry/payment_entry.js:1723 +#: erpnext/accounts/doctype/payment_entry/payment_entry.js:1726 #: erpnext/accounts/doctype/payment_entry_reference/payment_entry_reference.json #: erpnext/accounts/doctype/payment_order/payment_order.js:19 #: erpnext/accounts/doctype/payment_order/payment_order.json @@ -33860,11 +34178,11 @@ msgstr "" msgid "Payment Request Type" msgstr "" -#: erpnext/accounts/doctype/payment_request/payment_request.py:632 +#: erpnext/accounts/doctype/payment_request/payment_request.py:709 msgid "Payment Request for {0}" msgstr "" -#: erpnext/accounts/doctype/payment_request/payment_request.py:574 +#: erpnext/accounts/doctype/payment_request/payment_request.py:650 msgid "Payment Request is already created" msgstr "" @@ -33872,7 +34190,7 @@ msgstr "" msgid "Payment Request took too long to respond. Please try requesting for payment again." msgstr "" -#: erpnext/accounts/doctype/payment_request/payment_request.py:544 +#: erpnext/accounts/doctype/payment_request/payment_request.py:567 msgid "Payment Requests cannot be created against: {0}" msgstr "" @@ -33883,6 +34201,7 @@ msgid "Payment Requests made from Sales / Purchase Invoice will be put in Draft msgstr "" #. Label of the payment_schedule (Data) field in DocType 'Overdue Payment' +#. Label of the payment_schedule (Link) field in DocType 'Payment Reference' #. Name of a DocType #. Label of the payment_schedule (Table) field in DocType 'POS Invoice' #. Label of the payment_schedule (Table) field in DocType 'Purchase Invoice' @@ -33891,6 +34210,7 @@ msgstr "" #. Label of the payment_schedule (Table) field in DocType 'Quotation' #. Label of the payment_schedule (Table) field in DocType 'Sales Order' #: erpnext/accounts/doctype/overdue_payment/overdue_payment.json +#: erpnext/accounts/doctype/payment_reference/payment_reference.json #: erpnext/accounts/doctype/payment_schedule/payment_schedule.json #: erpnext/accounts/doctype/pos_invoice/pos_invoice.json #: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json @@ -33902,12 +34222,21 @@ msgstr "" msgid "Payment Schedule" msgstr "" +#: erpnext/accounts/doctype/payment_request/payment_request.py:589 +msgid "Payment Schedule based Payment Requests cannot be created because a Payment Entry already exists for this document." +msgstr "" + +#: erpnext/public/js/controllers/transaction.js:478 +msgid "Payment Schedules" +msgstr "" + #: erpnext/accounts/print_format/sales_invoice_print/sales_invoice_print.html:123 msgid "Payment Status" msgstr "" #. Label of the payment_term (Link) field in DocType 'Overdue Payment' #. Label of the payment_term (Link) field in DocType 'Payment Entry Reference' +#. Label of the payment_term (Link) field in DocType 'Payment Reference' #. Label of the payment_term (Link) field in DocType 'Payment Schedule' #. Name of a DocType #. Label of the payment_term (Link) field in DocType 'Payment Terms Template @@ -33916,12 +34245,14 @@ msgstr "" #. Label of a Workspace Sidebar Item #: erpnext/accounts/doctype/overdue_payment/overdue_payment.json #: erpnext/accounts/doctype/payment_entry_reference/payment_entry_reference.json +#: erpnext/accounts/doctype/payment_reference/payment_reference.json #: erpnext/accounts/doctype/payment_schedule/payment_schedule.json #: erpnext/accounts/doctype/payment_term/payment_term.json #: erpnext/accounts/doctype/payment_terms_template_detail/payment_terms_template_detail.json #: erpnext/accounts/report/accounts_receivable/accounts_receivable.py:1214 #: erpnext/accounts/report/gross_profit/gross_profit.py:449 #: erpnext/accounts/workspace/invoicing/invoicing.json +#: erpnext/public/js/controllers/transaction.js:492 #: erpnext/selling/report/payment_terms_status_for_sales_order/payment_terms_status_for_sales_order.py:30 #: erpnext/workspace_sidebar/accounts_setup.json msgid "Payment Term" @@ -34026,7 +34357,7 @@ msgstr "" msgid "Payment URL" msgstr "" -#: erpnext/accounts/utils.py:1138 +#: erpnext/accounts/utils.py:1139 msgid "Payment Unlink Error" msgstr "" @@ -34063,6 +34394,7 @@ msgstr "" msgid "Payment term {0} not used in {1}" msgstr "" +#. Label of the payments_tab (Tab Break) field in DocType 'Accounts Settings' #. Label of the payments (Table) field in DocType 'Cashier Closing' #. Label of the payments (Table) field in DocType 'Payment Reconciliation' #. Label of the payments_section (Section Break) field in DocType 'POS Invoice' @@ -34078,6 +34410,7 @@ msgstr "" #. Label of a Desktop Icon #. Label of a Workspace Sidebar Item #. Title of a Workspace Sidebar +#: erpnext/accounts/doctype/accounts_settings/accounts_settings.json #: erpnext/accounts/doctype/cashier_closing/cashier_closing.json #: erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.json #: erpnext/accounts/doctype/pos_invoice/pos_invoice.js:286 @@ -34507,7 +34840,7 @@ msgstr "" #. Label of the phone_no (Data) field in DocType 'Company' #. Label of the phone_no (Data) field in DocType 'Warehouse' -#: erpnext/public/js/print.js:66 erpnext/setup/doctype/company/company.json +#: erpnext/public/js/print.js:77 erpnext/setup/doctype/company/company.json #: erpnext/stock/doctype/warehouse/warehouse.json msgid "Phone No" msgstr "" @@ -34887,11 +35220,11 @@ msgstr "" msgid "Please Set Supplier Group in Buying Settings." msgstr "" -#: erpnext/accounts/doctype/payment_entry/payment_entry.js:1894 +#: erpnext/accounts/doctype/payment_entry/payment_entry.js:1897 msgid "Please Specify Account" msgstr "" -#: erpnext/buying/doctype/supplier/supplier.py:128 +#: erpnext/buying/doctype/supplier/supplier.py:129 msgid "Please add 'Supplier' role to user {0}." msgstr "" @@ -34947,7 +35280,7 @@ msgstr "" msgid "Please cancel and amend the Payment Entry" msgstr "" -#: erpnext/accounts/utils.py:1137 +#: erpnext/accounts/utils.py:1138 msgid "Please cancel payment entry manually first" msgstr "" @@ -34973,7 +35306,7 @@ msgstr "" msgid "Please check either with operations or FG Based Operating Cost." msgstr "" -#: erpnext/stock/doctype/repost_item_valuation/repost_item_valuation.py:531 +#: erpnext/stock/doctype/repost_item_valuation/repost_item_valuation.py:539 msgid "Please check the error message and take necessary actions to fix the error and then restart the reposting again." msgstr "" @@ -34998,7 +35331,7 @@ msgstr "" msgid "Please click on 'Generate Schedule' to get schedule" msgstr "" -#: erpnext/selling/doctype/customer/customer.py:598 +#: erpnext/selling/doctype/customer/customer.py:622 msgid "Please contact any of the following users to extend the credit limits for {0}: {1}" msgstr "" @@ -35006,7 +35339,7 @@ msgstr "" msgid "Please contact any of the following users to {} this transaction." msgstr "" -#: erpnext/selling/doctype/customer/customer.py:591 +#: erpnext/selling/doctype/customer/customer.py:615 msgid "Please contact your administrator to extend the credit limits for {0}." msgstr "" @@ -35070,7 +35403,7 @@ msgstr "" msgid "Please enable {0} in the {1}." msgstr "" -#: erpnext/controllers/selling_controller.py:846 +#: erpnext/controllers/selling_controller.py:853 msgid "Please enable {} in {} to allow same item in multiple rows" msgstr "" @@ -35128,7 +35461,7 @@ msgstr "" msgid "Please enter Item Code to get Batch Number" msgstr "" -#: erpnext/public/js/controllers/transaction.js:2956 +#: erpnext/public/js/controllers/transaction.js:3063 msgid "Please enter Item Code to get batch no" msgstr "" @@ -35225,7 +35558,7 @@ msgstr "" msgid "Please enter quantity for item {0}" msgstr "" -#: erpnext/setup/doctype/employee/employee.py:184 +#: erpnext/setup/doctype/employee/employee.py:183 msgid "Please enter relieving date." msgstr "" @@ -35253,11 +35586,11 @@ msgstr "" msgid "Please enter valid Financial Year Start and End Dates" msgstr "" -#: erpnext/setup/doctype/employee/employee.py:222 +#: erpnext/setup/doctype/employee/employee.py:221 msgid "Please enter {0}" msgstr "" -#: erpnext/public/js/utils/party.js:322 +#: erpnext/public/js/utils/party.js:344 msgid "Please enter {0} first" msgstr "" @@ -35281,7 +35614,7 @@ msgstr "" msgid "Please fix overlapping time slots for {0}." msgstr "" -#: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py:270 +#: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py:272 msgid "Please generate To Delete list before submitting" msgstr "" @@ -35293,7 +35626,7 @@ msgstr "" msgid "Please import accounts against parent company or enable {} in company master." msgstr "" -#: erpnext/setup/doctype/employee/employee.py:181 +#: erpnext/setup/doctype/employee/employee.py:180 msgid "Please make sure the employees above report to another Active employee." msgstr "" @@ -35355,8 +35688,8 @@ msgstr "" msgid "Please select Template Type to download template" msgstr "" -#: erpnext/controllers/taxes_and_totals.py:804 -#: erpnext/public/js/controllers/taxes_and_totals.js:782 +#: erpnext/controllers/taxes_and_totals.py:809 +#: erpnext/public/js/controllers/taxes_and_totals.js:796 msgid "Please select Apply Discount On" msgstr "" @@ -35380,13 +35713,13 @@ msgstr "" msgid "Please select Category first" msgstr "" -#: erpnext/accounts/doctype/payment_entry/payment_entry.js:1505 +#: erpnext/accounts/doctype/payment_entry/payment_entry.js:1508 #: erpnext/public/js/controllers/accounts.js:94 #: erpnext/public/js/controllers/accounts.js:145 msgid "Please select Charge Type first" msgstr "" -#: erpnext/accounts/doctype/journal_entry/journal_entry.js:494 +#: erpnext/accounts/doctype/journal_entry/journal_entry.js:490 msgid "Please select Company" msgstr "" @@ -35395,7 +35728,7 @@ msgstr "" msgid "Please select Company and Posting Date to getting entries" msgstr "" -#: erpnext/accounts/doctype/journal_entry/journal_entry.js:736 +#: erpnext/accounts/doctype/journal_entry/journal_entry.js:732 #: erpnext/manufacturing/doctype/plant_floor/plant_floor.js:28 msgid "Please select Company first" msgstr "" @@ -35440,11 +35773,11 @@ msgstr "" msgid "Please select Periodic Accounting Entry Difference Account" msgstr "" -#: erpnext/accounts/doctype/payment_entry/payment_entry.js:517 +#: erpnext/accounts/doctype/payment_entry/payment_entry.js:518 msgid "Please select Posting Date before selecting Party" msgstr "" -#: erpnext/accounts/doctype/journal_entry/journal_entry.js:737 +#: erpnext/accounts/doctype/journal_entry/journal_entry.js:733 msgid "Please select Posting Date first" msgstr "" @@ -35484,7 +35817,7 @@ msgstr "" msgid "Please select a BOM" msgstr "" -#: erpnext/accounts/party.py:429 +#: erpnext/accounts/party.py:417 #: erpnext/stock/doctype/pick_list/pick_list.py:1617 msgid "Please select a Company" msgstr "" @@ -35493,7 +35826,7 @@ msgstr "" #: erpnext/manufacturing/doctype/bom/bom.js:680 #: erpnext/manufacturing/doctype/bom/bom.py:276 #: erpnext/public/js/controllers/accounts.js:277 -#: erpnext/public/js/controllers/transaction.js:3255 +#: erpnext/public/js/controllers/transaction.js:3362 msgid "Please select a Company first." msgstr "" @@ -35517,7 +35850,7 @@ msgstr "" msgid "Please select a Warehouse" msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.py:1572 +#: erpnext/manufacturing/doctype/job_card/job_card.py:1570 msgid "Please select a Work Order first." msgstr "" @@ -35586,6 +35919,10 @@ msgstr "" msgid "Please select at least one row with difference value" msgstr "" +#: erpnext/public/js/controllers/transaction.js:519 +msgid "Please select at least one schedule." +msgstr "" + #: erpnext/selling/doctype/sales_order/sales_order.js:1296 msgid "Please select atleast one item to continue" msgstr "" @@ -35667,7 +36004,7 @@ msgstr "" msgid "Please select weekly off day" msgstr "" -#: erpnext/accounts/doctype/payment_entry/payment_entry.js:1222 +#: erpnext/accounts/doctype/payment_entry/payment_entry.js:1226 #: erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.py:616 msgid "Please select {0} first" msgstr "" @@ -35790,7 +36127,7 @@ msgstr "" msgid "Please set a default Holiday List for Company {0}" msgstr "" -#: erpnext/setup/doctype/employee/employee.py:273 +#: erpnext/setup/doctype/employee/employee.py:272 msgid "Please set a default Holiday List for Employee {0} or Company {1}" msgstr "" @@ -35839,7 +36176,7 @@ msgstr "" msgid "Please set default Cash or Bank account in Mode of Payments {}" msgstr "" -#: erpnext/accounts/utils.py:2450 +#: erpnext/accounts/utils.py:2451 msgid "Please set default Exchange Gain/Loss Account in Company {}" msgstr "" @@ -35860,7 +36197,7 @@ msgid "Please set default inventory account for item {0}, or their item group or msgstr "" #: erpnext/accounts/doctype/payment_entry/payment_entry.py:278 -#: erpnext/accounts/utils.py:1159 +#: erpnext/accounts/utils.py:1160 msgid "Please set default {0} in Company {1}" msgstr "" @@ -35876,7 +36213,7 @@ msgstr "" msgid "Please set opening number of booked depreciations" msgstr "" -#: erpnext/public/js/controllers/transaction.js:2644 +#: erpnext/public/js/controllers/transaction.js:2751 msgid "Please set recurring after saving" msgstr "" @@ -35892,11 +36229,11 @@ msgstr "" msgid "Please set the Item Code first" msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.py:1635 +#: erpnext/manufacturing/doctype/job_card/job_card.py:1633 msgid "Please set the Target Warehouse in the Job Card" msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.py:1639 +#: erpnext/manufacturing/doctype/job_card/job_card.py:1637 msgid "Please set the WIP Warehouse in the Job Card" msgstr "" @@ -35931,7 +36268,7 @@ msgstr "" msgid "Please set {0} in BOM Creator {1}" msgstr "" -#: erpnext/accounts/doctype/payment_entry/payment_entry.py:1129 +#: erpnext/accounts/doctype/payment_entry/payment_entry.py:1141 msgid "Please set {0} in Company {1} to account for Exchange Gain / Loss" msgstr "" @@ -36127,7 +36464,7 @@ msgstr "" #: erpnext/accounts/doctype/journal_entry/journal_entry.json #: erpnext/accounts/doctype/loyalty_point_entry/loyalty_point_entry.json #: erpnext/accounts/doctype/opening_invoice_creation_tool_item/opening_invoice_creation_tool_item.json -#: erpnext/accounts/doctype/payment_entry/payment_entry.js:886 +#: erpnext/accounts/doctype/payment_entry/payment_entry.js:890 #: erpnext/accounts/doctype/payment_entry/payment_entry.json #: erpnext/accounts/doctype/payment_ledger_entry/payment_ledger_entry.json #: erpnext/accounts/doctype/payment_order/payment_order.json @@ -36203,7 +36540,7 @@ msgstr "" msgid "Posting Date cannot be future date" msgstr "" -#: erpnext/public/js/controllers/transaction.js:1005 +#: erpnext/public/js/controllers/transaction.js:1104 msgid "Posting Date will change to today's date as Edit Posting Date and Time is unchecked. Are you sure want to proceed?" msgstr "" @@ -36419,7 +36756,7 @@ msgid "Preview Required Materials" msgstr "" #: erpnext/accounts/report/balance_sheet/balance_sheet.py:181 -#: erpnext/accounts/report/consolidated_financial_statement/consolidated_financial_statement.py:139 +#: erpnext/accounts/report/consolidated_financial_statement/consolidated_financial_statement.py:142 msgid "Previous Financial Year is not closed" msgstr "" @@ -36893,7 +37230,7 @@ msgstr "" msgid "Print Receipt on Order Complete" msgstr "" -#: erpnext/setup/install.py:104 +#: erpnext/setup/install.py:105 msgid "Print UOM after Quantity" msgstr "" @@ -36911,7 +37248,7 @@ msgstr "" msgid "Print settings updated in respective print format" msgstr "" -#: erpnext/setup/install.py:111 +#: erpnext/setup/install.py:112 msgid "Print taxes with zero amount" msgstr "" @@ -37338,6 +37675,15 @@ msgstr "" msgid "Production Item" msgstr "" +#. Label of the production_item_info_section (Section Break) field in DocType +#. 'BOM' +#. Label of the production_item_info_section (Section Break) field in DocType +#. 'Work Order' +#: erpnext/manufacturing/doctype/bom/bom.json +#: erpnext/manufacturing/doctype/work_order/work_order.json +msgid "Production Item Info" +msgstr "" + #. Label of the production_plan (Link) field in DocType 'Purchase Order Item' #. Name of a DocType #. Label of the production_plan (Link) field in DocType 'Work Order' @@ -37536,11 +37882,6 @@ msgstr "" msgid "Project Name" msgstr "" -#. Label of a Workspace Sidebar Item -#: erpnext/workspace_sidebar/projects.json -msgid "Project Profitability" -msgstr "" - #: erpnext/templates/pages/projects.html:112 msgid "Project Progress:" msgstr "" @@ -37718,6 +38059,11 @@ msgstr "" msgid "Projects Settings" msgstr "" +#. Title of the Module Onboarding 'Projects Onboarding' +#: erpnext/projects/module_onboarding/projects_onboarding/projects_onboarding.json +msgid "Projects Setup" +msgstr "" + #. Name of a role #: erpnext/projects/doctype/activity_cost/activity_cost.json #: erpnext/projects/doctype/activity_type/activity_type.json @@ -37791,10 +38137,13 @@ msgstr "" #. Name of a DocType #. Label of a Link in the CRM Workspace +#. Label of the prospect_name (Link) field in DocType 'Customer' #. Label of a Workspace Sidebar Item #: erpnext/crm/doctype/lead/lead.js:36 erpnext/crm/doctype/lead/lead.js:62 #: erpnext/crm/doctype/prospect/prospect.json -#: erpnext/crm/workspace/crm/crm.json erpnext/workspace_sidebar/crm.json +#: erpnext/crm/workspace/crm/crm.json +#: erpnext/selling/doctype/customer/customer.json +#: erpnext/workspace_sidebar/crm.json msgid "Prospect" msgstr "" @@ -37830,8 +38179,8 @@ msgstr "" msgid "Prospects Engaged But Not Converted" msgstr "" -#: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py:196 -#: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py:781 +#: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py:198 +#: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py:783 msgid "Protected DocType" msgstr "" @@ -37912,7 +38261,7 @@ msgstr "" #: erpnext/accounts/doctype/tax_rule/tax_rule.json #: erpnext/manufacturing/doctype/material_request_plan_item/material_request_plan_item.json #: erpnext/projects/doctype/project/project_dashboard.py:16 -#: erpnext/setup/doctype/company/company.py:463 erpnext/setup/install.py:346 +#: erpnext/setup/doctype/company/company.py:463 erpnext/setup/install.py:377 #: erpnext/stock/doctype/item/item.json #: erpnext/stock/doctype/item_lead_time/item_lead_time.json #: erpnext/stock/doctype/item_reorder/item_reorder.json @@ -38695,11 +39044,11 @@ msgstr "" msgid "Qty To Manufacture" msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.py:1405 +#: erpnext/manufacturing/doctype/work_order/work_order.py:1395 msgid "Qty To Manufacture ({0}) cannot be a fraction for the UOM {2}. To allow this, disable '{1}' in the UOM {2}." msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.py:253 +#: erpnext/manufacturing/doctype/job_card/job_card.py:251 msgid "Qty To Manufacture in the job card cannot be greater than Qty To Manufacture in the work order for the operation {0}.

Solution: Either you can reduce the Qty To Manufacture in the job card or set the 'Overproduction Percentage For Work Order' in the {1}." msgstr "" @@ -38802,7 +39151,7 @@ msgid "Qty to Fetch" msgstr "" #: erpnext/manufacturing/doctype/job_card/job_card.js:304 -#: erpnext/manufacturing/doctype/job_card/job_card.py:874 +#: erpnext/manufacturing/doctype/job_card/job_card.py:872 msgid "Qty to Manufacture" msgstr "" @@ -38935,6 +39284,7 @@ msgstr "" #. Label of the quality_inspection (Link) field in DocType 'Sales Invoice Item' #. Label of the quality_inspection_section_break (Section Break) field in #. DocType 'BOM' +#. Label of the quality_inspection_tab (Tab Break) field in DocType 'BOM' #. Label of the quality_inspection (Link) field in DocType 'Job Card' #. Label of the quality_inspection_section (Section Break) field in DocType #. 'Job Card' @@ -39032,22 +39382,22 @@ msgstr "" msgid "Quality Inspection Template Name" msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.py:783 +#: erpnext/manufacturing/doctype/job_card/job_card.py:781 msgid "Quality Inspection is required for the item {0} before completing the job card {1}" msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.py:794 -#: erpnext/manufacturing/doctype/job_card/job_card.py:803 +#: erpnext/manufacturing/doctype/job_card/job_card.py:792 +#: erpnext/manufacturing/doctype/job_card/job_card.py:801 msgid "Quality Inspection {0} is not submitted for the item: {1}" msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.py:813 -#: erpnext/manufacturing/doctype/job_card/job_card.py:822 +#: erpnext/manufacturing/doctype/job_card/job_card.py:811 +#: erpnext/manufacturing/doctype/job_card/job_card.py:820 msgid "Quality Inspection {0} is rejected for the item: {1}" msgstr "" #: erpnext/public/js/controllers/transaction.js:384 -#: erpnext/stock/doctype/stock_entry/stock_entry.js:197 +#: erpnext/stock/doctype/stock_entry/stock_entry.js:196 msgid "Quality Inspection(s)" msgstr "" @@ -39200,7 +39550,7 @@ msgstr "" #: erpnext/stock/doctype/material_request_item/material_request_item.json #: erpnext/stock/doctype/packing_slip_item/packing_slip_item.json #: erpnext/stock/doctype/pick_list_item/pick_list_item.json -#: erpnext/stock/doctype/stock_entry/stock_entry.js:708 +#: erpnext/stock/doctype/stock_entry/stock_entry.js:725 #: erpnext/stock/doctype/stock_entry_detail/stock_entry_detail.json #: erpnext/stock/doctype/stock_reconciliation_item/stock_reconciliation_item.json #: erpnext/stock/report/batch_item_expiry_status/batch_item_expiry_status.py:36 @@ -39343,11 +39693,11 @@ msgstr "" msgid "Quantity to Manufacture" msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.py:2567 +#: erpnext/manufacturing/doctype/work_order/work_order.py:2563 msgid "Quantity to Manufacture can not be zero for the operation {0}" msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.py:1397 +#: erpnext/manufacturing/doctype/work_order/work_order.py:1387 msgid "Quantity to Manufacture must be greater than 0." msgstr "" @@ -39379,7 +39729,7 @@ msgid "Quart Liquid (US)" msgstr "" #: erpnext/selling/report/sales_analytics/sales_analytics.py:437 -#: erpnext/stock/report/stock_analytics/stock_analytics.py:115 +#: erpnext/stock/report/stock_analytics/stock_analytics.py:125 msgid "Quarter {0} {1}" msgstr "" @@ -39388,11 +39738,11 @@ msgstr "" msgid "Query Route String" msgstr "" -#: erpnext/accounts/doctype/accounts_settings/accounts_settings.py:139 +#: erpnext/accounts/doctype/accounts_settings/accounts_settings.py:176 msgid "Queue Size should be between 5 and 100" msgstr "" -#: erpnext/accounts/doctype/journal_entry/journal_entry.js:625 +#: erpnext/accounts/doctype/journal_entry/journal_entry.js:621 msgid "Quick Journal Entry" msgstr "" @@ -39527,6 +39877,12 @@ msgstr "" msgid "Quoted Amount" msgstr "" +#. Label of the rfq_and_purchase_order_settings_section (Section Break) field +#. in DocType 'Supplier' +#: erpnext/buying/doctype/supplier/supplier.json +msgid "RFQ and Purchase Order Settings" +msgstr "" + #: erpnext/buying/doctype/request_for_quotation/request_for_quotation.py:119 msgid "RFQs are not allowed for {0} due to a scorecard standing of {1}" msgstr "" @@ -40134,7 +40490,7 @@ msgstr "" msgid "Reason for Failure" msgstr "" -#: erpnext/buying/doctype/purchase_order/purchase_order.js:700 +#: erpnext/buying/doctype/purchase_order/purchase_order.js:679 #: erpnext/selling/doctype/sales_order/sales_order.js:1760 msgid "Reason for Hold" msgstr "" @@ -40585,7 +40941,7 @@ msgstr "" msgid "Reference #{0} dated {1}" msgstr "" -#: erpnext/public/js/controllers/transaction.js:2757 +#: erpnext/public/js/controllers/transaction.js:2864 msgid "Reference Date for Early Payment Discount" msgstr "" @@ -40623,7 +40979,7 @@ msgstr "" msgid "Reference No & Reference Date is required for {0}" msgstr "" -#: erpnext/accounts/doctype/payment_entry/payment_entry.py:1210 +#: erpnext/accounts/doctype/payment_entry/payment_entry.py:1222 msgid "Reference No and Reference Date is mandatory for Bank transaction" msgstr "" @@ -40702,6 +41058,7 @@ msgstr "" #. Label of the references_section (Section Break) field in DocType 'Purchase #. Order Item' #. Label of the sb_references (Section Break) field in DocType 'Contract' +#. Label of the references_section (Section Break) field in DocType 'Customer' #. Label of the references_section (Section Break) field in DocType #. 'Subcontracting Order Item' #: erpnext/accounts/doctype/fiscal_year/fiscal_year_dashboard.py:10 @@ -40715,6 +41072,7 @@ msgstr "" #: erpnext/buying/doctype/purchase_order_item/purchase_order_item.json #: erpnext/crm/doctype/contract/contract.json #: erpnext/projects/doctype/timesheet/timesheet_dashboard.py:7 +#: erpnext/selling/doctype/customer/customer.json #: erpnext/subcontracting/doctype/subcontracting_order_item/subcontracting_order_item.json msgid "References" msgstr "" @@ -41140,7 +41498,7 @@ msgstr "" msgid "Report Type is mandatory" msgstr "" -#: erpnext/setup/install.py:206 +#: erpnext/setup/install.py:207 msgid "Report an Issue" msgstr "" @@ -41643,6 +42001,12 @@ msgstr "" msgid "Reserved Batch Conflict" msgstr "" +#. Label of the reserved_inventory_section (Section Break) field in DocType +#. 'Bin' +#: erpnext/stock/doctype/bin/bin.json +msgid "Reserved Inventory" +msgstr "" + #. Label of the reserved_qty (Float) field in DocType 'Bin' #. Label of the reserved_qty (Float) field in DocType 'Stock Reservation Entry' #. Label of the stock_reserved_qty (Float) field in DocType 'Subcontracting @@ -41703,7 +42067,7 @@ msgstr "" msgid "Reserved Quantity for Production" msgstr "" -#: erpnext/stock/stock_ledger.py:2285 +#: erpnext/stock/stock_ledger.py:2281 msgid "Reserved Serial No." msgstr "" @@ -41718,14 +42082,14 @@ msgstr "" #: erpnext/stock/doctype/bin/bin.json #: erpnext/stock/doctype/pick_list/pick_list.js:168 #: erpnext/stock/report/reserved_stock/reserved_stock.json -#: erpnext/stock/report/stock_balance/stock_balance.py:499 -#: erpnext/stock/stock_ledger.py:2269 +#: erpnext/stock/report/stock_balance/stock_balance.py:530 +#: erpnext/stock/stock_ledger.py:2265 #: erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.js:205 #: erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.js:333 msgid "Reserved Stock" msgstr "" -#: erpnext/stock/stock_ledger.py:2314 +#: erpnext/stock/stock_ledger.py:2310 msgid "Reserved Stock for Batch" msgstr "" @@ -42265,11 +42629,46 @@ msgstr "" msgid "Review" msgstr "" +#. Title of an Onboarding Step +#. Label of an action in the Onboarding Step 'Review Accounts Settings' +#: erpnext/accounts/onboarding_step/review_accounts_settings/review_accounts_settings.json +msgid "Review Accounts Settings" +msgstr "" + +#. Title of an Onboarding Step +#. Label of an action in the Onboarding Step 'Review Buying Settings' +#: erpnext/buying/onboarding_step/review_buying_settings/review_buying_settings.json +msgid "Review Buying Settings" +msgstr "" + +#. Title of an Onboarding Step +#: erpnext/accounts/onboarding_step/chart_of_accounts/chart_of_accounts.json +msgid "Review Chart of Accounts" +msgstr "" + #. Label of the review_date (Date) field in DocType 'Task' #: erpnext/projects/doctype/task/task.json msgid "Review Date" msgstr "" +#. Title of an Onboarding Step +#. Label of an action in the Onboarding Step 'Review Manufacturing Settings' +#: erpnext/manufacturing/onboarding_step/review_manufacturing_settings/review_manufacturing_settings.json +msgid "Review Manufacturing Settings" +msgstr "" + +#. Title of an Onboarding Step +#. Label of an action in the Onboarding Step 'Review Selling Settings' +#: erpnext/selling/onboarding_step/review_selling_settings/review_selling_settings.json +msgid "Review Selling Settings" +msgstr "" + +#. Title of an Onboarding Step +#. Label of an action in the Onboarding Step 'Review Stock Settings' +#: erpnext/stock/onboarding_step/review_stock_settings/review_stock_settings.json +msgid "Review Stock Settings" +msgstr "" + #. Label of a Card Break in the Quality Workspace #: erpnext/quality_management/workspace/quality/quality.json msgid "Review and Action" @@ -42461,13 +42860,21 @@ msgid "Round Tax Amount Row-wise" msgstr "" #. Label of the rounded_total (Currency) field in DocType 'POS Invoice' +#. Label of the base_rounded_total (Currency) field in DocType 'Purchase +#. Invoice' #. Label of the rounded_total (Currency) field in DocType 'Purchase Invoice' +#. Label of the base_rounded_total (Currency) field in DocType 'Sales Invoice' #. Label of the rounded_total (Currency) field in DocType 'Sales Invoice' +#. Label of the base_rounded_total (Currency) field in DocType 'Purchase Order' #. Label of the rounded_total (Currency) field in DocType 'Purchase Order' #. Label of the rounded_total (Currency) field in DocType 'Supplier Quotation' #. Label of the rounded_total (Currency) field in DocType 'Quotation' +#. Label of the base_rounded_total (Currency) field in DocType 'Sales Order' #. Label of the rounded_total (Currency) field in DocType 'Sales Order' +#. Label of the base_rounded_total (Currency) field in DocType 'Delivery Note' #. Label of the rounded_total (Currency) field in DocType 'Delivery Note' +#. Label of the base_rounded_total (Currency) field in DocType 'Purchase +#. Receipt' #. Label of the rounded_total (Currency) field in DocType 'Purchase Receipt' #: erpnext/accounts/doctype/pos_invoice/pos_invoice.json #: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json @@ -42484,40 +42891,38 @@ msgid "Rounded Total" msgstr "" #. Label of the base_rounded_total (Currency) field in DocType 'POS Invoice' -#. Label of the base_rounded_total (Currency) field in DocType 'Purchase -#. Invoice' -#. Label of the base_rounded_total (Currency) field in DocType 'Sales Invoice' -#. Label of the base_rounded_total (Currency) field in DocType 'Purchase Order' #. Label of the base_rounded_total (Currency) field in DocType 'Supplier #. Quotation' #. Label of the base_rounded_total (Currency) field in DocType 'Quotation' -#. Label of the base_rounded_total (Currency) field in DocType 'Sales Order' -#. Label of the base_rounded_total (Currency) field in DocType 'Delivery Note' -#. Label of the base_rounded_total (Currency) field in DocType 'Purchase -#. Receipt' #: erpnext/accounts/doctype/pos_invoice/pos_invoice.json -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json -#: erpnext/accounts/doctype/sales_invoice/sales_invoice.json -#: erpnext/buying/doctype/purchase_order/purchase_order.json #: erpnext/buying/doctype/supplier_quotation/supplier_quotation.json #: erpnext/selling/doctype/quotation/quotation.json -#: erpnext/selling/doctype/sales_order/sales_order.json -#: erpnext/stock/doctype/delivery_note/delivery_note.json -#: erpnext/stock/doctype/purchase_receipt/purchase_receipt.json msgid "Rounded Total (Company Currency)" msgstr "" #. Label of the rounding_adjustment (Currency) field in DocType 'POS Invoice' +#. Label of the base_rounding_adjustment (Currency) field in DocType 'Purchase +#. Invoice' #. Label of the rounding_adjustment (Currency) field in DocType 'Purchase #. Invoice' +#. Label of the base_rounding_adjustment (Currency) field in DocType 'Sales +#. Invoice' #. Label of the rounding_adjustment (Currency) field in DocType 'Sales Invoice' +#. Label of the base_rounding_adjustment (Currency) field in DocType 'Purchase +#. Order' #. Label of the rounding_adjustment (Currency) field in DocType 'Purchase #. Order' #. Label of the rounding_adjustment (Currency) field in DocType 'Supplier #. Quotation' #. Label of the rounding_adjustment (Currency) field in DocType 'Quotation' +#. Label of the base_rounding_adjustment (Currency) field in DocType 'Sales +#. Order' #. Label of the rounding_adjustment (Currency) field in DocType 'Sales Order' +#. Label of the base_rounding_adjustment (Currency) field in DocType 'Delivery +#. Note' #. Label of the rounding_adjustment (Currency) field in DocType 'Delivery Note' +#. Label of the base_rounding_adjustment (Currency) field in DocType 'Purchase +#. Receipt' #. Label of the rounding_adjustment (Currency) field in DocType 'Purchase #. Receipt' #: erpnext/accounts/doctype/pos_invoice/pos_invoice.json @@ -42540,28 +42945,10 @@ msgstr "" #. Label of the base_rounding_adjustment (Currency) field in DocType 'POS #. Invoice' -#. Label of the base_rounding_adjustment (Currency) field in DocType 'Purchase -#. Invoice' -#. Label of the base_rounding_adjustment (Currency) field in DocType 'Sales -#. Invoice' -#. Label of the base_rounding_adjustment (Currency) field in DocType 'Purchase -#. Order' #. Label of the base_rounding_adjustment (Currency) field in DocType #. 'Quotation' -#. Label of the base_rounding_adjustment (Currency) field in DocType 'Sales -#. Order' -#. Label of the base_rounding_adjustment (Currency) field in DocType 'Delivery -#. Note' -#. Label of the base_rounding_adjustment (Currency) field in DocType 'Purchase -#. Receipt' #: erpnext/accounts/doctype/pos_invoice/pos_invoice.json -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json -#: erpnext/accounts/doctype/sales_invoice/sales_invoice.json -#: erpnext/buying/doctype/purchase_order/purchase_order.json #: erpnext/selling/doctype/quotation/quotation.json -#: erpnext/selling/doctype/sales_order/sales_order.json -#: erpnext/stock/doctype/delivery_note/delivery_note.json -#: erpnext/stock/doctype/purchase_receipt/purchase_receipt.json msgid "Rounding Adjustment (Company Currency)" msgstr "" @@ -42744,7 +43131,7 @@ msgstr "" msgid "Row #{0}: Cannot set Rate if the billed amount is greater than the amount for Item {1}." msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.py:1112 +#: erpnext/manufacturing/doctype/job_card/job_card.py:1110 msgid "Row #{0}: Cannot transfer more than Required Qty {1} for Item {2} against Job Card {3}" msgstr "" @@ -42891,7 +43278,7 @@ msgstr "" msgid "Row #{0}: From Date cannot be before To Date" msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.py:864 +#: erpnext/manufacturing/doctype/job_card/job_card.py:862 msgid "Row #{0}: From Time and To Time fields are required" msgstr "" @@ -43058,11 +43445,11 @@ msgstr "" msgid "Row #{0}: Rate must be same as {1}: {2} ({3} / {4})" msgstr "" -#: erpnext/accounts/doctype/payment_entry/payment_entry.js:1254 +#: erpnext/accounts/doctype/payment_entry/payment_entry.js:1258 msgid "Row #{0}: Reference Document Type must be one of Purchase Order, Purchase Invoice or Journal Entry" msgstr "" -#: erpnext/accounts/doctype/payment_entry/payment_entry.js:1240 +#: erpnext/accounts/doctype/payment_entry/payment_entry.js:1244 msgid "Row #{0}: Reference Document Type must be one of Sales Order, Sales Invoice, Journal Entry or Dunning" msgstr "" @@ -43364,7 +43751,7 @@ msgstr "" msgid "Row No {0}: Warehouse is required. Please set a Default Warehouse for Item {1} and Company {2}" msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.py:731 +#: erpnext/manufacturing/doctype/job_card/job_card.py:729 msgid "Row {0} : Operation is required against the raw material item {1}" msgstr "" @@ -43446,7 +43833,7 @@ msgstr "" msgid "Row {0}: Debit entry can not be linked with a {1}" msgstr "" -#: erpnext/controllers/selling_controller.py:868 +#: erpnext/controllers/selling_controller.py:875 msgid "Row {0}: Delivery Warehouse ({1}) and Customer Warehouse ({2}) can not be same" msgstr "" @@ -43463,7 +43850,7 @@ msgid "Row {0}: Either Delivery Note Item or Packed Item reference is mandatory. msgstr "" #: erpnext/accounts/doctype/journal_entry/journal_entry.py:1012 -#: erpnext/controllers/taxes_and_totals.py:1335 +#: erpnext/controllers/taxes_and_totals.py:1340 msgid "Row {0}: Exchange Rate is mandatory" msgstr "" @@ -43495,7 +43882,7 @@ msgstr "" msgid "Row {0}: From Time and To Time is mandatory." msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.py:308 +#: erpnext/manufacturing/doctype/job_card/job_card.py:306 #: erpnext/projects/doctype/timesheet/timesheet.py:225 msgid "Row {0}: From Time and To Time of {1} is overlapping with {2}" msgstr "" @@ -43504,7 +43891,7 @@ msgstr "" msgid "Row {0}: From Warehouse is mandatory for internal transfers" msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.py:299 +#: erpnext/manufacturing/doctype/job_card/job_card.py:297 msgid "Row {0}: From time must be less than to time" msgstr "" @@ -43520,7 +43907,7 @@ msgstr "" msgid "Row {0}: Item Tax template updated as per validity and rate applied" msgstr "" -#: erpnext/controllers/selling_controller.py:633 +#: erpnext/controllers/selling_controller.py:640 msgid "Row {0}: Item rate has been updated as per valuation rate since its an internal stock transfer" msgstr "" @@ -43810,7 +44197,7 @@ msgstr "" msgid "SLA Paused On" msgstr "" -#: erpnext/public/js/utils.js:1164 +#: erpnext/public/js/utils.js:1168 msgid "SLA is on hold since {0}" msgstr "" @@ -43909,9 +44296,10 @@ msgstr "" #: erpnext/setup/doctype/company/company.py:649 #: erpnext/setup/doctype/company/company_dashboard.py:9 #: erpnext/setup/doctype/sales_person/sales_person_dashboard.py:12 -#: erpnext/setup/install.py:341 +#: erpnext/setup/install.py:372 #: erpnext/setup/setup_wizard/operations/install_fixtures.py:297 #: erpnext/stock/doctype/item/item.json +#: erpnext/stock/doctype/pick_list/pick_list_dashboard.py:16 msgid "Sales" msgstr "" @@ -44613,6 +45001,11 @@ msgstr "" msgid "Sales Tax Withholding Category" msgstr "" +#. Label of a Workspace Sidebar Item +#: erpnext/workspace_sidebar/accounts_setup.json +msgid "Sales Taxes" +msgstr "" + #. Label of the taxes (Table) field in DocType 'POS Invoice' #. Label of the taxes (Table) field in DocType 'Sales Invoice' #. Name of a DocType @@ -44657,7 +45050,8 @@ msgstr "" #. Label of the section_break2 (Section Break) field in DocType 'POS Invoice' #. Label of the sales_team (Table) field in DocType 'POS Invoice' -#. Label of the section_break2 (Section Break) field in DocType 'Sales Invoice' +#. Label of the sales_team_section (Section Break) field in DocType 'Sales +#. Invoice' #. Label of the sales_team (Table) field in DocType 'Customer' #. Label of the sales_team_tab (Tab Break) field in DocType 'Customer' #. Label of the section_break1 (Section Break) field in DocType 'Sales Order' @@ -44750,7 +45144,7 @@ msgstr "" #. Label of the sample_size (Float) field in DocType 'Quality Inspection' #: erpnext/manufacturing/report/quality_inspection_summary/quality_inspection_summary.py:93 -#: erpnext/public/js/controllers/transaction.js:2814 +#: erpnext/public/js/controllers/transaction.js:2921 #: erpnext/stock/doctype/quality_inspection/quality_inspection.json msgid "Sample Size" msgstr "" @@ -44856,6 +45250,10 @@ msgstr "" msgid "Schedule Date" msgstr "" +#: erpnext/public/js/controllers/transaction.js:486 +msgid "Schedule Name" +msgstr "" + #. Label of the scheduled_date (Date) field in DocType 'Maintenance Schedule #. Detail' #: erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.js:118 @@ -45160,7 +45558,7 @@ msgstr "" msgid "Select Company" msgstr "" -#: erpnext/public/js/print.js:102 +#: erpnext/public/js/print.js:113 msgid "Select Company Address" msgstr "" @@ -45225,7 +45623,7 @@ msgstr "" msgid "Select Items based on Delivery Date" msgstr "" -#: erpnext/public/js/controllers/transaction.js:2853 +#: erpnext/public/js/controllers/transaction.js:2960 msgid "Select Items for Quality Inspection" msgstr "" @@ -45255,6 +45653,10 @@ msgstr "" msgid "Select Loyalty Program" msgstr "" +#: erpnext/public/js/controllers/transaction.js:473 +msgid "Select Payment Schedule" +msgstr "" + #: erpnext/buying/doctype/request_for_quotation/request_for_quotation.js:407 msgid "Select Possible Supplier" msgstr "" @@ -45322,7 +45724,7 @@ msgstr "" msgid "Select a Company this Employee belongs to." msgstr "" -#: erpnext/buying/doctype/supplier/supplier.js:182 +#: erpnext/buying/doctype/supplier/supplier.js:180 msgid "Select a Customer" msgstr "" @@ -45366,7 +45768,7 @@ msgstr "" msgid "Select at least one value from each of the attributes." msgstr "" -#: erpnext/public/js/utils/party.js:357 +#: erpnext/public/js/utils/party.js:379 msgid "Select company first" msgstr "" @@ -45562,6 +45964,11 @@ msgstr "" msgid "Selling Settings" msgstr "" +#. Title of the Module Onboarding 'Selling Onboarding' +#: erpnext/selling/module_onboarding/selling_onboarding/selling_onboarding.json +msgid "Selling Setup" +msgstr "" + #: erpnext/accounts/doctype/pricing_rule/pricing_rule.py:214 msgid "Selling must be checked, if Applicable For is selected as {0}" msgstr "" @@ -45610,7 +46017,7 @@ msgid "Send Emails to Suppliers" msgstr "" #. Label of the send_sms (Button) field in DocType 'SMS Center' -#: erpnext/public/js/controllers/transaction.js:589 +#: erpnext/public/js/controllers/transaction.js:688 #: erpnext/selling/doctype/sms_center/sms_center.json msgid "Send SMS" msgstr "" @@ -45670,6 +46077,11 @@ msgstr "" msgid "Serial & Batch Item Settings" msgstr "" +#. Label of the section_break_jcmx (Section Break) field in DocType 'Job Card' +#: erpnext/manufacturing/doctype/job_card/job_card.json +msgid "Serial / Batch" +msgstr "" + #. Label of the serial_and_batch_bundle (Link) field in DocType 'Stock #. Reconciliation Item' #. Label of the serial_and_batch_bundle (Link) field in DocType 'Subcontracting @@ -45741,7 +46153,7 @@ msgstr "" #: erpnext/manufacturing/doctype/job_card/job_card.json #: erpnext/manufacturing/report/cost_of_poor_quality_report/cost_of_poor_quality_report.js:74 #: erpnext/manufacturing/report/cost_of_poor_quality_report/cost_of_poor_quality_report.py:114 -#: erpnext/public/js/controllers/transaction.js:2827 +#: erpnext/public/js/controllers/transaction.js:2934 #: erpnext/public/js/utils/serial_no_batch_selector.js:421 #: erpnext/selling/doctype/installation_note_item/installation_note_item.json #: erpnext/stock/doctype/delivery_note_item/delivery_note_item.json @@ -45802,7 +46214,7 @@ msgstr "" msgid "Serial No Range" msgstr "" -#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:2539 +#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:2549 msgid "Serial No Reserved" msgstr "" @@ -45859,7 +46271,7 @@ msgstr "" msgid "Serial No and Batch Traceability" msgstr "" -#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:1115 +#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:1125 msgid "Serial No is mandatory" msgstr "" @@ -45888,11 +46300,11 @@ msgstr "" msgid "Serial No {0} does not exist" msgstr "" -#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:3279 +#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:3315 msgid "Serial No {0} does not exists" msgstr "" -#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:359 +#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:369 msgid "Serial No {0} is already Delivered. You cannot use them again in Manufacture / Repack entry." msgstr "" @@ -45904,7 +46316,7 @@ msgstr "" msgid "Serial No {0} is already assigned to customer {1}. Can only be returned against the customer {1}" msgstr "" -#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:431 +#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:441 msgid "Serial No {0} is not present in the {1} {2}, hence you can't return it against the {1} {2}" msgstr "" @@ -45942,15 +46354,15 @@ msgstr "" msgid "Serial Nos and Batches" msgstr "" -#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:1825 +#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:1835 msgid "Serial Nos are created successfully" msgstr "" -#: erpnext/stock/stock_ledger.py:2275 +#: erpnext/stock/stock_ledger.py:2271 msgid "Serial Nos are reserved in Stock Reservation Entries, you need to unreserve them before proceeding." msgstr "" -#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:365 +#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:375 msgid "Serial Nos {0} are already Delivered. You cannot use them again in Manufacture / Repack entry." msgstr "" @@ -46026,11 +46438,11 @@ msgstr "" msgid "Serial and Batch Bundle" msgstr "" -#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:2047 +#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:2057 msgid "Serial and Batch Bundle created" msgstr "" -#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:2119 +#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:2129 msgid "Serial and Batch Bundle updated" msgstr "" @@ -46086,7 +46498,7 @@ msgstr "" msgid "Serial and Batch Summary" msgstr "" -#: erpnext/stock/utils.py:395 +#: erpnext/stock/utils.py:396 msgid "Serial number {0} entered more than once" msgstr "" @@ -46152,7 +46564,7 @@ msgstr "" #: erpnext/accounts/doctype/budget/budget.json #: erpnext/accounts/doctype/cashier_closing/cashier_closing.json #: erpnext/accounts/doctype/dunning/dunning.json -#: erpnext/accounts/doctype/journal_entry/journal_entry.js:659 +#: erpnext/accounts/doctype/journal_entry/journal_entry.js:655 #: erpnext/accounts/doctype/journal_entry/journal_entry.json #: erpnext/accounts/doctype/journal_entry_template/journal_entry_template.json #: erpnext/accounts/doctype/payment_entry/payment_entry.json @@ -46208,7 +46620,7 @@ msgstr "" msgid "Series for Asset Depreciation Entry (Journal Entry)" msgstr "" -#: erpnext/buying/doctype/supplier/supplier.py:142 +#: erpnext/buying/doctype/supplier/supplier.py:143 msgid "Series is mandatory" msgstr "" @@ -46397,12 +46809,12 @@ msgid "Service Stop Date" msgstr "" #: erpnext/accounts/deferred_revenue.py:45 -#: erpnext/public/js/controllers/transaction.js:1671 +#: erpnext/public/js/controllers/transaction.js:1770 msgid "Service Stop Date cannot be after Service End Date" msgstr "" #: erpnext/accounts/deferred_revenue.py:42 -#: erpnext/public/js/controllers/transaction.js:1668 +#: erpnext/public/js/controllers/transaction.js:1767 msgid "Service Stop Date cannot be before Service Start Date" msgstr "" @@ -46737,7 +47149,7 @@ msgid "Setting up company" msgstr "" #: erpnext/manufacturing/doctype/bom/bom.py:1182 -#: erpnext/manufacturing/doctype/work_order/work_order.py:1461 +#: erpnext/manufacturing/doctype/work_order/work_order.py:1451 msgid "Setting {0} is required" msgstr "" @@ -46757,6 +47169,21 @@ msgstr "" msgid "Settled" msgstr "" +#. Label of an action in the Onboarding Step 'Setup Sales taxes' +#: erpnext/accounts/onboarding_step/setup_sales_taxes/setup_sales_taxes.json +msgid "Setup Sales Taxes" +msgstr "" + +#. Title of an Onboarding Step +#: erpnext/accounts/onboarding_step/setup_sales_taxes/setup_sales_taxes.json +msgid "Setup Sales taxes" +msgstr "" + +#. Title of an Onboarding Step +#: erpnext/stock/onboarding_step/setup_warehouse/setup_warehouse.json +msgid "Setup Warehouse" +msgstr "" + #: erpnext/public/js/setup_wizard.js:25 msgid "Setup your organization" msgstr "" @@ -47161,7 +47588,7 @@ msgstr "" msgid "Show GL Balance" msgstr "" -#: erpnext/accounts/report/consolidated_trial_balance/consolidated_trial_balance.js:91 +#: erpnext/accounts/report/consolidated_trial_balance/consolidated_trial_balance.js:97 #: erpnext/accounts/report/trial_balance/trial_balance.js:117 msgid "Show Group Accounts" msgstr "" @@ -47300,6 +47727,7 @@ msgstr "" msgid "Show negative values as positive (for expenses in P&L)" msgstr "" +#: erpnext/accounts/report/consolidated_trial_balance/consolidated_trial_balance.js:91 #: erpnext/accounts/report/trial_balance/trial_balance.js:111 msgid "Show net values in opening and closing columns" msgstr "" @@ -47312,7 +47740,7 @@ msgstr "" msgid "Show only the Immediate Upcoming Term" msgstr "" -#: erpnext/stock/utils.py:557 +#: erpnext/stock/utils.py:558 msgid "Show pending entries" msgstr "" @@ -47460,7 +47888,7 @@ msgstr "" msgid "Skip Material Transfer to WIP Warehouse" msgstr "" -#: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py:561 +#: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py:563 msgid "Skipped {0} DocType(s):
{1}" msgstr "" @@ -47609,7 +48037,7 @@ msgstr "" #: erpnext/selling/doctype/sales_order_item/sales_order_item.json #: erpnext/stock/dashboard/item_dashboard.js:227 #: erpnext/stock/doctype/material_request_item/material_request_item.json -#: erpnext/stock/doctype/stock_entry/stock_entry.js:699 +#: erpnext/stock/doctype/stock_entry/stock_entry.js:716 #: erpnext/stock/doctype/stock_entry_detail/stock_entry_detail.json msgid "Source Warehouse" msgstr "" @@ -47729,7 +48157,7 @@ msgstr "" msgid "Split Quantity must be less than Asset Quantity" msgstr "" -#: erpnext/accounts/doctype/payment_entry/payment_entry.py:2441 +#: erpnext/accounts/doctype/payment_entry/payment_entry.py:2453 msgid "Splitting {0} {1} into {2} rows as per Payment Terms" msgstr "" @@ -47787,7 +48215,7 @@ msgstr "" msgid "Stale Days" msgstr "" -#: erpnext/accounts/doctype/accounts_settings/accounts_settings.py:109 +#: erpnext/accounts/doctype/accounts_settings/accounts_settings.py:146 msgid "Stale Days should start from 1." msgstr "" @@ -47913,11 +48341,6 @@ msgstr "" msgid "Start date should be less than end date for task {0}" msgstr "" -#. Label of the started_time (Datetime) field in DocType 'Job Card' -#: erpnext/manufacturing/doctype/job_card/job_card.json -msgid "Started Time" -msgstr "" - #: erpnext/utilities/bulk_transaction.py:44 msgid "Started a background job to create {1} {0}. {2}" msgstr "" @@ -47956,6 +48379,11 @@ msgstr "" msgid "Status Illustration" msgstr "" +#. Label of the section_break_dfoc (Section Break) field in DocType 'Job Card' +#: erpnext/manufacturing/doctype/job_card/job_card.json +msgid "Status and Reference" +msgstr "" + #: erpnext/projects/doctype/project/project.py:712 msgid "Status must be Cancelled or Completed" msgstr "" @@ -48049,7 +48477,7 @@ msgstr "" #. Label of a Workspace Sidebar Item #: erpnext/selling/doctype/quotation_item/quotation_item.json #: erpnext/stock/doctype/item/item.js:90 -#: erpnext/stock/doctype/warehouse/warehouse.js:61 +#: erpnext/stock/doctype/warehouse/warehouse.js:62 #: erpnext/stock/report/stock_balance/stock_balance.json #: erpnext/stock/report/warehouse_wise_stock_balance/warehouse_wise_stock_balance.py:107 #: erpnext/stock/workspace/stock/stock.json @@ -48171,7 +48599,7 @@ msgstr "" msgid "Stock Entry {0} created" msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.py:1498 +#: erpnext/manufacturing/doctype/job_card/job_card.py:1496 msgid "Stock Entry {0} has created" msgstr "" @@ -48444,7 +48872,7 @@ msgstr "" #: erpnext/controllers/subcontracting_inward_controller.py:1003 #: erpnext/manufacturing/doctype/production_plan/production_plan.py:2234 -#: erpnext/manufacturing/doctype/work_order/work_order.py:2109 +#: erpnext/manufacturing/doctype/work_order/work_order.py:2100 #: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1777 msgid "Stock Reservation Entries Created" msgstr "" @@ -48509,7 +48937,7 @@ msgstr "" #. Name of a DocType #. Label of a Link in the Stock Workspace #. Label of a Workspace Sidebar Item -#: erpnext/selling/doctype/selling_settings/selling_settings.py:94 +#: erpnext/selling/doctype/selling_settings/selling_settings.py:115 #: erpnext/setup/doctype/company/company.json #: erpnext/setup/workspace/erpnext_settings/erpnext_settings.json #: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:675 @@ -48520,6 +48948,11 @@ msgstr "" msgid "Stock Settings" msgstr "" +#. Title of the Module Onboarding 'Stock Onboarding' +#: erpnext/stock/module_onboarding/stock_onboarding/stock_onboarding.json +msgid "Stock Setup" +msgstr "" + #. Label of the stock_summary_tab (Tab Break) field in DocType 'Plant Floor' #. Label of the stock_summary (HTML) field in DocType 'Plant Floor' #. Label of a Link in the Stock Workspace @@ -48620,7 +49053,7 @@ msgstr "" #: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.json #: erpnext/stock/report/batch_item_expiry_status/batch_item_expiry_status.py:35 #: erpnext/stock/report/reserved_stock/reserved_stock.py:110 -#: erpnext/stock/report/stock_balance/stock_balance.py:438 +#: erpnext/stock/report/stock_balance/stock_balance.py:469 #: erpnext/stock/report/stock_ledger/stock_ledger.py:215 #: erpnext/subcontracting/doctype/subcontracting_inward_order_item/subcontracting_inward_order_item.json #: erpnext/subcontracting/doctype/subcontracting_inward_order_received_item/subcontracting_inward_order_received_item.json @@ -48786,7 +49219,7 @@ msgstr "" msgid "Stock will be reserved on submission of Purchase Receipt created against Material Request for Sales Order." msgstr "" -#: erpnext/stock/utils.py:548 +#: erpnext/stock/utils.py:549 msgid "Stock/Accounts can not be frozen as processing of backdated entries is going on. Please try again later." msgstr "" @@ -48801,7 +49234,7 @@ msgstr "" msgid "Stop Reason" msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.py:1071 +#: erpnext/manufacturing/doctype/work_order/work_order.py:1065 msgid "Stopped Work Order cannot be cancelled, Unstop it first to cancel" msgstr "" @@ -49221,6 +49654,11 @@ msgstr "" msgid "Subcontracting Settings" msgstr "" +#. Title of the Module Onboarding 'Subcontracting Onboarding' +#: erpnext/subcontracting/module_onboarding/subcontracting_onboarding/subcontracting_onboarding.json +msgid "Subcontracting Setup" +msgstr "" + #. Label of the subdivision (Autocomplete) field in DocType 'Holiday List' #: erpnext/setup/doctype/holiday_list/holiday_list.json msgid "Subdivision" @@ -49255,6 +49693,8 @@ msgstr "" msgid "Submit your Quotation" msgstr "" +#. Label of the subscription_section (Section Break) field in DocType 'Journal +#. Entry' #. Label of the subscription (Link) field in DocType 'Process Subscription' #. Label of the subscription_section (Section Break) field in DocType 'Purchase #. Invoice' @@ -49267,6 +49707,7 @@ msgstr "" #. Label of a Desktop Icon #. Title of a Workspace Sidebar #. Label of a Workspace Sidebar Item +#: erpnext/accounts/doctype/journal_entry/journal_entry.json #: erpnext/accounts/doctype/process_subscription/process_subscription.json #: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json #: erpnext/accounts/doctype/purchase_invoice/purchase_invoice_dashboard.py:26 @@ -49337,8 +49778,6 @@ msgstr "" msgid "Subscription Price Based On" msgstr "" -#. Label of the subscription_section (Section Break) field in DocType 'Journal -#. Entry' #. Label of the subscription_section (Section Break) field in DocType 'Payment #. Entry' #. Label of the subscription_section (Section Break) field in DocType 'Payment @@ -49347,7 +49786,6 @@ msgstr "" #. Invoice' #. Label of the subscription_section (Section Break) field in DocType 'Delivery #. Note' -#: erpnext/accounts/doctype/journal_entry/journal_entry.json #: erpnext/accounts/doctype/payment_entry/payment_entry.json #: erpnext/accounts/doctype/payment_request/payment_request.json #: erpnext/accounts/doctype/pos_invoice/pos_invoice.json @@ -49433,7 +49871,7 @@ msgstr "" msgid "Successfully imported {0} records." msgstr "" -#: erpnext/buying/doctype/supplier/supplier.js:204 +#: erpnext/buying/doctype/supplier/supplier.js:202 msgid "Successfully linked to Customer" msgstr "" @@ -49826,6 +50264,8 @@ msgid "Supplier Number At Customer" msgstr "" #. Label of the supplier_numbers (Table) field in DocType 'Customer' +#. Label of the supplier_numbers_section (Section Break) field in DocType +#. 'Customer' #: erpnext/selling/doctype/customer/customer.json msgid "Supplier Numbers" msgstr "" @@ -49872,7 +50312,7 @@ msgstr "" #. Label of a Link in the Buying Workspace #. Label of the supplier_quotation (Link) field in DocType 'Quotation' #. Label of a Workspace Sidebar Item -#: erpnext/buying/doctype/purchase_order/purchase_order.js:565 +#: erpnext/buying/doctype/purchase_order/purchase_order.js:544 #: erpnext/buying/doctype/purchase_order/purchase_order.json #: erpnext/buying/doctype/purchase_order_item/purchase_order_item.json #: erpnext/buying/doctype/request_for_quotation/request_for_quotation.js:40 @@ -50350,7 +50790,7 @@ msgstr "" #: erpnext/stock/dashboard/item_dashboard.js:234 #: erpnext/stock/doctype/delivery_note_item/delivery_note_item.json #: erpnext/stock/doctype/material_request_item/material_request_item.json -#: erpnext/stock/doctype/stock_entry/stock_entry.js:705 +#: erpnext/stock/doctype/stock_entry/stock_entry.js:722 #: erpnext/stock/doctype/stock_entry_detail/stock_entry_detail.json msgid "Target Warehouse" msgstr "" @@ -50378,7 +50818,7 @@ msgstr "" msgid "Target Warehouse is required before Submit" msgstr "" -#: erpnext/controllers/selling_controller.py:874 +#: erpnext/controllers/selling_controller.py:881 msgid "Target Warehouse is set for some items but the customer is not an internal customer." msgstr "" @@ -50715,6 +51155,12 @@ msgstr "" msgid "Tax Type" msgstr "" +#. Label of the tax_withholding_tab (Tab Break) field in DocType 'Journal +#. Entry' +#: erpnext/accounts/doctype/journal_entry/journal_entry.json +msgid "Tax Withholding" +msgstr "" + #. Name of a DocType #: erpnext/accounts/doctype/tax_withholding_account/tax_withholding_account.json msgid "Tax Withholding Account" @@ -50773,8 +51219,6 @@ msgstr "" msgid "Tax Withholding Entries" msgstr "" -#. Label of the section_tax_withholding_entry (Section Break) field in DocType -#. 'Journal Entry' #. Label of the section_tax_withholding_entry (Section Break) field in DocType #. 'Payment Entry' #. Label of the section_tax_withholding_entry (Section Break) field in DocType @@ -50782,7 +51226,6 @@ msgstr "" #. Label of the section_tax_withholding_entry (Section Break) field in DocType #. 'Sales Invoice' #. Name of a DocType -#: erpnext/accounts/doctype/journal_entry/journal_entry.json #: erpnext/accounts/doctype/payment_entry/payment_entry.json #: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json #: erpnext/accounts/doctype/sales_invoice/sales_invoice.json @@ -50856,7 +51299,7 @@ msgstr "" #. Detail' #: erpnext/accounts/doctype/item_wise_tax_detail/item_wise_tax_detail.json #: erpnext/accounts/report/tax_withholding_details/tax_withholding_details.py:157 -#: erpnext/controllers/taxes_and_totals.py:1207 +#: erpnext/controllers/taxes_and_totals.py:1212 msgid "Taxable Amount" msgstr "" @@ -51429,7 +51872,7 @@ msgstr "" msgid "The Loyalty Program isn't valid for the selected company" msgstr "" -#: erpnext/accounts/doctype/payment_request/payment_request.py:981 +#: erpnext/accounts/doctype/payment_request/payment_request.py:1106 msgid "The Payment Request {0} is already paid, cannot process payment twice" msgstr "" @@ -51453,7 +51896,7 @@ msgstr "" msgid "The Serial No at Row #{0}: {1} is not available in warehouse {2}." msgstr "" -#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:2536 +#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:2546 msgid "The Serial No {0} is reserved against the {1} {2} and cannot be used for any other transaction." msgstr "" @@ -51471,11 +51914,11 @@ msgstr "" msgid "The account head under Liability or Equity, in which Profit/Loss will be booked" msgstr "" -#: erpnext/accounts/doctype/payment_request/payment_request.py:876 +#: erpnext/accounts/doctype/payment_request/payment_request.py:1001 msgid "The allocated amount is greater than the outstanding amount of Payment Request {0}" msgstr "" -#: erpnext/accounts/doctype/payment_request/payment_request.py:175 +#: erpnext/accounts/doctype/payment_request/payment_request.py:198 msgid "The amount of {0} set in this payment request is different from the calculated amount of all payment plans: {1}. Make sure this is correct before submitting the document." msgstr "" @@ -51483,7 +51926,7 @@ msgstr "" msgid "The batch {0} is already reserved in {1} {2}. So, cannot proceed with the {3} {4}, which is created against the {5} {6}." msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.py:1304 +#: erpnext/manufacturing/doctype/job_card/job_card.py:1302 msgid "The completed quantity {0} of an operation {1} cannot be greater than the completed quantity {2} of a previous operation {3}." msgstr "" @@ -51560,7 +52003,7 @@ msgstr "" msgid "The following deleted attributes exist in Variants but not in the Template. You can either delete the Variants or keep the attribute(s) in template." msgstr "" -#: erpnext/setup/doctype/employee/employee.py:176 +#: erpnext/setup/doctype/employee/employee.py:175 msgid "The following employees are currently still reporting to {0}:" msgstr "" @@ -51568,6 +52011,12 @@ msgstr "" msgid "The following invalid Pricing Rules are deleted:" msgstr "" +#: erpnext/accounts/doctype/payment_request/payment_request.py:622 +msgid "" +"The following payment schedule(s) already exist:\n" +"{0}" +msgstr "" + #: erpnext/assets/doctype/asset_repair/asset_repair.py:112 msgid "The following rows are duplicates:" msgstr "" @@ -51647,7 +52096,7 @@ msgstr "" msgid "The parent account {0} does not exists in the uploaded template" msgstr "" -#: erpnext/accounts/doctype/payment_request/payment_request.py:164 +#: erpnext/accounts/doctype/payment_request/payment_request.py:187 msgid "The payment gateway account in plan {0} is different from the payment gateway account in this payment request" msgstr "" @@ -51806,11 +52255,11 @@ msgstr "" msgid "The warehouse where your Items will be transferred when you begin production. Group Warehouse can also be selected as a Work in Progress warehouse." msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.py:877 +#: erpnext/manufacturing/doctype/job_card/job_card.py:875 msgid "The {0} ({1}) must be equal to {2} ({3})" msgstr "" -#: erpnext/public/js/controllers/transaction.js:3294 +#: erpnext/public/js/controllers/transaction.js:3401 msgid "The {0} contains Unit Price Items." msgstr "" @@ -51826,7 +52275,7 @@ msgstr "" msgid "The {0} {1} does not match with the {0} {2} in the {3} {4}" msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.py:980 +#: erpnext/manufacturing/doctype/job_card/job_card.py:978 msgid "The {0} {1} is used to calculate the valuation cost for the finished good {2}." msgstr "" @@ -51870,7 +52319,7 @@ msgstr "" msgid "There can be multiple tiered collection factor based on the total spent. But the conversion factor for redemption will always be same for all the tier." msgstr "" -#: erpnext/accounts/party.py:587 +#: erpnext/accounts/party.py:575 msgid "There can only be 1 Account per Company in {0} {1}" msgstr "" @@ -51911,7 +52360,7 @@ msgstr "" msgid "There was an issue connecting to Plaid's authentication server. Check browser console for more information" msgstr "" -#: erpnext/accounts/utils.py:1135 +#: erpnext/accounts/utils.py:1136 msgid "There were issues unlinking payment entry {0}." msgstr "" @@ -52162,7 +52611,7 @@ msgstr "" msgid "This will restrict user access to other employee records" msgstr "" -#: erpnext/controllers/selling_controller.py:875 +#: erpnext/controllers/selling_controller.py:882 msgid "This {} will be treated as material transfer." msgstr "" @@ -52273,7 +52722,7 @@ msgstr "" msgid "Time in mins." msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.py:856 +#: erpnext/manufacturing/doctype/job_card/job_card.py:854 msgid "Time logs are required for {0} {1}" msgstr "" @@ -52630,7 +53079,7 @@ msgstr "" msgid "To cancel this Sales Invoice you need to cancel the POS Closing Entry {}." msgstr "" -#: erpnext/accounts/doctype/payment_request/payment_request.py:118 +#: erpnext/accounts/doctype/payment_request/payment_request.py:139 msgid "To create a Payment Request reference document is required" msgstr "" @@ -52648,7 +53097,7 @@ msgstr "" msgid "To include sub-assembly costs and scrap items in Finished Goods on a work order without using a job card, when the 'Use Multi-Level BOM' option is enabled." msgstr "" -#: erpnext/accounts/doctype/payment_entry/payment_entry.py:2231 +#: erpnext/accounts/doctype/payment_entry/payment_entry.py:2243 #: erpnext/controllers/accounts_controller.py:3234 msgid "To include tax in row {0} in Item rate, taxes in rows {1} must also be included" msgstr "" @@ -52723,26 +53172,6 @@ msgstr "" msgid "Too many columns. Export the report and print it using a spreadsheet application." msgstr "" -#. Label of a Card Break in the Manufacturing Workspace -#. Label of the tools (Column Break) field in DocType 'Email Digest' -#. Label of a Card Break in the Stock Workspace -#. Label of a Workspace Sidebar Item -#: erpnext/buying/doctype/purchase_order/purchase_order.js:599 -#: erpnext/buying/doctype/purchase_order/purchase_order.js:675 -#: erpnext/buying/doctype/request_for_quotation/request_for_quotation.js:61 -#: erpnext/buying/doctype/request_for_quotation/request_for_quotation.js:148 -#: erpnext/buying/doctype/request_for_quotation/request_for_quotation.js:452 -#: erpnext/buying/doctype/request_for_quotation/request_for_quotation.js:461 -#: erpnext/buying/doctype/supplier_quotation/supplier_quotation.js:84 -#: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.js:123 -#: erpnext/manufacturing/workspace/manufacturing/manufacturing.json -#: erpnext/setup/doctype/email_digest/email_digest.json -#: erpnext/stock/workspace/stock/stock.json -#: erpnext/workspace_sidebar/manufacturing.json -#: erpnext/workspace_sidebar/stock.json -msgid "Tools" -msgstr "" - #. Name of a UOM #: erpnext/setup/setup_wizard/data/uom_data.json msgid "Torr" @@ -52954,12 +53383,12 @@ msgstr "" #. Label of the total_completed_qty (Float) field in DocType 'Job Card' #: erpnext/manufacturing/doctype/job_card/job_card.json -#: erpnext/manufacturing/doctype/job_card/job_card.py:873 +#: erpnext/manufacturing/doctype/job_card/job_card.py:871 #: erpnext/manufacturing/report/job_card_summary/job_card_summary.py:174 msgid "Total Completed Qty" msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.py:190 +#: erpnext/manufacturing/doctype/job_card/job_card.py:188 msgid "Total Completed Qty is required for Job Card {0}, please start and complete the job card before submission" msgstr "" @@ -53228,7 +53657,7 @@ msgstr "" msgid "Total Payment Amount in Payment Schedule must be equal to Grand / Rounded Total" msgstr "" -#: erpnext/accounts/doctype/payment_request/payment_request.py:143 +#: erpnext/accounts/doctype/payment_request/payment_request.py:166 msgid "Total Payment Request amount cannot be greater than {0} amount" msgstr "" @@ -53528,7 +53957,7 @@ msgstr "" msgid "Total allocated percentage for sales team should be 100" msgstr "" -#: erpnext/selling/doctype/customer/customer.py:168 +#: erpnext/selling/doctype/customer/customer.py:192 msgid "Total contribution percentage should be equal to 100" msgstr "" @@ -53557,8 +53986,8 @@ msgstr "" msgid "Total quantity in delivery schedule cannot be greater than the item quantity" msgstr "" -#: erpnext/accounts/report/consolidated_financial_statement/consolidated_financial_statement.py:746 -#: erpnext/accounts/report/consolidated_financial_statement/consolidated_financial_statement.py:747 +#: erpnext/accounts/report/consolidated_financial_statement/consolidated_financial_statement.py:756 +#: erpnext/accounts/report/consolidated_financial_statement/consolidated_financial_statement.py:757 #: erpnext/accounts/report/financial_statements.py:352 #: erpnext/accounts/report/financial_statements.py:353 msgid "Total {0} ({1})" @@ -53576,6 +54005,27 @@ msgstr "" msgid "Total(Qty)" msgstr "" +#. Label of the base_totals_section (Section Break) field in DocType 'Purchase +#. Invoice' +#. Label of the base_totals_section (Section Break) field in DocType 'Sales +#. Invoice' +#. Label of the base_totals_section (Section Break) field in DocType 'Purchase +#. Order' +#. Label of the base_totals_section (Section Break) field in DocType 'Sales +#. Order' +#. Label of the base_totals_section (Section Break) field in DocType 'Delivery +#. Note' +#. Label of the base_totals_section (Section Break) field in DocType 'Purchase +#. Receipt' +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json +#: erpnext/accounts/doctype/sales_invoice/sales_invoice.json +#: erpnext/buying/doctype/purchase_order/purchase_order.json +#: erpnext/selling/doctype/sales_order/sales_order.json +#: erpnext/stock/doctype/delivery_note/delivery_note.json +#: erpnext/stock/doctype/purchase_receipt/purchase_receipt.json +msgid "Totals (Company Currency)" +msgstr "" + #: erpnext/stock/doctype/item/item_dashboard.py:33 msgid "Traceability" msgstr "" @@ -53685,11 +54135,11 @@ msgstr "" msgid "Transaction Deletion Record To Delete" msgstr "" -#: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py:1098 +#: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py:1100 msgid "Transaction Deletion Record {0} is already running. {1}" msgstr "" -#: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py:1117 +#: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py:1119 msgid "Transaction Deletion Record {0} is currently deleting {1}. Cannot save documents until deletion completes." msgstr "" @@ -53751,7 +54201,7 @@ msgstr "" msgid "Transaction Type" msgstr "" -#: erpnext/accounts/doctype/payment_request/payment_request.py:153 +#: erpnext/accounts/doctype/payment_request/payment_request.py:176 msgid "Transaction currency must be same as Payment Gateway currency" msgstr "" @@ -53775,11 +54225,11 @@ msgstr "" msgid "Transaction from which tax is withheld" msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.py:849 +#: erpnext/manufacturing/doctype/job_card/job_card.py:847 msgid "Transaction not allowed against stopped Work Order {0}" msgstr "" -#: erpnext/accounts/doctype/payment_entry/payment_entry.py:1236 +#: erpnext/accounts/doctype/payment_entry/payment_entry.py:1248 msgid "Transaction reference no {0} dated {1}" msgstr "" @@ -54216,7 +54666,7 @@ msgstr "" #: erpnext/stock/report/item_prices/item_prices.py:55 #: erpnext/stock/report/product_bundle_balance/product_bundle_balance.py:94 #: erpnext/stock/report/stock_ageing/stock_ageing.py:178 -#: erpnext/stock/report/stock_analytics/stock_analytics.py:44 +#: erpnext/stock/report/stock_analytics/stock_analytics.py:59 #: erpnext/stock/report/stock_projected_qty/stock_projected_qty.py:134 #: erpnext/stock/report/supplier_wise_sales_analytics/supplier_wise_sales_analytics.py:60 #: erpnext/subcontracting/doctype/subcontracting_inward_order_service_item/subcontracting_inward_order_service_item.json @@ -54311,6 +54761,24 @@ msgstr "" msgid "URL can only be a string" msgstr "" +#. Label of the utm_analytics_section (Section Break) field in DocType 'POS +#. Invoice' +#. Label of the utm_analytics_section (Section Break) field in DocType 'Sales +#. Invoice' +#. Label of the utm_analytics_section (Section Break) field in DocType +#. 'Quotation' +#. Label of the utm_analytics_section (Section Break) field in DocType 'Sales +#. Order' +#. Label of the utm_analytics_section (Section Break) field in DocType +#. 'Delivery Note' +#: erpnext/accounts/doctype/pos_invoice/pos_invoice.json +#: erpnext/accounts/doctype/sales_invoice/sales_invoice.json +#: erpnext/selling/doctype/quotation/quotation.json +#: erpnext/selling/doctype/sales_order/sales_order.json +#: erpnext/stock/doctype/delivery_note/delivery_note.json +msgid "UTM Analytics" +msgstr "" + #. Option for the 'Data Fetch Method' (Select) field in DocType 'Accounts #. Settings' #: erpnext/accounts/doctype/accounts_settings/accounts_settings.json @@ -54326,7 +54794,7 @@ msgstr "" msgid "UnReconcile Allocations" msgstr "" -#: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py:464 +#: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py:466 msgid "Unable to fetch DocType details. Please contact system administrator." msgstr "" @@ -54343,7 +54811,7 @@ msgstr "" msgid "Unable to find score starting at {0}. You need to have standing scores covering 0 to 100" msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.py:1029 +#: erpnext/manufacturing/doctype/work_order/work_order.py:1023 msgid "Unable to find the time slot in the next {0} days for the operation {1}. Please increase the 'Capacity Planning For (Days)' in the {2}." msgstr "" @@ -54374,8 +54842,8 @@ msgstr "" #: erpnext/accounts/report/balance_sheet/balance_sheet.py:83 #: erpnext/accounts/report/balance_sheet/balance_sheet.py:84 -#: erpnext/accounts/report/consolidated_financial_statement/consolidated_financial_statement.py:87 -#: erpnext/accounts/report/consolidated_financial_statement/consolidated_financial_statement.py:88 +#: erpnext/accounts/report/consolidated_financial_statement/consolidated_financial_statement.py:90 +#: erpnext/accounts/report/consolidated_financial_statement/consolidated_financial_statement.py:91 msgid "Unclosed Fiscal Years Profit / Loss (Credit)" msgstr "" @@ -54415,7 +54883,7 @@ msgstr "" msgid "Under Working Hours table, you can add start and end times for a Workstation. For example, a Workstation may be active from 9 am to 1 pm, then 2 pm to 5 pm. You can also specify the working hours based on shifts. While scheduling a Work Order, the system will check for the availability of the Workstation based on the working hours specified." msgstr "" -#: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py:933 +#: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py:935 msgid "Unexpected Naming Series Pattern" msgstr "" @@ -54625,7 +55093,7 @@ msgstr "" msgid "Unsecured Loans" msgstr "" -#: erpnext/accounts/doctype/payment_entry/payment_entry.js:1727 +#: erpnext/accounts/doctype/payment_entry/payment_entry.js:1730 msgid "Unset Matched Payment Request" msgstr "" @@ -54820,7 +55288,7 @@ msgstr "" msgid "Update Rate and Availability" msgstr "" -#: erpnext/buying/doctype/purchase_order/purchase_order.js:588 +#: erpnext/buying/doctype/purchase_order/purchase_order.js:567 msgid "Update Rate as per Last Purchase" msgstr "" @@ -54894,7 +55362,7 @@ msgstr "" msgid "Updating Work Order status" msgstr "" -#: erpnext/public/js/print.js:140 +#: erpnext/public/js/print.js:151 msgid "Updating details." msgstr "" @@ -55107,7 +55575,7 @@ msgstr "" msgid "Used with Financial Report Template" msgstr "" -#: erpnext/setup/install.py:194 +#: erpnext/setup/install.py:195 msgid "User Forum" msgstr "" @@ -55118,7 +55586,7 @@ msgstr "" #. Label of the user_remark (Small Text) field in DocType 'Journal Entry' #. Label of the user_remark (Small Text) field in DocType 'Journal Entry #. Account' -#: erpnext/accounts/doctype/journal_entry/journal_entry.js:655 +#: erpnext/accounts/doctype/journal_entry/journal_entry.js:651 #: erpnext/accounts/doctype/journal_entry/journal_entry.json #: erpnext/accounts/doctype/journal_entry_account/journal_entry_account.json msgid "User Remark" @@ -55133,7 +55601,7 @@ msgstr "" msgid "User has not applied rule on the invoice {0}" msgstr "" -#: erpnext/setup/doctype/employee/employee.py:191 +#: erpnext/setup/doctype/employee/employee.py:190 msgid "User {0} does not exist" msgstr "" @@ -55141,15 +55609,15 @@ msgstr "" msgid "User {0} doesn't have any default POS Profile. Check Default at Row {1} for this User." msgstr "" -#: erpnext/setup/doctype/employee/employee.py:208 +#: erpnext/setup/doctype/employee/employee.py:207 msgid "User {0} is already assigned to Employee {1}" msgstr "" -#: erpnext/setup/doctype/employee/employee.py:246 +#: erpnext/setup/doctype/employee/employee.py:245 msgid "User {0}: Removed Employee Self Service role as there is no mapped employee." msgstr "" -#: erpnext/setup/doctype/employee/employee.py:241 +#: erpnext/setup/doctype/employee/employee.py:240 msgid "User {0}: Removed Employee role as there is no mapped employee." msgstr "" @@ -55157,18 +55625,18 @@ msgstr "" msgid "User {} is disabled. Please select valid user/cashier" msgstr "" -#. Description of the 'Track Semi Finished Goods' (Check) field in DocType -#. 'BOM' -#: erpnext/manufacturing/doctype/bom/bom.json -msgid "Users can consume raw materials and add semi-finished goods or final finished goods against the operation using job cards." -msgstr "" - #. Description of the 'Set Landed Cost Based on Purchase Invoice Rate' (Check) #. field in DocType 'Buying Settings' #: erpnext/buying/doctype/buying_settings/buying_settings.json msgid "Users can enable the checkbox If they want to adjust the incoming rate (set using purchase receipt) based on the purchase invoice rate." msgstr "" +#. Description of the 'Track Semi Finished Goods' (Check) field in DocType +#. 'BOM' +#: erpnext/manufacturing/doctype/bom/bom.json +msgid "Users can make manufacture entry against Job Cards" +msgstr "" + #. Description of the 'Role Allowed to Over Bill ' (Link) field in DocType #. 'Accounts Settings' #: erpnext/accounts/doctype/accounts_settings/accounts_settings.json @@ -55433,7 +55901,7 @@ msgstr "" #: erpnext/stock/report/batch_wise_balance_history/batch_wise_balance_history.py:85 #: erpnext/stock/report/item_prices/item_prices.py:57 #: erpnext/stock/report/serial_no_ledger/serial_no_ledger.py:67 -#: erpnext/stock/report/stock_balance/stock_balance.py:489 +#: erpnext/stock/report/stock_balance/stock_balance.py:520 #: erpnext/stock/report/stock_ledger/stock_ledger.py:298 msgid "Valuation Rate" msgstr "" @@ -55442,11 +55910,11 @@ msgstr "" msgid "Valuation Rate (In / Out)" msgstr "" -#: erpnext/stock/stock_ledger.py:2017 +#: erpnext/stock/stock_ledger.py:2015 msgid "Valuation Rate Missing" msgstr "" -#: erpnext/stock/stock_ledger.py:1995 +#: erpnext/stock/stock_ledger.py:1993 msgid "Valuation Rate for the Item {0}, is required to do accounting entries for {1} {2}." msgstr "" @@ -55477,7 +55945,7 @@ msgstr "" msgid "Valuation rate for the item as per Sales Invoice (Only for Internal Transfers)" msgstr "" -#: erpnext/accounts/doctype/payment_entry/payment_entry.py:2255 +#: erpnext/accounts/doctype/payment_entry/payment_entry.py:2267 #: erpnext/controllers/accounts_controller.py:3258 msgid "Valuation type charges can not be marked as Inclusive" msgstr "" @@ -55771,6 +56239,14 @@ msgstr "" msgid "View BOM Update Log" msgstr "" +#. Title of an Onboarding Step +#. Label of an action in the Onboarding Step 'View Balance Sheet' +#. Description of a report in the Onboarding Step 'View Balance Sheet' +#: erpnext/accounts/onboarding_step/view_balance_sheet/view_balance_sheet.json +#: erpnext/assets/onboarding_step/view_balance_sheet/view_balance_sheet.json +msgid "View Balance Sheet" +msgstr "" + #: erpnext/public/js/setup_wizard.js:47 msgid "View Chart of Accounts" msgstr "" @@ -55808,10 +56284,42 @@ msgstr "" msgid "View Now" msgstr "" +#. Title of an Onboarding Step +#. Label of an action in the Onboarding Step 'View Project Summary' +#. Description of a report in the Onboarding Step 'View Project Summary' +#: erpnext/projects/onboarding_step/view_project_summary/view_project_summary.json +msgid "View Project Summary" +msgstr "" + +#. Title of an Onboarding Step +#. Label of an action in the Onboarding Step 'View Purchase Order Analysis' +#. Description of a report in the Onboarding Step 'View Purchase Order +#. Analysis' +#: erpnext/buying/onboarding_step/view_purchase_order_analysis/view_purchase_order_analysis.json +msgid "View Purchase Order Analysis" +msgstr "" + +#. Title of an Onboarding Step +#. Label of an action in the Onboarding Step 'View Sales Order Analysis' +#. Description of a report in the Onboarding Step 'View Sales Order Analysis' +#: erpnext/selling/onboarding_step/view_sales_order_analysis/view_sales_order_analysis.json +msgid "View Sales Order Analysis" +msgstr "" + +#. Label of an action in the Onboarding Step 'View Stock Balance Report' +#: erpnext/stock/onboarding_step/view_stock_balance_report/view_stock_balance_report.json #: erpnext/stock/report/stock_ledger/stock_ledger.js:139 msgid "View Stock Balance" msgstr "" +#. Title of an Onboarding Step +#. Label of an action in the Onboarding Step 'View Stock Balance Report' +#. Description of a report in the Onboarding Step 'View Stock Balance Report' +#: erpnext/selling/onboarding_step/view_stock_balance_report/view_stock_balance_report.json +#: erpnext/stock/onboarding_step/view_stock_balance_report/view_stock_balance_report.json +msgid "View Stock Balance Report" +msgstr "" + #: erpnext/stock/report/stock_balance/stock_balance.js:156 msgid "View Stock Ledger" msgstr "" @@ -55820,6 +56328,16 @@ msgstr "" msgid "View Type" msgstr "" +#. Label of an action in the Onboarding Step 'View Work Order Summary Report' +#: erpnext/manufacturing/onboarding_step/view_work_order_summary_report/view_work_order_summary_report.json +msgid "View Work Order Summary" +msgstr "" + +#. Title of an Onboarding Step +#: erpnext/manufacturing/onboarding_step/view_work_order_summary_report/view_work_order_summary_report.json +msgid "View Work Order Summary Report" +msgstr "" + #. Label of the view_attachments (Check) field in DocType 'Project User' #: erpnext/projects/doctype/project_user/project_user.json msgid "View attachments" @@ -55834,7 +56352,7 @@ msgstr "" msgid "Vimeo" msgstr "" -#: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py:214 +#: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py:216 msgid "Virtual DocType" msgstr "" @@ -55966,7 +56484,7 @@ msgstr "" msgid "Voucher No" msgstr "" -#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:1341 +#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:1351 msgid "Voucher No is mandatory" msgstr "" @@ -56228,7 +56746,7 @@ msgstr "" msgid "Warehouse {0} does not belong to Company {1}." msgstr "" -#: erpnext/stock/utils.py:409 +#: erpnext/stock/utils.py:410 msgid "Warehouse {0} does not belong to company {1}" msgstr "" @@ -56361,7 +56879,7 @@ msgstr "" msgid "Warning: Material Requested Qty is less than Minimum Order Qty" msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.py:1446 +#: erpnext/manufacturing/doctype/work_order/work_order.py:1436 msgid "Warning: Quantity exceeds maximum producible quantity based on quantity of raw materials received through the Subcontracting Inward Order {0}." msgstr "" @@ -56495,7 +57013,7 @@ msgid "Website:" msgstr "" #: erpnext/selling/report/sales_analytics/sales_analytics.py:433 -#: erpnext/stock/report/stock_analytics/stock_analytics.py:111 +#: erpnext/stock/report/stock_analytics/stock_analytics.py:121 msgid "Week {0} {1}" msgstr "" @@ -56855,16 +57373,22 @@ msgstr "" msgid "Work Order Summary" msgstr "" +#. Description of a report in the Onboarding Step 'View Work Order Summary +#. Report' +#: erpnext/manufacturing/onboarding_step/view_work_order_summary_report/view_work_order_summary_report.json +msgid "Work Order Summary Report" +msgstr "" + #: erpnext/stock/doctype/material_request/material_request.py:908 msgid "Work Order cannot be created for following reason:
{0}" msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.py:1390 +#: erpnext/manufacturing/doctype/work_order/work_order.py:1380 msgid "Work Order cannot be raised against a Item Template" msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.py:2431 -#: erpnext/manufacturing/doctype/work_order/work_order.py:2511 +#: erpnext/manufacturing/doctype/work_order/work_order.py:2427 +#: erpnext/manufacturing/doctype/work_order/work_order.py:2507 msgid "Work Order has been {0}" msgstr "" @@ -57029,7 +57553,7 @@ msgstr "" msgid "Workstation Working Hour" msgstr "" -#: erpnext/manufacturing/doctype/workstation/workstation.py:452 +#: erpnext/manufacturing/doctype/workstation/workstation.py:453 msgid "Workstation is closed on the following dates as per Holiday List: {0}" msgstr "" @@ -57192,7 +57716,7 @@ msgstr "" msgid "Year of Passing" msgstr "" -#: erpnext/accounts/doctype/fiscal_year/fiscal_year.py:85 +#: erpnext/accounts/doctype/fiscal_year/fiscal_year.py:91 msgid "Year start date or end date is overlapping with {0}. To avoid please set company" msgstr "" @@ -57265,7 +57789,7 @@ msgstr "" msgid "You can use {0} to reconcile against {1} later." msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.py:1316 +#: erpnext/manufacturing/doctype/job_card/job_card.py:1314 msgid "You can't make any changes to Job Card since Work Order is closed." msgstr "" @@ -57305,7 +57829,7 @@ msgstr "" msgid "You cannot edit root node." msgstr "" -#: erpnext/accounts/doctype/accounts_settings/accounts_settings.py:144 +#: erpnext/accounts/doctype/accounts_settings/accounts_settings.py:181 msgid "You cannot enable both the settings '{0}' and '{1}'." msgstr "" @@ -57365,7 +57889,7 @@ msgstr "" msgid "You have enabled {0} and {1} in {2}. This can lead to prices from the default price list being inserted in the transaction price list." msgstr "" -#: erpnext/selling/doctype/selling_settings/selling_settings.py:89 +#: erpnext/selling/doctype/selling_settings/selling_settings.py:110 msgid "You have enabled {0} and {1} in {2}. This can lead to prices from the default price list being inserted into the transaction price list." msgstr "" @@ -57457,7 +57981,7 @@ msgstr "" msgid "`Allow Negative rates for Items`" msgstr "" -#: erpnext/stock/stock_ledger.py:2009 +#: erpnext/stock/stock_ledger.py:2007 msgid "after" msgstr "" @@ -57477,7 +58001,7 @@ msgstr "" msgid "as a percentage of finished item quantity" msgstr "" -#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:1473 +#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:1483 msgid "as of {0}" msgstr "" @@ -57622,7 +58146,7 @@ msgstr "" msgid "out of 5" msgstr "" -#: erpnext/accounts/doctype/payment_entry/payment_entry.py:1229 +#: erpnext/accounts/doctype/payment_entry/payment_entry.py:1241 msgid "paid to" msgstr "" @@ -57647,7 +58171,7 @@ msgstr "" msgid "per hour" msgstr "" -#: erpnext/stock/stock_ledger.py:2010 +#: erpnext/stock/stock_ledger.py:2008 msgid "performing either one below:" msgstr "" @@ -57672,7 +58196,7 @@ msgstr "" msgid "ratings" msgstr "" -#: erpnext/accounts/doctype/payment_entry/payment_entry.py:1229 +#: erpnext/accounts/doctype/payment_entry/payment_entry.py:1241 msgid "received from" msgstr "" @@ -57805,7 +58329,7 @@ msgstr "" msgid "{0} Digest" msgstr "" -#: erpnext/accounts/utils.py:1496 +#: erpnext/accounts/utils.py:1497 msgid "{0} Number {1} is already used in {2} {3}" msgstr "" @@ -57882,7 +58406,7 @@ msgstr "" msgid "{0} cannot be used as a Main Cost Center because it has been used as child in Cost Center Allocation {1}" msgstr "" -#: erpnext/accounts/doctype/payment_request/payment_request.py:123 +#: erpnext/accounts/doctype/payment_request/payment_request.py:146 msgid "{0} cannot be zero" msgstr "" @@ -57951,7 +58475,7 @@ msgstr "" msgid "{0} in row {1}" msgstr "" -#: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py:450 +#: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py:452 msgid "{0} is a child table and will be deleted automatically with its parent" msgstr "" @@ -57965,7 +58489,7 @@ msgstr "" msgid "{0} is added multiple times on rows: {1}" msgstr "" -#: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py:626 +#: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py:628 msgid "{0} is already running for {1}" msgstr "" @@ -57994,7 +58518,7 @@ msgstr "" msgid "{0} is mandatory. Maybe Currency Exchange record is not created for {1} to {2}." msgstr "" -#: erpnext/selling/doctype/customer/customer.py:210 +#: erpnext/selling/doctype/customer/customer.py:234 msgid "{0} is not a company bank account" msgstr "" @@ -58018,7 +58542,7 @@ msgstr "" msgid "{0} is not enabled in {1}" msgstr "" -#: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py:634 +#: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py:636 msgid "{0} is not running. Cannot trigger events for this Document" msgstr "" @@ -58026,7 +58550,7 @@ msgstr "" msgid "{0} is not the default supplier for any items." msgstr "" -#: erpnext/accounts/doctype/payment_entry/payment_entry.py:2937 +#: erpnext/accounts/doctype/payment_entry/payment_entry.py:2949 msgid "{0} is on hold till {1}" msgstr "" @@ -58086,12 +58610,12 @@ msgstr "" msgid "{0} units of {1} are required in {2} with the inventory dimension: {3} on {4} {5} for {6} to complete the transaction." msgstr "" -#: erpnext/stock/stock_ledger.py:1683 erpnext/stock/stock_ledger.py:2161 -#: erpnext/stock/stock_ledger.py:2175 +#: erpnext/stock/stock_ledger.py:1683 erpnext/stock/stock_ledger.py:2157 +#: erpnext/stock/stock_ledger.py:2171 msgid "{0} units of {1} needed in {2} on {3} {4} for {5} to complete this transaction." msgstr "" -#: erpnext/stock/stock_ledger.py:2262 erpnext/stock/stock_ledger.py:2307 +#: erpnext/stock/stock_ledger.py:2258 erpnext/stock/stock_ledger.py:2303 msgid "{0} units of {1} needed in {2} on {3} {4} to complete this transaction." msgstr "" @@ -58103,7 +58627,7 @@ msgstr "" msgid "{0} until {1}" msgstr "" -#: erpnext/stock/utils.py:400 +#: erpnext/stock/utils.py:401 msgid "{0} valid serial nos for Item {1}" msgstr "" @@ -58123,7 +58647,7 @@ msgstr "" msgid "{0} will be set as the {1} in subsequently scanned items" msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.py:989 +#: erpnext/manufacturing/doctype/job_card/job_card.py:987 msgid "{0} {1}" msgstr "" @@ -58145,11 +58669,11 @@ msgstr "" #: erpnext/accounts/doctype/payment_entry/payment_entry.py:613 #: erpnext/accounts/doctype/payment_entry/payment_entry.py:666 -#: erpnext/accounts/doctype/payment_entry/payment_entry.py:2679 +#: erpnext/accounts/doctype/payment_entry/payment_entry.py:2691 msgid "{0} {1} does not exist" msgstr "" -#: erpnext/accounts/party.py:567 +#: erpnext/accounts/party.py:555 msgid "{0} {1} has accounting entries in currency {2} for company {3}. Please select a receivable or payable account with currency {2}." msgstr "" @@ -58200,11 +58724,11 @@ msgstr "" msgid "{0} {1} is closed" msgstr "" -#: erpnext/accounts/party.py:805 +#: erpnext/accounts/party.py:793 msgid "{0} {1} is disabled" msgstr "" -#: erpnext/accounts/party.py:811 +#: erpnext/accounts/party.py:799 msgid "{0} {1} is frozen" msgstr "" @@ -58212,7 +58736,7 @@ msgstr "" msgid "{0} {1} is fully billed" msgstr "" -#: erpnext/accounts/party.py:815 +#: erpnext/accounts/party.py:803 msgid "{0} {1} is not active" msgstr "" @@ -58321,24 +58845,24 @@ msgstr "" msgid "{0}'s {1} cannot be after {2}'s Expected End Date." msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.py:1288 -#: erpnext/manufacturing/doctype/job_card/job_card.py:1296 +#: erpnext/manufacturing/doctype/job_card/job_card.py:1286 +#: erpnext/manufacturing/doctype/job_card/job_card.py:1294 msgid "{0}, complete the operation {1} before the operation {2}." msgstr "" -#: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py:521 +#: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py:523 msgid "{0}: Child table (auto-deleted with parent)" msgstr "" -#: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py:516 +#: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py:518 msgid "{0}: Not found" msgstr "" -#: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py:512 +#: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py:514 msgid "{0}: Protected DocType" msgstr "" -#: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py:526 +#: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py:528 msgid "{0}: Virtual DocType (no database table)" msgstr "" @@ -58346,7 +58870,7 @@ msgstr "" msgid "{0}: {1} does not belong to the Company: {2}" msgstr "" -#: erpnext/accounts/party.py:80 +#: erpnext/accounts/party.py:78 msgid "{0}: {1} does not exists" msgstr "" @@ -58354,7 +58878,7 @@ msgstr "" msgid "{0}: {1} is a group account." msgstr "" -#: erpnext/accounts/doctype/payment_entry/payment_entry.js:989 +#: erpnext/accounts/doctype/payment_entry/payment_entry.js:993 msgid "{0}: {1} must be less than {2}" msgstr "" @@ -58403,7 +58927,7 @@ msgstr "" msgid "{} {} is already linked with {} {}" msgstr "" -#: erpnext/accounts/doctype/bank_transaction/bank_transaction.py:390 +#: erpnext/accounts/doctype/bank_transaction/bank_transaction.py:391 msgid "{} {} is not affecting bank account {}" msgstr "" From 1e4478765a605756a64276127af25e8c33bed5d6 Mon Sep 17 00:00:00 2001 From: Mihir Kandoi Date: Sun, 1 Mar 2026 15:04:17 +0530 Subject: [PATCH 30/62] fix: use stock qty instead of qty when creating stock entry from MR (cherry picked from commit 30c3ff2efed41d71b178a84e365e3ad83d83ff06) --- erpnext/stock/doctype/material_request/material_request.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/erpnext/stock/doctype/material_request/material_request.py b/erpnext/stock/doctype/material_request/material_request.py index 1868730ffd3..47822ba1dae 100644 --- a/erpnext/stock/doctype/material_request/material_request.py +++ b/erpnext/stock/doctype/material_request/material_request.py @@ -330,7 +330,8 @@ class MaterialRequest(BuyingController): if mr_qty_allowance: allowed_qty = flt( - (d.qty + (d.qty * (mr_qty_allowance / 100))), d.precision("ordered_qty") + (d.stock_qty + (d.stock_qty * (mr_qty_allowance / 100))), + d.precision("ordered_qty"), ) if d.ordered_qty and flt(d.ordered_qty, precision) > flt(allowed_qty, precision): From c274b7cc2e25b5be6e0b0ef57e9ab44e5cf1eb33 Mon Sep 17 00:00:00 2001 From: Mihir Kandoi Date: Sun, 1 Mar 2026 15:16:38 +0530 Subject: [PATCH 31/62] fix: allow allowed roles to bypass over billing validation (cherry picked from commit 04127019f9c4ea7776a85ef583118d1b283adbe8) --- .../stock/doctype/purchase_receipt/purchase_receipt.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py index f3e56c3b239..8cbe865f072 100644 --- a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py +++ b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py @@ -1246,7 +1246,9 @@ def get_billed_amount_against_po(po_items): def update_billing_percentage(pr_doc, update_modified=True, adjust_incoming_rate=False): # Update Billing % based on pending accepted qty buying_settings = frappe.get_single("Buying Settings") - over_billing_allowance = frappe.get_single_value("Accounts Settings", "over_billing_allowance") + over_billing_allowance, role_allowed_to_over_bill = frappe.get_single_value( + "Accounts Settings", ["over_billing_allowance", "role_allowed_to_over_bill"] + ) total_amount, total_billed_amount, pi_landed_cost_amount = 0, 0, 0 item_wise_returned_qty = get_item_wise_returned_qty(pr_doc) @@ -1304,7 +1306,10 @@ def update_billing_percentage(pr_doc, update_modified=True, adjust_incoming_rate item.db_set("amount_difference_with_purchase_invoice", adjusted_amt, update_modified=False) elif amount and item.billed_amt > amount: per_over_billed = (flt(item.billed_amt / amount, 2) * 100) - 100 - if per_over_billed > over_billing_allowance: + if ( + per_over_billed > over_billing_allowance + and role_allowed_to_over_bill not in frappe.get_roles() + ): frappe.throw( _("Over Billing Allowance exceeded for Purchase Receipt Item {0} ({1}) by {2}%").format( item.name, frappe.bold(item.item_code), per_over_billed - over_billing_allowance From 788cd82b4b5f504bb5c27c26c2c549e7e9376b0e Mon Sep 17 00:00:00 2001 From: Sanjesh Date: Sun, 1 Mar 2026 16:31:53 +0530 Subject: [PATCH 32/62] fix: correct sle voucher_type comparison in get_ref_doctype (cherry picked from commit cffb59ae73c2b973d52512bc3ea09de4da123d6d) --- erpnext/stock/stock_ledger.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/stock/stock_ledger.py b/erpnext/stock/stock_ledger.py index 4bbd476edfd..d1bad37a9cc 100644 --- a/erpnext/stock/stock_ledger.py +++ b/erpnext/stock/stock_ledger.py @@ -1305,7 +1305,7 @@ class update_entries_after: else: if sle.voucher_type in ("Delivery Note", "Sales Invoice"): ref_doctype = "Packed Item" - elif sle == "Subcontracting Receipt": + elif sle.voucher_type == "Subcontracting Receipt": ref_doctype = "Subcontracting Receipt Supplied Item" else: ref_doctype = "Purchase Receipt Item Supplied" From c92fd26e1b1ade9bed96b3197094767b4b26306b Mon Sep 17 00:00:00 2001 From: Mihir Kandoi Date: Sun, 1 Mar 2026 20:48:33 +0530 Subject: [PATCH 33/62] fix: use the correct precision value in stock reco (cherry picked from commit 36726b0f7b3d5c0c155be20f04cca67ec9dac8d6) --- .../doctype/stock_reconciliation/stock_reconciliation.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py index ac9e94f1e6a..277ab61865b 100644 --- a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py +++ b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py @@ -523,9 +523,9 @@ class StockReconciliation(StockController): if abs(difference_amount) > 0: return True - float_precision = frappe.db.get_default("float_precision") or 3 - item_dict["rate"] = flt(item_dict.get("rate"), float_precision) - item.valuation_rate = flt(item.valuation_rate, float_precision) if item.valuation_rate else None + rate_precision = item.precision("valuation_rate") + item_dict["rate"] = flt(item_dict.get("rate"), rate_precision) + item.valuation_rate = flt(item.valuation_rate, rate_precision) if item.valuation_rate else None if ( (item.qty is None or item.qty == item_dict.get("qty")) and (item.valuation_rate is None or item.valuation_rate == item_dict.get("rate")) From 744d7a2793abeb5a5dff836618499d84243043e6 Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Sun, 1 Mar 2026 13:32:00 +0530 Subject: [PATCH 34/62] fix: voucher detail no in SABB (cherry picked from commit c37a56ec899f30638fb1f489e28a7e33b346c81d) --- .../controllers/sales_and_purchase_return.py | 9 ++++++- .../serial_and_batch_bundle.py | 24 +++++++++++++++++-- erpnext/stock/serial_batch_bundle.py | 3 +++ 3 files changed, 33 insertions(+), 3 deletions(-) diff --git a/erpnext/controllers/sales_and_purchase_return.py b/erpnext/controllers/sales_and_purchase_return.py index 5deaeca975c..e3c571e71d8 100644 --- a/erpnext/controllers/sales_and_purchase_return.py +++ b/erpnext/controllers/sales_and_purchase_return.py @@ -1012,7 +1012,14 @@ def get_serial_batches_based_on_bundle(doctype, field, _bundle_ids): if doctype == "Packed Item": if key is None: - key = frappe.get_cached_value("Packed Item", row.voucher_detail_no, field) + key = frappe.get_cached_value( + "Packed Item", + {"parent_detail_docname": row.voucher_detail_no, "item_code": row.item_code}, + field, + ) + if key is None: + key = frappe.get_cached_value("Packed Item", row.voucher_detail_no, field) + if row.voucher_type == "Delivery Note": key = frappe.get_cached_value("Delivery Note Item", key, "dn_detail") elif row.voucher_type == "Sales Invoice": diff --git a/erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py b/erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py index 012503a3d9c..ba332231951 100644 --- a/erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py +++ b/erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py @@ -717,10 +717,13 @@ class SerialandBatchBundle(Document): if rate is None and child_table in ["Delivery Note Item", "Sales Invoice Item"]: rate = frappe.db.get_value( "Packed Item", - self.voucher_detail_no, + {"parent_detail_docname": self.voucher_detail_no, "item_code": self.item_code}, "incoming_rate", ) + if rate is None: + rate = frappe.db.get_value("Packed Item", self.voucher_detail_no, "incoming_rate") + if rate is not None: is_packed_item = True @@ -787,6 +790,9 @@ class SerialandBatchBundle(Document): if not self.voucher_detail_no or self.voucher_detail_no != row.name: values_to_set["voucher_detail_no"] = row.name + if row.get("doctype") == "Packed Item" and row.get("parent_detail_docname"): + values_to_set["voucher_detail_no"] = row.get("parent_detail_docname") + if parent.get("posting_date") and parent.get("posting_time"): posting_datetime = combine_datetime(parent.posting_date, parent.posting_time) if not self.posting_datetime or self.posting_datetime != posting_datetime: @@ -1325,7 +1331,21 @@ class SerialandBatchBundle(Document): ) if not vouchers and self.voucher_type == "Delivery Note": - frappe.db.set_value("Packed Item", self.voucher_detail_no, "serial_and_batch_bundle", None) + if frappe.db.exists("Packed Item", self.voucher_detail_no): + frappe.db.set_value("Packed Item", self.voucher_detail_no, "serial_and_batch_bundle", None) + else: + packed_items = frappe.get_all( + "Packed Item", + filters={ + "parent_detail_docname": self.voucher_detail_no, + "serial_and_batch_bundle": self.name, + }, + pluck="name", + ) + + for packed_item in packed_items: + frappe.db.set_value("Packed Item", packed_item, "serial_and_batch_bundle", None) + return for voucher in vouchers: diff --git a/erpnext/stock/serial_batch_bundle.py b/erpnext/stock/serial_batch_bundle.py index 199672871dc..5e37aea5498 100644 --- a/erpnext/stock/serial_batch_bundle.py +++ b/erpnext/stock/serial_batch_bundle.py @@ -401,6 +401,9 @@ class SerialBatchBundle: def submit_serial_and_batch_bundle(self): doc = frappe.get_doc("Serial and Batch Bundle", self.sle.serial_and_batch_bundle) + if self.sle.voucher_detail_no and doc.voucher_detail_no != self.sle.voucher_detail_no: + doc.voucher_detail_no = self.sle.voucher_detail_no + self.validate_actual_qty(doc) doc.flags.ignore_voucher_validation = True From f632c5c79689969a63190c8884cad75dbab75185 Mon Sep 17 00:00:00 2001 From: trustedcomputer Date: Sat, 28 Feb 2026 18:10:07 -0800 Subject: [PATCH 35/62] fix: remove read-only property from Sales Invoice Timesheet Table (cherry picked from commit b9d95711a236b65855acdac76afe00b8d207b07f) --- erpnext/accounts/doctype/sales_invoice/sales_invoice.json | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.json b/erpnext/accounts/doctype/sales_invoice/sales_invoice.json index f33576f6d9c..da4d71ebd87 100644 --- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.json +++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.json @@ -800,8 +800,7 @@ "hide_seconds": 1, "label": "Time Sheets", "options": "Sales Invoice Timesheet", - "print_hide": 1, - "read_only": 1 + "print_hide": 1 }, { "default": "0", @@ -2331,7 +2330,7 @@ "link_fieldname": "consolidated_invoice" } ], - "modified": "2026-02-25 12:41:57.043459", + "modified": "2026-02-28 17:58:56.453076", "modified_by": "Administrator", "module": "Accounts", "name": "Sales Invoice", From f2ff0de296f45c0e6af4f3b50e2fbaf01ec23ba9 Mon Sep 17 00:00:00 2001 From: diptanilsaha Date: Sun, 8 Feb 2026 13:14:06 +0530 Subject: [PATCH 36/62] fix(budget-variance-report): validate 'budget_against' filter (cherry picked from commit 79d0708ea75726cff1ef7524da7917b7fdf11733) --- .../budget_variance_report.py | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/erpnext/accounts/report/budget_variance_report/budget_variance_report.py b/erpnext/accounts/report/budget_variance_report/budget_variance_report.py index 6c245acf8d8..f41ba74388b 100644 --- a/erpnext/accounts/report/budget_variance_report/budget_variance_report.py +++ b/erpnext/accounts/report/budget_variance_report/budget_variance_report.py @@ -5,6 +5,7 @@ import frappe from frappe import _ from frappe.utils import add_months, flt, formatdate +from erpnext.accounts.doctype.accounting_dimension.accounting_dimension import get_dimensions from erpnext.accounts.utils import get_fiscal_year from erpnext.controllers.trends import get_period_date_ranges @@ -13,6 +14,8 @@ def execute(filters=None): if not filters: filters = {} + validate_filters(filters) + columns = get_columns(filters) if filters.get("budget_against_filter"): dimensions = filters.get("budget_against_filter") @@ -31,6 +34,10 @@ def execute(filters=None): return columns, data, None, chart_data +def validate_filters(filters): + validate_budget_dimensions(filters) + + def get_budget_records(filters, dimensions): budget_against_field = frappe.scrub(filters["budget_against"]) @@ -51,7 +58,7 @@ def get_budget_records(filters, dimensions): b.company = %s AND b.docstatus = 1 AND b.budget_against = %s - AND b.{budget_against_field} IN ({', '.join(['%s'] * len(dimensions))}) + AND b.{budget_against_field} IN ({", ".join(["%s"] * len(dimensions))}) AND ( b.from_fiscal_year <= %s AND b.to_fiscal_year >= %s @@ -404,6 +411,17 @@ def get_budget_dimensions(filters): ) # nosec +def validate_budget_dimensions(filters): + dimensions = [d.get("document_type") for d in get_dimensions(with_cost_center_and_project=True)[0]] + if filters.get("budget_against") and filters.get("budget_against") not in dimensions: + frappe.throw( + title=_("Invalid Accounting Dimension"), + msg=_("{0} is not a valid Accounting Dimension.").format( + frappe.bold(filters.get("budget_against")) + ), + ) + + def build_comparison_chart_data(filters, columns, data): if not data: return None From 2526876eaa2bc38eeb9b4117215d5e5a9de2bd82 Mon Sep 17 00:00:00 2001 From: Sudharsanan11 Date: Mon, 2 Mar 2026 01:58:52 +0530 Subject: [PATCH 37/62] fix(accounts): add transaction time field (cherry picked from commit 9538a9870ce19cf73231ed4192458f8c295325c2) # Conflicts: # erpnext/buying/doctype/purchase_order/purchase_order.json # erpnext/selling/doctype/sales_order/sales_order.json --- .../doctype/purchase_order/purchase_order.json | 13 +++++++++++++ .../buying/doctype/purchase_order/purchase_order.py | 1 + .../selling/doctype/sales_order/sales_order.json | 13 +++++++++++++ erpnext/selling/doctype/sales_order/sales_order.py | 1 + 4 files changed, 28 insertions(+) diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.json b/erpnext/buying/doctype/purchase_order/purchase_order.json index 3dd4d927255..4746ebf700f 100644 --- a/erpnext/buying/doctype/purchase_order/purchase_order.json +++ b/erpnext/buying/doctype/purchase_order/purchase_order.json @@ -17,6 +17,7 @@ "order_confirmation_date", "column_break_7", "transaction_date", + "transaction_time", "schedule_date", "column_break1", "company", @@ -1311,6 +1312,14 @@ { "fieldname": "section_break_tnkm", "fieldtype": "Section Break" + }, + { + "default": "Now", + "depends_on": "is_internal_supplier", + "fieldname": "transaction_time", + "fieldtype": "Time", + "label": "Time", + "mandatory_depends_on": "is_internal_supplier" } ], "grid_page_length": 50, @@ -1318,7 +1327,11 @@ "idx": 105, "is_submittable": 1, "links": [], +<<<<<<< HEAD "modified": "2026-02-23 14:22:33.323946", +======= + "modified": "2026-03-02 00:40:47.119584", +>>>>>>> 9538a9870c (fix(accounts): add transaction time field) "modified_by": "Administrator", "module": "Buying", "name": "Purchase Order", diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.py b/erpnext/buying/doctype/purchase_order/purchase_order.py index 1f945da1682..aaace54db63 100644 --- a/erpnext/buying/doctype/purchase_order/purchase_order.py +++ b/erpnext/buying/doctype/purchase_order/purchase_order.py @@ -166,6 +166,7 @@ class PurchaseOrder(BuyingController): total_qty: DF.Float total_taxes_and_charges: DF.Currency transaction_date: DF.Date + transaction_time: DF.Time | None # end: auto-generated types def __init__(self, *args, **kwargs): diff --git a/erpnext/selling/doctype/sales_order/sales_order.json b/erpnext/selling/doctype/sales_order/sales_order.json index 00a8f8d3b12..22ad9300529 100644 --- a/erpnext/selling/doctype/sales_order/sales_order.json +++ b/erpnext/selling/doctype/sales_order/sales_order.json @@ -18,6 +18,7 @@ "column_break_7", "order_type", "transaction_date", + "transaction_time", "delivery_date", "column_break1", "tax_id", @@ -1724,6 +1725,14 @@ "fieldname": "utm_analytics_section", "fieldtype": "Section Break", "label": "UTM Analytics" + }, + { + "default": "Now", + "depends_on": "is_internal_customer", + "fieldname": "transaction_time", + "fieldtype": "Time", + "label": "Time", + "mandatory_depends_on": "is_internal_customer" } ], "grid_page_length": 50, @@ -1731,7 +1740,11 @@ "idx": 105, "is_submittable": 1, "links": [], +<<<<<<< HEAD "modified": "2026-02-10 11:55:52.796522", +======= + "modified": "2026-03-02 00:42:18.834823", +>>>>>>> 9538a9870c (fix(accounts): add transaction time field) "modified_by": "Administrator", "module": "Selling", "name": "Sales Order", diff --git a/erpnext/selling/doctype/sales_order/sales_order.py b/erpnext/selling/doctype/sales_order/sales_order.py index 9d39c38505d..1759356c63d 100755 --- a/erpnext/selling/doctype/sales_order/sales_order.py +++ b/erpnext/selling/doctype/sales_order/sales_order.py @@ -186,6 +186,7 @@ class SalesOrder(SellingController): total_qty: DF.Float total_taxes_and_charges: DF.Currency transaction_date: DF.Date + transaction_time: DF.Time | None utm_campaign: DF.Link | None utm_content: DF.Data | None utm_medium: DF.Link | None From 8b3c5baa9e8608d9f38ec9560724b383dea62276 Mon Sep 17 00:00:00 2001 From: Sudharsanan11 Date: Mon, 2 Mar 2026 02:01:04 +0530 Subject: [PATCH 38/62] fix(accounts): set posting time to get incoming rate (cherry picked from commit c5b3673a3073628905dddacfc975972b39eb6224) --- erpnext/utilities/transaction_base.py | 1 + 1 file changed, 1 insertion(+) diff --git a/erpnext/utilities/transaction_base.py b/erpnext/utilities/transaction_base.py index 375c2a4409a..fb1628fe305 100644 --- a/erpnext/utilities/transaction_base.py +++ b/erpnext/utilities/transaction_base.py @@ -341,6 +341,7 @@ class TransactionBase(StatusUpdater): args.update( { "posting_date": self.transaction_date, + "posting_time": self.transaction_time, } ) else: From b8de82f0e47b5deed275919336717ba8cb220cf6 Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Mon, 2 Mar 2026 12:08:54 +0530 Subject: [PATCH 39/62] fix: validate warehouse of SABB for draft entry (cherry picked from commit 9b8f685c8206c184db26f6c083ec4eadf280c5c1) --- erpnext/controllers/stock_controller.py | 41 +++++++++++++++++++ .../stock/doctype/stock_entry/stock_entry.py | 1 + 2 files changed, 42 insertions(+) diff --git a/erpnext/controllers/stock_controller.py b/erpnext/controllers/stock_controller.py index 7ff2c4061f2..0ae1d232171 100644 --- a/erpnext/controllers/stock_controller.py +++ b/erpnext/controllers/stock_controller.py @@ -63,6 +63,8 @@ class StockController(AccountsController): if not self.get("is_return"): self.validate_inspection() + + self.validate_warehouse_of_sabb() self.validate_serialized_batch() self.clean_serial_nos() self.validate_customer_provided_item() @@ -75,6 +77,45 @@ class StockController(AccountsController): super().on_update() self.check_zero_rate() + def validate_warehouse_of_sabb(self): + if self.is_internal_transfer(): + return + + doc_before_save = self.get_doc_before_save() + + for row in self.items: + if not row.get("serial_and_batch_bundle"): + continue + + sabb_details = frappe.db.get_value( + "Serial and Batch Bundle", + row.serial_and_batch_bundle, + ["type_of_transaction", "warehouse", "has_serial_no"], + as_dict=True, + ) + if not sabb_details: + continue + + if sabb_details.type_of_transaction != "Outward": + continue + + warehouse = row.get("warehouse") or row.get("s_warehouse") + if sabb_details.warehouse != warehouse: + frappe.throw( + _( + "Row #{0}: Warehouse {1} does not match with the warehouse {2} in Serial and Batch Bundle {3}." + ).format(row.idx, warehouse, sabb_details.warehouse, row.serial_and_batch_bundle) + ) + + if self.doctype == "Stock Reconciliation": + continue + + if sabb_details.has_serial_no and doc_before_save and doc_before_save.get("items"): + prev_row = doc_before_save.get("items", {"idx": row.idx}) + if prev_row and prev_row[0].serial_and_batch_bundle != row.serial_and_batch_bundle: + sabb_doc = frappe.get_doc("Serial and Batch Bundle", row.serial_and_batch_bundle) + sabb_doc.validate_serial_no_status() + def reset_conversion_factor(self): for row in self.get("items"): if row.uom != row.stock_uom: diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.py b/erpnext/stock/doctype/stock_entry/stock_entry.py index 2e2639080cf..bdcbbed0e18 100644 --- a/erpnext/stock/doctype/stock_entry/stock_entry.py +++ b/erpnext/stock/doctype/stock_entry/stock_entry.py @@ -236,6 +236,7 @@ class StockEntry(StockController, SubcontractingInwardController): self.validate_uom_is_integer("uom", "qty") self.validate_uom_is_integer("stock_uom", "transfer_qty") self.validate_warehouse() + self.validate_warehouse_of_sabb() self.validate_work_order() self.validate_bom() self.set_process_loss_qty() From b4a5bbc7e2e02f2c2bd2df476a12682992fb5955 Mon Sep 17 00:00:00 2001 From: rohitwaghchaure Date: Mon, 2 Mar 2026 14:38:28 +0530 Subject: [PATCH 40/62] chore: fix conflicts --- erpnext/buying/doctype/purchase_order/purchase_order.json | 4 ---- 1 file changed, 4 deletions(-) diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.json b/erpnext/buying/doctype/purchase_order/purchase_order.json index 4746ebf700f..212a034763a 100644 --- a/erpnext/buying/doctype/purchase_order/purchase_order.json +++ b/erpnext/buying/doctype/purchase_order/purchase_order.json @@ -1327,11 +1327,7 @@ "idx": 105, "is_submittable": 1, "links": [], -<<<<<<< HEAD - "modified": "2026-02-23 14:22:33.323946", -======= "modified": "2026-03-02 00:40:47.119584", ->>>>>>> 9538a9870c (fix(accounts): add transaction time field) "modified_by": "Administrator", "module": "Buying", "name": "Purchase Order", From 664f1f1675b45f7e17c48a5a7209cb248ac755ca Mon Sep 17 00:00:00 2001 From: kavin-114 Date: Mon, 2 Mar 2026 14:05:40 +0530 Subject: [PATCH 41/62] perf: add index on reference_purchase_receipt column (cherry picked from commit 8c94396ad9251db15ab1f792a96192a66b498c0a) --- .../stock/doctype/stock_entry_detail/stock_entry_detail.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/erpnext/stock/doctype/stock_entry_detail/stock_entry_detail.json b/erpnext/stock/doctype/stock_entry_detail/stock_entry_detail.json index fd1212f6fda..eceba634bf3 100644 --- a/erpnext/stock/doctype/stock_entry_detail/stock_entry_detail.json +++ b/erpnext/stock/doctype/stock_entry_detail/stock_entry_detail.json @@ -498,7 +498,8 @@ "fieldtype": "Link", "label": "Reference Purchase Receipt", "options": "Purchase Receipt", - "read_only": 1 + "read_only": 1, + "search_index": 1 }, { "fieldname": "project", @@ -660,7 +661,7 @@ "index_web_pages_for_search": 1, "istable": 1, "links": [], - "modified": "2025-10-16 11:50:50.573443", + "modified": "2026-03-02 14:05:23.116017", "modified_by": "Administrator", "module": "Stock", "name": "Stock Entry Detail", From bf44f466ad316f222933c3381ebe881825792caf Mon Sep 17 00:00:00 2001 From: rohitwaghchaure Date: Mon, 2 Mar 2026 14:38:55 +0530 Subject: [PATCH 42/62] chore: fix conflicts --- erpnext/selling/doctype/sales_order/sales_order.json | 4 ---- 1 file changed, 4 deletions(-) diff --git a/erpnext/selling/doctype/sales_order/sales_order.json b/erpnext/selling/doctype/sales_order/sales_order.json index 22ad9300529..1b186352bfa 100644 --- a/erpnext/selling/doctype/sales_order/sales_order.json +++ b/erpnext/selling/doctype/sales_order/sales_order.json @@ -1740,11 +1740,7 @@ "idx": 105, "is_submittable": 1, "links": [], -<<<<<<< HEAD - "modified": "2026-02-10 11:55:52.796522", -======= "modified": "2026-03-02 00:42:18.834823", ->>>>>>> 9538a9870c (fix(accounts): add transaction time field) "modified_by": "Administrator", "module": "Selling", "name": "Sales Order", From 1f2342cf4be44182eb268b99c95af99b7729344d Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Mon, 2 Mar 2026 16:30:43 +0530 Subject: [PATCH 43/62] fix: opening qty in stock balance (cherry picked from commit d7fdab99cb6f5f9981f962a769254b194d6957f2) --- .../report/stock_balance/stock_balance.py | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/erpnext/stock/report/stock_balance/stock_balance.py b/erpnext/stock/report/stock_balance/stock_balance.py index c4c67c4abaf..ed0c31c07d9 100644 --- a/erpnext/stock/report/stock_balance/stock_balance.py +++ b/erpnext/stock/report/stock_balance/stock_balance.py @@ -230,9 +230,18 @@ class StockBalanceReport: .groupby(doctype.voucher_detail_no) ) - data = query.run(as_list=True) - if data: - self.stock_reco_voucher_wise_count = frappe._dict(data) + data = query.run(as_dict=True) + if not data: + return + + for row in data: + if row.count != 1: + continue + + current_qty = frappe.db.get_value( + "Stock Reconciliation Item", row.voucher_detail_no, "current_qty" + ) + self.stock_reco_voucher_wise_count[row.voucher_detail_no] = current_qty def prepare_new_data(self): if self.filters.get("show_stock_ageing_data"): @@ -312,7 +321,8 @@ class StockBalanceReport: if entry.voucher_type == "Stock Reconciliation" and ( not entry.batch_no or entry.serial_no or entry.serial_and_batch_bundle ): - if entry.serial_no and self.stock_reco_voucher_wise_count.get(entry.voucher_detail_no, 0) == 1: + if entry.serial_no and entry.voucher_detail_no in self.stock_reco_voucher_wise_count: + qty_dict.opening_qty -= self.stock_reco_voucher_wise_count.get(entry.voucher_detail_no, 0) qty_dict.bal_qty = 0.0 qty_diff = flt(entry.actual_qty) else: From 7e09bf306ad7aa0fad529d8d149116964d2d1825 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 3 Mar 2026 12:07:57 +0530 Subject: [PATCH 44/62] fix(accounts receivable): include invoice payment terms template (backport #51940) (#53106) Co-authored-by: Ravibharathi <131471282+ravibharathi656@users.noreply.github.com> --- .../accounts_payable/test_accounts_payable.py | 65 +++++++++++- .../accounts_receivable.py | 98 ++++++++++++++----- .../test_accounts_receivable.py | 63 ++++++++++++ 3 files changed, 200 insertions(+), 26 deletions(-) diff --git a/erpnext/accounts/report/accounts_payable/test_accounts_payable.py b/erpnext/accounts/report/accounts_payable/test_accounts_payable.py index d07b0aa43ad..8da40ea3aa4 100644 --- a/erpnext/accounts/report/accounts_payable/test_accounts_payable.py +++ b/erpnext/accounts/report/accounts_payable/test_accounts_payable.py @@ -1,6 +1,6 @@ import frappe from frappe.tests import IntegrationTestCase -from frappe.utils import today +from frappe.utils import add_days, today from erpnext.accounts.doctype.purchase_invoice.test_purchase_invoice import make_purchase_invoice from erpnext.accounts.report.accounts_payable.accounts_payable import execute @@ -57,3 +57,66 @@ class TestAccountsPayable(AccountsTestMixin, IntegrationTestCase): if not do_not_submit: pi = pi.submit() return pi + + def test_payment_terms_template_filters(self): + from erpnext.controllers.accounts_controller import get_payment_terms + + payment_term1 = frappe.get_doc( + {"doctype": "Payment Term", "payment_term_name": "_Test 50% on 15 Days"} + ).insert() + payment_term2 = frappe.get_doc( + {"doctype": "Payment Term", "payment_term_name": "_Test 50% on 30 Days"} + ).insert() + + template = frappe.get_doc( + { + "doctype": "Payment Terms Template", + "template_name": "_Test 50-50", + "terms": [ + { + "doctype": "Payment Terms Template Detail", + "due_date_based_on": "Day(s) after invoice date", + "payment_term": payment_term1.name, + "description": "_Test 50-50", + "invoice_portion": 50, + "credit_days": 15, + }, + { + "doctype": "Payment Terms Template Detail", + "due_date_based_on": "Day(s) after invoice date", + "payment_term": payment_term2.name, + "description": "_Test 50-50", + "invoice_portion": 50, + "credit_days": 30, + }, + ], + } + ) + template.insert() + + filters = { + "company": self.company, + "report_date": today(), + "range": "30, 60, 90, 120", + "based_on_payment_terms": 1, + "payment_terms_template": template.name, + "ageing_based_on": "Posting Date", + } + + pi = self.create_purchase_invoice(do_not_submit=True) + pi.payment_terms_template = template.name + schedule = get_payment_terms(template.name) + pi.set("payment_schedule", []) + + for row in schedule: + row["due_date"] = add_days(pi.posting_date, row.get("credit_days", 0)) + pi.append("payment_schedule", row) + + pi.save() + pi.submit() + + report = execute(filters) + row = report[1][0] + + self.assertEqual(len(report[1]), 2) + self.assertEqual([pi.name, payment_term1.payment_term_name], [row.voucher_no, row.payment_term]) diff --git a/erpnext/accounts/report/accounts_receivable/accounts_receivable.py b/erpnext/accounts/report/accounts_receivable/accounts_receivable.py index 0b4f59d6aae..e29ed79cc49 100644 --- a/erpnext/accounts/report/accounts_receivable/accounts_receivable.py +++ b/erpnext/accounts/report/accounts_receivable/accounts_receivable.py @@ -1035,9 +1035,8 @@ class ReceivablePayableReport: self, ): self.customer = qb.DocType("Customer") - if self.filters.get("customer_group"): - groups = get_customer_group_with_children(self.filters.customer_group) + groups = get_party_group_with_children("Customer", self.filters.customer_group) customers = ( qb.from_(self.customer) .select(self.customer.name) @@ -1049,14 +1048,18 @@ class ReceivablePayableReport: self.get_hierarchical_filters("Territory", "territory") if self.filters.get("payment_terms_template"): - self.qb_selection_filter.append( - self.ple.party.isin( - qb.from_(self.customer) - .select(self.customer.name) - .where(self.customer.payment_terms == self.filters.get("payment_terms_template")) - ) + customer_ptt = self.ple.party.isin( + qb.from_(self.customer) + .select(self.customer.name) + .where(self.customer.payment_terms == self.filters.get("payment_terms_template")) ) + si_ptt = self.add_payment_term_template_filters("Sales Invoice") + + sales_ptt = self.ple.against_voucher_no.isin(si_ptt) + + self.qb_selection_filter.append(Criterion.any([customer_ptt, sales_ptt])) + if self.filters.get("sales_partner"): self.qb_selection_filter.append( self.ple.party.isin( @@ -1081,14 +1084,53 @@ class ReceivablePayableReport: ) if self.filters.get("payment_terms_template"): - self.qb_selection_filter.append( - self.ple.party.isin( - qb.from_(supplier) - .select(supplier.name) - .where(supplier.payment_terms == self.filters.get("supplier_group")) - ) + supplier_ptt = self.ple.party.isin( + qb.from_(supplier) + .select(supplier.name) + .where(supplier.payment_terms == self.filters.get("payment_terms_template")) ) + pi_ptt = self.add_payment_term_template_filters("Purchase Invoice") + + purchase_ptt = self.ple.against_voucher_no.isin(pi_ptt) + + self.qb_selection_filter.append(Criterion.any([supplier_ptt, purchase_ptt])) + + def add_payment_term_template_filters(self, dtype): + voucher_type = qb.DocType(dtype) + + ptt = ( + qb.from_(voucher_type) + .select(voucher_type.name) + .where(voucher_type.payment_terms_template == self.filters.get("payment_terms_template")) + .where(voucher_type.company == self.filters.company) + ) + + if dtype == "Purchase Invoice": + party = "Supplier" + party_group_type = "supplier_group" + acc_type = "credit_to" + else: + party = "Customer" + party_group_type = "customer_group" + acc_type = "debit_to" + + if self.filters.get(party_group_type): + party_groups = get_party_group_with_children(party, self.filters.get(party_group_type)) + ptt = ptt.where((voucher_type[party_group_type]).isin(party_groups)) + + if self.filters.party: + ptt = ptt.where((voucher_type[party.lower()]).isin(self.filters.party)) + + if self.filters.cost_center: + cost_centers = get_cost_centers_with_children(self.filters.cost_center) + ptt = ptt.where(voucher_type.cost_center.isin(cost_centers)) + + if self.filters.party_account: + ptt = ptt.where(voucher_type[acc_type] == self.filters.party_account) + + return ptt + def get_hierarchical_filters(self, doctype, key): lft, rgt = frappe.db.get_value(doctype, self.filters.get(key), ["lft", "rgt"]) @@ -1330,20 +1372,26 @@ class ReceivablePayableReport: self.err_journals = [x[0] for x in results] if results else [] -def get_customer_group_with_children(customer_groups): - if not isinstance(customer_groups, list): - customer_groups = [d.strip() for d in customer_groups.strip().split(",") if d] +def get_party_group_with_children(party, party_groups): + if party not in ("Customer", "Supplier"): + return [] - all_customer_groups = [] - for d in customer_groups: - if frappe.db.exists("Customer Group", d): - lft, rgt = frappe.db.get_value("Customer Group", d, ["lft", "rgt"]) - children = frappe.get_all("Customer Group", filters={"lft": [">=", lft], "rgt": ["<=", rgt]}) - all_customer_groups += [c.name for c in children] + group_dtype = f"{party} Group" + if not isinstance(party_groups, list): + party_groups = [d.strip() for d in party_groups.strip().split(",") if d] + + all_party_groups = [] + for d in party_groups: + if frappe.db.exists(group_dtype, d): + lft, rgt = frappe.db.get_value(group_dtype, d, ["lft", "rgt"]) + children = frappe.get_all( + group_dtype, filters={"lft": [">=", lft], "rgt": ["<=", rgt]}, pluck="name" + ) + all_party_groups += children else: - frappe.throw(_("Customer Group: {0} does not exist").format(d)) + frappe.throw(_("{0}: {1} does not exist").format(group_dtype, d)) - return list(set(all_customer_groups)) + return list(set(all_party_groups)) class InitSQLProceduresForAR: diff --git a/erpnext/accounts/report/accounts_receivable/test_accounts_receivable.py b/erpnext/accounts/report/accounts_receivable/test_accounts_receivable.py index afaba697fb1..907840e8ff4 100644 --- a/erpnext/accounts/report/accounts_receivable/test_accounts_receivable.py +++ b/erpnext/accounts/report/accounts_receivable/test_accounts_receivable.py @@ -1139,3 +1139,66 @@ class TestAccountsReceivable(AccountsTestMixin, IntegrationTestCase): self.assertEqual(len(report[1]), 1) row = report[1][0] self.assertEqual(expected_data_after_payment, [row.voucher_no, row.cost_center, row.outstanding]) + + def test_payment_terms_template_filters(self): + from erpnext.controllers.accounts_controller import get_payment_terms + + payment_term1 = frappe.get_doc( + {"doctype": "Payment Term", "payment_term_name": "_Test 50% on 15 Days"} + ).insert() + payment_term2 = frappe.get_doc( + {"doctype": "Payment Term", "payment_term_name": "_Test 50% on 30 Days"} + ).insert() + + template = frappe.get_doc( + { + "doctype": "Payment Terms Template", + "template_name": "_Test 50-50", + "terms": [ + { + "doctype": "Payment Terms Template Detail", + "due_date_based_on": "Day(s) after invoice date", + "payment_term": payment_term1.name, + "description": "_Test 50-50", + "invoice_portion": 50, + "credit_days": 15, + }, + { + "doctype": "Payment Terms Template Detail", + "due_date_based_on": "Day(s) after invoice date", + "payment_term": payment_term2.name, + "description": "_Test 50-50", + "invoice_portion": 50, + "credit_days": 30, + }, + ], + } + ) + template.insert() + + filters = { + "company": self.company, + "report_date": today(), + "range": "30, 60, 90, 120", + "based_on_payment_terms": 1, + "payment_terms_template": template.name, + "ageing_based_on": "Posting Date", + } + + si = self.create_sales_invoice(no_payment_schedule=True, do_not_submit=True) + si.payment_terms_template = template.name + schedule = get_payment_terms(template.name) + si.set("payment_schedule", []) + + for row in schedule: + row["due_date"] = add_days(si.posting_date, row.get("credit_days", 0)) + si.append("payment_schedule", row) + + si.save() + si.submit() + + report = execute(filters) + row = report[1][0] + + self.assertEqual(len(report[1]), 2) + self.assertEqual([si.name, payment_term1.payment_term_name], [row.voucher_no, row.payment_term]) From 7d950f71dacd6d0dfeeda94fb67f85aa2fc9148c Mon Sep 17 00:00:00 2001 From: Vishnu Priya Baskaran <145791817+ervishnucs@users.noreply.github.com> Date: Tue, 3 Mar 2026 14:32:08 +0530 Subject: [PATCH 45/62] fix: avoid circular dependency (#53109) (cherry picked from commit d2e04750b52ef2eb79cdefc012df9da7fe99f51f) --- .../doctype/pos_closing_entry/pos_closing_entry.js | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.js b/erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.js index bea821fed40..afb8f179fe3 100644 --- a/erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.js +++ b/erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.js @@ -4,19 +4,6 @@ frappe.ui.form.on("POS Closing Entry", { onload: async function (frm) { frm.ignore_doctypes_on_cancel_all = ["POS Invoice Merge Log", "Sales Invoice"]; - frm.set_query("pos_profile", function (doc) { - return { - filters: { user: doc.user }, - }; - }); - - frm.set_query("user", function (doc) { - return { - query: "erpnext.accounts.doctype.pos_closing_entry.pos_closing_entry.get_cashiers", - filters: { parent: doc.pos_profile }, - }; - }); - frm.set_query("pos_opening_entry", function (doc) { return { filters: { status: "Open", docstatus: 1 } }; }); From 396727e26f5dbef7e203df9ffdd0f8f8dddee7b0 Mon Sep 17 00:00:00 2001 From: diptanilsaha Date: Tue, 3 Mar 2026 14:08:49 +0530 Subject: [PATCH 46/62] fix(pricing_rule): strict validation of `transaction_type` (cherry picked from commit 7ec0354a79176f858aff3d99dce1c5a06b2cf77d) --- erpnext/accounts/doctype/pricing_rule/pricing_rule.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/erpnext/accounts/doctype/pricing_rule/pricing_rule.py b/erpnext/accounts/doctype/pricing_rule/pricing_rule.py index 5a4f3ca3249..c450d080522 100644 --- a/erpnext/accounts/doctype/pricing_rule/pricing_rule.py +++ b/erpnext/accounts/doctype/pricing_rule/pricing_rule.py @@ -346,8 +346,7 @@ def apply_pricing_rule(args, doc=None): args = frappe._dict(args) - if not args.transaction_type: - set_transaction_type(args) + set_transaction_type(args) # list of dictionaries out = [] @@ -684,7 +683,7 @@ def remove_pricing_rules(item_list): def set_transaction_type(args): - if args.transaction_type: + if args.transaction_type in ["buying", "selling"]: return if args.doctype in ("Opportunity", "Quotation", "Sales Order", "Delivery Note", "Sales Invoice"): args.transaction_type = "selling" From e4ce6e4e6ffcbc22841fe58c4ef33a303c63a7a0 Mon Sep 17 00:00:00 2001 From: diptanilsaha Date: Tue, 3 Mar 2026 14:41:30 +0530 Subject: [PATCH 47/62] refactor: renamed `args` to `pricing_ctx` in `set_transaction_type` for clarity (cherry picked from commit 6342e7830546b9a952146eb349534bfb6874d506) --- .../doctype/pricing_rule/pricing_rule.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/erpnext/accounts/doctype/pricing_rule/pricing_rule.py b/erpnext/accounts/doctype/pricing_rule/pricing_rule.py index c450d080522..810c50852c5 100644 --- a/erpnext/accounts/doctype/pricing_rule/pricing_rule.py +++ b/erpnext/accounts/doctype/pricing_rule/pricing_rule.py @@ -682,23 +682,23 @@ def remove_pricing_rules(item_list): return out -def set_transaction_type(args): - if args.transaction_type in ["buying", "selling"]: +def set_transaction_type(pricing_ctx: frappe._dict) -> None: + if pricing_ctx.transaction_type in ["buying", "selling"]: return - if args.doctype in ("Opportunity", "Quotation", "Sales Order", "Delivery Note", "Sales Invoice"): - args.transaction_type = "selling" - elif args.doctype in ( + if pricing_ctx.doctype in ("Opportunity", "Quotation", "Sales Order", "Delivery Note", "Sales Invoice"): + pricing_ctx.transaction_type = "selling" + elif pricing_ctx.doctype in ( "Material Request", "Supplier Quotation", "Purchase Order", "Purchase Receipt", "Purchase Invoice", ): - args.transaction_type = "buying" - elif args.customer: - args.transaction_type = "selling" + pricing_ctx.transaction_type = "buying" + elif pricing_ctx.customer: + pricing_ctx.transaction_type = "selling" else: - args.transaction_type = "buying" + pricing_ctx.transaction_type = "buying" @frappe.whitelist() From 32c33631a64dde18e707e41ba4c13c21bd9cf721 Mon Sep 17 00:00:00 2001 From: diptanilsaha Date: Tue, 3 Mar 2026 15:46:34 +0530 Subject: [PATCH 48/62] chore: fix onboarding doctype merge conflicts (#53118) --- .../module_onboarding/asset_onboarding/asset_onboarding.json | 4 ---- erpnext/assets/onboarding_step/learn_asset/learn_asset.json | 4 ---- 2 files changed, 8 deletions(-) diff --git a/erpnext/assets/module_onboarding/asset_onboarding/asset_onboarding.json b/erpnext/assets/module_onboarding/asset_onboarding/asset_onboarding.json index 7a4b953696a..d8a8c4ba00b 100644 --- a/erpnext/assets/module_onboarding/asset_onboarding/asset_onboarding.json +++ b/erpnext/assets/module_onboarding/asset_onboarding/asset_onboarding.json @@ -15,11 +15,7 @@ "doctype": "Module Onboarding", "idx": 0, "is_complete": 0, -<<<<<<< version-16-hotfix - "modified": "2026-02-26 10:45:47.970714", -======= "modified": "2026-02-26 10:50:47.970714", ->>>>>>> version-16 "modified_by": "Administrator", "module": "Assets", "name": "Asset Onboarding", diff --git a/erpnext/assets/onboarding_step/learn_asset/learn_asset.json b/erpnext/assets/onboarding_step/learn_asset/learn_asset.json index 890e092b21a..265d6759150 100644 --- a/erpnext/assets/onboarding_step/learn_asset/learn_asset.json +++ b/erpnext/assets/onboarding_step/learn_asset/learn_asset.json @@ -8,11 +8,7 @@ "is_complete": 0, "is_single": 0, "is_skipped": 0, -<<<<<<< version-16-hotfix - "modified": "2026-02-26 10:44:59.557156", -======= "modified": "2026-02-26 10:50:59.557156", ->>>>>>> version-16 "modified_by": "Administrator", "name": "Learn Asset", "owner": "Administrator", From 58fbb2f4d7d5193b1351b8ec75f79f50e7a15240 Mon Sep 17 00:00:00 2001 From: shariquerik Date: Tue, 3 Mar 2026 16:56:00 +0530 Subject: [PATCH 49/62] fix: ensure contacts are processed only if present in create_prospect_against_crm_deal (cherry picked from commit 800810d23d9e687c0f6372f65744f00795e24964) --- erpnext/crm/frappe_crm_api.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/erpnext/crm/frappe_crm_api.py b/erpnext/crm/frappe_crm_api.py index 0bf78429b36..86521586b28 100644 --- a/erpnext/crm/frappe_crm_api.py +++ b/erpnext/crm/frappe_crm_api.py @@ -59,7 +59,9 @@ def create_prospect_against_crm_deal(): ) pass - create_contacts(json.loads(doc.contacts), prospect.company_name, "Prospect", prospect_name) + if doc.contacts and len(doc.contacts): + create_contacts(json.loads(doc.contacts), prospect.company_name, "Prospect", prospect_name) + create_address("Prospect", prospect_name, doc.address) frappe.response["message"] = prospect_name From dc0592a9057c08982c988d3bfd22e26c81a8e81f Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Tue, 3 Mar 2026 17:11:53 +0530 Subject: [PATCH 50/62] fix: serial no status for Disassemble entry (cherry picked from commit 81acefa8adf625b4b9905abda43832c25a9d8847) --- erpnext/stock/serial_batch_bundle.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/erpnext/stock/serial_batch_bundle.py b/erpnext/stock/serial_batch_bundle.py index 5e37aea5498..7fc143e38d4 100644 --- a/erpnext/stock/serial_batch_bundle.py +++ b/erpnext/stock/serial_batch_bundle.py @@ -463,6 +463,11 @@ class SerialBatchBundle: if sle.voucher_type in ["Sales Invoice", "Delivery Note"] and sle.actual_qty < 0: customer = frappe.get_cached_value(sle.voucher_type, sle.voucher_no, "customer") + if sle.voucher_type in ["Stock Entry"] and sle.actual_qty < 0: + purpose = frappe.get_cached_value("Stock Entry", sle.voucher_no, "purpose") + if purpose in ["Disassemble", "Material Receipt"]: + status = "Inactive" + sn_table = frappe.qb.DocType("Serial No") query = ( From acdb8f2b784142dc44af5881bdfb96be90c3ead5 Mon Sep 17 00:00:00 2001 From: kavin-114 Date: Mon, 2 Mar 2026 23:40:40 +0530 Subject: [PATCH 51/62] fix: populate mr owner and set po owner as fallback (cherry picked from commit bdf4e51da3e9036d238ed5dcf7808b7a5dac64cc) --- .../buying/report/procurement_tracker/procurement_tracker.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/buying/report/procurement_tracker/procurement_tracker.py b/erpnext/buying/report/procurement_tracker/procurement_tracker.py index 6f610d2dc20..10169c554fb 100644 --- a/erpnext/buying/report/procurement_tracker/procurement_tracker.py +++ b/erpnext/buying/report/procurement_tracker/procurement_tracker.py @@ -165,7 +165,7 @@ def get_data(filters): "cost_center": po.cost_center, "project": po.project, "requesting_site": po.warehouse, - "requestor": po.owner, + "requestor": mr_record.get("owner", po.owner), "material_request_no": po.material_request, "item_code": po.item_code, "quantity": flt(po.qty), From d61ad3bd95a14dc432512722bf2b77d415a561f9 Mon Sep 17 00:00:00 2001 From: kavin-114 Date: Sat, 28 Feb 2026 13:01:07 +0530 Subject: [PATCH 52/62] fix(stock): pass company to avoid document naming rule issue in QI When a Document Naming Rule is configured in QI with a condition based on the company, the system was not passing the company value properly. As a result, the naming rule condition was skipped and the document name was generated using the default series. This fix ensures that the company is passed correctly so that the configured Document Naming Rule is evaluated and applied as expected. (cherry picked from commit 74def423ed5b3d7f2960100a306341b2547cf90e) # Conflicts: # erpnext/controllers/stock_controller.py --- erpnext/controllers/stock_controller.py | 7 +++++++ erpnext/public/js/controllers/transaction.js | 1 + 2 files changed, 8 insertions(+) diff --git a/erpnext/controllers/stock_controller.py b/erpnext/controllers/stock_controller.py index 0ae1d232171..13df4f5d34b 100644 --- a/erpnext/controllers/stock_controller.py +++ b/erpnext/controllers/stock_controller.py @@ -2128,7 +2128,13 @@ def check_item_quality_inspection(doctype, items): @frappe.whitelist() +<<<<<<< HEAD def make_quality_inspections(doctype, docname, items, inspection_type): +======= +def make_quality_inspections( + company: str, doctype: str, docname: str, items: str | list, inspection_type: str +): +>>>>>>> 74def423ed (fix(stock): pass company to avoid document naming rule issue in QI) if isinstance(items, str): items = json.loads(items) @@ -2147,6 +2153,7 @@ def make_quality_inspections(doctype, docname, items, inspection_type): quality_inspection = frappe.get_doc( { + "company": company, "doctype": "Quality Inspection", "inspection_type": inspection_type, "inspected_by": frappe.session.user, diff --git a/erpnext/public/js/controllers/transaction.js b/erpnext/public/js/controllers/transaction.js index aa02eec7b62..650611ee709 100644 --- a/erpnext/public/js/controllers/transaction.js +++ b/erpnext/public/js/controllers/transaction.js @@ -2966,6 +2966,7 @@ erpnext.TransactionController = class TransactionController extends erpnext.taxe frappe.call({ method: "erpnext.controllers.stock_controller.make_quality_inspections", args: { + company: me.frm.doc.company, doctype: me.frm.doc.doctype, docname: me.frm.doc.name, items: selected_data, From 384498282463eb61f77d26510c66c4cfff14090c Mon Sep 17 00:00:00 2001 From: kavin-114 Date: Sat, 28 Feb 2026 16:36:22 +0530 Subject: [PATCH 53/62] test: add unit test to handle company condition in naming rule (cherry picked from commit 4c39cf2d650207c3d02d1da8490fcf2657ddc488) --- .../doctype/stock_entry/test_stock_entry.py | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/erpnext/stock/doctype/stock_entry/test_stock_entry.py b/erpnext/stock/doctype/stock_entry/test_stock_entry.py index 04f87d3348e..583cb4bedc6 100644 --- a/erpnext/stock/doctype/stock_entry/test_stock_entry.py +++ b/erpnext/stock/doctype/stock_entry/test_stock_entry.py @@ -2415,6 +2415,54 @@ class TestStockEntry(IntegrationTestCase): frappe.get_doc(_make_stock_entry(work_order.name, "Material Consumption for Manufacture", 5)).submit() frappe.get_doc(_make_stock_entry(work_order.name, "Manufacture", 5)).submit() + def test_qi_creation_with_naming_rule_company_condition(self): + """ + Unit test case to check the document naming rule with company condition + For Quality Inspection, when created from Stock Entry. + """ + from erpnext.accounts.report.trial_balance.test_trial_balance import create_company + from erpnext.controllers.stock_controller import make_quality_inspections + from erpnext.stock.doctype.warehouse.test_warehouse import create_warehouse + + # create a separate company to handle document naming rule with company condition + qc_company = create_company(company_name="Test Quality Company") + + # create document naming rule based on that for Quality Inspection Doctype + qc_naming_rule = frappe.new_doc( + "Document Naming Rule", document_type="Quality Inspection", prefix="NQC.-ST-", prefix_digits=5 + ) + qc_naming_rule.append("conditions", {"field": "company", "condition": "=", "value": qc_company}) + qc_naming_rule.save() + + warehouse = create_warehouse(warehouse_name="Test QI Warehouse", company=qc_company) + item = create_item( + item_code="Test QI DNR Item", + is_stock_item=1, + ) + + # create inward stock entry + stock_entry = make_stock_entry( + item_code=item.item_code, + target=warehouse, + qty=10, + basic_rate=100, + inspection_required=True, + do_not_submit=True, + ) + + # create QI from Stock Entry and check the naming series generated. + qi = make_quality_inspections( + stock_entry.company, + stock_entry.doctype, + stock_entry.name, + stock_entry.as_dict().get("items"), + "Incoming", + ) + self.assertEqual(qi[0], "NQC-ST-00001") + + # delete naming rule + frappe.delete_doc("Document Naming Rule", qc_naming_rule.name) + def make_serialized_item(self, **args): args = frappe._dict(args) From 417e8a43718f7156891abbbadfedec066ce64445 Mon Sep 17 00:00:00 2001 From: kavin-114 Date: Mon, 2 Mar 2026 13:05:27 +0530 Subject: [PATCH 54/62] fix: pass company in test case using make_quality_inspections (cherry picked from commit 397de1274f17dfea53f2c9e4fc7aaea8a33cb8cc) --- .../doctype/quality_inspection/test_quality_inspection.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/erpnext/stock/doctype/quality_inspection/test_quality_inspection.py b/erpnext/stock/doctype/quality_inspection/test_quality_inspection.py index 8c4622a8ae2..3885df7c74a 100644 --- a/erpnext/stock/doctype/quality_inspection/test_quality_inspection.py +++ b/erpnext/stock/doctype/quality_inspection/test_quality_inspection.py @@ -142,7 +142,9 @@ class TestQualityInspection(IntegrationTestCase): inspection_type = "Outgoing" for item in dn.items: item.sample_size = item.qty - quality_inspections = make_quality_inspections(dn.doctype, dn.name, dn.items, inspection_type) + quality_inspections = make_quality_inspections( + dn.company, dn.doctype, dn.name, dn.items, inspection_type + ) self.assertEqual(len(dn.items), len(quality_inspections)) # cleanup From 2daf9f4ce7d8a7c8535c2da287412cce3d78569b Mon Sep 17 00:00:00 2001 From: Sudharsanan11 Date: Mon, 2 Mar 2026 12:26:55 +0530 Subject: [PATCH 55/62] fix(manufacturing): ignore sales order validation for subassembly item (cherry picked from commit 6b1aac4aee35df0d8b339f3389e8330fee7bf2cd) --- .../doctype/work_order/work_order.py | 80 ++++++++++++------- 1 file changed, 49 insertions(+), 31 deletions(-) diff --git a/erpnext/manufacturing/doctype/work_order/work_order.py b/erpnext/manufacturing/doctype/work_order/work_order.py index b442f5becfc..b74281308b7 100644 --- a/erpnext/manufacturing/doctype/work_order/work_order.py +++ b/erpnext/manufacturing/doctype/work_order/work_order.py @@ -225,7 +225,12 @@ class WorkOrder(Document): frappe.throw(_("Actual End Date cannot be before Actual Start Date")) def validate_fg_warehouse_for_reservation(self): - if self.reserve_stock and self.sales_order and not self.subcontracting_inward_order: + if ( + self.reserve_stock + and self.sales_order + and not self.subcontracting_inward_order + and not self.production_plan_sub_assembly_item + ): warehouses = frappe.get_all( "Sales Order Item", filters={"parent": self.sales_order, "item_code": self.production_item}, @@ -413,39 +418,52 @@ class WorkOrder(Document): ) def validate_sales_order(self): + if self.production_plan_sub_assembly_item: + return + if self.sales_order: self.check_sales_order_on_hold_or_close() - so = frappe.db.sql( - """ - select so.name, so_item.delivery_date, so.project - from `tabSales Order` so - inner join `tabSales Order Item` so_item on so_item.parent = so.name - left join `tabProduct Bundle Item` pk_item on so_item.item_code = pk_item.parent - where so.name=%s and so.docstatus = 1 - and so.skip_delivery_note = 0 and ( - so_item.item_code=%s or - pk_item.item_code=%s ) - """, - (self.sales_order, self.production_item, self.production_item), - as_dict=1, + + SalesOrder = frappe.qb.DocType("Sales Order") + SalesOrderItem = frappe.qb.DocType("Sales Order Item") + PackedItem = frappe.qb.DocType("Packed Item") + ProductBundleItem = frappe.qb.DocType("Product Bundle Item") + + so = ( + frappe.qb.from_(SalesOrder) + .inner_join(SalesOrderItem) + .on(SalesOrderItem.parent == SalesOrder.name) + .left_join(ProductBundleItem) + .on(ProductBundleItem.parent == SalesOrderItem.item_code) + .select(SalesOrder.name, SalesOrder.project, SalesOrderItem.delivery_date) + .where( + (SalesOrder.skip_delivery_note == 0) + & (SalesOrder.docstatus == 1) + & (SalesOrder.name == self.sales_order) + & ( + (SalesOrderItem.item_code == self.production_item) + | (ProductBundleItem.item_code == self.production_item) + ) + ) + .run(as_dict=1) ) if not so: - so = frappe.db.sql( - """ - select - so.name, so_item.delivery_date, so.project - from - `tabSales Order` so, `tabSales Order Item` so_item, `tabPacked Item` packed_item - where so.name=%s - and so.name=so_item.parent - and so.name=packed_item.parent - and so.skip_delivery_note = 0 - and so_item.item_code = packed_item.parent_item - and so.docstatus = 1 and packed_item.item_code=%s - """, - (self.sales_order, self.production_item), - as_dict=1, + so = ( + frappe.qb.from_(SalesOrder) + .inner_join(SalesOrderItem) + .on(SalesOrderItem.parent == SalesOrder.name) + .inner_join(PackedItem) + .on(PackedItem.parent == SalesOrder.name) + .select(SalesOrder.name, SalesOrder.project, SalesOrderItem.delivery_date) + .where( + (SalesOrder.name == self.sales_order) + & (SalesOrder.skip_delivery_note == 0) + & (SalesOrderItem.item_code == PackedItem.parent_item) + & (SalesOrder.docstatus == 1) + & (PackedItem.item_code == self.production_item) + ) + .run(as_dict=1) ) if len(so): @@ -651,7 +669,7 @@ class WorkOrder(Document): from erpnext.selling.doctype.sales_order.sales_order import update_produced_qty_in_so_item - if self.sales_order and self.sales_order_item: + if self.sales_order and self.sales_order_item and not self.production_plan_sub_assembly_item: update_produced_qty_in_so_item(self.sales_order, self.sales_order_item) if self.production_plan: @@ -1159,7 +1177,7 @@ class WorkOrder(Document): doc.db_set("status", doc.status) def update_work_order_qty_in_so(self): - if not self.sales_order and not self.sales_order_item: + if (not self.sales_order and not self.sales_order_item) or self.production_plan_sub_assembly_item: return total_bundle_qty = 1 From 3e8ebf8c14589a8a75958bc336fc8aad474995be Mon Sep 17 00:00:00 2001 From: Mihir Kandoi Date: Tue, 3 Mar 2026 20:44:40 +0530 Subject: [PATCH 56/62] chore: resolve conflicts --- erpnext/controllers/stock_controller.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/erpnext/controllers/stock_controller.py b/erpnext/controllers/stock_controller.py index 13df4f5d34b..5436cd3e54f 100644 --- a/erpnext/controllers/stock_controller.py +++ b/erpnext/controllers/stock_controller.py @@ -2128,13 +2128,9 @@ def check_item_quality_inspection(doctype, items): @frappe.whitelist() -<<<<<<< HEAD -def make_quality_inspections(doctype, docname, items, inspection_type): -======= def make_quality_inspections( company: str, doctype: str, docname: str, items: str | list, inspection_type: str ): ->>>>>>> 74def423ed (fix(stock): pass company to avoid document naming rule issue in QI) if isinstance(items, str): items = json.loads(items) From 317873621a0bedc2298cae80cd36497560bb5f6a Mon Sep 17 00:00:00 2001 From: Pugazhendhi Velu Date: Sun, 1 Mar 2026 18:21:09 +0000 Subject: [PATCH 57/62] fix: handle html email template separately in RFQ to avoid jinja context error (cherry picked from commit 49d363b1748640e3addb23d4ee5a186210cb4d62) --- .../request_for_quotation.js | 15 ++++++++--- .../request_for_quotation.json | 25 ++++++++++++++++--- .../request_for_quotation.py | 21 +++++++++++++--- 3 files changed, 50 insertions(+), 11 deletions(-) diff --git a/erpnext/buying/doctype/request_for_quotation/request_for_quotation.js b/erpnext/buying/doctype/request_for_quotation/request_for_quotation.js index 335bb28b0fb..3171ad595b1 100644 --- a/erpnext/buying/doctype/request_for_quotation/request_for_quotation.js +++ b/erpnext/buying/doctype/request_for_quotation/request_for_quotation.js @@ -250,10 +250,17 @@ frappe.ui.form.on("Request for Quotation", { "subject", ]) .then((r) => { - frm.set_value( - "message_for_supplier", - r.message.use_html ? r.message.response_html : r.message.response - ); + if (r.message.use_html) { + frm.set_value({ + mfs_html: r.message.response_html, + use_html: 1, + }); + } else { + frm.set_value({ + message_for_supplier: r.message.response, + use_html: 0, + }); + } frm.set_value("subject", r.message.subject); }); } diff --git a/erpnext/buying/doctype/request_for_quotation/request_for_quotation.json b/erpnext/buying/doctype/request_for_quotation/request_for_quotation.json index 005078584bb..a10497702ce 100644 --- a/erpnext/buying/doctype/request_for_quotation/request_for_quotation.json +++ b/erpnext/buying/doctype/request_for_quotation/request_for_quotation.json @@ -31,7 +31,9 @@ "send_document_print", "sec_break_email_2", "subject", + "use_html", "message_for_supplier", + "mfs_html", "terms_section_break", "incoterm", "named_place", @@ -142,12 +144,13 @@ { "allow_on_submit": 1, "default": "Please supply the specified items at the best possible rates", + "depends_on": "eval:doc.use_html == 0", "fieldname": "message_for_supplier", "fieldtype": "Text Editor", "in_list_view": 1, "label": "Message for Supplier", - "print_hide": 1, - "reqd": 1 + "mandatory_depends_on": "eval:doc.use_html == 0", + "print_hide": 1 }, { "collapsible": 1, @@ -324,6 +327,22 @@ "label": "Subject", "not_nullable": 1, "reqd": 1 + }, + { + "allow_on_submit": 1, + "depends_on": "eval:doc.use_html == 1", + "fieldname": "mfs_html", + "fieldtype": "Code", + "label": "Message for Supplier", + "mandatory_depends_on": "eval:doc.use_html == 1", + "print_hide": 1 + }, + { + "default": "0", + "fieldname": "use_html", + "fieldtype": "Check", + "hidden": 1, + "label": "Use HTML" } ], "grid_page_length": 50, @@ -331,7 +350,7 @@ "index_web_pages_for_search": 1, "is_submittable": 1, "links": [], - "modified": "2026-01-06 10:31:08.747043", + "modified": "2026-03-01 23:38:48.079274", "modified_by": "Administrator", "module": "Buying", "name": "Request for Quotation", diff --git a/erpnext/buying/doctype/request_for_quotation/request_for_quotation.py b/erpnext/buying/doctype/request_for_quotation/request_for_quotation.py index 95727472112..38ab9af4eab 100644 --- a/erpnext/buying/doctype/request_for_quotation/request_for_quotation.py +++ b/erpnext/buying/doctype/request_for_quotation/request_for_quotation.py @@ -47,7 +47,8 @@ class RequestforQuotation(BuyingController): incoterm: DF.Link | None items: DF.Table[RequestforQuotationItem] letter_head: DF.Link | None - message_for_supplier: DF.TextEditor + message_for_supplier: DF.TextEditor | None + mfs_html: DF.Code | None named_place: DF.Data | None naming_series: DF.Literal["PUR-RFQ-.YYYY.-"] opportunity: DF.Link | None @@ -61,6 +62,7 @@ class RequestforQuotation(BuyingController): tc_name: DF.Link | None terms: DF.TextEditor | None transaction_date: DF.Date + use_html: DF.Check vendor: DF.Link | None # end: auto-generated types @@ -100,8 +102,16 @@ class RequestforQuotation(BuyingController): ["use_html", "response", "response_html", "subject"], as_dict=True, ) - if not self.message_for_supplier: - self.message_for_supplier = data.response_html if data.use_html else data.response + + self.use_html = data.use_html + + if data.use_html: + if not self.mfs_html: + self.mfs_html = data.response_html + else: + if not self.message_for_supplier: + self.message_for_supplier = data.response + if not self.subject: self.subject = data.subject @@ -304,7 +314,10 @@ class RequestforQuotation(BuyingController): else: sender = frappe.session.user not in STANDARD_USERS and frappe.session.user or None - rendered_message = frappe.render_template(self.message_for_supplier, doc_args) + message_template = self.mfs_html if self.use_html else self.message_for_supplier + # nosemgrep: frappe-semgrep-rules.rules.security.frappe-ssti + rendered_message = frappe.render_template(message_template, doc_args) + subject_source = ( self.subject or frappe.get_value("Email Template", self.email_template, "subject") From c7928a074934465af4474ca5d1901c5cc9d4e8e7 Mon Sep 17 00:00:00 2001 From: kavin-114 Date: Tue, 3 Mar 2026 19:41:50 +0530 Subject: [PATCH 58/62] fix(selling): handle selling price validation for FG item System checks valuation rate in incoming_rate field, since SO has it in valuation_rate field of item row, need to handle the field name dynamically based upon the doctype name in Selling Controller. (cherry picked from commit 433531848259db472715f9f8991a4537c1a75710) --- erpnext/controllers/selling_controller.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/erpnext/controllers/selling_controller.py b/erpnext/controllers/selling_controller.py index 6db30b41a8a..742d8627fdf 100644 --- a/erpnext/controllers/selling_controller.py +++ b/erpnext/controllers/selling_controller.py @@ -333,9 +333,10 @@ class SellingController(StockController): if is_internal_customer or not is_stock_item: continue - if item.get("incoming_rate") and item.base_net_rate < ( + rate_field = "valuation_rate" if self.doctype in ["Sales Order", "Quotation"] else "incoming_rate" + if item.get(rate_field) and item.base_net_rate < ( valuation_rate := flt( - item.incoming_rate * (item.conversion_factor or 1), item.precision("base_net_rate") + item.get(rate_field) * (item.conversion_factor or 1), item.precision("base_net_rate") ) ): throw_message( From 7713d25b7ee72cea825273e54eef4a032b5b9b33 Mon Sep 17 00:00:00 2001 From: kavin-114 Date: Tue, 3 Mar 2026 20:33:55 +0530 Subject: [PATCH 59/62] test: add unit test for FG Item selling price validation (cherry picked from commit 723993fdf69aaed40d8bcf24f40f3aef7de04d6d) --- .../doctype/sales_order/test_sales_order.py | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/erpnext/selling/doctype/sales_order/test_sales_order.py b/erpnext/selling/doctype/sales_order/test_sales_order.py index 3cb326cbcc3..6c7ae9c0660 100644 --- a/erpnext/selling/doctype/sales_order/test_sales_order.py +++ b/erpnext/selling/doctype/sales_order/test_sales_order.py @@ -2647,6 +2647,49 @@ class TestSalesOrder(AccountsTestMixin, IntegrationTestCase): si2 = make_sales_invoice(so.name) self.assertEqual(si2.items[0].qty, 20) + @change_settings("Selling Settings", {"validate_selling_price": 1}) + def test_selling_price_validation_for_manufactured_item(self): + """ + Unit test to check the selling price validation for manufactured item, without last purchae rate in Item master. + """ + + from erpnext.manufacturing.doctype.production_plan.test_production_plan import make_bom + from erpnext.stock.doctype.warehouse.test_warehouse import create_warehouse + + # create a FG Item and RM Item + rm_item = make_item( + "_Test RM Item for SO selling validation", + {"is_stock_item": 1, "valuation_rate": 100, "stock_uom": "Nos"}, + ).name + rm_warehouse = create_warehouse("_Test RM SPV Warehouse") + fg_item = make_item("_Test FG Item for SO selling validation", {"is_stock_item": 1}).name + fg_warehouse = create_warehouse("_Test FG SPV Warehouse") + + # create BOM and inward entry for RM Item + bom_no = make_bom(item=fg_item, raw_materials=[rm_item]).name + make_stock_entry(item_code=rm_item, target=rm_warehouse, qty=10, rate=100) + + # create a manufacture entry, so system won't update the last purchase rate in Item master. + se = make_stock_entry(item_code=fg_item, qty=10, purpose="Manufacture", do_not_save=True) + + se.from_bom = 1 + se.use_multi_level_bom = 1 + se.bom_no = bom_no + se.fg_completed_qty = 1 + se.from_warehouse = rm_warehouse + se.to_warehouse = fg_warehouse + + se.get_items() + se.save() + se.submit() + + # check valuation of FG Item + self.assertEqual(se.items[1].valuation_rate, 100) + + # create a SO for FG Item with selling rate than valuation rate. + so = make_sales_order(item_code=fg_item, qty=10, rate=50, warehouse=fg_warehouse, do_not_save=1) + self.assertRaises(frappe.ValidationError, so.save) + def compare_payment_schedules(doc, doc1, doc2): for index, schedule in enumerate(doc1.get("payment_schedule")): From c6e0eb6d179c11a8765eff40f1c94e259d509ed5 Mon Sep 17 00:00:00 2001 From: Sudharsanan11 Date: Wed, 18 Feb 2026 23:59:42 +0530 Subject: [PATCH 60/62] fix(stock): validate company for receipt documents and expense accounts (cherry picked from commit 15dfc08a3181063f18147af0ad6170393531cfae) --- .../landed_cost_voucher.py | 36 ++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.py b/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.py index 9d23eda3755..f57a8792598 100644 --- a/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.py +++ b/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.py @@ -75,6 +75,7 @@ class LandedCostVoucher(Document): self.check_mandatory() self.validate_receipt_documents() self.validate_line_items() + self.validate_expense_accounts() init_landed_taxes_and_totals(self) self.set_total_taxes_and_charges() if not self.get("items"): @@ -116,11 +117,27 @@ class LandedCostVoucher(Document): receipt_documents = [] for d in self.get("purchase_receipts"): - docstatus = frappe.db.get_value(d.receipt_document_type, d.receipt_document, "docstatus") + docstatus, company = frappe.get_cached_value( + d.receipt_document_type, d.receipt_document, ["docstatus", "company"] + ) if docstatus != 1: msg = f"Row {d.idx}: {d.receipt_document_type} {frappe.bold(d.receipt_document)} must be submitted" frappe.throw(_(msg), title=_("Invalid Document")) + if company != self.company: + frappe.throw( + _( + "Row {0}: {1} {2} is linked to company {3}. Please select a document belonging to company {4}." + ).format( + d.idx, + d.receipt_document_type, + frappe.bold(d.receipt_document), + frappe.bold(company), + frappe.bold(self.company), + ), + title=_("Incorrect Company"), + ) + if d.receipt_document_type == "Purchase Invoice": update_stock = frappe.db.get_value( d.receipt_document_type, d.receipt_document, "update_stock" @@ -152,6 +169,23 @@ class LandedCostVoucher(Document): _("Row {0}: Cost center is required for an item {1}").format(item.idx, item.item_code) ) + def validate_expense_accounts(self): + for t in self.taxes: + company = frappe.get_cached_value("Account", t.expense_account, "company") + + if company != self.company: + frappe.throw( + _( + "Row {0}: Expense Account {1} is linked to company {2}. Please select an account belonging to company {3}." + ).format( + t.idx, + frappe.bold(t.expense_account), + frappe.bold(company), + frappe.bold(self.company), + ), + title=_("Incorrect Account"), + ) + def set_total_taxes_and_charges(self): self.total_taxes_and_charges = sum(flt(d.base_amount) for d in self.get("taxes")) From 25c134d11ce6a50b1786b4f5194340581e2aec2b Mon Sep 17 00:00:00 2001 From: Sudharsanan11 Date: Fri, 20 Feb 2026 12:15:40 +0530 Subject: [PATCH 61/62] fix: set company based expense account (cherry picked from commit d54d0c25a23ac65c6fe1fd971bdcc0c1cab5ca1a) --- .../landed_cost_voucher/test_landed_cost_voucher.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/erpnext/stock/doctype/landed_cost_voucher/test_landed_cost_voucher.py b/erpnext/stock/doctype/landed_cost_voucher/test_landed_cost_voucher.py index 586e95f3ab2..440d828cd61 100644 --- a/erpnext/stock/doctype/landed_cost_voucher/test_landed_cost_voucher.py +++ b/erpnext/stock/doctype/landed_cost_voucher/test_landed_cost_voucher.py @@ -1260,6 +1260,7 @@ def make_landed_cost_voucher(**args): lcv = frappe.new_doc("Landed Cost Voucher") lcv.company = args.company or "_Test Company" lcv.distribute_charges_based_on = args.distribute_charges_based_on or "Amount" + expense_account = get_expense_account(args.company or "_Test Company") lcv.set( "purchase_receipts", @@ -1280,7 +1281,7 @@ def make_landed_cost_voucher(**args): [ { "description": "Shipping Charges", - "expense_account": args.expense_account or "Expenses Included In Valuation - TCP1", + "expense_account": args.expense_account or expense_account, "amount": args.charges, } ], @@ -1300,6 +1301,7 @@ def create_landed_cost_voucher(receipt_document_type, receipt_document, company, lcv = frappe.new_doc("Landed Cost Voucher") lcv.company = company lcv.distribute_charges_based_on = "Amount" + expense_account = get_expense_account(company) lcv.set( "purchase_receipts", @@ -1319,7 +1321,7 @@ def create_landed_cost_voucher(receipt_document_type, receipt_document, company, [ { "description": "Insurance Charges", - "expense_account": "Expenses Included In Valuation - TCP1", + "expense_account": expense_account, "amount": charges, } ], @@ -1334,6 +1336,11 @@ def create_landed_cost_voucher(receipt_document_type, receipt_document, company, return lcv +def get_expense_account(company): + company_abbr = frappe.get_cached_value("Company", company, "abbr") + return f"Expenses Included In Valuation - {company_abbr}" + + def distribute_landed_cost_on_items(lcv): based_on = lcv.distribute_charges_based_on.lower() total = sum(flt(d.get(based_on)) for d in lcv.get("items")) From 4350c6b9e394167c88d74c0d64e23ec4f7e9db42 Mon Sep 17 00:00:00 2001 From: Sudharsanan11 Date: Mon, 23 Feb 2026 01:59:25 +0530 Subject: [PATCH 62/62] test(stock): add test to validate company for receipts and expense accounts (cherry picked from commit d58171987c4a63de234acfd2c1f2cd53c767ad03) --- .../landed_cost_voucher.py | 6 ++++ .../test_landed_cost_voucher.py | 33 +++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.py b/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.py index f57a8792598..fc4bc589f9d 100644 --- a/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.py +++ b/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.py @@ -14,6 +14,10 @@ from erpnext.controllers.taxes_and_totals import init_landed_taxes_and_totals from erpnext.stock.doctype.serial_no.serial_no import get_serial_nos +class IncorrectCompanyValidationError(frappe.ValidationError): + pass + + class LandedCostVoucher(Document): # begin: auto-generated types # This code is auto-generated. Do not modify anything in this block. @@ -136,6 +140,7 @@ class LandedCostVoucher(Document): frappe.bold(self.company), ), title=_("Incorrect Company"), + exc=IncorrectCompanyValidationError, ) if d.receipt_document_type == "Purchase Invoice": @@ -184,6 +189,7 @@ class LandedCostVoucher(Document): frappe.bold(self.company), ), title=_("Incorrect Account"), + exc=IncorrectCompanyValidationError, ) def set_total_taxes_and_charges(self): diff --git a/erpnext/stock/doctype/landed_cost_voucher/test_landed_cost_voucher.py b/erpnext/stock/doctype/landed_cost_voucher/test_landed_cost_voucher.py index 440d828cd61..f68351a5611 100644 --- a/erpnext/stock/doctype/landed_cost_voucher/test_landed_cost_voucher.py +++ b/erpnext/stock/doctype/landed_cost_voucher/test_landed_cost_voucher.py @@ -178,6 +178,39 @@ class TestLandedCostVoucher(IntegrationTestCase): self.assertEqual(last_sle.qty_after_transaction, last_sle_after_landed_cost.qty_after_transaction) self.assertEqual(last_sle_after_landed_cost.stock_value - last_sle.stock_value, 50.0) + def test_lcv_validates_company(self): + from erpnext.stock.doctype.landed_cost_voucher.landed_cost_voucher import ( + IncorrectCompanyValidationError, + ) + + company_a = "_Test Company" + company_b = "_Test Company with perpetual inventory" + + pr = make_purchase_receipt( + company=company_a, + warehouse="Stores - _TC", + qty=1, + rate=100, + ) + + lcv = make_landed_cost_voucher( + company=company_b, + receipt_document_type="Purchase Receipt", + receipt_document=pr.name, + charges=50, + do_not_save=True, + ) + + self.assertRaises(IncorrectCompanyValidationError, lcv.validate_receipt_documents) + lcv.company = company_a + + self.assertRaises(IncorrectCompanyValidationError, lcv.validate_expense_accounts) + lcv.taxes[0].expense_account = get_expense_account(company_a) + + lcv.save() + distribute_landed_cost_on_items(lcv) + lcv.submit() + def test_landed_cost_voucher_for_zero_purchase_rate(self): "Test impact of LCV on future stock balances." from erpnext.stock.doctype.item.test_item import make_item