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: 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", 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 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 } }; }); 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", diff --git a/erpnext/accounts/doctype/pos_profile/pos_profile.json b/erpnext/accounts/doctype/pos_profile/pos_profile.json index c0e5c895403..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", @@ -61,7 +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" ], "fields": [ { @@ -430,6 +433,20 @@ "fieldname": "allow_partial_payment", "fieldtype": "Check", "label": "Allow Partial Payment" + }, + { + "fieldname": "column_break_tvls", + "fieldtype": "Column Break" + }, + { + "fieldname": "column_break_xygw", + "fieldtype": "Column Break" + }, + { + "collapsible": 1, + "fieldname": "utm_analytics_section", + "fieldtype": "Section Break", + "label": "Campaign" } ], "grid_page_length": 50, @@ -458,7 +475,7 @@ "link_fieldname": "pos_profile" } ], - "modified": "2025-06-24 11:19:19.834905", + "modified": "2026-02-10 14:24:48.597412", "modified_by": "Administrator", "module": "Accounts", "name": "POS Profile", diff --git a/erpnext/accounts/doctype/pricing_rule/pricing_rule.py b/erpnext/accounts/doctype/pricing_rule/pricing_rule.py index 5a4f3ca3249..810c50852c5 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 = [] @@ -683,23 +682,23 @@ def remove_pricing_rules(item_list): return out -def set_transaction_type(args): - if args.transaction_type: +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() diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.json b/erpnext/accounts/doctype/sales_invoice/sales_invoice.json index bfe52e8c7b1..da4d71ebd87 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", @@ -270,6 +271,7 @@ "oldfieldtype": "Link", "options": "Customer", "print_hide": 1, + "reqd": 1, "search_index": 1 }, { @@ -798,8 +800,7 @@ "hide_seconds": 1, "label": "Time Sheets", "options": "Sales Invoice Timesheet", - "print_hide": 1, - "read_only": 1 + "print_hide": 1 }, { "default": "0", @@ -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", @@ -2313,6 +2307,16 @@ { "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" } ], "grid_page_length": 50, @@ -2326,7 +2330,7 @@ "link_fieldname": "consolidated_invoice" } ], - "modified": "2026-02-23 14:29:00.301842", + "modified": "2026-02-28 17:58:56.453076", "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 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]) 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 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 diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.json b/erpnext/buying/doctype/purchase_order/purchase_order.json index 3dd4d927255..212a034763a 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,7 @@ "idx": 105, "is_submittable": 1, "links": [], - "modified": "2026-02-23 14:22:33.323946", + "modified": "2026-03-02 00:40:47.119584", "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/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") 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), 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/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( diff --git a/erpnext/controllers/stock_controller.py b/erpnext/controllers/stock_controller.py index 7ff2c4061f2..5436cd3e54f 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: @@ -2087,7 +2128,9 @@ def check_item_quality_inspection(doctype, items): @frappe.whitelist() -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 +): if isinstance(items, str): items = json.loads(items) @@ -2106,6 +2149,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/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", 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") { 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", 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 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 "" 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 diff --git a/erpnext/public/js/controllers/taxes_and_totals.js b/erpnext/public/js/controllers/taxes_and_totals.js index daffda5d4be..c53c1f8aef5 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,9 +401,14 @@ 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)); + current_net_amount = flt(current_net_amount, precision("net_amount", tax)); } // Adjust divisional loss to the last item @@ -419,6 +425,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 @@ -480,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); @@ -555,7 +562,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 +572,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) 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, 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)}" diff --git a/erpnext/selling/doctype/quotation/quotation.json b/erpnext/selling/doctype/quotation/quotation.json index 78cf42ae753..f4bad5d519b 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,23 @@ "no_copy": 1, "options": "Item Wise Tax Detail", "print_hide": 1 + }, + { + "fieldname": "column_break_fozg", + "fieldtype": "Column Break" + }, + { + "collapsible": 1, + "fieldname": "utm_analytics_section", + "fieldtype": "Section Break", + "label": "UTM Analytics" } ], "icon": "fa fa-shopping-cart", "idx": 82, "is_submittable": 1, "links": [], - "modified": "2026-01-29 21:18:48.836168", + "modified": "2026-02-06 17:34:22.170032", "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 4238e3438a3..1b186352bfa 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", @@ -161,17 +162,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 +1569,6 @@ "fieldtype": "Section Break", "label": "Additional Info" }, - { - "fieldname": "column_break_152", - "fieldtype": "Column Break" - }, { "fieldname": "incoterm", "fieldtype": "Link", @@ -1717,6 +1715,24 @@ "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" + }, + { + "default": "Now", + "depends_on": "is_internal_customer", + "fieldname": "transaction_time", + "fieldtype": "Time", + "label": "Time", + "mandatory_depends_on": "is_internal_customer" } ], "grid_page_length": 50, @@ -1724,7 +1740,7 @@ "idx": 105, "is_submittable": 1, "links": [], - "modified": "2026-02-23 14:25:56.665392", + "modified": "2026-03-02 00:42:18.834823", "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 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")): diff --git a/erpnext/selling/doctype/selling_settings/selling_settings.json b/erpnext/selling/doctype/selling_settings/selling_settings.json index 9fe14ae2a98..53e9d42a7ab 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 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", + "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-12 10:38:34.605126", "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) diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.json b/erpnext/stock/doctype/delivery_note/delivery_note.json index 3b2215fdae7..08a8de10163 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", @@ -1438,7 +1435,13 @@ "options": "Company:company:default_currency" }, { - "fieldname": "column_break_ydwe", + "collapsible": 1, + "fieldname": "utm_analytics_section", + "fieldtype": "Section Break", + "label": "UTM Analytics" + }, + { + "fieldname": "column_break_neoj", "fieldtype": "Column Break" } ], @@ -1446,7 +1449,7 @@ "idx": 146, "is_submittable": 1, "links": [], - "modified": "2026-02-23 23:05:39.097097", + "modified": "2026-02-10 14:35:08.523130", "modified_by": "Administrator", "module": "Stock", "name": "Delivery Note", 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..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. @@ -75,6 +79,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 +121,28 @@ 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"), + exc=IncorrectCompanyValidationError, + ) + if d.receipt_document_type == "Purchase Invoice": update_stock = frappe.db.get_value( d.receipt_document_type, d.receipt_document, "update_stock" @@ -152,6 +174,24 @@ 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"), + exc=IncorrectCompanyValidationError, + ) + def set_total_taxes_and_charges(self): self.total_taxes_and_charges = sum(flt(d.base_amount) for d in self.get("taxes")) 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..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 @@ -1260,6 +1293,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 +1314,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 +1334,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 +1354,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 +1369,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")) 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): 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 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 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 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..f5b4ef3e8f5 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, @@ -562,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 @@ -671,25 +692,59 @@ 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 + + +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 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/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() 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) 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", 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")) 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 diff --git a/erpnext/stock/report/stock_balance/stock_balance.py b/erpnext/stock/report/stock_balance/stock_balance.py index ccee40ce25f..ed0c31c07d9 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,39 @@ 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_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"): self.filters["show_warehouse_wise_stock"] = True @@ -283,9 +319,14 @@ 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 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: + 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 }, }; }, }, diff --git a/erpnext/stock/serial_batch_bundle.py b/erpnext/stock/serial_batch_bundle.py index 199672871dc..7fc143e38d4 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 @@ -460,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 = ( 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" 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: