From e6f47be4b04ede683bf07e67cf29f9055c51a1e7 Mon Sep 17 00:00:00 2001 From: RAVIBHARATHI P C <131471282+ravibharathi656@users.noreply.github.com> Date: Wed, 21 May 2025 17:57:34 +0530 Subject: [PATCH 01/20] fix(asset): make purchase date mandatory --- erpnext/assets/doctype/asset/asset.json | 4 ++-- erpnext/assets/doctype/asset/asset.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/erpnext/assets/doctype/asset/asset.json b/erpnext/assets/doctype/asset/asset.json index ccd88a59226..253412de3b5 100644 --- a/erpnext/assets/doctype/asset/asset.json +++ b/erpnext/assets/doctype/asset/asset.json @@ -207,8 +207,8 @@ "fieldname": "purchase_date", "fieldtype": "Date", "label": "Purchase Date", - "mandatory_depends_on": "eval:!doc.is_existing_asset && !doc.is_composite_asset", - "read_only_depends_on": "eval:!doc.is_existing_asset && !doc.is_composite_asset" + "read_only_depends_on": "eval:!doc.is_existing_asset && !doc.is_composite_asset", + "reqd": 1 }, { "fieldname": "disposal_date", diff --git a/erpnext/assets/doctype/asset/asset.py b/erpnext/assets/doctype/asset/asset.py index 9544267dcb5..52f0eb3a7ed 100644 --- a/erpnext/assets/doctype/asset/asset.py +++ b/erpnext/assets/doctype/asset/asset.py @@ -91,7 +91,7 @@ class Asset(AccountsController): opening_number_of_booked_depreciations: DF.Int policy_number: DF.Data | None purchase_amount: DF.Currency - purchase_date: DF.Date | None + purchase_date: DF.Date purchase_invoice: DF.Link | None purchase_invoice_item: DF.Data | None purchase_receipt: DF.Link | None From d15e3bb52b278c928ec248a8fc455a2940897820 Mon Sep 17 00:00:00 2001 From: Khushi Rawat <142375893+khushi8112@users.noreply.github.com> Date: Tue, 3 Jun 2025 12:04:27 +0530 Subject: [PATCH 02/20] feat: show Dr/Cr in Supplier ledger summary & Customer ledger summary --- .../customer_ledger_summary/customer_ledger_summary.js | 6 ++++++ .../supplier_ledger_summary/supplier_ledger_summary.js | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.js b/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.js index 736dbed53d3..c1421a916e3 100644 --- a/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.js +++ b/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.js @@ -115,6 +115,12 @@ frappe.query_reports["Customer Ledger Summary"] = { }); }, }, + { + fieldname: "show_dr_cr", + label: __("Closing Balance in Dr/Cr"), + fieldtype: "Check", + default: 0, + }, ], }; diff --git a/erpnext/accounts/report/supplier_ledger_summary/supplier_ledger_summary.js b/erpnext/accounts/report/supplier_ledger_summary/supplier_ledger_summary.js index df0a204be8a..e0bfb4910c9 100644 --- a/erpnext/accounts/report/supplier_ledger_summary/supplier_ledger_summary.js +++ b/erpnext/accounts/report/supplier_ledger_summary/supplier_ledger_summary.js @@ -96,6 +96,12 @@ frappe.query_reports["Supplier Ledger Summary"] = { }); }, }, + { + fieldname: "show_dr_cr", + label: __("Closing Balnce in Dr/Cr"), + fieldtype: "Check", + default: 0, + }, ], }; From e7ba420687d5f1a5f3cd40e6d9458fe46c9718b3 Mon Sep 17 00:00:00 2001 From: Khushi Rawat <142375893+khushi8112@users.noreply.github.com> Date: Tue, 3 Jun 2025 12:05:43 +0530 Subject: [PATCH 03/20] feat: added column to show Dr/Cr --- .../customer_ledger_summary/customer_ledger_summary.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.py b/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.py index b90f922d82b..8d28ed302d2 100644 --- a/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.py +++ b/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.py @@ -242,6 +242,8 @@ class PartyLedgerSummaryReport: } ] + if self.filters.show_dr_cr: + columns.append({"label": "Dr/Cr", "fieldname": "dr_or_cr", "fieldtype": "Data", "width": 100}) return columns def get_data(self): @@ -300,6 +302,14 @@ class PartyLedgerSummaryReport: for account in self.party_adjustment_accounts: row["adj_" + scrub(account)] = adjustments.get(account, 0) + if self.filters.show_dr_cr: + if self.filters.party_type == "Customer": + balance = row.get("closing_balance", 0) + row["dr_or_cr"] = "Dr" if balance > 0 else "Cr" if balance < 0 else "" + else: + balance = row.get("closing_balance", 0) + row["dr_or_cr"] = "Cr" if balance > 0 else "Dr" if balance < 0 else "" + out.append(row) return out From 22ea62e92f52f528e213f396fcde8ac84dac1ae8 Mon Sep 17 00:00:00 2001 From: Khushi Rawat <142375893+khushi8112@users.noreply.github.com> Date: Tue, 3 Jun 2025 12:06:39 +0530 Subject: [PATCH 04/20] chore: hide currency column --- .../report/customer_ledger_summary/customer_ledger_summary.py | 1 + 1 file changed, 1 insertion(+) diff --git a/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.py b/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.py index 8d28ed302d2..64b174f809c 100644 --- a/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.py +++ b/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.py @@ -210,6 +210,7 @@ class PartyLedgerSummaryReport: "fieldtype": "Link", "options": "Currency", "width": 50, + "hidden": 1, }, ] From 0dbebe74c1249551ca2e9ad4c0bfd60d44e19c2a Mon Sep 17 00:00:00 2001 From: Khushi Rawat <142375893+khushi8112@users.noreply.github.com> Date: Tue, 3 Jun 2025 12:23:56 +0530 Subject: [PATCH 05/20] chore: update label --- .../report/customer_ledger_summary/customer_ledger_summary.py | 2 +- .../report/supplier_ledger_summary/supplier_ledger_summary.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.py b/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.py index 64b174f809c..0121d294955 100644 --- a/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.py +++ b/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.py @@ -244,7 +244,7 @@ class PartyLedgerSummaryReport: ] if self.filters.show_dr_cr: - columns.append({"label": "Dr/Cr", "fieldname": "dr_or_cr", "fieldtype": "Data", "width": 100}) + columns.append({"label": "Dr or Cr", "fieldname": "dr_or_cr", "fieldtype": "Data", "width": 100}) return columns def get_data(self): diff --git a/erpnext/accounts/report/supplier_ledger_summary/supplier_ledger_summary.js b/erpnext/accounts/report/supplier_ledger_summary/supplier_ledger_summary.js index e0bfb4910c9..76cc979de75 100644 --- a/erpnext/accounts/report/supplier_ledger_summary/supplier_ledger_summary.js +++ b/erpnext/accounts/report/supplier_ledger_summary/supplier_ledger_summary.js @@ -98,7 +98,7 @@ frappe.query_reports["Supplier Ledger Summary"] = { }, { fieldname: "show_dr_cr", - label: __("Closing Balnce in Dr/Cr"), + label: __("Closing Balance in Dr/Cr"), fieldtype: "Check", default: 0, }, From ff285307c6e62776275ad47fd56c35d34a5ae96d Mon Sep 17 00:00:00 2001 From: Khushi Rawat <142375893+khushi8112@users.noreply.github.com> Date: Tue, 3 Jun 2025 12:33:46 +0530 Subject: [PATCH 06/20] chore: wrapped text in translate function --- .../report/customer_ledger_summary/customer_ledger_summary.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.py b/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.py index 0121d294955..0c76efbb962 100644 --- a/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.py +++ b/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.py @@ -244,7 +244,9 @@ class PartyLedgerSummaryReport: ] if self.filters.show_dr_cr: - columns.append({"label": "Dr or Cr", "fieldname": "dr_or_cr", "fieldtype": "Data", "width": 100}) + columns.append( + {"label": _("Dr or Cr"), "fieldname": "dr_or_cr", "fieldtype": "Data", "width": 100} + ) return columns def get_data(self): From 074dc6d7dd216544668eef75ca56fde2c767ed56 Mon Sep 17 00:00:00 2001 From: l0gesh29 Date: Tue, 3 Jun 2025 13:28:01 +0530 Subject: [PATCH 07/20] fix: consider user permission while populating the data --- .../accounts_receivable.py | 62 +++++++++---------- 1 file changed, 29 insertions(+), 33 deletions(-) diff --git a/erpnext/accounts/report/accounts_receivable/accounts_receivable.py b/erpnext/accounts/report/accounts_receivable/accounts_receivable.py index bdb9ffcc142..f0c2331a07e 100644 --- a/erpnext/accounts/report/accounts_receivable/accounts_receivable.py +++ b/erpnext/accounts/report/accounts_receivable/accounts_receivable.py @@ -377,6 +377,8 @@ class ReceivablePayableReport: self.data.append(self.total_row_map.get("Total", {})) def append_row(self, row): + if row.voucher_no not in self.invoice_details.keys(): + return self.allocate_future_payments(row) self.set_invoice_details(row) self.set_party_details(row) @@ -449,16 +451,14 @@ class ReceivablePayableReport: self.invoice_details = frappe._dict() if self.account_type == "Receivable": # nosemgrep - si_list = frappe.db.sql( - """ - select name, due_date, po_no - from `tabSales Invoice` - where posting_date <= %s - and company = %s - and docstatus = 1 - """, - (self.filters.report_date, self.filters.company), - as_dict=1, + si_list = frappe.get_list( + "Sales Invoice", + filters={ + "posting_date": ("<=", self.filters.report_date), + "company": self.filters.company, + "docstatus": 1, + }, + fields=["name", "due_date", "po_no"], ) for d in si_list: self.invoice_details.setdefault(d.name, d) @@ -481,33 +481,29 @@ class ReceivablePayableReport: if self.account_type == "Payable": # nosemgrep - for pi in frappe.db.sql( - """ - select name, due_date, bill_no, bill_date - from `tabPurchase Invoice` - where - posting_date <= %s - and company = %s - and docstatus = 1 - """, - (self.filters.report_date, self.filters.company), - as_dict=1, - ): + invoices = frappe.get_list( + "Purchase Invoice", + filters={ + "posting_date": ("<=", self.filters.report_date), + "company": self.filters.company, + "docstatus": 1, + }, + fields=["name", "due_date", "bill_no", "bill_date"], + ) + + for pi in invoices: self.invoice_details.setdefault(pi.name, pi) # Invoices booked via Journal Entries # nosemgrep - journal_entries = frappe.db.sql( - """ - select name, due_date, bill_no, bill_date - from `tabJournal Entry` - where - posting_date <= %s - and company = %s - and docstatus = 1 - """, - (self.filters.report_date, self.filters.company), - as_dict=1, + journal_entries = frappe.get_list( + "Journal Entry", + filters={ + "posting_date": ("<=", self.filters.report_date), + "company": self.filters.company, + "docstatus": 1, + }, + fields=["name", "due_date", "bill_no", "bill_date"], ) for je in journal_entries: From 524ae1d368af680890bc852fcb2494ccb1be0379 Mon Sep 17 00:00:00 2001 From: Khushi Rawat <142375893+khushi8112@users.noreply.github.com> Date: Tue, 3 Jun 2025 14:53:21 +0530 Subject: [PATCH 08/20] fix: removed checkbox --- .../customer_ledger_summary.js | 6 ------ .../customer_ledger_summary.py | 18 +++++++----------- .../supplier_ledger_summary.js | 6 ------ 3 files changed, 7 insertions(+), 23 deletions(-) diff --git a/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.js b/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.js index c1421a916e3..736dbed53d3 100644 --- a/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.js +++ b/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.js @@ -115,12 +115,6 @@ frappe.query_reports["Customer Ledger Summary"] = { }); }, }, - { - fieldname: "show_dr_cr", - label: __("Closing Balance in Dr/Cr"), - fieldtype: "Check", - default: 0, - }, ], }; diff --git a/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.py b/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.py index 0c76efbb962..c45de28aec5 100644 --- a/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.py +++ b/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.py @@ -243,10 +243,7 @@ class PartyLedgerSummaryReport: } ] - if self.filters.show_dr_cr: - columns.append( - {"label": _("Dr or Cr"), "fieldname": "dr_or_cr", "fieldtype": "Data", "width": 100} - ) + columns.append({"label": _("Dr/Cr"), "fieldname": "dr_or_cr", "fieldtype": "Data", "width": 100}) return columns def get_data(self): @@ -305,13 +302,12 @@ class PartyLedgerSummaryReport: for account in self.party_adjustment_accounts: row["adj_" + scrub(account)] = adjustments.get(account, 0) - if self.filters.show_dr_cr: - if self.filters.party_type == "Customer": - balance = row.get("closing_balance", 0) - row["dr_or_cr"] = "Dr" if balance > 0 else "Cr" if balance < 0 else "" - else: - balance = row.get("closing_balance", 0) - row["dr_or_cr"] = "Cr" if balance > 0 else "Dr" if balance < 0 else "" + if self.filters.party_type == "Customer": + balance = row.get("closing_balance", 0) + row["dr_or_cr"] = "Dr" if balance > 0 else "Cr" if balance < 0 else "" + else: + balance = row.get("closing_balance", 0) + row["dr_or_cr"] = "Cr" if balance > 0 else "Dr" if balance < 0 else "" out.append(row) diff --git a/erpnext/accounts/report/supplier_ledger_summary/supplier_ledger_summary.js b/erpnext/accounts/report/supplier_ledger_summary/supplier_ledger_summary.js index 76cc979de75..df0a204be8a 100644 --- a/erpnext/accounts/report/supplier_ledger_summary/supplier_ledger_summary.js +++ b/erpnext/accounts/report/supplier_ledger_summary/supplier_ledger_summary.js @@ -96,12 +96,6 @@ frappe.query_reports["Supplier Ledger Summary"] = { }); }, }, - { - fieldname: "show_dr_cr", - label: __("Closing Balance in Dr/Cr"), - fieldtype: "Check", - default: 0, - }, ], }; From 1a4bb3092399b2f674f51762c0fdb0ac04d9f83c Mon Sep 17 00:00:00 2001 From: l0gesh29 Date: Tue, 3 Jun 2025 18:17:11 +0530 Subject: [PATCH 09/20] fix: add user permission while fetching ple --- .../accounts_receivable.py | 23 +++++++++++-------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/erpnext/accounts/report/accounts_receivable/accounts_receivable.py b/erpnext/accounts/report/accounts_receivable/accounts_receivable.py index f0c2331a07e..2b1c00ad47f 100644 --- a/erpnext/accounts/report/accounts_receivable/accounts_receivable.py +++ b/erpnext/accounts/report/accounts_receivable/accounts_receivable.py @@ -6,6 +6,7 @@ from collections import OrderedDict import frappe from frappe import _, qb, query_builder, scrub +from frappe.desk.reportview import build_match_conditions from frappe.query_builder import Criterion from frappe.query_builder.functions import Date, Substring, Sum from frappe.utils import cint, cstr, flt, getdate, nowdate @@ -126,7 +127,7 @@ class ReceivablePayableReport: self.build_data() def fetch_ple_in_buffered_cursor(self): - query, param = self.ple_query.walk() + query, param = self.ple_query self.ple_entries = frappe.db.sql(query, param, as_dict=True) for ple in self.ple_entries: @@ -140,7 +141,7 @@ class ReceivablePayableReport: def fetch_ple_in_unbuffered_cursor(self): self.ple_entries = [] - query, param = self.ple_query.walk() + query, param = self.ple_query with frappe.db.unbuffered_cursor(): for ple in frappe.db.sql(query, param, as_dict=True, as_iterator=True): self.init_voucher_balance(ple) # invoiced, paid, credit_note, outstanding @@ -377,8 +378,6 @@ class ReceivablePayableReport: self.data.append(self.total_row_map.get("Total", {})) def append_row(self, row): - if row.voucher_no not in self.invoice_details.keys(): - return self.allocate_future_payments(row) self.set_invoice_details(row) self.set_party_details(row) @@ -852,12 +851,18 @@ class ReceivablePayableReport: else: query = query.select(ple.remarks) - if self.filters.get("group_by_party"): - query = query.orderby(self.ple.party, self.ple.posting_date) - else: - query = query.orderby(self.ple.posting_date, self.ple.party) + query, param = query.walk() - self.ple_query = query + match_conditions = build_match_conditions("Payment Ledger Entry") + if match_conditions: + query += " AND " + match_conditions + + if self.filters.get("group_by_party"): + query += f" ORDER BY `{self.ple.party.name}`, `{self.ple.posting_date.name}`" + else: + query += f" ORDER BY `{self.ple.posting_date.name}`, `{self.ple.party.name}`" + + self.ple_query = (query, param) def get_sales_invoices_or_customers_based_on_sales_person(self): if self.filters.get("sales_person"): From a38ed286bd584a247ed34a3816e25b1e02b538b0 Mon Sep 17 00:00:00 2001 From: Ankush Menat Date: Fri, 6 Jun 2025 17:09:27 +0530 Subject: [PATCH 10/20] perf: cache item metadata retrieval (#47929) * perf(get_item_details): use cached doc, avoid full get_doc * perf: short-circuit common usecase of same UOM * perf: use cached doc for inspection * perf: use cached valuation method and other item props It rarely if ever changes after initial configuration --- erpnext/controllers/stock_controller.py | 4 +-- .../test_stock_reconciliation.py | 1 + erpnext/stock/get_item_details.py | 30 +++++++++++-------- erpnext/stock/stock_ledger.py | 4 +-- erpnext/stock/utils.py | 4 +-- 5 files changed, 24 insertions(+), 19 deletions(-) diff --git a/erpnext/controllers/stock_controller.py b/erpnext/controllers/stock_controller.py index a739956c837..61b0aabbe69 100644 --- a/erpnext/controllers/stock_controller.py +++ b/erpnext/controllers/stock_controller.py @@ -1053,7 +1053,7 @@ class StockController(AccountsController): for row in self.get("items"): qi_required = False - if inspection_required_fieldname and frappe.db.get_value( + if inspection_required_fieldname and frappe.get_cached_value( "Item", row.item_code, inspection_required_fieldname ): qi_required = True @@ -1769,7 +1769,7 @@ def get_conditions_to_validate_future_sle(sl_entries): for warehouse, items in warehouse_items_map.items(): or_conditions.append( f"""warehouse = {frappe.db.escape(warehouse)} - and item_code in ({', '.join(frappe.db.escape(item) for item in items)})""" + and item_code in ({", ".join(frappe.db.escape(item) for item in items)})""" ) return or_conditions diff --git a/erpnext/stock/doctype/stock_reconciliation/test_stock_reconciliation.py b/erpnext/stock/doctype/stock_reconciliation/test_stock_reconciliation.py index 663e9cad955..e7aa5988f06 100644 --- a/erpnext/stock/doctype/stock_reconciliation/test_stock_reconciliation.py +++ b/erpnext/stock/doctype/stock_reconciliation/test_stock_reconciliation.py @@ -45,6 +45,7 @@ class TestStockReconciliation(IntegrationTestCase, StockTestMixin): def test_reco_for_moving_average(self): self._test_reco_sle_gle("Moving Average") + @IntegrationTestCase.change_settings("Stock Settings", {"allow_negative_stock": 1}) def _test_reco_sle_gle(self, valuation_method): item_code = self.make_item(properties={"valuation_method": valuation_method}).name diff --git a/erpnext/stock/get_item_details.py b/erpnext/stock/get_item_details.py index 60c7a9d7cd6..e8119f0c6bc 100644 --- a/erpnext/stock/get_item_details.py +++ b/erpnext/stock/get_item_details.py @@ -3,6 +3,7 @@ import json +import typing from functools import WRAPPER_ASSIGNMENTS, wraps import frappe @@ -366,7 +367,7 @@ def get_basic_details(ctx: ItemDetailsCtx, item, overwrite_warehouse=True) -> It """ if not item: - item = frappe.get_doc("Item", ctx.item_code) + item = frappe.get_cached_doc("Item", ctx.item_code) if item.variant_of and not item.taxes and frappe.db.exists("Item Tax", {"parent": item.variant_of}): item.update_template_tables() @@ -532,8 +533,8 @@ def get_basic_details(ctx: ItemDetailsCtx, item, overwrite_warehouse=True) -> It out.manufacturer_part_no = None out.manufacturer = None else: - data = frappe.get_value( - "Item", item.name, ["default_item_manufacturer", "default_manufacturer_part_no"], as_dict=1 + data = frappe.get_cached_value( + "Item", item.name, ["default_item_manufacturer", "default_manufacturer_part_no"], as_dict=True ) if data: @@ -1178,9 +1179,8 @@ def check_packing_list(price_list_rate_name, desired_qty, item_code): """ flag = True - item_price = frappe.get_doc("Item Price", price_list_rate_name) - if item_price.packing_unit: - packing_increment = desired_qty % item_price.packing_unit + if packing_unit := frappe.db.get_value("Item Price", price_list_rate_name, "packing_unit", cache=True): + packing_increment = desired_qty % packing_unit if packing_increment != 0: flag = False @@ -1317,15 +1317,20 @@ def get_pos_profile(company, pos_profile=None, user=None): @frappe.whitelist() def get_conversion_factor(item_code, uom): - variant_of = frappe.db.get_value("Item", item_code, "variant_of", cache=True) + item = frappe.get_cached_value("Item", item_code, ["variant_of", "stock_uom"], as_dict=True) + if not item_code or not item: + return {"conversion_factor": 1.0} + + if uom == item.stock_uom: + return {"conversion_factor": 1.0} + filters = {"parent": item_code, "uom": uom} - if variant_of: - filters["parent"] = ("in", (item_code, variant_of)) + if item.variant_of: + filters["parent"] = ("in", (item_code, item.variant_of)) conversion_factor = frappe.db.get_value("UOM Conversion Detail", filters, "conversion_factor") if not conversion_factor: - stock_uom = frappe.db.get_value("Item", item_code, "stock_uom") - conversion_factor = get_uom_conv_factor(uom, stock_uom) + conversion_factor = get_uom_conv_factor(uom, item.stock_uom) return {"conversion_factor": conversion_factor or 1.0} @@ -1447,7 +1452,7 @@ def apply_price_list(ctx: ItemDetailsCtx, as_doc=False, doc=None): def apply_price_list_on_item(ctx, doc=None): - item_doc = frappe.db.get_value("Item", ctx.item_code, ["name", "variant_of"], as_dict=1) + item_doc = frappe.get_cached_doc("Item", ctx.item_code) item_details = get_price_list_rate(ctx, item_doc) item_details.update(get_pricing_rule_for_item(ctx, doc=doc)) @@ -1515,7 +1520,6 @@ def get_valuation_rate(item_code, company, warehouse=None): item = get_item_defaults(item_code, company) item_group = get_item_group_defaults(item_code, company) brand = get_brand_defaults(item_code, company) - # item = frappe.get_doc("Item", item_code) if item.get("is_stock_item"): if not warehouse: warehouse = ( diff --git a/erpnext/stock/stock_ledger.py b/erpnext/stock/stock_ledger.py index 8a2541a8587..8d3c92c8736 100644 --- a/erpnext/stock/stock_ledger.py +++ b/erpnext/stock/stock_ledger.py @@ -2189,9 +2189,9 @@ def validate_reserved_batch_nos(item_code, warehouse, batch_nos): def is_negative_stock_allowed(*, item_code: str | None = None) -> bool: - if cint(frappe.db.get_single_value("Stock Settings", "allow_negative_stock", cache=True)): + if frappe.get_cached_doc("Stock Settings").allow_negative_stock: return True - if item_code and cint(frappe.db.get_value("Item", item_code, "allow_negative_stock", cache=True)): + if item_code and cint(frappe.get_cached_value("Item", item_code, "allow_negative_stock")): return True return False diff --git a/erpnext/stock/utils.py b/erpnext/stock/utils.py index 435acbe02c6..ab8f7a7d2dd 100644 --- a/erpnext/stock/utils.py +++ b/erpnext/stock/utils.py @@ -374,9 +374,9 @@ def get_avg_purchase_rate(serial_nos): def get_valuation_method(item_code): """get valuation method from item or default""" - val_method = frappe.db.get_value("Item", item_code, "valuation_method", cache=True) + val_method = frappe.get_cached_value("Item", item_code, "valuation_method") if not val_method: - val_method = frappe.db.get_single_value("Stock Settings", "valuation_method", cache=True) or "FIFO" + val_method = frappe.get_cached_doc("Stock Settings").valuation_method or "FIFO" return val_method From ea5c2c454b9e302f3fe3dca934cc276cc139e0fd Mon Sep 17 00:00:00 2001 From: Ankush Menat Date: Fri, 6 Jun 2025 18:54:49 +0530 Subject: [PATCH 11/20] perf: use cached stock settings (#47945) --- erpnext/controllers/buying_controller.py | 4 ++-- erpnext/controllers/queries.py | 2 +- erpnext/controllers/selling_controller.py | 6 +++--- erpnext/controllers/status_updater.py | 2 +- erpnext/controllers/stock_controller.py | 12 +++++------- erpnext/controllers/subcontracting_controller.py | 2 +- .../selling/doctype/sales_order/sales_order.py | 10 +++++----- erpnext/stock/doctype/batch/batch.py | 6 +++--- erpnext/stock/doctype/item/item.py | 16 ++++++---------- erpnext/stock/doctype/packed_item/packed_item.py | 2 +- erpnext/stock/doctype/pick_list/pick_list.py | 4 ++-- .../doctype/purchase_receipt/purchase_receipt.py | 8 +++----- .../serial_and_batch_bundle.py | 6 ++---- erpnext/stock/doctype/stock_entry/stock_entry.py | 8 ++++---- .../stock_ledger_entry/stock_ledger_entry.py | 2 +- .../stock_reservation_entry.py | 12 +++++------- erpnext/stock/get_item_details.py | 6 +++--- erpnext/stock/serial_batch_bundle.py | 16 ++++++---------- erpnext/stock/stock_balance.py | 2 +- erpnext/stock/utils.py | 2 +- 20 files changed, 56 insertions(+), 72 deletions(-) diff --git a/erpnext/controllers/buying_controller.py b/erpnext/controllers/buying_controller.py index 5a6e1f78178..4fc8c581532 100644 --- a/erpnext/controllers/buying_controller.py +++ b/erpnext/controllers/buying_controller.py @@ -75,7 +75,7 @@ class BuyingController(SubcontractingController): if self.docstatus == 1 and self.doctype in ["Purchase Receipt", "Purchase Invoice"]: self.set_onload( "allow_to_make_qc_after_submission", - frappe.db.get_single_value( + frappe.get_settings( "Stock Settings", "allow_to_make_quality_inspection_after_purchase_or_delivery" ), ) @@ -545,7 +545,7 @@ class BuyingController(SubcontractingController): item.bom = None def set_qty_as_per_stock_uom(self): - allow_to_edit_stock_qty = frappe.db.get_single_value( + allow_to_edit_stock_qty = frappe.get_settings( "Stock Settings", "allow_to_edit_stock_uom_qty_for_purchase" ) diff --git a/erpnext/controllers/queries.py b/erpnext/controllers/queries.py index c5d4b0b3418..44eebf8981c 100644 --- a/erpnext/controllers/queries.py +++ b/erpnext/controllers/queries.py @@ -948,7 +948,7 @@ def get_filtered_child_rows(doctype, txt, searchfield, start, page_len, filters) @frappe.whitelist() @frappe.validate_and_sanitize_search_inputs def get_item_uom_query(doctype, txt, searchfield, start, page_len, filters): - if frappe.db.get_single_value("Stock Settings", "allow_uom_with_conversion_rate_defined_in_item"): + if frappe.get_settings("Stock Settings", "allow_uom_with_conversion_rate_defined_in_item"): query_filters = {"parent": filters.get("item_code")} if txt: diff --git a/erpnext/controllers/selling_controller.py b/erpnext/controllers/selling_controller.py index 9a70f6c3636..2d2d163b737 100644 --- a/erpnext/controllers/selling_controller.py +++ b/erpnext/controllers/selling_controller.py @@ -38,7 +38,7 @@ class SellingController(StockController): if self.docstatus == 1 and self.doctype in ["Delivery Note", "Sales Invoice"]: self.set_onload( "allow_to_make_qc_after_submission", - frappe.db.get_single_value( + frappe.get_settings( "Stock Settings", "allow_to_make_quality_inspection_after_purchase_or_delivery" ), ) @@ -224,7 +224,7 @@ class SellingController(StockController): frappe.throw(_("Maximum discount for Item {0} is {1}%").format(d.item_code, discount)) def set_qty_as_per_stock_uom(self): - allow_to_edit_stock_qty = frappe.db.get_single_value( + allow_to_edit_stock_qty = frappe.get_settings( "Stock Settings", "allow_to_edit_stock_uom_qty_for_sales" ) @@ -960,7 +960,7 @@ def get_serial_and_batch_bundle(child, parent, delivery_note_child=None): if child.get("use_serial_batch_fields"): return - if not frappe.db.get_single_value("Stock Settings", "auto_create_serial_and_batch_bundle_for_outward"): + if not frappe.get_settings("Stock Settings", "auto_create_serial_and_batch_bundle_for_outward"): return item_details = frappe.db.get_value("Item", child.item_code, ["has_serial_no", "has_batch_no"], as_dict=1) diff --git a/erpnext/controllers/status_updater.py b/erpnext/controllers/status_updater.py index 39acbac6d5e..9e02b2ba0f4 100644 --- a/erpnext/controllers/status_updater.py +++ b/erpnext/controllers/status_updater.py @@ -336,7 +336,7 @@ class StatusUpdater(Document): qty_or_amount, ) - role_allowed_to_over_deliver_receive = frappe.db.get_single_value( + role_allowed_to_over_deliver_receive = frappe.get_settings( "Stock Settings", "role_allowed_to_over_deliver_receive" ) role_allowed_to_over_bill = frappe.db.get_single_value( diff --git a/erpnext/controllers/stock_controller.py b/erpnext/controllers/stock_controller.py index 61b0aabbe69..cb23f0ab7f6 100644 --- a/erpnext/controllers/stock_controller.py +++ b/erpnext/controllers/stock_controller.py @@ -518,7 +518,7 @@ class StockController(AccountsController): ) def set_use_serial_batch_fields(self): - if frappe.db.get_single_value("Stock Settings", "use_serial_batch_fields"): + if frappe.get_settings("Stock Settings", "use_serial_batch_fields"): for row in self.items: row.use_serial_batch_fields = 1 @@ -1076,7 +1076,7 @@ class StockController(AccountsController): "Purchase Invoice", "Sales Invoice", "Delivery Note", - ] and frappe.db.get_single_value( + ] and frappe.get_settings( "Stock Settings", "allow_to_make_quality_inspection_after_purchase_or_delivery" ): return @@ -1092,7 +1092,7 @@ class StockController(AccountsController): def validate_qi_submission(self, row): """Check if QI is submitted on row level, during submission""" - action = frappe.db.get_single_value("Stock Settings", "action_if_quality_inspection_is_not_submitted") + action = frappe.get_settings("Stock Settings", "action_if_quality_inspection_is_not_submitted") qa_docstatus = frappe.db.get_value("Quality Inspection", row.quality_inspection, "docstatus") if qa_docstatus != 1: @@ -1107,7 +1107,7 @@ class StockController(AccountsController): def validate_qi_rejection(self, row): """Check if QI is rejected on row level, during submission""" - action = frappe.db.get_single_value("Stock Settings", "action_if_quality_inspection_is_rejected") + action = frappe.get_settings("Stock Settings", "action_if_quality_inspection_is_rejected") qa_status = frappe.db.get_value("Quality Inspection", row.quality_inspection, "status") if qa_status == "Rejected": @@ -1206,9 +1206,7 @@ class StockController(AccountsController): item_wise_received_qty = self.get_item_wise_inter_received_qty() precision = frappe.get_precision(self.doctype + " Item", "qty") - over_receipt_allowance = frappe.db.get_single_value( - "Stock Settings", "over_delivery_receipt_allowance" - ) + over_receipt_allowance = frappe.get_settings("Stock Settings", "over_delivery_receipt_allowance") parent_doctype = { "Purchase Receipt": "Delivery Note", diff --git a/erpnext/controllers/subcontracting_controller.py b/erpnext/controllers/subcontracting_controller.py index 7244787e144..81b803488b7 100644 --- a/erpnext/controllers/subcontracting_controller.py +++ b/erpnext/controllers/subcontracting_controller.py @@ -590,7 +590,7 @@ class SubcontractingController(StockController): rm_obj.reference_name = item_row.name - use_serial_batch_fields = frappe.db.get_single_value("Stock Settings", "use_serial_batch_fields") + use_serial_batch_fields = frappe.get_settings("Stock Settings", "use_serial_batch_fields") if self.doctype == self.subcontract_data.order_doctype: rm_obj.required_qty = flt(qty, rm_obj.precision("required_qty")) diff --git a/erpnext/selling/doctype/sales_order/sales_order.py b/erpnext/selling/doctype/sales_order/sales_order.py index 03cdc6e8c3b..68a371b4f2f 100755 --- a/erpnext/selling/doctype/sales_order/sales_order.py +++ b/erpnext/selling/doctype/sales_order/sales_order.py @@ -195,7 +195,7 @@ class SalesOrder(SellingController): def onload(self) -> None: super().onload() - if frappe.db.get_single_value("Stock Settings", "enable_stock_reservation"): + if frappe.get_settings("Stock Settings", "enable_stock_reservation"): if self.has_unreserved_stock(): self.set_onload("has_unreserved_stock", True) @@ -246,7 +246,7 @@ class SalesOrder(SellingController): self.enable_auto_reserve_stock() def enable_auto_reserve_stock(self): - if self.is_new() and frappe.db.get_single_value("Stock Settings", "auto_reserve_stock"): + if self.is_new() and frappe.get_settings("Stock Settings", "auto_reserve_stock"): self.reserve_stock = 1 def set_has_unit_price_items(self): @@ -633,7 +633,7 @@ class SalesOrder(SellingController): if total_picked_qty and total_qty: per_picked = total_picked_qty / total_qty * 100 - pick_percentage = frappe.db.get_single_value("Stock Settings", "over_picking_allowance") + pick_percentage = frappe.get_settings("Stock Settings", "over_picking_allowance") if pick_percentage: total_qty += flt(total_qty) * (pick_percentage / 100) @@ -729,7 +729,7 @@ class SalesOrder(SellingController): def validate_reserved_stock(self): """Clean reserved stock flag for non-stock Item""" - enable_stock_reservation = frappe.db.get_single_value("Stock Settings", "enable_stock_reservation") + enable_stock_reservation = frappe.get_settings("Stock Settings", "enable_stock_reservation") for item in self.items: if item.reserve_stock and (not enable_stock_reservation or not cint(item.is_stock_item)): @@ -1861,4 +1861,4 @@ def get_work_order_items(sales_order, for_raw_material_request=0): @frappe.whitelist() def get_stock_reservation_status(): - return frappe.db.get_single_value("Stock Settings", "enable_stock_reservation") + return frappe.get_settings("Stock Settings", "enable_stock_reservation") diff --git a/erpnext/stock/doctype/batch/batch.py b/erpnext/stock/doctype/batch/batch.py index c7d9823d144..1a0557a5a0a 100644 --- a/erpnext/stock/doctype/batch/batch.py +++ b/erpnext/stock/doctype/batch/batch.py @@ -37,7 +37,7 @@ def batch_uses_naming_series(): Verify if the Batch is to be named using a naming series :return: bool """ - use_naming_series = cint(frappe.db.get_single_value("Stock Settings", "use_naming_series")) + use_naming_series = cint(frappe.get_settings("Stock Settings", "use_naming_series")) return bool(use_naming_series) @@ -49,7 +49,7 @@ def _get_batch_prefix(): is set to use naming series. :return: The naming series. """ - naming_series_prefix = frappe.db.get_single_value("Stock Settings", "naming_series_prefix") + naming_series_prefix = frappe.get_settings("Stock Settings", "naming_series_prefix") if not naming_series_prefix: naming_series_prefix = "BATCH-" @@ -160,7 +160,7 @@ class Batch(Document): from erpnext.stock.utils import get_valuation_method if self.is_new(): - if get_valuation_method(self.item) == "Moving Average" and frappe.db.get_single_value( + if get_valuation_method(self.item) == "Moving Average" and frappe.get_settings( "Stock Settings", "do_not_use_batchwise_valuation" ): self.use_batchwise_valuation = 0 diff --git a/erpnext/stock/doctype/item/item.py b/erpnext/stock/doctype/item/item.py index c41c0528834..3789514589a 100644 --- a/erpnext/stock/doctype/item/item.py +++ b/erpnext/stock/doctype/item/item.py @@ -227,7 +227,7 @@ class Item(Document): def validate_description(self): """Clean HTML description if set""" if ( - cint(frappe.db.get_single_value("Stock Settings", "clean_description_html")) + cint(frappe.get_settings("Stock Settings", "clean_description_html")) and self.description != self.item_name # perf: Avoid cleaning up a fallback ): self.description = clean_html(self.description) @@ -274,7 +274,7 @@ class Item(Document): for default in self.item_defaults or [ frappe._dict({"company": frappe.defaults.get_defaults().company}) ]: - default_warehouse = default.default_warehouse or frappe.db.get_single_value( + default_warehouse = default.default_warehouse or frappe.get_settings( "Stock Settings", "default_warehouse" ) if default_warehouse: @@ -317,9 +317,7 @@ class Item(Document): ) def validate_retain_sample(self): - if self.retain_sample and not frappe.db.get_single_value( - "Stock Settings", "sample_retention_warehouse" - ): + if self.retain_sample and not frappe.get_settings("Stock Settings", "sample_retention_warehouse"): frappe.throw(_("Please select Sample Retention Warehouse in Stock Settings first")) if self.retain_sample and not self.has_batch_no: frappe.throw( @@ -664,7 +662,7 @@ class Item(Document): def recalculate_bin_qty(self, new_name): from erpnext.stock.stock_balance import repost_stock - existing_allow_negative_stock = frappe.db.get_single_value("Stock Settings", "allow_negative_stock") + existing_allow_negative_stock = frappe.get_settings("Stock Settings", "allow_negative_stock") frappe.db.set_single_value("Stock Settings", "allow_negative_stock", 1) repost_stock_for_warehouses = frappe.get_all( @@ -963,9 +961,7 @@ class Item(Document): return if not values.get("valuation_method") and self.get("valuation_method"): - values["valuation_method"] = ( - frappe.db.get_single_value("Stock Settings", "valuation_method") or "FIFO" - ) + values["valuation_method"] = frappe.get_settings("Stock Settings", "valuation_method") or "FIFO" changed_fields = [ field for field in restricted_fields if cstr(self.get(field)) != cstr(values.get(field)) @@ -1051,7 +1047,7 @@ class Item(Document): def validate_auto_reorder_enabled_in_stock_settings(self): if self.reorder_levels: - enabled = frappe.db.get_single_value("Stock Settings", "auto_indent") + enabled = frappe.get_settings("Stock Settings", "auto_indent") if not enabled: frappe.msgprint( msg=_("You have to enable auto re-order in Stock Settings to maintain re-order levels."), diff --git a/erpnext/stock/doctype/packed_item/packed_item.py b/erpnext/stock/doctype/packed_item/packed_item.py index ee5d330a221..2dc28b1f04b 100644 --- a/erpnext/stock/doctype/packed_item/packed_item.py +++ b/erpnext/stock/doctype/packed_item/packed_item.py @@ -234,7 +234,7 @@ def update_packed_item_stock_data(main_item_row, pi_row, packing_item, item_data bin = get_packed_item_bin_qty(packing_item.item_code, pi_row.warehouse) pi_row.actual_qty = flt(bin.get("actual_qty")) pi_row.projected_qty = flt(bin.get("projected_qty")) - pi_row.use_serial_batch_fields = frappe.db.get_single_value("Stock Settings", "use_serial_batch_fields") + pi_row.use_serial_batch_fields = frappe.get_settings("Stock Settings", "use_serial_batch_fields") def update_packed_item_price_data(pi_row, item_data, doc): diff --git a/erpnext/stock/doctype/pick_list/pick_list.py b/erpnext/stock/doctype/pick_list/pick_list.py index a80a59a822d..38005a12d38 100644 --- a/erpnext/stock/doctype/pick_list/pick_list.py +++ b/erpnext/stock/doctype/pick_list/pick_list.py @@ -440,7 +440,7 @@ class PickList(Document): def validate_picked_qty(self, data): over_delivery_receipt_allowance = 100 + flt( - frappe.db.get_single_value("Stock Settings", "over_delivery_receipt_allowance") + frappe.get_settings("Stock Settings", "over_delivery_receipt_allowance") ) for row in data: @@ -1102,7 +1102,7 @@ def get_available_item_locations_for_batched_item( { "item_code": item_code, "warehouse": from_warehouses, - "based_on": frappe.db.get_single_value("Stock Settings", "pick_serial_and_batch_based_on"), + "based_on": frappe.get_settings("Stock Settings", "pick_serial_and_batch_based_on"), } ) ) diff --git a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py index fc71d0cbbd8..802cdafa4f6 100644 --- a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py +++ b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py @@ -952,10 +952,8 @@ class PurchaseReceipt(BuyingController): def reserve_stock_for_sales_order(self): if ( self.is_return - or not frappe.db.get_single_value("Stock Settings", "enable_stock_reservation") - or not frappe.db.get_single_value( - "Stock Settings", "auto_reserve_stock_for_sales_order_on_purchase" - ) + or not frappe.get_settings("Stock Settings", "enable_stock_reservation") + or not frappe.get_settings("Stock Settings", "auto_reserve_stock_for_sales_order_on_purchase") ): return @@ -990,7 +988,7 @@ class PurchaseReceipt(BuyingController): ) def reserve_stock_for_production_plan(self): - if self.is_return or not frappe.db.get_single_value("Stock Settings", "enable_stock_reservation"): + if self.is_return or not frappe.get_settings("Stock Settings", "enable_stock_reservation"): return production_plan_references = self.get_production_plan_references() 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 eca75bfb71d..5e671b2b38c 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 @@ -84,9 +84,7 @@ class SerialandBatchBundle(Document): # end: auto-generated types def autoname(self): - if frappe.db.get_single_value( - "Stock Settings", "set_serial_and_batch_bundle_naming_based_on_naming_series" - ): + if frappe.get_settings("Stock Settings", "set_serial_and_batch_bundle_naming_based_on_naming_series"): if not self.naming_series: frappe.throw(_("Naming Series is mandatory")) @@ -161,7 +159,7 @@ class SerialandBatchBundle(Document): if self.type_of_transaction == "Outward" or not self.has_serial_no: return - if frappe.db.get_single_value("Stock Settings", "allow_existing_serial_no"): + if frappe.get_settings("Stock Settings", "allow_existing_serial_no"): return if self.voucher_type not in ["Purchase Receipt", "Purchase Invoice", "Stock Entry"]: diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.py b/erpnext/stock/doctype/stock_entry/stock_entry.py index 2f53badb937..ed1596f570c 100644 --- a/erpnext/stock/doctype/stock_entry/stock_entry.py +++ b/erpnext/stock/doctype/stock_entry/stock_entry.py @@ -2457,7 +2457,7 @@ class StockEntry(StockController): if not qty: return - use_serial_batch_fields = frappe.db.get_single_value("Stock Settings", "use_serial_batch_fields") + use_serial_batch_fields = frappe.get_settings("Stock Settings", "use_serial_batch_fields") ste_item_details = { "from_warehouse": item.warehouse, @@ -2935,7 +2935,7 @@ def move_sample_to_retention_warehouse(company, items): if isinstance(items, str): items = json.loads(items) - retention_warehouse = frappe.db.get_single_value("Stock Settings", "sample_retention_warehouse") + retention_warehouse = frappe.get_settings("Stock Settings", "sample_retention_warehouse") stock_entry = frappe.new_doc("Stock Entry") stock_entry.company = company stock_entry.purpose = "Material Transfer" @@ -2986,7 +2986,7 @@ def make_stock_in_entry(source_name, target_doc=None): target.stock_entry_type = "Material Transfer" target.set_missing_values() - if not frappe.db.get_single_value("Stock Settings", "use_serial_batch_fields"): + if not frappe.get_settings("Stock Settings", "use_serial_batch_fields"): target.make_serial_and_batch_bundle_for_transfer() def update_item(source_doc, target_doc, source_parent): @@ -3215,7 +3215,7 @@ def validate_sample_quantity(item_code, sample_quantity, qty, batch_no=None): frappe.throw( _("Sample quantity {0} cannot be more than received quantity {1}").format(sample_quantity, qty) ) - retention_warehouse = frappe.db.get_single_value("Stock Settings", "sample_retention_warehouse") + retention_warehouse = frappe.get_settings("Stock Settings", "sample_retention_warehouse") retainted_qty = 0 if batch_no: retainted_qty = get_batch_qty(batch_no, retention_warehouse, item_code) diff --git a/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py b/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py index 1b1e3bd3e4d..5709af5bf5f 100644 --- a/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py +++ b/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py @@ -299,7 +299,7 @@ class StockLedgerEntry(Document): is_group_warehouse(self.warehouse) def validate_with_last_transaction_posting_time(self): - authorized_role = frappe.db.get_single_value( + authorized_role = frappe.get_settings( "Stock Settings", "role_allowed_to_create_edit_back_dated_transactions" ) if authorized_role: diff --git a/erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py b/erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py index 81047bd6d09..07c02a0f86c 100644 --- a/erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py +++ b/erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py @@ -162,7 +162,7 @@ class StockReservationEntry(Document): not self.from_voucher_type and (self.get("_action") == "submit") and (self.has_serial_no or self.has_batch_no) - and cint(frappe.db.get_single_value("Stock Settings", "auto_reserve_serial_and_batch")) + and cint(frappe.get_settings("Stock Settings", "auto_reserve_serial_and_batch")) ): from erpnext.stock.doctype.batch.batch import get_available_batches from erpnext.stock.doctype.serial_no.serial_no import get_serial_nos_for_outward @@ -176,7 +176,7 @@ class StockReservationEntry(Document): "warehouse": self.warehouse, "qty": abs(self.reserved_qty) or 0, "based_on": based_on - or frappe.db.get_single_value("Stock Settings", "pick_serial_and_batch_based_on"), + or frappe.get_settings("Stock Settings", "pick_serial_and_batch_based_on"), } ) @@ -219,9 +219,7 @@ class StockReservationEntry(Document): return if self.reservation_based_on == "Serial and Batch": - allow_partial_reservation = frappe.db.get_single_value( - "Stock Settings", "allow_partial_reservation" - ) + allow_partial_reservation = frappe.get_settings("Stock Settings", "allow_partial_reservation") available_serial_nos = [] if self.has_serial_no: @@ -570,7 +568,7 @@ class StockReservationEntry(Document): def validate_stock_reservation_settings(voucher: object) -> None: """Raises an exception if `Stock Reservation` is not enabled or `Voucher Type` is not allowed.""" - if not frappe.db.get_single_value("Stock Settings", "enable_stock_reservation"): + if not frappe.get_settings("Stock Settings", "enable_stock_reservation"): msg = _("Please enable {0} in the {1}.").format( frappe.bold(_("Stock Reservation")), frappe.bold(_("Stock Settings")), @@ -1347,7 +1345,7 @@ def create_stock_reservation_entries_for_so_items( validate_stock_reservation_settings(sales_order) - allow_partial_reservation = frappe.db.get_single_value("Stock Settings", "allow_partial_reservation") + allow_partial_reservation = frappe.get_settings("Stock Settings", "allow_partial_reservation") items = [] if items_details: diff --git a/erpnext/stock/get_item_details.py b/erpnext/stock/get_item_details.py index e8119f0c6bc..a5168a5176e 100644 --- a/erpnext/stock/get_item_details.py +++ b/erpnext/stock/get_item_details.py @@ -136,7 +136,7 @@ def get_item_details( out.update(data) if ( - frappe.db.get_single_value("Stock Settings", "auto_create_serial_and_batch_bundle_for_outward") + frappe.get_settings("Stock Settings", "auto_create_serial_and_batch_bundle_for_outward") and not ctx.get("serial_and_batch_bundle") and (ctx.get("use_serial_batch_fields") or ctx.get("doctype") == "POS Invoice") ): @@ -201,7 +201,7 @@ def update_stock(ctx, out, doc=None): { "item_code": ctx.item_code, "warehouse": ctx.warehouse, - "based_on": frappe.db.get_single_value("Stock Settings", "pick_serial_and_batch_based_on"), + "based_on": frappe.get_settings("Stock Settings", "pick_serial_and_batch_based_on"), } ) @@ -591,7 +591,7 @@ def get_item_warehouse_(ctx: ItemDetailsCtx, item, overwrite_warehouse, defaults warehouse = ctx.warehouse if not warehouse: - default_warehouse = frappe.db.get_single_value("Stock Settings", "default_warehouse") + default_warehouse = frappe.get_settings("Stock Settings", "default_warehouse") if frappe.db.get_value("Warehouse", default_warehouse, "company") == ctx.company: return default_warehouse diff --git a/erpnext/stock/serial_batch_bundle.py b/erpnext/stock/serial_batch_bundle.py index f06706ee21e..778accad396 100644 --- a/erpnext/stock/serial_batch_bundle.py +++ b/erpnext/stock/serial_batch_bundle.py @@ -151,14 +151,12 @@ class SerialBatchBundle: if ( self.item_details.has_batch_no and not self.item_details.batch_number_series - and not frappe.db.get_single_value("Stock Settings", "naming_series_prefix") + and not frappe.get_settings("Stock Settings", "naming_series_prefix") ): msg += f". If you want auto pick batch bundle, then kindly set Batch Number Series in Item {self.item_code}" elif self.sle.actual_qty < 0: - if not frappe.db.get_single_value( - "Stock Settings", "auto_create_serial_and_batch_bundle_for_outward" - ): + if not frappe.get_settings("Stock Settings", "auto_create_serial_and_batch_bundle_for_outward"): msg += ". If you want auto pick serial/batch bundle, then kindly enable 'Auto Create Serial and Batch Bundle' in Stock Settings." if msg: @@ -187,7 +185,7 @@ class SerialBatchBundle: if self.sle.actual_qty < 0 and self.is_material_transfer(): values_to_update["valuation_rate"] = flt(sn_doc.avg_rate) - if not frappe.db.get_single_value( + if not frappe.get_settings( "Stock Settings", "do_not_update_serial_batch_on_creation_of_auto_bundle" ): if sn_doc.has_serial_no: @@ -253,9 +251,7 @@ class SerialBatchBundle: and ( self.item_details.create_new_batch or ( - frappe.db.get_single_value( - "Stock Settings", "auto_create_serial_and_batch_bundle_for_outward" - ) + frappe.get_settings("Stock Settings", "auto_create_serial_and_batch_bundle_for_outward") and self.sle.actual_qty < 0 ) ) @@ -724,7 +720,7 @@ class BatchNoValuation(DeprecatedBatchNoValuation): self.batchwise_valuation_batches = [] self.non_batchwise_valuation_batches = [] - if get_valuation_method(self.sle.item_code) == "Moving Average" and frappe.db.get_single_value( + if get_valuation_method(self.sle.item_code) == "Moving Average" and frappe.get_settings( "Stock Settings", "do_not_use_batchwise_valuation" ): self.non_batchwise_valuation_batches = self.batches @@ -1029,7 +1025,7 @@ class SerialBatchCreation: "item_code": self.item_code, "warehouse": self.warehouse, "qty": abs(self.actual_qty) if self.actual_qty else 0, - "based_on": frappe.db.get_single_value("Stock Settings", "pick_serial_and_batch_based_on"), + "based_on": frappe.get_settings("Stock Settings", "pick_serial_and_batch_based_on"), } ) diff --git a/erpnext/stock/stock_balance.py b/erpnext/stock/stock_balance.py index 45777172808..135b9097c12 100644 --- a/erpnext/stock/stock_balance.py +++ b/erpnext/stock/stock_balance.py @@ -15,7 +15,7 @@ def repost(only_actual=False, allow_negative_stock=False, allow_zero_rate=False, frappe.db.auto_commit_on_many_writes = 1 if allow_negative_stock: - existing_allow_negative_stock = frappe.db.get_single_value("Stock Settings", "allow_negative_stock") + existing_allow_negative_stock = frappe.get_settings("Stock Settings", "allow_negative_stock") frappe.db.set_single_value("Stock Settings", "allow_negative_stock", 1) item_warehouses = frappe.db.sql( diff --git a/erpnext/stock/utils.py b/erpnext/stock/utils.py index ab8f7a7d2dd..b85956a35fa 100644 --- a/erpnext/stock/utils.py +++ b/erpnext/stock/utils.py @@ -252,7 +252,7 @@ def get_incoming_rate(args, raise_error_if_no_rate=True): "Item", args.get("item_code"), ["has_serial_no", "has_batch_no"], as_dict=1 ) - use_moving_avg_for_batch = frappe.db.get_single_value("Stock Settings", "do_not_use_batchwise_valuation") + use_moving_avg_for_batch = frappe.get_settings("Stock Settings", "do_not_use_batchwise_valuation") if isinstance(args, dict): args = frappe._dict(args) From 45a4beb40180e8afeb8f4987526711e76d63442e Mon Sep 17 00:00:00 2001 From: Ankush Menat Date: Fri, 6 Jun 2025 19:29:18 +0530 Subject: [PATCH 12/20] perf: Use cached accounts settings (#47947) --- erpnext/accounts/deferred_revenue.py | 2 +- erpnext/accounts/doctype/account/account.py | 2 +- .../bank_transaction/auto_match_party.py | 2 +- .../bank_transaction/bank_transaction.py | 2 +- .../doctype/journal_entry/journal_entry.py | 2 +- .../doctype/payment_entry/payment_entry.py | 6 ++--- .../payment_reconciliation.py | 4 +-- .../pos_closing_entry/pos_closing_entry.py | 6 ++--- .../doctype/pos_invoice/pos_invoice.py | 4 +-- .../process_payment_reconciliation.py | 6 ++--- .../purchase_invoice/purchase_invoice.py | 2 +- .../doctype/sales_invoice/sales_invoice.py | 8 +++--- erpnext/accounts/general_ledger.py | 10 +++---- erpnext/accounts/party.py | 8 +++--- .../accounts_receivable.py | 5 ++-- .../accounts/report/financial_statements.py | 8 ++---- .../report/general_ledger/general_ledger.py | 8 +++--- .../report/trial_balance/trial_balance.py | 8 ++---- erpnext/accounts/utils.py | 4 +-- erpnext/assets/doctype/asset/depreciation.py | 8 +++--- .../deppreciation_schedule_controller.py | 2 +- .../depreciation_methods.py | 2 +- erpnext/controllers/accounts_controller.py | 26 ++++++++----------- erpnext/controllers/buying_controller.py | 2 +- erpnext/controllers/status_updater.py | 4 +-- erpnext/controllers/taxes_and_totals.py | 6 ++--- erpnext/selling/doctype/customer/customer.py | 2 +- .../doctype/sales_order/sales_order.py | 2 +- erpnext/startup/boot.py | 6 ++--- .../doctype/delivery_note/delivery_note.py | 2 +- .../purchase_receipt/purchase_receipt.py | 2 +- erpnext/utilities/transaction_base.py | 2 +- 32 files changed, 65 insertions(+), 98 deletions(-) diff --git a/erpnext/accounts/deferred_revenue.py b/erpnext/accounts/deferred_revenue.py index 471de929235..77607f12c9f 100644 --- a/erpnext/accounts/deferred_revenue.py +++ b/erpnext/accounts/deferred_revenue.py @@ -317,7 +317,7 @@ def get_already_booked_amount(doc, item): def book_deferred_income_or_expense(doc, deferred_process, posting_date=None): enable_check = "enable_deferred_revenue" if doc.doctype == "Sales Invoice" else "enable_deferred_expense" - accounts_frozen_upto = frappe.db.get_single_value("Accounts Settings", "acc_frozen_upto") + accounts_frozen_upto = frappe.get_settings("Accounts Settings", "acc_frozen_upto") def _book_deferred_revenue_or_expense( item, diff --git a/erpnext/accounts/doctype/account/account.py b/erpnext/accounts/doctype/account/account.py index af499e83e13..53a1309d2c8 100644 --- a/erpnext/accounts/doctype/account/account.py +++ b/erpnext/accounts/doctype/account/account.py @@ -92,7 +92,7 @@ class Account(NestedSet): super().on_update() def onload(self): - frozen_accounts_modifier = frappe.db.get_single_value("Accounts Settings", "frozen_accounts_modifier") + frozen_accounts_modifier = frappe.get_settings("Accounts Settings", "frozen_accounts_modifier") if not frozen_accounts_modifier or frozen_accounts_modifier in frappe.get_roles(): self.set_onload("can_freeze_account", True) diff --git a/erpnext/accounts/doctype/bank_transaction/auto_match_party.py b/erpnext/accounts/doctype/bank_transaction/auto_match_party.py index 66aab9d62dd..e8ffe2d63ef 100644 --- a/erpnext/accounts/doctype/bank_transaction/auto_match_party.py +++ b/erpnext/accounts/doctype/bank_transaction/auto_match_party.py @@ -25,7 +25,7 @@ class AutoMatchParty: deposit=self.deposit, ).match() - fuzzy_matching_enabled = frappe.db.get_single_value("Accounts Settings", "enable_fuzzy_matching") + fuzzy_matching_enabled = frappe.get_settings("Accounts Settings", "enable_fuzzy_matching") if not result and fuzzy_matching_enabled: result = AutoMatchbyPartyNameDescription( bank_party_name=self.bank_party_name, description=self.description, deposit=self.deposit diff --git a/erpnext/accounts/doctype/bank_transaction/bank_transaction.py b/erpnext/accounts/doctype/bank_transaction/bank_transaction.py index 39ea5fde777..a049aeb8720 100644 --- a/erpnext/accounts/doctype/bank_transaction/bank_transaction.py +++ b/erpnext/accounts/doctype/bank_transaction/bank_transaction.py @@ -121,7 +121,7 @@ class BankTransaction(Document): self.allocate_payment_entries() self.set_status() - if frappe.db.get_single_value("Accounts Settings", "enable_party_matching"): + if frappe.get_settings("Accounts Settings", "enable_party_matching"): self.auto_set_party() def before_update_after_submit(self): diff --git a/erpnext/accounts/doctype/journal_entry/journal_entry.py b/erpnext/accounts/doctype/journal_entry/journal_entry.py index d5070db1735..4b33707478f 100644 --- a/erpnext/accounts/doctype/journal_entry/journal_entry.py +++ b/erpnext/accounts/doctype/journal_entry/journal_entry.py @@ -1171,7 +1171,7 @@ class JournalEntry(AccountsController): def make_gl_entries(self, cancel=0, adv_adj=0): from erpnext.accounts.general_ledger import make_gl_entries - merge_entries = frappe.db.get_single_value("Accounts Settings", "merge_similar_account_heads") + merge_entries = frappe.get_settings("Accounts Settings", "merge_similar_account_heads") gl_map = self.build_gl_map() if self.voucher_type in ("Deferred Revenue", "Deferred Expense"): diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry.py b/erpnext/accounts/doctype/payment_entry/payment_entry.py index c7db16abdd8..8719c05feb4 100644 --- a/erpnext/accounts/doctype/payment_entry/payment_entry.py +++ b/erpnext/accounts/doctype/payment_entry/payment_entry.py @@ -2969,7 +2969,7 @@ def get_payment_entry( created_from_payment_request=False, ): doc = frappe.get_doc(dt, dn) - over_billing_allowance = frappe.db.get_single_value("Accounts Settings", "over_billing_allowance") + over_billing_allowance = frappe.get_settings("Accounts Settings", "over_billing_allowance") if dt in ("Sales Order", "Purchase Order") and flt(doc.per_billed, 2) >= (100.0 + over_billing_allowance): frappe.throw(_("Can only make payment against unbilled {0}").format(_(dt))) @@ -3109,7 +3109,7 @@ def get_payment_entry( if party_account and bank: if discount_amount: base_total_discount_loss = 0 - if frappe.db.get_single_value("Accounts Settings", "book_tax_discount_loss"): + if frappe.get_settings("Accounts Settings", "book_tax_discount_loss"): base_total_discount_loss = split_early_payment_discount_loss(pe, doc, valid_discounts) set_pending_discount_loss( @@ -3463,7 +3463,7 @@ def set_pending_discount_loss(pe, doc, discount_amount, base_total_discount_loss # If tax loss booking is enabled, pending loss will be rounding loss. # Otherwise it will be the total discount loss. - book_tax_loss = frappe.db.get_single_value("Accounts Settings", "book_tax_discount_loss") + book_tax_loss = frappe.get_settings("Accounts Settings", "book_tax_discount_loss") account_type = "round_off_account" if book_tax_loss else "default_discount_account" pe.append( diff --git a/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.py b/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.py index 72aa4905900..8632cbe666c 100644 --- a/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.py +++ b/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.py @@ -407,7 +407,7 @@ class PaymentReconciliation(Document): @frappe.whitelist() def is_auto_process_enabled(self): - return frappe.db.get_single_value("Accounts Settings", "auto_reconcile_payments") + return frappe.get_settings("Accounts Settings", "auto_reconcile_payments") @frappe.whitelist() def calculate_difference_on_allocation_change(self, payment_entry, invoice, allocated_amount): @@ -532,7 +532,7 @@ class PaymentReconciliation(Document): @frappe.whitelist() def reconcile(self): - if frappe.db.get_single_value("Accounts Settings", "auto_reconcile_payments"): + if frappe.get_settings("Accounts Settings", "auto_reconcile_payments"): running_doc = is_any_doc_running( dict( company=self.company, diff --git a/erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.py b/erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.py index fe160f18673..f44d40a7495 100644 --- a/erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.py +++ b/erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.py @@ -60,9 +60,7 @@ class POSClosingEntry(StatusUpdater): if frappe.db.get_value("POS Opening Entry", self.pos_opening_entry, "status") != "Open": frappe.throw(_("Selected POS Opening Entry should be open."), title=_("Invalid Opening Entry")) - self.is_pos_using_sales_invoice = frappe.db.get_single_value( - "Accounts Settings", "use_sales_invoice_in_pos" - ) + self.is_pos_using_sales_invoice = frappe.get_settings("Accounts Settings", "use_sales_invoice_in_pos") if self.is_pos_using_sales_invoice == 0: self.validate_duplicate_pos_invoices() @@ -301,7 +299,7 @@ def make_closing_entry_from_opening(opening_entry): closing_entry.net_total = 0 closing_entry.total_quantity = 0 - is_pos_using_sales_invoice = frappe.db.get_single_value("Accounts Settings", "use_sales_invoice_in_pos") + is_pos_using_sales_invoice = frappe.get_settings("Accounts Settings", "use_sales_invoice_in_pos") pos_invoices = ( get_pos_invoices( diff --git a/erpnext/accounts/doctype/pos_invoice/pos_invoice.py b/erpnext/accounts/doctype/pos_invoice/pos_invoice.py index cda033a7cff..2245085d884 100644 --- a/erpnext/accounts/doctype/pos_invoice/pos_invoice.py +++ b/erpnext/accounts/doctype/pos_invoice/pos_invoice.py @@ -424,9 +424,7 @@ class POSInvoice(SalesInvoice): ) def validate_is_pos_using_sales_invoice(self): - self.is_pos_using_sales_invoice = frappe.db.get_single_value( - "Accounts Settings", "use_sales_invoice_in_pos" - ) + self.is_pos_using_sales_invoice = frappe.get_settings("Accounts Settings", "use_sales_invoice_in_pos") if self.is_pos_using_sales_invoice and not self.is_return: frappe.throw(_("Sales Invoice mode is activated in POS. Please create Sales Invoice instead.")) diff --git a/erpnext/accounts/doctype/process_payment_reconciliation/process_payment_reconciliation.py b/erpnext/accounts/doctype/process_payment_reconciliation/process_payment_reconciliation.py index ad21e845ce3..dc67f48c128 100644 --- a/erpnext/accounts/doctype/process_payment_reconciliation/process_payment_reconciliation.py +++ b/erpnext/accounts/doctype/process_payment_reconciliation/process_payment_reconciliation.py @@ -142,7 +142,7 @@ def trigger_job_for_doc(docname: str | None = None): if not docname: return - if not frappe.db.get_single_value("Accounts Settings", "auto_reconcile_payments"): + if not frappe.get_settings("Accounts Settings", "auto_reconcile_payments"): frappe.throw( _("Auto Reconciliation of Payments has been disabled. Enable it through {0}").format( get_link_to_form("Accounts Settings", "Accounts Settings") @@ -190,7 +190,7 @@ def trigger_reconciliation_for_queued_docs(): Will be called from Cron Job Fetch queued docs and start reconciliation process for each one """ - if not frappe.db.get_single_value("Accounts Settings", "auto_reconcile_payments"): + if not frappe.get_settings("Accounts Settings", "auto_reconcile_payments"): frappe.msgprint( _("Auto Reconciliation of Payments has been disabled. Enable it through {0}").format( get_link_to_form("Accounts Settings", "Accounts Settings") @@ -210,7 +210,7 @@ def trigger_reconciliation_for_queued_docs(): docs_to_trigger = [] unique_filters = set() - queue_size = frappe.db.get_single_value("Accounts Settings", "reconciliation_queue_size") or 5 + queue_size = frappe.get_settings("Accounts Settings", "reconciliation_queue_size") or 5 fields = ["company", "party_type", "party", "receivable_payable_account", "default_advance_account"] diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py index bcb85148cdb..76585783afb 100644 --- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py +++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py @@ -1729,7 +1729,7 @@ class PurchaseInvoice(BuyingController): frappe.throw(_("Supplier Invoice Date cannot be greater than Posting Date")) if self.bill_no: - if cint(frappe.db.get_single_value("Accounts Settings", "check_supplier_invoice_uniqueness")): + if cint(frappe.get_settings("Accounts Settings", "check_supplier_invoice_uniqueness")): fiscal_year = get_fiscal_year(self.posting_date, company=self.company, as_dict=True) pi = frappe.db.sql( diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py index 564bc46c2f7..4e2f2f99c2d 100644 --- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py +++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py @@ -1096,9 +1096,7 @@ class SalesInvoice(SellingController): if self.is_created_using_pos and not self.pos_profile: frappe.throw(_("POS Profile is mandatory to mark this invoice as POS Transaction.")) - self.is_pos_using_sales_invoice = frappe.db.get_single_value( - "Accounts Settings", "use_sales_invoice_in_pos" - ) + self.is_pos_using_sales_invoice = frappe.get_settings("Accounts Settings", "use_sales_invoice_in_pos") if not self.is_pos_using_sales_invoice and not self.is_return: frappe.throw(_("Transactions using Sales Invoice in POS are disabled.")) @@ -1635,7 +1633,7 @@ class SalesInvoice(SellingController): def make_pos_gl_entries(self, gl_entries): if cint(self.is_pos): skip_change_gl_entries = not cint( - frappe.db.get_single_value("Accounts Settings", "post_change_gl_entries") + frappe.get_settings("Accounts Settings", "post_change_gl_entries") ) for payment_mode in self.payments: @@ -2920,7 +2918,7 @@ def check_if_return_invoice_linked_with_payment_entry(self): # If a Return invoice is linked with payment entry along with other invoices, # the cancellation of the Return causes allocated amount to be greater than paid - if not frappe.db.get_single_value("Accounts Settings", "unlink_payment_on_cancellation_of_invoice"): + if not frappe.get_settings("Accounts Settings", "unlink_payment_on_cancellation_of_invoice"): return payment_entries = [] diff --git a/erpnext/accounts/general_ledger.py b/erpnext/accounts/general_ledger.py index 786ddfc64c3..f2d0c6159f1 100644 --- a/erpnext/accounts/general_ledger.py +++ b/erpnext/accounts/general_ledger.py @@ -35,7 +35,7 @@ def make_gl_entries( ): if gl_map: if ( - frappe.db.get_single_value("Accounts Settings", "use_new_budget_controller") + frappe.get_settings("Accounts Settings", "use_new_budget_controller") and gl_map[0].voucher_type != "Period Closing Voucher" ): bud_val = BudgetValidation(gl_map=gl_map) @@ -743,11 +743,9 @@ def check_freezing_date(posting_date, adv_adj=False): Hence stop admin to bypass if accounts are freezed """ if not adv_adj: - acc_frozen_upto = frappe.db.get_single_value("Accounts Settings", "acc_frozen_upto") + acc_frozen_upto = frappe.get_settings("Accounts Settings", "acc_frozen_upto") if acc_frozen_upto: - frozen_accounts_modifier = frappe.db.get_single_value( - "Accounts Settings", "frozen_accounts_modifier" - ) + frozen_accounts_modifier = frappe.get_settings("Accounts Settings", "frozen_accounts_modifier") if getdate(posting_date) <= getdate(acc_frozen_upto) and ( frozen_accounts_modifier not in frappe.get_roles() or frappe.session.user == "Administrator" ): @@ -825,4 +823,4 @@ def validate_allowed_dimensions(gl_entry, dimension_filter_map): def is_immutable_ledger_enabled(): - return frappe.db.get_single_value("Accounts Settings", "enable_immutable_ledger") + return frappe.get_settings("Accounts Settings", "enable_immutable_ledger") diff --git a/erpnext/accounts/party.py b/erpnext/accounts/party.py index d79897deceb..eff254c1cff 100644 --- a/erpnext/accounts/party.py +++ b/erpnext/accounts/party.py @@ -689,7 +689,7 @@ def validate_due_date_with_template(posting_date, due_date, bill_date, template_ return if default_due_date != posting_date and getdate(due_date) > getdate(default_due_date): - if frappe.db.get_single_value("Accounts Settings", "credit_controller") in frappe.get_roles(): + if frappe.get_settings("Accounts Settings", "credit_controller") in frappe.get_roles(): party_type = "supplier" if doctype == "Purchase Invoice" else "customer" msgprint( @@ -703,9 +703,7 @@ def validate_due_date_with_template(posting_date, due_date, bill_date, template_ @frappe.whitelist() def get_address_tax_category(tax_category=None, billing_address=None, shipping_address=None): - addr_tax_category_from = frappe.db.get_single_value( - "Accounts Settings", "determine_address_tax_category_from" - ) + addr_tax_category_from = frappe.get_settings("Accounts Settings", "determine_address_tax_category_from") if addr_tax_category_from == "Shipping Address": if shipping_address: tax_category = frappe.db.get_value("Address", shipping_address, "tax_category") or tax_category @@ -803,7 +801,7 @@ def validate_party_frozen_disabled(party_type, party_name): if party.disabled: frappe.throw(_("{0} {1} is disabled").format(party_type, party_name), PartyDisabled) elif party.get("is_frozen"): - frozen_accounts_modifier = frappe.db.get_single_value( + frozen_accounts_modifier = frappe.get_settings( "Accounts Settings", "frozen_accounts_modifier" ) if frozen_accounts_modifier not in frappe.get_roles(): diff --git a/erpnext/accounts/report/accounts_receivable/accounts_receivable.py b/erpnext/accounts/report/accounts_receivable/accounts_receivable.py index bdb9ffcc142..a30c0b463af 100644 --- a/erpnext/accounts/report/accounts_receivable/accounts_receivable.py +++ b/erpnext/accounts/report/accounts_receivable/accounts_receivable.py @@ -57,8 +57,7 @@ class ReceivablePayableReport: self.ranges = [num.strip() for num in self.filters.range.split(",") if num.strip().isdigit()] self.range_numbers = [num for num in range(1, len(self.ranges) + 2)] self.ple_fetch_method = ( - frappe.db.get_single_value("Accounts Settings", "receivable_payable_fetch_method") - or "Buffered Cursor" + frappe.get_settings("Accounts Settings", "receivable_payable_fetch_method") or "Buffered Cursor" ) # Fail Safe def run(self, args): @@ -849,7 +848,7 @@ class ReceivablePayableReport: ) if self.filters.get("show_remarks"): - if remarks_length := frappe.db.get_single_value( + if remarks_length := frappe.get_settings( "Accounts Settings", "receivable_payable_remarks_length" ): query = query.select(Substring(ple.remarks, 1, remarks_length).as_("remarks")) diff --git a/erpnext/accounts/report/financial_statements.py b/erpnext/accounts/report/financial_statements.py index 0d1e185382d..b64bd47b5d8 100644 --- a/erpnext/accounts/report/financial_statements.py +++ b/erpnext/accounts/report/financial_statements.py @@ -435,9 +435,7 @@ def set_gl_entries_by_account( gl_entries = [] # For balance sheet - ignore_closing_balances = frappe.db.get_single_value( - "Accounts Settings", "ignore_account_closing_balance" - ) + ignore_closing_balances = frappe.get_settings("Accounts Settings", "ignore_account_closing_balance") if not from_date and not ignore_closing_balances: last_period_closing_voucher = frappe.db.get_all( "Period Closing Voucher", @@ -519,9 +517,7 @@ def get_accounting_entries( .where(gl_entry.company == filters.company) ) - ignore_is_opening = frappe.db.get_single_value( - "Accounts Settings", "ignore_is_opening_check_for_reporting" - ) + ignore_is_opening = frappe.get_settings("Accounts Settings", "ignore_is_opening_check_for_reporting") if doctype == "GL Entry": query = query.select(gl_entry.posting_date, gl_entry.is_opening, gl_entry.fiscal_year) diff --git a/erpnext/accounts/report/general_ledger/general_ledger.py b/erpnext/accounts/report/general_ledger/general_ledger.py index 48193c87822..20a92f3f626 100644 --- a/erpnext/accounts/report/general_ledger/general_ledger.py +++ b/erpnext/accounts/report/general_ledger/general_ledger.py @@ -163,7 +163,7 @@ def get_gl_entries(filters, accounting_dimensions): credit_in_account_currency """ if filters.get("show_remarks"): - if remarks_length := frappe.db.get_single_value("Accounts Settings", "general_ledger_remarks_length"): + if remarks_length := frappe.get_settings("Accounts Settings", "general_ledger_remarks_length"): select_fields += f",substr(remarks, 1, {remarks_length}) as 'remarks'" else: select_fields += """,remarks""" @@ -218,9 +218,7 @@ def get_gl_entries(filters, accounting_dimensions): def get_conditions(filters): conditions = [] - ignore_is_opening = frappe.db.get_single_value( - "Accounts Settings", "ignore_is_opening_check_for_reporting" - ) + ignore_is_opening = frappe.get_settings("Accounts Settings", "ignore_is_opening_check_for_reporting") if filters.get("account"): filters.account = get_accounts_with_children(filters.account) @@ -480,7 +478,7 @@ def get_accountwise_gle(filters, accounting_dimensions, gl_entries, gle_map): if filters.get("show_net_values_in_party_account"): account_type_map = get_account_type_map(filters.get("company")) - immutable_ledger = frappe.db.get_single_value("Accounts Settings", "enable_immutable_ledger") + immutable_ledger = frappe.get_settings("Accounts Settings", "enable_immutable_ledger") def update_value_in_dict(data, key, gle): data[key].debit += gle.debit diff --git a/erpnext/accounts/report/trial_balance/trial_balance.py b/erpnext/accounts/report/trial_balance/trial_balance.py index 5575426dfff..b01f3315b3f 100644 --- a/erpnext/accounts/report/trial_balance/trial_balance.py +++ b/erpnext/accounts/report/trial_balance/trial_balance.py @@ -89,9 +89,7 @@ def get_data(filters): ) company_currency = filters.presentation_currency or erpnext.get_company_currency(filters.company) - ignore_is_opening = frappe.db.get_single_value( - "Accounts Settings", "ignore_is_opening_check_for_reporting" - ) + ignore_is_opening = frappe.get_settings("Accounts Settings", "ignore_is_opening_check_for_reporting") if not accounts: return None @@ -148,9 +146,7 @@ def get_rootwise_opening_balances(filters, report_type, ignore_is_opening): gle = [] last_period_closing_voucher = "" - ignore_closing_balances = frappe.db.get_single_value( - "Accounts Settings", "ignore_account_closing_balance" - ) + ignore_closing_balances = frappe.get_settings("Accounts Settings", "ignore_account_closing_balance") if not ignore_closing_balances: last_period_closing_voucher = frappe.db.get_all( diff --git a/erpnext/accounts/utils.py b/erpnext/accounts/utils.py index 290ce504c3a..efd36325a34 100644 --- a/erpnext/accounts/utils.py +++ b/erpnext/accounts/utils.py @@ -886,7 +886,7 @@ def cancel_common_party_journal(self): if self.doctype not in ["Sales Invoice", "Purchase Invoice"]: return - if not frappe.db.get_single_value("Accounts Settings", "enable_common_party_accounting"): + if not frappe.get_settings("Accounts Settings", "enable_common_party_accounting"): return party_link = self.get_common_party_link() @@ -2312,7 +2312,7 @@ def run_ledger_health_checks(): def sync_auto_reconcile_config(auto_reconciliation_job_trigger: int = 15): - auto_reconciliation_job_trigger = auto_reconciliation_job_trigger or frappe.db.get_single_value( + auto_reconciliation_job_trigger = auto_reconciliation_job_trigger or frappe.get_settings( "Accounts Settings", "auto_reconciliation_job_trigger" ) method = "erpnext.accounts.doctype.process_payment_reconciliation.process_payment_reconciliation.trigger_reconciliation_for_queued_docs" diff --git a/erpnext/assets/doctype/asset/depreciation.py b/erpnext/assets/doctype/asset/depreciation.py index 259cd535fb9..92546235780 100644 --- a/erpnext/assets/doctype/asset/depreciation.py +++ b/erpnext/assets/doctype/asset/depreciation.py @@ -35,9 +35,7 @@ from erpnext.assets.doctype.asset_depreciation_schedule.asset_depreciation_sched def post_depreciation_entries(date=None): # Return if automatic booking of asset depreciation is disabled - if not cint( - frappe.db.get_single_value("Accounts Settings", "book_asset_depreciation_entry_automatically") - ): + if not cint(frappe.get_settings("Accounts Settings", "book_asset_depreciation_entry_automatically")): return date = date or today() @@ -114,12 +112,12 @@ def make_depreciation_entry_on_disposal(asset_doc, disposal_date=None): def get_acc_frozen_upto(): - acc_frozen_upto = frappe.db.get_single_value("Accounts Settings", "acc_frozen_upto") + acc_frozen_upto = frappe.get_settings("Accounts Settings", "acc_frozen_upto") if not acc_frozen_upto: return - frozen_accounts_modifier = frappe.db.get_single_value("Accounts Settings", "frozen_accounts_modifier") + frozen_accounts_modifier = frappe.get_settings("Accounts Settings", "frozen_accounts_modifier") if frozen_accounts_modifier not in frappe.get_roles() or frappe.session.user == "Administrator": return getdate(acc_frozen_upto) diff --git a/erpnext/assets/doctype/asset_depreciation_schedule/deppreciation_schedule_controller.py b/erpnext/assets/doctype/asset_depreciation_schedule/deppreciation_schedule_controller.py index c228dfbb8c7..278b44444d4 100644 --- a/erpnext/assets/doctype/asset_depreciation_schedule/deppreciation_schedule_controller.py +++ b/erpnext/assets/doctype/asset_depreciation_schedule/deppreciation_schedule_controller.py @@ -251,7 +251,7 @@ class DepreciationScheduleController(StraightLineMethod, WDVMethod): return depr_booked_for_months def get_total_pending_days_or_years(self): - if cint(frappe.db.get_single_value("Accounts Settings", "calculate_depr_using_total_days")): + if cint(frappe.get_settings("Accounts Settings", "calculate_depr_using_total_days")): last_depr_date = self.get_last_booked_depreciation_date() if last_depr_date: self.total_pending_days = date_diff(self.final_schedule_date, last_depr_date) - 1 diff --git a/erpnext/assets/doctype/asset_depreciation_schedule/depreciation_methods.py b/erpnext/assets/doctype/asset_depreciation_schedule/depreciation_methods.py index 1b235b1fa78..f6535221671 100644 --- a/erpnext/assets/doctype/asset_depreciation_schedule/depreciation_methods.py +++ b/erpnext/assets/doctype/asset_depreciation_schedule/depreciation_methods.py @@ -38,7 +38,7 @@ class StraightLineMethod(Document): return daily_depr_amount * total_depreciable_days def get_daily_depr_amount(self): - if cint(frappe.db.get_single_value("Accounts Settings", "calculate_depr_using_total_days")): + if cint(frappe.get_settings("Accounts Settings", "calculate_depr_using_total_days")): return self.depreciable_value / self.total_pending_days else: yearly_depr_amount = self.depreciable_value / self.total_pending_years diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py index 23c7a396337..2e9be24d278 100644 --- a/erpnext/controllers/accounts_controller.py +++ b/erpnext/controllers/accounts_controller.py @@ -403,7 +403,7 @@ class AccountsController(TransactionBase): self.remove_serial_and_batch_bundle() # delete sl and gl entries on deletion of transaction - if frappe.db.get_single_value("Accounts Settings", "delete_linked_ledger_entries"): + if frappe.get_settings("Accounts Settings", "delete_linked_ledger_entries"): # delete linked exchange gain/loss journal delete_exchange_gain_loss_journal(self) @@ -744,9 +744,7 @@ class AccountsController(TransactionBase): frappe.throw(_(msg), title=_("Internal Transfer Reference Missing")) def validate_internal_transaction(self): - if not cint( - frappe.db.get_single_value("Accounts Settings", "maintain_same_internal_transaction_rate") - ): + if not cint(frappe.get_settings("Accounts Settings", "maintain_same_internal_transaction_rate")): return doctypes_list = ["Sales Order", "Sales Invoice", "Purchase Order", "Purchase Invoice"] @@ -1143,7 +1141,7 @@ class AccountsController(TransactionBase): return True def set_taxes_and_charges(self): - if frappe.db.get_single_value("Accounts Settings", "add_taxes_from_item_tax_template"): + if frappe.get_settings("Accounts Settings", "add_taxes_from_item_tax_template"): if hasattr(self, "taxes_and_charges") and not self.get("taxes") and not self.get("is_pos"): if tax_master_doctype := self.meta.get_field("taxes_and_charges").options: self.append_taxes_from_master(tax_master_doctype) @@ -1156,7 +1154,7 @@ class AccountsController(TransactionBase): self.extend("taxes", get_taxes_and_charges(tax_master_doctype, self.get("taxes_and_charges"))) def append_taxes_from_item_tax_template(self): - if not frappe.db.get_single_value("Accounts Settings", "add_taxes_from_item_tax_template"): + if not frappe.get_settings("Accounts Settings", "add_taxes_from_item_tax_template"): return for row in self.items: @@ -1497,7 +1495,7 @@ class AccountsController(TransactionBase): return res def is_inclusive_tax(self): - is_inclusive = cint(frappe.db.get_single_value("Accounts Settings", "show_inclusive_tax_in_print")) + is_inclusive = cint(frappe.get_settings("Accounts Settings", "show_inclusive_tax_in_print")) if is_inclusive: is_inclusive = 0 @@ -1507,7 +1505,7 @@ class AccountsController(TransactionBase): return is_inclusive def should_show_taxes_as_table_in_print(self): - return cint(frappe.db.get_single_value("Accounts Settings", "show_taxes_as_table_in_print")) + return cint(frappe.get_settings("Accounts Settings", "show_taxes_as_table_in_print")) def validate_advance_entries(self): order_field = "sales_order" if self.doctype == "Sales Invoice" else "purchase_order" @@ -1884,13 +1882,11 @@ class AccountsController(TransactionBase): cancel_exchange_gain_loss_journal(self) cancel_common_party_journal(self) - if frappe.db.get_single_value("Accounts Settings", "unlink_payment_on_cancellation_of_invoice"): + if frappe.get_settings("Accounts Settings", "unlink_payment_on_cancellation_of_invoice"): unlink_ref_doc_from_payment_entries(self) elif self.doctype in ["Sales Order", "Purchase Order"]: - if frappe.db.get_single_value( - "Accounts Settings", "unlink_advance_payment_on_cancelation_of_order" - ): + if frappe.get_settings("Accounts Settings", "unlink_advance_payment_on_cancelation_of_order"): unlink_ref_doc_from_payment_entries(self) if self.doctype == "Sales Order": @@ -2448,7 +2444,7 @@ class AccountsController(TransactionBase): grand_total = grand_total - flt(self.write_off_amount) po_or_so, doctype, fieldname = self.get_order_details() automatically_fetch_payment_terms = cint( - frappe.db.get_single_value("Accounts Settings", "automatically_fetch_payment_terms") + frappe.get_settings("Accounts Settings", "automatically_fetch_payment_terms") ) if self.get("total_advance"): @@ -2731,7 +2727,7 @@ class AccountsController(TransactionBase): if not is_invoice: return - if frappe.db.get_single_value("Accounts Settings", "enable_common_party_accounting"): + if frappe.get_settings("Accounts Settings", "enable_common_party_accounting"): party_link = self.get_common_party_link() if party_link and self.outstanding_amount: self.create_advance_and_reconcile(party_link) @@ -3517,7 +3513,7 @@ def set_child_tax_template_and_map(item, child_item, parent_doc): def add_taxes_from_tax_template(child_item, parent_doc, db_insert=True): - add_taxes_from_item_tax_template = frappe.db.get_single_value( + add_taxes_from_item_tax_template = frappe.get_settings( "Accounts Settings", "add_taxes_from_item_tax_template" ) diff --git a/erpnext/controllers/buying_controller.py b/erpnext/controllers/buying_controller.py index 4fc8c581532..f8c96f3d466 100644 --- a/erpnext/controllers/buying_controller.py +++ b/erpnext/controllers/buying_controller.py @@ -842,7 +842,7 @@ class BuyingController(SubcontractingController): self.update_fixed_asset(field, delete_asset=True) def validate_budget(self): - if frappe.db.get_single_value("Accounts Settings", "use_new_budget_controller"): + if frappe.get_settings("Accounts Settings", "use_new_budget_controller"): from erpnext.controllers.budget_controller import BudgetValidation val = BudgetValidation(doc=self) diff --git a/erpnext/controllers/status_updater.py b/erpnext/controllers/status_updater.py index 9e02b2ba0f4..e105acd05ec 100644 --- a/erpnext/controllers/status_updater.py +++ b/erpnext/controllers/status_updater.py @@ -339,9 +339,7 @@ class StatusUpdater(Document): role_allowed_to_over_deliver_receive = frappe.get_settings( "Stock Settings", "role_allowed_to_over_deliver_receive" ) - role_allowed_to_over_bill = frappe.db.get_single_value( - "Accounts Settings", "role_allowed_to_over_bill" - ) + role_allowed_to_over_bill = frappe.get_settings("Accounts Settings", "role_allowed_to_over_bill") role = role_allowed_to_over_deliver_receive if qty_or_amount == "qty" else role_allowed_to_over_bill overflow_percent = ( diff --git a/erpnext/controllers/taxes_and_totals.py b/erpnext/controllers/taxes_and_totals.py index 239e47b15ac..f63395c649b 100644 --- a/erpnext/controllers/taxes_and_totals.py +++ b/erpnext/controllers/taxes_and_totals.py @@ -28,9 +28,7 @@ class calculate_taxes_and_totals: def __init__(self, doc: Document): self.doc = doc frappe.flags.round_off_applicable_accounts = [] - frappe.flags.round_row_wise_tax = frappe.db.get_single_value( - "Accounts Settings", "round_row_wise_tax" - ) + frappe.flags.round_row_wise_tax = frappe.get_settings("Accounts Settings", "round_row_wise_tax") if doc.get("round_off_applicable_accounts_for_tax_withholding"): frappe.flags.round_off_applicable_accounts.append( @@ -1170,7 +1168,7 @@ def get_rounded_tax_amount(itemised_tax, precision): @frappe.whitelist() def get_rounding_tax_settings(): - return frappe.db.get_single_value("Accounts Settings", "round_row_wise_tax") + return frappe.get_settings("Accounts Settings", "round_row_wise_tax") class init_landed_taxes_and_totals: diff --git a/erpnext/selling/doctype/customer/customer.py b/erpnext/selling/doctype/customer/customer.py index acaca341a17..e5a02d55d5f 100644 --- a/erpnext/selling/doctype/customer/customer.py +++ b/erpnext/selling/doctype/customer/customer.py @@ -554,7 +554,7 @@ def check_credit_limit(customer, company, ignore_outstanding_sales_order=False, message += "

" # If not authorized person raise exception - credit_controller_role = frappe.db.get_single_value("Accounts Settings", "credit_controller") + credit_controller_role = frappe.get_settings("Accounts Settings", "credit_controller") if not credit_controller_role or credit_controller_role not in frappe.get_roles(): # form a list of emails for the credit controller users credit_controller_users = get_users_with_role(credit_controller_role or "Sales Master Manager") diff --git a/erpnext/selling/doctype/sales_order/sales_order.py b/erpnext/selling/doctype/sales_order/sales_order.py index 68a371b4f2f..26f6d7026c0 100755 --- a/erpnext/selling/doctype/sales_order/sales_order.py +++ b/erpnext/selling/doctype/sales_order/sales_order.py @@ -1220,7 +1220,7 @@ def make_sales_invoice(source_name, target_doc=None, ignore_permissions=False): ) automatically_fetch_payment_terms = cint( - frappe.db.get_single_value("Accounts Settings", "automatically_fetch_payment_terms") + frappe.get_settings("Accounts Settings", "automatically_fetch_payment_terms") ) if automatically_fetch_payment_terms: doclist.set_payment_schedule() diff --git a/erpnext/startup/boot.py b/erpnext/startup/boot.py index a5f469a58ec..2e7d5939815 100644 --- a/erpnext/startup/boot.py +++ b/erpnext/startup/boot.py @@ -20,10 +20,8 @@ def boot_session(bootinfo): bootinfo.sysdefaults.use_server_side_reactivity = frappe.db.get_single_value( "Selling Settings", "use_server_side_reactivity" ) - bootinfo.sysdefaults.allow_stale = cint( - frappe.db.get_single_value("Accounts Settings", "allow_stale") - ) - bootinfo.sysdefaults.over_billing_allowance = frappe.db.get_single_value( + bootinfo.sysdefaults.allow_stale = cint(frappe.get_settings("Accounts Settings", "allow_stale")) + bootinfo.sysdefaults.over_billing_allowance = frappe.get_settings( "Accounts Settings", "over_billing_allowance" ) diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.py b/erpnext/stock/doctype/delivery_note/delivery_note.py index bf0b7de6f22..3e2dd11c005 100644 --- a/erpnext/stock/doctype/delivery_note/delivery_note.py +++ b/erpnext/stock/doctype/delivery_note/delivery_note.py @@ -901,7 +901,7 @@ def make_sales_invoice(source_name, target_doc=None, args=None): ) automatically_fetch_payment_terms = cint( - frappe.db.get_single_value("Accounts Settings", "automatically_fetch_payment_terms") + frappe.get_settings("Accounts Settings", "automatically_fetch_payment_terms") ) if automatically_fetch_payment_terms and not doc.is_return: doc.set_payment_schedule() diff --git a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py index 802cdafa4f6..9aea6eaa559 100644 --- a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py +++ b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py @@ -1199,7 +1199,7 @@ 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.db.get_single_value("Accounts Settings", "over_billing_allowance") + over_billing_allowance = frappe.get_settings("Accounts Settings", "over_billing_allowance") total_amount, total_billed_amount = 0, 0 item_wise_returned_qty = get_item_wise_returned_qty(pr_doc) diff --git a/erpnext/utilities/transaction_base.py b/erpnext/utilities/transaction_base.py index 29573d9f20d..2384529c5ee 100644 --- a/erpnext/utilities/transaction_base.py +++ b/erpnext/utilities/transaction_base.py @@ -354,7 +354,7 @@ class TransactionBase(StatusUpdater): self.set_rate_based_on_price_list(item_obj, item_details) def add_taxes_from_item_template(self, item_obj: object, item_details: dict) -> None: - if item_details.item_tax_rate and frappe.db.get_single_value( + if item_details.item_tax_rate and frappe.get_settings( "Accounts Settings", "add_taxes_from_item_tax_template" ): item_tax_template = frappe.json.loads(item_details.item_tax_rate) From 7d88d9dd4d9b3eba9abcee781981a606608c1f6b Mon Sep 17 00:00:00 2001 From: Ankush Menat Date: Fri, 6 Jun 2025 19:39:47 +0530 Subject: [PATCH 13/20] perf: use cached Authorization control doc (#47948) --- erpnext/stock/doctype/delivery_note/delivery_note.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.py b/erpnext/stock/doctype/delivery_note/delivery_note.py index 3e2dd11c005..31525de213f 100644 --- a/erpnext/stock/doctype/delivery_note/delivery_note.py +++ b/erpnext/stock/doctype/delivery_note/delivery_note.py @@ -436,7 +436,7 @@ class DeliveryNote(SellingController): self.update_pick_list_status() # Check for Approving Authority - frappe.get_doc("Authorization Control").validate_approving_authority( + frappe.get_cached_doc("Authorization Control").validate_approving_authority( self.doctype, self.company, self.base_grand_total, self ) From 73746e2c71a3be32af9157eb324f324a7e853352 Mon Sep 17 00:00:00 2001 From: Ankush Menat Date: Fri, 6 Jun 2025 19:40:12 +0530 Subject: [PATCH 14/20] perf: use cached selling settings (#47949) * perf: Use cached stock repost settings * perf: Use cached selling settings --- .../doctype/sales_invoice/sales_invoice.py | 14 +++++++------- .../tax_withholding_details.py | 2 +- .../tds_computation_summary.py | 2 +- .../trial_balance_for_party.py | 2 +- erpnext/controllers/accounts_controller.py | 2 +- erpnext/controllers/selling_controller.py | 6 ++---- erpnext/controllers/status_updater.py | 2 +- erpnext/controllers/stock_controller.py | 6 ++---- erpnext/projects/doctype/project/project.py | 2 +- erpnext/selling/doctype/quotation/quotation.py | 2 +- erpnext/selling/doctype/sales_order/sales_order.py | 12 +++++------- .../customer_credit_balance.py | 2 +- erpnext/startup/boot.py | 8 ++++---- .../stock/doctype/delivery_note/delivery_note.py | 4 ++-- erpnext/stock/doctype/item/item.py | 6 +++--- erpnext/stock/doctype/packed_item/packed_item.py | 2 +- erpnext/stock/doctype/price_list/price_list.py | 2 +- 17 files changed, 35 insertions(+), 41 deletions(-) diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py index 4e2f2f99c2d..4e75d92306e 100644 --- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py +++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py @@ -495,7 +495,7 @@ class SalesInvoice(SellingController): self.update_time_sheet(self.name) - if frappe.db.get_single_value("Selling Settings", "sales_update_frequency") == "Each Transaction": + if frappe.get_settings("Selling Settings", "sales_update_frequency") == "Each Transaction": update_company_current_month_sales(self.company) self.update_project() update_linked_doc(self.doctype, self.name, self.inter_company_invoice_reference) @@ -611,7 +611,7 @@ class SalesInvoice(SellingController): if self.coupon_code: update_coupon_code_count(self.coupon_code, "cancelled") - if frappe.db.get_single_value("Selling Settings", "sales_update_frequency") == "Each Transaction": + if frappe.get_settings("Selling Settings", "sales_update_frequency") == "Each Transaction": update_company_current_month_sales(self.company) self.update_project() if not self.is_return and not self.is_consolidated and self.loyalty_program: @@ -1016,7 +1016,7 @@ class SalesInvoice(SellingController): ) if ( - cint(frappe.db.get_single_value("Selling Settings", "maintain_same_sales_rate")) + cint(frappe.get_settings("Selling Settings", "maintain_same_sales_rate")) and not self.is_return and not self.is_internal_customer ): @@ -1063,7 +1063,7 @@ class SalesInvoice(SellingController): "Delivery Note": ["dn_required", "update_stock"], } for key, value in prev_doc_field_map.items(): - if frappe.db.get_single_value("Selling Settings", value[0]) == "Yes": + if frappe.get_settings("Selling Settings", value[0]) == "Yes": if frappe.get_value("Customer", self.customer, value[0]): continue @@ -1466,7 +1466,7 @@ class SalesInvoice(SellingController): def make_tax_gl_entries(self, gl_entries): enable_discount_accounting = cint( - frappe.db.get_single_value("Selling Settings", "enable_discount_accounting") + frappe.get_settings("Selling Settings", "enable_discount_accounting") ) for tax in self.get("taxes"): @@ -1516,7 +1516,7 @@ class SalesInvoice(SellingController): def make_item_gl_entries(self, gl_entries): # income account gl entries enable_discount_accounting = cint( - frappe.db.get_single_value("Selling Settings", "enable_discount_accounting") + frappe.get_settings("Selling Settings", "enable_discount_accounting") ) for item in self.get("items"): @@ -1591,7 +1591,7 @@ class SalesInvoice(SellingController): def enable_discount_accounting(self): if not hasattr(self, "_enable_discount_accounting"): self._enable_discount_accounting = cint( - frappe.db.get_single_value("Selling Settings", "enable_discount_accounting") + frappe.get_settings("Selling Settings", "enable_discount_accounting") ) return self._enable_discount_accounting diff --git a/erpnext/accounts/report/tax_withholding_details/tax_withholding_details.py b/erpnext/accounts/report/tax_withholding_details/tax_withholding_details.py index 0da5fcfc7ef..f51e4152e56 100644 --- a/erpnext/accounts/report/tax_withholding_details/tax_withholding_details.py +++ b/erpnext/accounts/report/tax_withholding_details/tax_withholding_details.py @@ -9,7 +9,7 @@ from frappe.utils import getdate def execute(filters=None): if filters.get("party_type") == "Customer": - party_naming_by = frappe.db.get_single_value("Selling Settings", "cust_master_name") + party_naming_by = frappe.get_settings("Selling Settings", "cust_master_name") else: party_naming_by = frappe.db.get_single_value("Buying Settings", "supp_master_name") diff --git a/erpnext/accounts/report/tds_computation_summary/tds_computation_summary.py b/erpnext/accounts/report/tds_computation_summary/tds_computation_summary.py index e14d9320fa2..6b49f12a524 100644 --- a/erpnext/accounts/report/tds_computation_summary/tds_computation_summary.py +++ b/erpnext/accounts/report/tds_computation_summary/tds_computation_summary.py @@ -10,7 +10,7 @@ from erpnext.accounts.utils import get_fiscal_year def execute(filters=None): if filters.get("party_type") == "Customer": - party_naming_by = frappe.db.get_single_value("Selling Settings", "cust_master_name") + party_naming_by = frappe.get_settings("Selling Settings", "cust_master_name") else: party_naming_by = frappe.db.get_single_value("Buying Settings", "supp_master_name") diff --git a/erpnext/accounts/report/trial_balance_for_party/trial_balance_for_party.py b/erpnext/accounts/report/trial_balance_for_party/trial_balance_for_party.py index f6c79eb6c45..d2587a78572 100644 --- a/erpnext/accounts/report/trial_balance_for_party/trial_balance_for_party.py +++ b/erpnext/accounts/report/trial_balance_for_party/trial_balance_for_party.py @@ -256,7 +256,7 @@ def is_party_name_visible(filters): if filters.get("party_type") in ["Customer", "Supplier"]: if filters.get("party_type") == "Customer": - party_naming_by = frappe.db.get_single_value("Selling Settings", "cust_master_name") + party_naming_by = frappe.get_settings("Selling Settings", "cust_master_name") else: party_naming_by = frappe.db.get_single_value("Buying Settings", "supp_master_name") diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py index 2e9be24d278..7970b43c7f0 100644 --- a/erpnext/controllers/accounts_controller.py +++ b/erpnext/controllers/accounts_controller.py @@ -1962,7 +1962,7 @@ class AccountsController(TransactionBase): def make_discount_gl_entries(self, gl_entries): enable_discount_accounting = cint( - frappe.db.get_single_value("Selling Settings", "enable_discount_accounting") + frappe.get_settings("Selling Settings", "enable_discount_accounting") ) if enable_discount_accounting: diff --git a/erpnext/controllers/selling_controller.py b/erpnext/controllers/selling_controller.py index 2d2d163b737..77e54c5747b 100644 --- a/erpnext/controllers/selling_controller.py +++ b/erpnext/controllers/selling_controller.py @@ -255,9 +255,7 @@ class SellingController(StockController): title=_("Invalid Selling Price"), ) - if self.get("is_return") or not frappe.db.get_single_value( - "Selling Settings", "validate_selling_price" - ): + if self.get("is_return") or not frappe.get_settings("Selling Settings", "validate_selling_price"): return is_internal_customer = self.get("is_internal_customer") @@ -717,7 +715,7 @@ class SellingController(StockController): def validate_for_duplicate_items(self): check_list, chk_dupl_itm = [], [] - if cint(frappe.db.get_single_value("Selling Settings", "allow_multiple_items")): + if cint(frappe.get_settings("Selling Settings", "allow_multiple_items")): return if self.doctype == "Sales Invoice" and self.is_consolidated: return diff --git a/erpnext/controllers/status_updater.py b/erpnext/controllers/status_updater.py index e105acd05ec..f98d61f221e 100644 --- a/erpnext/controllers/status_updater.py +++ b/erpnext/controllers/status_updater.py @@ -266,7 +266,7 @@ class StatusUpdater(Document): if hasattr(d, "qty") and d.qty > 0 and self.get("is_return"): frappe.throw(_("For an item {0}, quantity must be negative number").format(d.item_code)) - if not frappe.db.get_single_value("Selling Settings", "allow_negative_rates_for_items"): + if not frappe.get_settings("Selling Settings", "allow_negative_rates_for_items"): if hasattr(d, "item_code") and hasattr(d, "rate") and flt(d.rate) < 0: frappe.throw( _( diff --git a/erpnext/controllers/stock_controller.py b/erpnext/controllers/stock_controller.py index cb23f0ab7f6..e791a2ea329 100644 --- a/erpnext/controllers/stock_controller.py +++ b/erpnext/controllers/stock_controller.py @@ -1379,9 +1379,7 @@ class StockController(AccountsController): force = True if force or future_sle_exists(args) or repost_required_for_queue(self): - item_based_reposting = cint( - frappe.db.get_single_value("Stock Reposting Settings", "item_based_reposting") - ) + item_based_reposting = frappe.get_settings("Stock Reposting Settings", "item_based_reposting") if item_based_reposting: create_item_wise_repost_entries( voucher_type=self.doctype, @@ -1673,7 +1671,7 @@ def is_reposting_pending(): def future_sle_exists(args, sl_entries=None, allow_force_reposting=True): from erpnext.stock.utils import get_combine_datetime - if allow_force_reposting and frappe.db.get_single_value( + if allow_force_reposting and frappe.get_settings( "Stock Reposting Settings", "do_reposting_for_each_stock_transaction" ): return True diff --git a/erpnext/projects/doctype/project/project.py b/erpnext/projects/doctype/project/project.py index 959b34f77a3..64781e0f212 100644 --- a/erpnext/projects/doctype/project/project.py +++ b/erpnext/projects/doctype/project/project.py @@ -680,7 +680,7 @@ def send_project_status_email_to_users(): def update_project_sales_billing(): - sales_update_frequency = frappe.db.get_single_value("Selling Settings", "sales_update_frequency") + sales_update_frequency = frappe.get_settings("Selling Settings", "sales_update_frequency") if sales_update_frequency == "Each Transaction": return elif sales_update_frequency == "Monthly" and frappe.utils.now_datetime().day != 1: diff --git a/erpnext/selling/doctype/quotation/quotation.py b/erpnext/selling/doctype/quotation/quotation.py index 0ad6bf6bf2a..17a2ff07617 100644 --- a/erpnext/selling/doctype/quotation/quotation.py +++ b/erpnext/selling/doctype/quotation/quotation.py @@ -167,7 +167,7 @@ class Quotation(SellingController): """ If permitted in settings and any item has 0 qty, the SO has unit price items. """ - if not frappe.db.get_single_value("Selling Settings", "allow_zero_qty_in_quotation"): + if not frappe.get_settings("Selling Settings", "allow_zero_qty_in_quotation"): return self.has_unit_price_items = any( diff --git a/erpnext/selling/doctype/sales_order/sales_order.py b/erpnext/selling/doctype/sales_order/sales_order.py index 26f6d7026c0..77a28db827b 100755 --- a/erpnext/selling/doctype/sales_order/sales_order.py +++ b/erpnext/selling/doctype/sales_order/sales_order.py @@ -253,7 +253,7 @@ class SalesOrder(SellingController): """ If permitted in settings and any item has 0 qty, the SO has unit price items. """ - if not frappe.db.get_single_value("Selling Settings", "allow_zero_qty_in_sales_order"): + if not frappe.get_settings("Selling Settings", "allow_zero_qty_in_sales_order"): return self.has_unit_price_items = any( @@ -279,9 +279,7 @@ class SalesOrder(SellingController): (self.po_no, self.name, self.customer), ) if so and so[0][0]: - if cint( - frappe.db.get_single_value("Selling Settings", "allow_against_multiple_purchase_orders") - ): + if cint(frappe.get_settings("Selling Settings", "allow_against_multiple_purchase_orders")): frappe.msgprint( _( "Warning: Sales Order {0} already exists against Customer's Purchase Order {1}" @@ -405,7 +403,7 @@ class SalesOrder(SellingController): } ) - if cint(frappe.db.get_single_value("Selling Settings", "maintain_same_sales_rate")): + if cint(frappe.get_settings("Selling Settings", "maintain_same_sales_rate")): self.validate_rate_with_reference_doc([["Quotation", "prevdoc_docname", "quotation_item"]]) def update_enquiry_status(self, prevdoc, flag): @@ -483,7 +481,7 @@ class SalesOrder(SellingController): update_coupon_code_count(self.coupon_code, "cancelled") def update_project(self): - if frappe.db.get_single_value("Selling Settings", "sales_update_frequency") != "Each Transaction": + if frappe.get_settings("Selling Settings", "sales_update_frequency") != "Each Transaction": return if self.project: @@ -815,7 +813,7 @@ def get_list_context(context=None): @frappe.whitelist() def is_enable_cutoff_date_on_bulk_delivery_note_creation(): - return frappe.db.get_single_value("Selling Settings", "enable_cutoff_date_on_bulk_delivery_note_creation") + return frappe.get_settings("Selling Settings", "enable_cutoff_date_on_bulk_delivery_note_creation") @frappe.whitelist() diff --git a/erpnext/selling/report/customer_credit_balance/customer_credit_balance.py b/erpnext/selling/report/customer_credit_balance/customer_credit_balance.py index d64c89c8f2b..24570391224 100644 --- a/erpnext/selling/report/customer_credit_balance/customer_credit_balance.py +++ b/erpnext/selling/report/customer_credit_balance/customer_credit_balance.py @@ -13,7 +13,7 @@ def execute(filters=None): if not filters: filters = {} # Check if customer id is according to naming series or customer name - customer_naming_type = frappe.db.get_single_value("Selling Settings", "cust_master_name") + customer_naming_type = frappe.get_settings("Selling Settings", "cust_master_name") columns = get_columns(customer_naming_type) data = [] diff --git a/erpnext/startup/boot.py b/erpnext/startup/boot.py index 2e7d5939815..a312d0d5499 100644 --- a/erpnext/startup/boot.py +++ b/erpnext/startup/boot.py @@ -15,9 +15,9 @@ def boot_session(bootinfo): if frappe.session["user"] != "Guest": update_page_info(bootinfo) - bootinfo.sysdefaults.territory = frappe.db.get_single_value("Selling Settings", "territory") - bootinfo.sysdefaults.customer_group = frappe.db.get_single_value("Selling Settings", "customer_group") - bootinfo.sysdefaults.use_server_side_reactivity = frappe.db.get_single_value( + bootinfo.sysdefaults.territory = frappe.get_settings("Selling Settings", "territory") + bootinfo.sysdefaults.customer_group = frappe.get_settings("Selling Settings", "customer_group") + bootinfo.sysdefaults.use_server_side_reactivity = frappe.get_settings( "Selling Settings", "use_server_side_reactivity" ) bootinfo.sysdefaults.allow_stale = cint(frappe.get_settings("Accounts Settings", "allow_stale")) @@ -30,7 +30,7 @@ def boot_session(bootinfo): ) bootinfo.sysdefaults.allow_sales_order_creation_for_expired_quotation = cint( - frappe.db.get_single_value("Selling Settings", "allow_sales_order_creation_for_expired_quotation") + frappe.get_settings("Selling Settings", "allow_sales_order_creation_for_expired_quotation") ) # if no company, show a dialog box to create a new company diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.py b/erpnext/stock/doctype/delivery_note/delivery_note.py index 31525de213f..1a81d34fad1 100644 --- a/erpnext/stock/doctype/delivery_note/delivery_note.py +++ b/erpnext/stock/doctype/delivery_note/delivery_note.py @@ -247,7 +247,7 @@ class DeliveryNote(SellingController): def so_required(self): """check in manage account if sales order required or not""" - if frappe.db.get_single_value("Selling Settings", "so_required") == "Yes": + if frappe.get_settings("Selling Settings", "so_required") == "Yes": for d in self.get("items"): if not d.against_sales_order: frappe.throw(_("Sales Order required for Item {0}").format(d.item_code)) @@ -314,7 +314,7 @@ class DeliveryNote(SellingController): ) if ( - cint(frappe.db.get_single_value("Selling Settings", "maintain_same_sales_rate")) + cint(frappe.get_settings("Selling Settings", "maintain_same_sales_rate")) and not self.is_return and not self.is_internal_customer ): diff --git a/erpnext/stock/doctype/item/item.py b/erpnext/stock/doctype/item/item.py index 3789514589a..a0decbd3a86 100644 --- a/erpnext/stock/doctype/item/item.py +++ b/erpnext/stock/doctype/item/item.py @@ -243,9 +243,9 @@ class Item(Document): def add_price(self, price_list=None): """Add a new price""" if not price_list: - price_list = frappe.db.get_single_value( - "Selling Settings", "selling_price_list" - ) or frappe.db.get_value("Price List", _("Standard Selling")) + price_list = frappe.get_settings("Selling Settings", "selling_price_list") or frappe.db.get_value( + "Price List", _("Standard Selling") + ) if price_list: item_price = frappe.get_doc( { diff --git a/erpnext/stock/doctype/packed_item/packed_item.py b/erpnext/stock/doctype/packed_item/packed_item.py index 2dc28b1f04b..b6702379590 100644 --- a/erpnext/stock/doctype/packed_item/packed_item.py +++ b/erpnext/stock/doctype/packed_item/packed_item.py @@ -69,7 +69,7 @@ def make_packing_list(doc): return parent_items_price, reset = {}, False - set_price_from_children = frappe.db.get_single_value("Selling Settings", "editable_bundle_item_rates") + set_price_from_children = frappe.get_settings("Selling Settings", "editable_bundle_item_rates") stale_packed_items_table = get_indexed_packed_items_table(doc) diff --git a/erpnext/stock/doctype/price_list/price_list.py b/erpnext/stock/doctype/price_list/price_list.py index 882c3f5c9cb..f4772c33fff 100644 --- a/erpnext/stock/doctype/price_list/price_list.py +++ b/erpnext/stock/doctype/price_list/price_list.py @@ -39,7 +39,7 @@ class PriceList(Document): def set_default_if_missing(self): if cint(self.selling): - if not frappe.db.get_single_value("Selling Settings", "selling_price_list"): + if not frappe.get_settings("Selling Settings", "selling_price_list"): frappe.set_value("Selling Settings", "Selling Settings", "selling_price_list", self.name) elif cint(self.buying): From bb693c0a4fcb4056528882710b959a61c96137c5 Mon Sep 17 00:00:00 2001 From: Ankush Menat Date: Fri, 6 Jun 2025 20:21:59 +0530 Subject: [PATCH 15/20] perf: Batch GLE/SLE rename commits (#47950) --- erpnext/accounts/doctype/gl_entry/gl_entry.py | 23 +++++++++++-------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/erpnext/accounts/doctype/gl_entry/gl_entry.py b/erpnext/accounts/doctype/gl_entry/gl_entry.py index 2243420f13c..89b184e89d0 100644 --- a/erpnext/accounts/doctype/gl_entry/gl_entry.py +++ b/erpnext/accounts/doctype/gl_entry/gl_entry.py @@ -7,7 +7,7 @@ from frappe import _ from frappe.model.document import Document from frappe.model.meta import get_field_precision from frappe.model.naming import set_name_from_naming_options -from frappe.utils import flt, fmt_money, now +from frappe.utils import create_batch, flt, fmt_money, now import erpnext from erpnext.accounts.doctype.accounting_dimension.accounting_dimension import ( @@ -451,12 +451,15 @@ def rename_gle_sle_docs(): def rename_temporarily_named_docs(doctype): """Rename temporarily named docs using autoname options""" docs_to_rename = frappe.get_all(doctype, {"to_rename": "1"}, order_by="creation", limit=50000) - for doc in docs_to_rename: - oldname = doc.name - set_name_from_naming_options(frappe.get_meta(doctype).autoname, doc) - newname = doc.name - frappe.db.sql( - f"UPDATE `tab{doctype}` SET name = %s, to_rename = 0, modified = %s where name = %s", - (newname, now(), oldname), - auto_commit=True, - ) + autoname = frappe.get_meta(doctype).autoname + + for batch in create_batch(docs_to_rename, 100): + for doc in batch: + oldname = doc.name + set_name_from_naming_options(autoname, doc) + newname = doc.name + frappe.db.sql( + f"UPDATE `tab{doctype}` SET name = %s, to_rename = 0, modified = %s where name = %s", + (newname, now(), oldname), + ) + frappe.db.commit() From 75872925a2e0fb784a8d74733c69c695bf6ac249 Mon Sep 17 00:00:00 2001 From: MochaMind Date: Sat, 7 Jun 2025 02:00:30 +0530 Subject: [PATCH 16/20] fix: sync translations from crowdin (#47881) Co-authored-by: Raffael Meyer <14891507+barredterra@users.noreply.github.com> --- erpnext/locale/fr.po | 634 ++++++++++++++++++++-------------------- erpnext/locale/sr_CS.po | 8 +- erpnext/locale/sv.po | 8 +- erpnext/locale/tr.po | 84 +++--- 4 files changed, 367 insertions(+), 367 deletions(-) diff --git a/erpnext/locale/fr.po b/erpnext/locale/fr.po index 14bb69846d7..8e63602f257 100644 --- a/erpnext/locale/fr.po +++ b/erpnext/locale/fr.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: frappe\n" "Report-Msgid-Bugs-To: hello@frappe.io\n" "POT-Creation-Date: 2025-06-01 09:36+0000\n" -"PO-Revision-Date: 2025-06-01 21:35\n" +"PO-Revision-Date: 2025-06-05 23:00\n" "Last-Translator: hello@frappe.io\n" "Language-Team: French\n" "MIME-Version: 1.0\n" @@ -38,16 +38,16 @@ msgstr " Nomenclature" #. Label of the istable (Check) field in DocType 'Inventory Dimension' #: erpnext/stock/doctype/inventory_dimension/inventory_dimension.json msgid " Is Child Table" -msgstr "" +msgstr " Est Table Enfant" #. Label of the is_subcontracted (Check) field in DocType 'Job Card' #: erpnext/manufacturing/doctype/job_card/job_card.json msgid " Is Subcontracted" -msgstr "" +msgstr " Est sous-traité" #: erpnext/public/js/bom_configurator/bom_configurator.bundle.js:174 msgid " Item" -msgstr "" +msgstr " Article" #: erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.py:147 #: erpnext/accounts/report/tax_withholding_details/tax_withholding_details.py:186 @@ -62,12 +62,12 @@ msgstr " Prix" #: erpnext/public/js/bom_configurator/bom_configurator.bundle.js:122 msgid " Raw Material" -msgstr "" +msgstr " Matières Premières" #. Label of the reserve_stock (Check) field in DocType 'Work Order' #: erpnext/manufacturing/doctype/work_order/work_order.json msgid " Reserve Stock" -msgstr "" +msgstr " Stock réservé" #. Label of the skip_material_transfer (Check) field in DocType 'BOM Operation' #: erpnext/manufacturing/doctype/bom_operation/bom_operation.json @@ -97,15 +97,15 @@ msgstr "'Est un Actif Immobilisé’ doit être coché car il existe une entrée #: erpnext/public/js/utils/serial_no_batch_selector.js:262 msgid "\"SN-01::10\" for \"SN-01\" to \"SN-10\"" -msgstr "" +msgstr "« SN-01::10 » pour « SN-01 » à « SN-10 »" #: erpnext/manufacturing/report/work_order_stock_report/work_order_stock_report.py:148 msgid "# In Stock" -msgstr "" +msgstr "# En stock" #: erpnext/manufacturing/report/work_order_stock_report/work_order_stock_report.py:141 msgid "# Req'd Items" -msgstr "" +msgstr "# Articles Requis" #. Label of the per_delivered (Percent) field in DocType 'Sales Order' #: erpnext/selling/doctype/sales_order/sales_order.json @@ -141,7 +141,7 @@ msgstr "% complété" #: erpnext/manufacturing/doctype/bom/bom.js:892 #, python-format msgid "% Finished Item Quantity" -msgstr "" +msgstr "% de l'Article fabriqué" #. Label of the per_installed (Percent) field in DocType 'Delivery Note' #: erpnext/stock/doctype/delivery_note/delivery_note.json @@ -151,7 +151,7 @@ msgstr "% installé" #: erpnext/stock/page/warehouse_capacity_summary/warehouse_capacity_summary.js:70 #: erpnext/stock/page/warehouse_capacity_summary/warehouse_capacity_summary_header.html:16 msgid "% Occupied" -msgstr "" +msgstr "% d'occupation" #: erpnext/accounts/report/item_wise_purchase_register/item_wise_purchase_register.py:285 #: erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.py:339 @@ -253,11 +253,11 @@ msgstr "'A un Numéro de Série' ne peut pas être 'Oui' pour un article non gé #: erpnext/stock/doctype/quality_inspection/quality_inspection.py:165 msgid "'Inspection Required before Delivery' has disabled for the item {0}, no need to create the QI" -msgstr "" +msgstr "L'option 'Inspection requise avant la livraison' est désactivée pour l'article {0}, il n'est pas nécessaire de créer l'inspection qualité" #: erpnext/stock/doctype/quality_inspection/quality_inspection.py:156 msgid "'Inspection Required before Purchase' has disabled for the item {0}, no need to create the QI" -msgstr "" +msgstr "L'option 'Inspection requise avant l'achat' est désactivée pour l'article {0}, il n'est pas nécessaire de créer l'inspection qualité." #: erpnext/stock/report/stock_ledger/stock_ledger.py:584 #: erpnext/stock/report/stock_ledger/stock_ledger.py:617 @@ -284,16 +284,16 @@ msgstr "'Mettre à Jour Le Stock’ ne peut pas être coché pour la vente d'act #: erpnext/accounts/doctype/bank_account/bank_account.py:65 msgid "'{0}' account is already used by {1}. Use another account." -msgstr "" +msgstr "Le compte « {0} » est déjà utilisé par {1}. Utilisez un autre compte." #: erpnext/accounts/doctype/pos_settings/pos_settings.py:37 msgid "'{0}' has been already added." -msgstr "" +msgstr "'{0}' a déjà été ajouté." #: erpnext/setup/doctype/company/company.py:208 #: erpnext/setup/doctype/company/company.py:219 msgid "'{0}' should be in company currency {1}." -msgstr "" +msgstr "« {0} » devrait être dans la devise de l'entreprise {1}." #: erpnext/stock/report/fifo_queue_vs_qty_after_transaction_comparison/fifo_queue_vs_qty_after_transaction_comparison.py:174 #: erpnext/stock/report/stock_ledger_invariant_check/stock_ledger_invariant_check.py:203 @@ -392,7 +392,7 @@ msgstr "* Sera calculé lors de la transaction." #: erpnext/accounts/doctype/process_statement_of_accounts/process_statement_of_accounts.html:95 #: erpnext/accounts/doctype/process_statement_of_accounts/process_statement_of_accounts_accounts_receivable.html:347 msgid "0 - 30 Days" -msgstr "" +msgstr "0 - 30 jours" #: erpnext/accounts/report/payment_period_based_on_invoice_date/payment_period_based_on_invoice_date.py:114 msgid "0-30" @@ -469,7 +469,7 @@ msgstr "3 Annuel" #: erpnext/accounts/doctype/process_statement_of_accounts/process_statement_of_accounts.html:96 #: erpnext/accounts/doctype/process_statement_of_accounts/process_statement_of_accounts_accounts_receivable.html:348 msgid "30 - 60 Days" -msgstr "" +msgstr "30 - 60 jours" #. Option for the 'Frequency' (Select) field in DocType 'Video Settings' #: erpnext/utilities/doctype/video_settings/video_settings.json @@ -478,11 +478,11 @@ msgstr "30 min" #: erpnext/accounts/report/payment_period_based_on_invoice_date/payment_period_based_on_invoice_date.py:115 msgid "30-60" -msgstr "" +msgstr "30-60" #: erpnext/manufacturing/report/work_order_summary/work_order_summary.py:110 msgid "30-60 Days" -msgstr "" +msgstr "30-60 jours" #. Option for the 'No of Employees' (Select) field in DocType 'Lead' #. Option for the 'No of Employees' (Select) field in DocType 'Opportunity' @@ -510,25 +510,25 @@ msgstr "6 heures" #: erpnext/accounts/doctype/process_statement_of_accounts/process_statement_of_accounts.html:97 #: erpnext/accounts/doctype/process_statement_of_accounts/process_statement_of_accounts_accounts_receivable.html:349 msgid "60 - 90 Days" -msgstr "" +msgstr "60 - 90 jours" #: erpnext/accounts/report/payment_period_based_on_invoice_date/payment_period_based_on_invoice_date.py:116 msgid "60-90" -msgstr "" +msgstr "60-90" #: erpnext/manufacturing/report/work_order_summary/work_order_summary.py:110 msgid "60-90 Days" -msgstr "" +msgstr "60-90 jours" #: erpnext/accounts/doctype/process_statement_of_accounts/process_statement_of_accounts.html:98 #: erpnext/accounts/doctype/process_statement_of_accounts/process_statement_of_accounts_accounts_receivable.html:350 msgid "90 - 120 Days" -msgstr "" +msgstr "90 - 120 jours" #: erpnext/accounts/report/payment_period_based_on_invoice_date/payment_period_based_on_invoice_date.py:117 #: erpnext/manufacturing/report/work_order_summary/work_order_summary.py:110 msgid "90 Above" -msgstr "" +msgstr "90 et plus" #: erpnext/crm/doctype/appointment_booking_settings/appointment_booking_settings.py:61 msgid "From Time cannot be later than To Time for {0}" @@ -1004,12 +1004,12 @@ msgstr "Numéro AWB" #. Name of a UOM #: erpnext/setup/setup_wizard/data/uom_data.json msgid "Abampere" -msgstr "" +msgstr "Abampère" #. Label of the abbr (Data) field in DocType 'Company' #: erpnext/setup/doctype/company/company.json msgid "Abbr" -msgstr "Abré" +msgstr "Abréviation" #. Label of the abbr (Data) field in DocType 'Item Attribute Value' #: erpnext/stock/doctype/item_attribute_value/item_attribute_value.json @@ -1048,7 +1048,7 @@ msgstr "Il reste environ {0} secondes" #: erpnext/accounts/doctype/process_statement_of_accounts/process_statement_of_accounts.html:99 #: erpnext/accounts/doctype/process_statement_of_accounts/process_statement_of_accounts_accounts_receivable.html:351 msgid "Above 120 Days" -msgstr "" +msgstr "Plus de 120 jours" #. Name of a role #: erpnext/setup/doctype/department/department.json @@ -1401,7 +1401,7 @@ msgstr "Le compte n'est pas défini pour le graphique du tableau de bord {0}" #: erpnext/assets/doctype/asset/asset.py:758 msgid "Account not Found" -msgstr "" +msgstr "Compte non trouvé" #: erpnext/accounts/doctype/account/account.py:390 msgid "Account with child nodes cannot be converted to ledger" @@ -1426,7 +1426,7 @@ msgstr "Un compte contenant une transaction ne peut pas être converti en grand #: erpnext/accounts/doctype/tax_withholding_category/tax_withholding_category.py:67 msgid "Account {0} added multiple times" -msgstr "" +msgstr "Compte {0} ajouté plusieurs fois" #: erpnext/setup/doctype/company/company.py:190 msgid "Account {0} does not belong to company: {1}" @@ -1510,7 +1510,7 @@ msgstr "Compte : {0} avec la devise : {1} ne peut pas être sélectionné" #: erpnext/setup/setup_wizard/data/designation.txt:1 msgid "Accountant" -msgstr "" +msgstr "Comptable" #. Group in Bank Account's connections #. Label of the section_break_19 (Section Break) field in DocType 'POS Profile' @@ -2226,12 +2226,12 @@ msgstr "Date d'Aquisition" #. Name of a UOM #: erpnext/setup/setup_wizard/data/uom_data.json msgid "Acre" -msgstr "" +msgstr "Acre" #. Name of a UOM #: erpnext/setup/setup_wizard/data/uom_data.json msgid "Acre (US)" -msgstr "" +msgstr "Acre (États-Unis)" #: erpnext/crm/doctype/lead/lead.js:41 #: erpnext/public/js/bank_reconciliation_tool/dialog_manager.js:175 @@ -2317,7 +2317,7 @@ msgstr "Action si le même taux n'est pas maintenu tout au long du cycle de vent #. Label of the action_on_new_invoice (Select) field in DocType 'POS Profile' #: erpnext/accounts/doctype/pos_profile/pos_profile.json msgid "Action on New Invoice" -msgstr "" +msgstr "Action sur la nouvelle facture" #. Label of the actions (Section Break) field in DocType 'Supplier Scorecard #. Scoring Standing' @@ -2454,7 +2454,7 @@ msgstr "Réel" #: erpnext/stock/report/incorrect_balance_qty_after_transaction/incorrect_balance_qty_after_transaction.py:125 msgid "Actual Balance Qty" -msgstr "" +msgstr "Quantité réelle du solde" #. Label of the actual_batch_qty (Float) field in DocType 'Packed Item' #: erpnext/stock/doctype/packed_item/packed_item.json @@ -2501,7 +2501,7 @@ msgstr "Heure de Fin Réelle" #: erpnext/accounts/report/budget_variance_report/budget_variance_report.py:381 msgid "Actual Expense" -msgstr "" +msgstr "Dépense réelle" #. Label of the actual_operating_cost (Currency) field in DocType 'Work Order' #. Label of the actual_operating_cost (Currency) field in DocType 'Work Order @@ -2554,11 +2554,11 @@ msgstr "Qté Réelle est obligatoire" #: erpnext/manufacturing/doctype/plant_floor/stock_summary_template.html:37 #: erpnext/stock/dashboard/item_dashboard_list.html:28 msgid "Actual Qty {0} / Waiting Qty {1}" -msgstr "" +msgstr "Quantité réelle {0} / Quantité en attente {1}" #: erpnext/manufacturing/doctype/production_plan/production_plan.js:164 msgid "Actual Qty: Quantity available in the warehouse." -msgstr "" +msgstr "Quantité réelle : quantité disponible dans l'entrepôt." #: erpnext/stock/report/item_shortage_report/item_shortage_report.py:95 msgid "Actual Quantity" @@ -2647,7 +2647,7 @@ msgstr "Ajouter des colonnes dans la devise de la transaction" #: erpnext/templates/pages/task_info.html:94 #: erpnext/templates/pages/task_info.html:96 msgid "Add Comment" -msgstr "" +msgstr "Ajouter un commentaire" #. Label of the add_corrective_operation_cost_in_finished_good_valuation #. (Check) field in DocType 'Manufacturing Settings' @@ -2704,7 +2704,7 @@ msgstr "Ajouter manuellement" #: erpnext/projects/doctype/task/task_tree.js:42 msgid "Add Multiple" -msgstr "" +msgstr "Ajout multiple" #: erpnext/projects/doctype/task/task_tree.js:49 msgid "Add Multiple Tasks" @@ -2922,7 +2922,7 @@ msgstr "Frais Supplémentaires" #. Label of the additional_data (Code) field in DocType 'Common Code' #: erpnext/edi/doctype/common_code/common_code.json msgid "Additional Data" -msgstr "" +msgstr "Données supplémentaires" #. Label of the additional_details (Section Break) field in DocType 'Vehicle' #: erpnext/setup/doctype/vehicle/vehicle.json @@ -3078,7 +3078,7 @@ msgstr "Information additionnelle" #: erpnext/selling/page/point_of_sale/pos_payment.js:84 msgid "Additional Information updated successfully." -msgstr "" +msgstr "Informations supplémentaires mises à jour avec succès." #. Label of the additional_notes (Text) field in DocType 'Quotation Item' #. Label of the additional_notes (Text) field in DocType 'Sales Order Item' @@ -3413,7 +3413,7 @@ msgstr "" #: erpnext/accounts/doctype/advance_taxes_and_charges/advance_taxes_and_charges.json #: erpnext/accounts/doctype/payment_entry/payment_entry.json msgid "Advance Taxes and Charges" -msgstr "" +msgstr "Impôts et taxes anticipés" #. Label of the advance_amount (Currency) field in DocType 'Sales Invoice #. Advance' @@ -3462,13 +3462,13 @@ msgstr "" #: erpnext/setup/setup_wizard/data/industry_type.txt:3 msgid "Aerospace" -msgstr "" +msgstr "Aéronautique" #. Label of the affected_transactions (Code) field in DocType 'Repost Item #. Valuation' #: erpnext/stock/doctype/repost_item_valuation/repost_item_valuation.json msgid "Affected Transactions" -msgstr "" +msgstr "Transactions affectées" #. Label of the against (Text) field in DocType 'GL Entry' #: erpnext/accounts/doctype/gl_entry/gl_entry.json @@ -3638,7 +3638,7 @@ msgstr "Age (jours)" #: erpnext/stock/report/stock_ageing/stock_ageing.py:218 msgid "Age ({0})" -msgstr "" +msgstr "Âge ({0})" #. Label of the ageing_based_on (Select) field in DocType 'Process Statement Of #. Accounts' @@ -3672,7 +3672,7 @@ msgstr "Ordre du jour" #: erpnext/setup/setup_wizard/data/sales_partner_type.txt:4 msgid "Agent" -msgstr "" +msgstr "Représentant" #. Label of the agent_busy_message (Data) field in DocType 'Incoming Call #. Settings' @@ -3693,7 +3693,7 @@ msgstr "Détails de l'agent" #. Schedule' #: erpnext/telephony/doctype/incoming_call_handling_schedule/incoming_call_handling_schedule.json msgid "Agent Group" -msgstr "" +msgstr "Groupe d'agents" #. Label of the agent_unavailable_message (Data) field in DocType 'Incoming #. Call Settings' @@ -3717,7 +3717,7 @@ msgstr "" #: erpnext/setup/setup_wizard/data/industry_type.txt:4 msgid "Agriculture" -msgstr "" +msgstr "Agriculture" #: erpnext/setup/setup_wizard/data/industry_type.txt:5 msgid "Airline" @@ -3727,7 +3727,7 @@ msgstr "" #. Statements' #: erpnext/accounts/doctype/bisect_accounting_statements/bisect_accounting_statements.json msgid "Algorithm" -msgstr "" +msgstr "Algorithme" #. Name of a role #. Option for the 'Hold Type' (Select) field in DocType 'Supplier' @@ -3758,7 +3758,7 @@ msgstr "Tous les comptes" #: erpnext/crm/doctype/opportunity/opportunity.json #: erpnext/crm/doctype/prospect/prospect.json msgid "All Activities" -msgstr "" +msgstr "Toutes les Activités" #. Label of the all_activities_html (HTML) field in DocType 'Lead' #. Label of the all_activities_html (HTML) field in DocType 'Opportunity' @@ -3767,7 +3767,7 @@ msgstr "" #: erpnext/crm/doctype/opportunity/opportunity.json #: erpnext/crm/doctype/prospect/prospect.json msgid "All Activities HTML" -msgstr "" +msgstr "Toutes les activités HTML" #: erpnext/manufacturing/doctype/bom/bom.py:303 msgid "All BOMs" @@ -3837,7 +3837,7 @@ msgstr "Tous les Groupes d'Articles" #: erpnext/selling/page/point_of_sale/pos_item_selector.js:25 msgid "All Items" -msgstr "" +msgstr "Tous les articles" #. Option for the 'Send To' (Select) field in DocType 'SMS Center' #: erpnext/selling/doctype/sms_center/sms_center.json @@ -3846,7 +3846,7 @@ msgstr "Toutes les pistes (Ouvertes)" #: erpnext/accounts/report/general_ledger/general_ledger.html:68 msgid "All Parties " -msgstr "" +msgstr "Tout les tiers" #. Option for the 'Send To' (Select) field in DocType 'SMS Center' #: erpnext/selling/doctype/sms_center/sms_center.json @@ -3861,7 +3861,7 @@ msgstr "Tous les Commerciaux" #. Description of a DocType #: erpnext/setup/doctype/sales_person/sales_person.json msgid "All Sales Transactions can be tagged against multiple Sales Persons so that you can set and monitor targets." -msgstr "" +msgstr "Toutes les transactions de vente peuvent être associées à plusieurs vendeurs afin que vous puissiez définir et surveiller les objectifs." #. Option for the 'Send To' (Select) field in DocType 'SMS Center' #: erpnext/selling/doctype/sms_center/sms_center.json @@ -3907,7 +3907,7 @@ msgstr "Toutes les communications, celle-ci et celles au dessus de celle-ci incl #: erpnext/manufacturing/doctype/production_plan/production_plan.py:913 msgid "All items are already requested" -msgstr "" +msgstr "Tous les articles sont déjà demandés" #: erpnext/stock/doctype/purchase_receipt/purchase_receipt.py:1326 msgid "All items have already been Invoiced/Returned" @@ -4017,7 +4017,7 @@ msgstr "" #: erpnext/public/js/templates/crm_activities.html:49 msgid "Allocated To:" -msgstr "" +msgstr "Affecté à:" #. Label of the allocated_amount (Currency) field in DocType 'Sales Invoice #. Advance' @@ -4089,7 +4089,7 @@ msgstr "Autoriser un article alternatif" #: erpnext/stock/doctype/item_alternative/item_alternative.py:65 msgid "Allow Alternative Item must be checked on Item {}" -msgstr "" +msgstr "L'option Autoriser l'article alternatif doit être cochée sur l'article {}" #. Label of the material_consumption (Check) field in DocType 'Manufacturing #. Settings' @@ -4218,13 +4218,13 @@ msgstr "Autoriser la création de factures d'achat sans Reçu d'Achat" #. 'Buying Settings' #: erpnext/buying/doctype/buying_settings/buying_settings.json msgid "Allow Purchase Order with Zero Quantity" -msgstr "" +msgstr "Autoriser les commandes d'achat avec une quantité à zéro" #. Label of the allow_zero_qty_in_quotation (Check) field in DocType 'Selling #. Settings' #: erpnext/selling/doctype/selling_settings/selling_settings.json msgid "Allow Quotation with Zero Quantity" -msgstr "" +msgstr "Autoriser les devis avec une quantité à zéro" #. Label of the allow_rename_attribute_value (Check) field in DocType 'Item #. Variant Settings' @@ -4237,7 +4237,7 @@ msgstr "Autoriser le renommage de la valeur de l'attribut" #. DocType 'Buying Settings' #: erpnext/buying/doctype/buying_settings/buying_settings.json msgid "Allow Request for Quotation with Zero Quantity" -msgstr "" +msgstr "Autoriser les devis avec une quantité à zéro" #. Label of the allow_resetting_service_level_agreement (Check) field in #. DocType 'Support Settings' @@ -4274,7 +4274,7 @@ msgstr "Autoriser la création de commandes client pour les devis expirés" #. Settings' #: erpnext/selling/doctype/selling_settings/selling_settings.json msgid "Allow Sales Order with Zero Quantity" -msgstr "" +msgstr "Autoriser les commandes client avec une quantité à zéro" #. Label of the allow_stale (Check) field in DocType 'Accounts Settings' #: erpnext/accounts/doctype/accounts_settings/accounts_settings.json @@ -4285,7 +4285,7 @@ msgstr "Autoriser les Taux de Change Existants" #. 'Buying Settings' #: erpnext/buying/doctype/buying_settings/buying_settings.json msgid "Allow Supplier Quotation with Zero Quantity" -msgstr "" +msgstr "Autoriser les devis fournisseurs avec une quantité à zéro" #. Label of the allow_uom_with_conversion_rate_defined_in_item (Check) field in #. DocType 'Stock Settings' @@ -4319,7 +4319,7 @@ msgstr "" #. Valuation' #: erpnext/stock/doctype/repost_item_valuation/repost_item_valuation.json msgid "Allow Zero Rate" -msgstr "" +msgstr "Autoriser le montant à zéro" #. Label of the allow_zero_valuation_rate (Check) field in DocType 'POS Invoice #. Item' @@ -4395,13 +4395,13 @@ msgstr "Autorisé" #. Name of a DocType #: erpnext/accounts/doctype/allowed_dimension/allowed_dimension.json msgid "Allowed Dimension" -msgstr "" +msgstr "Dimension autorisée" #. Label of the allowed_types (Table) field in DocType 'Repost Accounting #. Ledger Settings' #: erpnext/accounts/doctype/repost_accounting_ledger_settings/repost_accounting_ledger_settings.json msgid "Allowed Doctypes" -msgstr "" +msgstr "DocType autorisés" #. Group in Supplier's connections #. Group in Customer's connections @@ -4461,7 +4461,7 @@ msgstr "" #: erpnext/stock/doctype/pick_list/pick_list.py:967 msgid "Already Picked" -msgstr "" +msgstr "Déjà prélevé" #: erpnext/stock/doctype/item_alternative/item_alternative.py:81 msgid "Already record exists for the item {0}" @@ -4863,7 +4863,7 @@ msgstr "Modifié Depuis" #: erpnext/templates/form_grid/stock_entry_grid.html:11 #: erpnext/templates/pages/order.html:103 erpnext/templates/pages/rfq.html:46 msgid "Amount" -msgstr "" +msgstr "Montant" #: erpnext/regional/report/uae_vat_201/uae_vat_201.py:22 msgid "Amount (AED)" @@ -4955,7 +4955,7 @@ msgstr "" #: erpnext/accounts/print_format/sales_invoice_print/sales_invoice_print.html:119 msgid "Amount in Words" -msgstr "" +msgstr "Montant en lettres" #. Description of the 'Outstanding Amount' (Currency) field in DocType 'Payment #. Request' @@ -4970,12 +4970,12 @@ msgstr "" #: erpnext/accounts/doctype/process_statement_of_accounts/process_statement_of_accounts_accounts_receivable.html:72 msgid "Amount in {0}" -msgstr "" +msgstr "Montant en {0}" #: erpnext/buying/report/purchase_order_analysis/purchase_order_analysis.py:189 #: erpnext/selling/report/sales_order_analysis/sales_order_analysis.py:209 msgid "Amount to Bill" -msgstr "" +msgstr "Montant à facturer" #: erpnext/accounts/doctype/payment_entry/payment_entry.py:1330 msgid "Amount {0} {1} against {2} {3}" @@ -4996,27 +4996,27 @@ msgstr "Montant {0} {1} {2} {3}" #. Label of the amounts_section (Section Break) field in DocType 'GL Entry' #: erpnext/accounts/doctype/gl_entry/gl_entry.json msgid "Amounts" -msgstr "" +msgstr "Montants" #. Name of a UOM #: erpnext/setup/setup_wizard/data/uom_data.json msgid "Ampere" -msgstr "" +msgstr "Ampère" #. Name of a UOM #: erpnext/setup/setup_wizard/data/uom_data.json msgid "Ampere-Hour" -msgstr "" +msgstr "Ampère-heure" #. Name of a UOM #: erpnext/setup/setup_wizard/data/uom_data.json msgid "Ampere-Minute" -msgstr "" +msgstr "Ampère-Minute" #. Name of a UOM #: erpnext/setup/setup_wizard/data/uom_data.json msgid "Ampere-Second" -msgstr "" +msgstr "Ampère-Seconde" #: erpnext/controllers/trends.py:239 erpnext/controllers/trends.py:251 #: erpnext/controllers/trends.py:256 @@ -5047,7 +5047,7 @@ msgstr "" #: erpnext/setup/setup_wizard/data/designation.txt:4 msgid "Analyst" -msgstr "" +msgstr "Analyste" #. Label of the section_break_analytics (Section Break) field in DocType 'Lead' #. Label of the section_break_analytics (Section Break) field in DocType @@ -5250,12 +5250,12 @@ msgstr "" #: erpnext/stock/doctype/putaway_rule/putaway_rule.py:183 msgid "Applied putaway rules." -msgstr "" +msgstr "Règles d'entrée en stock appliquées." #. Label of the applies_to (Table) field in DocType 'Common Code' #: erpnext/edi/doctype/common_code/common_code.json msgid "Applies To" -msgstr "" +msgstr "S’applique à" #. Label of the apply_discount_on (Select) field in DocType 'POS Invoice' #. Label of the apply_discount_on (Select) field in DocType 'Purchase Invoice' @@ -5328,7 +5328,7 @@ msgstr "Appliquer Sur" #: erpnext/stock/doctype/purchase_receipt/purchase_receipt.json #: erpnext/stock/doctype/stock_entry/stock_entry.json msgid "Apply Putaway Rule" -msgstr "Appliquer la régle de routage d'entrepot" +msgstr "Appliquer la règle de routage d'entrée en stock" #. Label of the apply_recursion_over (Float) field in DocType 'Pricing Rule' #. Label of the apply_recursion_over (Float) field in DocType 'Promotional @@ -5365,7 +5365,7 @@ msgstr "Appliquer la règle sur autre" #. Level Agreement' #: erpnext/support/doctype/service_level_agreement/service_level_agreement.json msgid "Apply SLA for Resolution Time" -msgstr "" +msgstr "Appliquer l'accord de niveau de service (SLA) pour le délai de résolution" #. Label of the apply_tds (Check) field in DocType 'Purchase Invoice Item' #. Label of the apply_tds (Check) field in DocType 'Purchase Order Item' @@ -5389,7 +5389,7 @@ msgstr "Appliquer le montant de la retenue d'impôt" #. Label of the apply_tds (Check) field in DocType 'Journal Entry' #: erpnext/accounts/doctype/journal_entry/journal_entry.json msgid "Apply Tax Withholding Amount " -msgstr "" +msgstr "Appliquer le montant de la retenue d'impôt " #. Label of the apply_restriction_on_values (Check) field in DocType #. 'Accounting Dimension Filter' @@ -5406,7 +5406,7 @@ msgstr "" #. Label of the document_type (Link) field in DocType 'Inventory Dimension' #: erpnext/stock/doctype/inventory_dimension/inventory_dimension.json msgid "Apply to Document" -msgstr "" +msgstr "Appliquer au document" #. Name of a DocType #. Label of a Link in the CRM Workspace @@ -5489,7 +5489,7 @@ msgstr "" #. Name of a UOM #: erpnext/setup/setup_wizard/data/uom_data.json msgid "Are" -msgstr "" +msgstr "Are" #: erpnext/public/js/utils/demo.js:20 msgid "Are you sure you want to clear all demo data?" @@ -5505,7 +5505,7 @@ msgstr "" #: erpnext/accounts/doctype/subscription/subscription.js:75 msgid "Are you sure you want to restart this subscription?" -msgstr "" +msgstr "Êtes-vous sûr de vouloir redémarrer cet abonnement ?" #. Label of the area (Float) field in DocType 'Location' #. Name of a UOM @@ -5526,7 +5526,7 @@ msgstr "Quantité d'arrivée" #. Name of a UOM #: erpnext/setup/setup_wizard/data/uom_data.json msgid "Arshin" -msgstr "" +msgstr "Archine" #: erpnext/stock/report/serial_no_ledger/serial_no_ledger.js:57 #: erpnext/stock/report/stock_ageing/stock_ageing.js:16 @@ -5538,7 +5538,7 @@ msgstr "Comme à la date" #: erpnext/accounts/report/delivered_items_to_be_billed/delivered_items_to_be_billed.js:15 #: erpnext/accounts/report/received_items_to_be_billed/received_items_to_be_billed.js:15 msgid "As on Date" -msgstr "" +msgstr "En date du" #. Description of the 'Finished Good Quantity ' (Float) field in DocType 'Stock #. Entry' @@ -5766,7 +5766,7 @@ msgstr "Livre comptable d'actifs" #: erpnext/assets/report/fixed_asset_register/fixed_asset_register.py:411 msgid "Asset ID" -msgstr "" +msgstr "Identifiant de l'actif" #. Label of the asset_location (Link) field in DocType 'Purchase Invoice Item' #. Label of the asset_location (Link) field in DocType 'Purchase Receipt Item' @@ -5862,7 +5862,7 @@ msgstr "Société Propriétaire de l'Actif" #. Label of the asset_quantity (Int) field in DocType 'Asset' #: erpnext/assets/doctype/asset/asset.json msgid "Asset Quantity" -msgstr "" +msgstr "Quantité de l'actif" #. Option for the 'Account Type' (Select) field in DocType 'Account' #. Label of the asset_received_but_not_billed (Link) field in DocType 'Company' @@ -5951,7 +5951,7 @@ msgstr "Analyse de la valeur des actifs" #: erpnext/assets/doctype/asset/asset.py:208 msgid "Asset cancelled" -msgstr "" +msgstr "Actif annulé" #: erpnext/assets/doctype/asset/asset.py:587 msgid "Asset cannot be cancelled, as it is already {0}" @@ -5967,7 +5967,7 @@ msgstr "" #: erpnext/assets/doctype/asset/asset.py:220 msgid "Asset created" -msgstr "" +msgstr "Actif créé" #: erpnext/assets/doctype/asset_capitalization/asset_capitalization.py:590 msgid "Asset created after Asset Capitalization {0} was submitted" @@ -5979,7 +5979,7 @@ msgstr "" #: erpnext/assets/doctype/asset/asset.py:223 msgid "Asset deleted" -msgstr "" +msgstr "Actif supprimé" #: erpnext/assets/doctype/asset_movement/asset_movement.py:181 msgid "Asset issued to Employee {0}" @@ -6007,7 +6007,7 @@ msgstr "" #: erpnext/assets/doctype/asset/depreciation.py:437 msgid "Asset scrapped" -msgstr "" +msgstr "Actif mis au rebut" #: erpnext/assets/doctype/asset/depreciation.py:439 msgid "Asset scrapped via Journal Entry {0}" @@ -6016,19 +6016,19 @@ msgstr "Actif mis au rebut via Écriture de Journal {0}" #: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:1341 #: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:1344 msgid "Asset sold" -msgstr "" +msgstr "Actif vendu" #: erpnext/assets/doctype/asset/asset.py:195 msgid "Asset submitted" -msgstr "" +msgstr "Actif validé" #: erpnext/assets/doctype/asset_movement/asset_movement.py:174 msgid "Asset transferred to Location {0}" -msgstr "" +msgstr "Actif transféré à l'emplacement {0}" #: erpnext/assets/doctype/asset/asset.py:1288 msgid "Asset updated after being split into Asset {0}" -msgstr "" +msgstr "Actif mis à jour après avoir été divisé dans l'actif {0}" #: erpnext/assets/doctype/asset_repair/asset_repair.py:371 msgid "Asset updated due to Asset Repair {0} {1}." @@ -6044,7 +6044,7 @@ msgstr "L'actif {0} ne peut pas être mis au rebut, car il est déjà {1}" #: erpnext/assets/doctype/asset_capitalization/asset_capitalization.py:216 msgid "Asset {0} does not belong to Item {1}" -msgstr "" +msgstr "L'actif {0} n'appartient pas à l'article {1}" #: erpnext/assets/doctype/asset_movement/asset_movement.py:45 msgid "Asset {0} does not belong to company {1}" @@ -6061,7 +6061,7 @@ msgstr "L'élément {0} n'appartient pas à l'emplacement {1}" #: erpnext/assets/doctype/asset_capitalization/asset_capitalization.py:706 #: erpnext/assets/doctype/asset_capitalization/asset_capitalization.py:798 msgid "Asset {0} does not exist" -msgstr "" +msgstr "L'actif {0} n'existe pas" #: erpnext/assets/doctype/asset_capitalization/asset_capitalization.py:596 msgid "Asset {0} has been created. Please set the depreciation details if any and submit it." @@ -6115,7 +6115,7 @@ msgstr "" #: erpnext/manufacturing/doctype/job_card/job_card.js:153 msgid "Assign Job to Employee" -msgstr "" +msgstr "Attribuer un emploi à un salarié" #. Label of the assign_to_name (Read Only) field in DocType 'Asset Maintenance #. Log' @@ -6145,19 +6145,19 @@ msgstr "Affectation" #. Agreement' #: erpnext/support/doctype/service_level_agreement/service_level_agreement.json msgid "Assignment Conditions" -msgstr "" +msgstr "Conditions d'affectation" #: erpnext/setup/setup_wizard/data/designation.txt:5 msgid "Associate" -msgstr "" +msgstr "Associer" #: erpnext/stock/doctype/pick_list/pick_list.py:101 msgid "At Row #{0}: The picked quantity {1} for the item {2} is greater than available stock {3} for the batch {4} in the warehouse {5}. Please restock the item." -msgstr "" +msgstr "A la ligne #{0}: La quantité prélevée {1} pour l'article {2} est supérieure au stock disponible {3} pour le lot {4} dans l'entrepôt {5}." #: erpnext/stock/doctype/pick_list/pick_list.py:124 msgid "At Row #{0}: The picked quantity {1} for the item {2} is greater than available stock {3} in the warehouse {4}." -msgstr "" +msgstr "A la ligne #{0}: La quantité prélevée {1} pour l'article {2} est supérieure au stock disponible {3} dans l'entrepôt {4}." #: erpnext/accounts/doctype/exchange_rate_revaluation/exchange_rate_revaluation.py:84 msgid "At least one account with exchange gain or loss is required" @@ -6231,7 +6231,7 @@ msgstr "" #. Name of a UOM #: erpnext/setup/setup_wizard/data/uom_data.json msgid "Atmosphere" -msgstr "" +msgstr "Atmosphère" #. Description of the 'File to Rename' (Attach) field in DocType 'Rename Tool' #: erpnext/utilities/doctype/rename_tool/rename_tool.json @@ -6241,7 +6241,7 @@ msgstr "Attacher un fichier .csv avec deux colonnes, une pour l'ancien nom et un #: erpnext/public/js/utils/serial_no_batch_selector.js:244 #: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.js:73 msgid "Attach CSV File" -msgstr "" +msgstr "Joindre un fichier CSV" #. Label of the import_file (Attach) field in DocType 'Chart of Accounts #. Importer' @@ -6435,7 +6435,7 @@ msgstr "Demandes de Matériel Générées Automatiquement" #: erpnext/buying/doctype/buying_settings/buying_settings.json #: erpnext/selling/doctype/selling_settings/selling_settings.json msgid "Auto Name" -msgstr "Nom Auto" +msgstr "Identifiant Auto" #. Label of the auto_opt_in (Check) field in DocType 'Loyalty Program' #: erpnext/accounts/doctype/loyalty_program/loyalty_program.json @@ -6444,32 +6444,32 @@ msgstr "Adhésion automatique (pour tous les clients)" #: erpnext/accounts/doctype/bank_reconciliation_tool/bank_reconciliation_tool.js:66 msgid "Auto Reconcile" -msgstr "" +msgstr "Rapprochement automatique" #. Label of the auto_reconcile_payments (Check) field in DocType 'Accounts #. Settings' #: erpnext/accounts/doctype/accounts_settings/accounts_settings.json msgid "Auto Reconcile Payments" -msgstr "" +msgstr "Rapprochement automatique des paiements" #: erpnext/accounts/doctype/bank_reconciliation_tool/bank_reconciliation_tool.py:442 msgid "Auto Reconciliation" -msgstr "" +msgstr "Rapprochement automatique" #. Label of the auto_reconciliation_job_trigger (Int) field in DocType #. 'Accounts Settings' #: erpnext/accounts/doctype/accounts_settings/accounts_settings.json msgid "Auto Reconciliation Job Trigger" -msgstr "" +msgstr "Déclencheur de tâche de rapprochement automatique" #: erpnext/accounts/doctype/bank_reconciliation_tool/bank_reconciliation_tool.py:390 msgid "Auto Reconciliation has started in the background" -msgstr "" +msgstr "Le rapprochement automatique a commencé en arrière-plan" #: erpnext/accounts/doctype/process_payment_reconciliation/process_payment_reconciliation.py:147 #: erpnext/accounts/doctype/process_payment_reconciliation/process_payment_reconciliation.py:195 msgid "Auto Reconciliation of Payments has been disabled. Enable it through {0}" -msgstr "" +msgstr "Le rapprochement automatique des paiements a été désactivé. Activez-le via {0}" #. Label of the auto_repeat (Link) field in DocType 'Journal Entry' #. Label of the auto_repeat (Link) field in DocType 'Payment Entry' @@ -6518,7 +6518,7 @@ msgstr "Détail de la Répétition Automatique" #. Settings' #: erpnext/stock/doctype/stock_settings/stock_settings.json msgid "Auto Reserve Serial and Batch Nos" -msgstr "" +msgstr "Réserver automatiquement des numéros de série et de lot" #. Label of the auto_reserve_stock (Check) field in DocType 'Stock Settings' #: erpnext/stock/doctype/stock_settings/stock_settings.json @@ -6799,7 +6799,7 @@ msgstr "B +" #. Option for the 'Blood Group' (Select) field in DocType 'Employee' #: erpnext/setup/doctype/employee/employee.json msgid "B-" -msgstr "" +msgstr "B-" #. Option for the 'Algorithm' (Select) field in DocType 'Bisect Accounting #. Statements' @@ -6854,7 +6854,7 @@ msgstr "Nomenclature" #: erpnext/manufacturing/page/bom_comparison_tool/bom_comparison_tool.js:21 msgid "BOM 1" -msgstr "" +msgstr "Nomenclature 1" #: erpnext/manufacturing/doctype/bom/bom.py:1508 msgid "BOM 1 {0} and BOM 2 {1} should not be same" @@ -6862,7 +6862,7 @@ msgstr "La nomenclature 1 {0} et la nomenclature 2 {1} ne doivent pas être iden #: erpnext/manufacturing/page/bom_comparison_tool/bom_comparison_tool.js:38 msgid "BOM 2" -msgstr "" +msgstr "Nomenclature 2" #. Label of a Link in the Manufacturing Workspace #: erpnext/manufacturing/page/bom_comparison_tool/bom_comparison_tool.js:4 @@ -6873,7 +6873,7 @@ msgstr "Outil de comparaison de nomenclature" #. Label of the bom_created (Check) field in DocType 'BOM Creator Item' #: erpnext/manufacturing/doctype/bom_creator_item/bom_creator_item.json msgid "BOM Created" -msgstr "" +msgstr "Nomenclature créée" #. Label of the bom_creator (Link) field in DocType 'BOM' #. Name of a DocType @@ -6882,14 +6882,14 @@ msgstr "" #: erpnext/manufacturing/doctype/bom_creator/bom_creator.json #: erpnext/manufacturing/workspace/manufacturing/manufacturing.json msgid "BOM Creator" -msgstr "" +msgstr "Créateur de nomenclature" #. Label of the bom_creator_item (Data) field in DocType 'BOM' #. Name of a DocType #: erpnext/manufacturing/doctype/bom/bom.json #: erpnext/manufacturing/doctype/bom_creator_item/bom_creator_item.json msgid "BOM Creator Item" -msgstr "" +msgstr "Créateur de nomenclature d'article" #. Label of the bom_detail_no (Data) field in DocType 'Purchase Order Item #. Supplied' @@ -6924,7 +6924,7 @@ msgstr "ID de nomenclature" #. Label of the bom_info_section (Section Break) field in DocType 'Stock Entry' #: erpnext/stock/doctype/stock_entry/stock_entry.json msgid "BOM Info" -msgstr "" +msgstr "Informations sur la nomenclature" #. Name of a DocType #: erpnext/manufacturing/doctype/bom_item/bom_item.json @@ -6934,7 +6934,7 @@ msgstr "Article de la nomenclature" #: erpnext/manufacturing/report/bom_explorer/bom_explorer.py:60 #: erpnext/manufacturing/report/production_plan_summary/production_plan_summary.py:175 msgid "BOM Level" -msgstr "" +msgstr "Niveau de nomenclature" #. Label of the bom_no (Link) field in DocType 'BOM Item' #. Label of the bom_no (Link) field in DocType 'BOM Operation' @@ -6962,7 +6962,7 @@ msgstr "N° Nomenclature" #. Label of the bom_no (Link) field in DocType 'Work Order Operation' #: erpnext/manufacturing/doctype/work_order_operation/work_order_operation.json msgid "BOM No (For Semi-Finished Goods)" -msgstr "" +msgstr "Numéro de nomenclature (pour les produits semi-finis)" #. Description of the 'BOM No' (Link) field in DocType 'Stock Entry Detail' #: erpnext/stock/doctype/stock_entry_detail/stock_entry_detail.json @@ -7020,7 +7020,7 @@ msgstr "Rapport de Stock des nomenclatures" #. Label of the tab_2_tab (Tab Break) field in DocType 'BOM Creator' #: erpnext/manufacturing/doctype/bom_creator/bom_creator.json msgid "BOM Tree" -msgstr "" +msgstr "Arborescence de la nomenclature" #: erpnext/manufacturing/report/bom_stock_report/bom_stock_report.py:29 msgid "BOM UoM" @@ -7033,12 +7033,12 @@ msgstr "Mise à jour en lot des nomenclatures" #: erpnext/manufacturing/doctype/bom_update_tool/bom_update_tool.js:84 msgid "BOM Update Initiated" -msgstr "" +msgstr "Mise à jour de la nomenclature lancée" #. Name of a DocType #: erpnext/manufacturing/doctype/bom_update_log/bom_update_log.json msgid "BOM Update Log" -msgstr "" +msgstr "Journal de mise à jour de la nomenclature" #. Name of a DocType #. Label of a Link in the Manufacturing Workspace @@ -7083,7 +7083,7 @@ msgstr "Nomenclature et quantité de production sont nécessaires" #. 'Manufacturing Settings' #: erpnext/manufacturing/doctype/manufacturing_settings/manufacturing_settings.json msgid "BOM and Production" -msgstr "" +msgstr "Nomenclature et Production" #: erpnext/stock/doctype/material_request/material_request.js:347 #: erpnext/stock/doctype/stock_entry/stock_entry.js:683 @@ -7112,20 +7112,20 @@ msgstr "Nomenclature {0} doit être soumise" #: erpnext/manufacturing/doctype/bom/bom.py:723 msgid "BOM {0} not found for the item {1}" -msgstr "" +msgstr "La nomenclature {0} n'existe pas pour l'article {1}" #. Label of the boms_updated (Long Text) field in DocType 'BOM Update Batch' #: erpnext/manufacturing/doctype/bom_update_batch/bom_update_batch.json msgid "BOMs Updated" -msgstr "" +msgstr "Nomenclatures mises à jour" #: erpnext/manufacturing/doctype/bom_creator/bom_creator.py:267 msgid "BOMs created successfully" -msgstr "" +msgstr "Nomenclatures créées avec succès" #: erpnext/manufacturing/doctype/bom_creator/bom_creator.py:277 msgid "BOMs creation failed" -msgstr "" +msgstr "Échec de création des Nomenclatures" #: erpnext/manufacturing/doctype/bom_creator/bom_creator.py:224 msgid "BOMs creation has been enqueued, kindly check the status after some time" @@ -7179,7 +7179,7 @@ msgstr "Solde" #: erpnext/accounts/doctype/process_statement_of_accounts/process_statement_of_accounts.html:41 msgid "Balance (Dr - Cr)" -msgstr "" +msgstr "Solde (Debit - Crédit)" #: erpnext/accounts/report/general_ledger/general_ledger.py:663 msgid "Balance ({0})" @@ -7478,7 +7478,7 @@ msgstr "Outil de réconcialiation d'écritures bancaires" #. Name of a DocType #: erpnext/accounts/doctype/bank_statement_import/bank_statement_import.json msgid "Bank Statement Import" -msgstr "" +msgstr "Importation de relevés bancaires" #: erpnext/accounts/report/bank_reconciliation_statement/bank_reconciliation_statement.py:40 msgid "Bank Statement balance as per General Ledger" @@ -7504,23 +7504,23 @@ msgstr "Paiements bancaires" #: erpnext/public/js/bank_reconciliation_tool/dialog_manager.js:493 msgid "Bank Transaction {0} Matched" -msgstr "" +msgstr "Transaction bancaire {0} correspondante" #: erpnext/public/js/bank_reconciliation_tool/dialog_manager.js:541 msgid "Bank Transaction {0} added as Journal Entry" -msgstr "" +msgstr "La transaction bancaire {0} a été ajoutée en tant qu'écriture de journaux" #: erpnext/public/js/bank_reconciliation_tool/dialog_manager.js:516 msgid "Bank Transaction {0} added as Payment Entry" -msgstr "" +msgstr "La transaction bancaire {0} a été ajoutée en tant qu'entrée de paiement" #: erpnext/accounts/doctype/bank_transaction/bank_transaction.py:143 msgid "Bank Transaction {0} is already fully reconciled" -msgstr "" +msgstr "La transaction bancaire {0} est déjà entièrement réconciliée" #: erpnext/public/js/bank_reconciliation_tool/dialog_manager.js:561 msgid "Bank Transaction {0} updated" -msgstr "" +msgstr "Transaction bancaire {0} mise à jour" #: erpnext/setup/setup_wizard/operations/install_fixtures.py:546 msgid "Bank account cannot be named as {0}" @@ -7542,7 +7542,7 @@ msgstr "Erreur de création de transaction bancaire" #. Reconciliation' #: erpnext/accounts/doctype/process_payment_reconciliation/process_payment_reconciliation.json msgid "Bank/Cash Account" -msgstr "" +msgstr "Compte bancaire/espèces" #: erpnext/accounts/doctype/process_payment_reconciliation/process_payment_reconciliation.py:57 msgid "Bank/Cash Account {0} doesn't belong to company {1}" @@ -7559,7 +7559,7 @@ msgstr "Banque" #. Name of a UOM #: erpnext/setup/setup_wizard/data/uom_data.json msgid "Bar" -msgstr "" +msgstr "Bar" #. Label of the barcode (Data) field in DocType 'POS Invoice Item' #. Label of the barcode (Data) field in DocType 'Sales Invoice Item' @@ -7603,22 +7603,22 @@ msgstr "Codes-barres" #. Name of a UOM #: erpnext/setup/setup_wizard/data/uom_data.json msgid "Barleycorn" -msgstr "" +msgstr "Barleycorn" #. Name of a UOM #: erpnext/setup/setup_wizard/data/uom_data.json msgid "Barrel (Oil)" -msgstr "" +msgstr "Baril (de pétrole)" #. Name of a UOM #: erpnext/setup/setup_wizard/data/uom_data.json msgid "Barrel(Beer)" -msgstr "" +msgstr "Fut (bière)" #. Label of the base_amount (Currency) field in DocType 'BOM Creator Item' #: erpnext/manufacturing/doctype/bom_creator_item/bom_creator_item.json msgid "Base Amount" -msgstr "" +msgstr "Montant de base" #. Label of the base_amount (Currency) field in DocType 'Sales Invoice Payment' #: erpnext/accounts/doctype/sales_invoice_payment/sales_invoice_payment.json @@ -7635,7 +7635,7 @@ msgstr "Montant de Base à Rendre (Devise de la Société)" #. Label of the base_cost_per_unit (Float) field in DocType 'BOM Operation' #: erpnext/manufacturing/doctype/bom_operation/bom_operation.json msgid "Base Cost Per Unit" -msgstr "" +msgstr "Coût de base par unité" #. Label of the base_hour_rate (Currency) field in DocType 'BOM Operation' #: erpnext/manufacturing/doctype/bom_operation/bom_operation.json @@ -7645,7 +7645,7 @@ msgstr "Taux Horaire de Base (Devise de la Société)" #. Label of the base_rate (Currency) field in DocType 'BOM Creator Item' #: erpnext/manufacturing/doctype/bom_creator_item/bom_creator_item.json msgid "Base Rate" -msgstr "" +msgstr "Cout de base" #. Label of the base_tax_withholding_net_total (Currency) field in DocType #. 'Purchase Invoice' @@ -7657,11 +7657,11 @@ msgstr "" #: erpnext/buying/doctype/purchase_order/purchase_order.json #: erpnext/stock/doctype/purchase_receipt/purchase_receipt.json msgid "Base Tax Withholding Net Total" -msgstr "" +msgstr "Impôt retenu à la source sur le total net" #: erpnext/accounts/report/tax_withholding_details/tax_withholding_details.py:241 msgid "Base Total" -msgstr "" +msgstr "Total Net" #. Label of the base_total_billable_amount (Currency) field in DocType #. 'Timesheet' @@ -7794,7 +7794,7 @@ msgstr "Détails du lot" #: erpnext/stock/doctype/batch/batch.py:197 msgid "Batch Expiry Date" -msgstr "" +msgstr "Date d'expiration du lot" #. Label of the batch_id (Data) field in DocType 'Batch' #: erpnext/stock/doctype/batch/batch.json @@ -7873,11 +7873,11 @@ msgstr "N° du Lot" #: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:868 msgid "Batch No is mandatory" -msgstr "" +msgstr "Le numéro de lot est obligatoire" #: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:2630 msgid "Batch No {0} does not exists" -msgstr "" +msgstr "Le lot n° {0} n'existe pas" #: erpnext/stock/utils.py:632 msgid "Batch No {0} is linked with Item {1} which has serial no. Please scan serial no instead." @@ -7890,7 +7890,7 @@ msgstr "" #. Label of the batch_no (Int) field in DocType 'BOM Update Batch' #: erpnext/manufacturing/doctype/bom_update_batch/bom_update_batch.json msgid "Batch No." -msgstr "" +msgstr "N° du Lot." #: erpnext/public/js/utils/serial_no_batch_selector.js:16 #: erpnext/public/js/utils/serial_no_batch_selector.js:190 @@ -7900,11 +7900,11 @@ msgstr "Numéros de lots" #: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:1422 msgid "Batch Nos are created successfully" -msgstr "" +msgstr "Les numéros de lot sont créés avec succès" #: erpnext/controllers/sales_and_purchase_return.py:1001 msgid "Batch Not Available for Return" -msgstr "" +msgstr "Lot non disponible pour le retour" #. Label of the batch_number_series (Data) field in DocType 'Item' #: erpnext/stock/doctype/item/item.json @@ -7913,7 +7913,7 @@ msgstr "Série de numéros de lots" #: erpnext/stock/report/serial_and_batch_summary/serial_and_batch_summary.py:153 msgid "Batch Qty" -msgstr "" +msgstr "Qté du lot" #. Label of the batch_qty (Float) field in DocType 'Batch' #: erpnext/stock/doctype/batch/batch.json @@ -7949,7 +7949,7 @@ msgstr "" #: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:258 msgid "Batch {0} and Warehouse" -msgstr "" +msgstr "Lot {0} et entrepôt" #: erpnext/controllers/sales_and_purchase_return.py:1000 msgid "Batch {0} is not available in warehouse {1}" @@ -7986,13 +7986,13 @@ msgstr "Avant la réconciliation" #. Label of the start (Int) field in DocType 'Task' #: erpnext/projects/doctype/task/task.json msgid "Begin On (Days)" -msgstr "Commencer sur (jours)" +msgstr "Commencer le (jours)" #. Option for the 'Generate Invoice At' (Select) field in DocType #. 'Subscription' #: erpnext/accounts/doctype/subscription/subscription.json msgid "Beginning of the current subscription period" -msgstr "" +msgstr "Début de la période d'abonnement en cours" #: erpnext/accounts/doctype/subscription/subscription.py:320 msgid "Below Subscription Plans are of different currency to the party default billing currency/Company currency: {0}" @@ -8063,7 +8063,7 @@ msgstr "Mnt Facturé" #. Name of a report #: erpnext/accounts/report/billed_items_to_be_received/billed_items_to_be_received.json msgid "Billed Items To Be Received" -msgstr "" +msgstr "Articles facturés à recevoir" #: erpnext/buying/report/purchase_order_analysis/purchase_order_analysis.py:261 #: erpnext/selling/report/sales_order_analysis/sales_order_analysis.py:276 @@ -8367,7 +8367,7 @@ msgstr "Groupe Sanguin" #: erpnext/buying/doctype/supplier_scorecard_standing/supplier_scorecard_standing.json #: erpnext/setup/setup_wizard/operations/install_fixtures.py:267 msgid "Blue" -msgstr "" +msgstr "Bleue" #. Label of the body (Text Editor) field in DocType 'Process Statement Of #. Accounts' @@ -8437,7 +8437,7 @@ msgstr "" #: erpnext/www/book_appointment/index.html:15 msgid "Book an appointment" -msgstr "" +msgstr "Prendre rendez-vous" #. Option for the 'Status' (Select) field in DocType 'Shipment' #: erpnext/stock/doctype/shipment/shipment.json @@ -8658,7 +8658,7 @@ msgstr "" #: erpnext/accounts/report/budget_variance_report/budget_variance_report.py:380 #: erpnext/accounts/workspace/accounting/accounting.json msgid "Budget" -msgstr "" +msgstr "Budget" #. Name of a DocType #: erpnext/accounts/doctype/budget_account/budget_account.json @@ -8691,7 +8691,7 @@ msgstr "Détail du budget" #: erpnext/controllers/budget_controller.py:286 #: erpnext/controllers/budget_controller.py:289 msgid "Budget Exceeded" -msgstr "" +msgstr "Budget dépassé" #: erpnext/accounts/doctype/cost_center/cost_center_tree.js:61 msgid "Budget List" @@ -8715,7 +8715,7 @@ msgstr "Budget ne peut pas être affecté pour {0}, car ce n’est pas un compte #: erpnext/accounts/doctype/fiscal_year/fiscal_year_dashboard.py:8 msgid "Budgets" -msgstr "" +msgstr "Budgets" #. Option for the 'Data Fetch Method' (Select) field in DocType 'Accounts #. Settings' @@ -8856,7 +8856,7 @@ msgstr "Paramètres d'Achat" #. Label of the buying_and_selling_tab (Tab Break) field in DocType 'Company' #: erpnext/setup/doctype/company/company.json msgid "Buying and Selling" -msgstr "" +msgstr "L'achat et la vente" #: erpnext/accounts/doctype/pricing_rule/pricing_rule.py:219 msgid "Buying must be checked, if Applicable For is selected as {0}" @@ -8909,7 +8909,7 @@ msgstr "" #. Label of a Card Break in the Home Workspace #: erpnext/crm/workspace/crm/crm.json erpnext/setup/workspace/home/home.json msgid "CRM" -msgstr "" +msgstr "CRM" #. Name of a DocType #: erpnext/crm/doctype/crm_note/crm_note.json @@ -8938,17 +8938,17 @@ msgstr "" #. Name of a UOM #: erpnext/setup/setup_wizard/data/uom_data.json msgid "Cable Length" -msgstr "" +msgstr "Longueur de câble" #. Name of a UOM #: erpnext/setup/setup_wizard/data/uom_data.json msgid "Cable Length (UK)" -msgstr "" +msgstr "Longueur du câble (UK)" #. Name of a UOM #: erpnext/setup/setup_wizard/data/uom_data.json msgid "Cable Length (US)" -msgstr "" +msgstr "Longueur du câble (US)" #: erpnext/accounts/report/accounts_payable/accounts_payable.js:65 #: erpnext/accounts/report/accounts_receivable/accounts_receivable.js:94 @@ -9151,7 +9151,7 @@ msgstr "" #: erpnext/setup/setup_wizard/data/marketing_source.txt:9 #: erpnext/stock/doctype/delivery_note/delivery_note.json msgid "Campaign" -msgstr "" +msgstr "Campagne" #. Name of a report #. Label of a Link in the CRM Workspace @@ -9393,7 +9393,7 @@ msgstr "" #: erpnext/stock/doctype/item/item.py:644 #: erpnext/stock/doctype/item/item.py:658 msgid "Cannot Merge" -msgstr "" +msgstr "Impossible de fusionner" #: erpnext/stock/doctype/delivery_trip/delivery_trip.js:123 msgid "Cannot Optimize Route as Driver Address is Missing." @@ -9490,7 +9490,7 @@ msgstr "" #: erpnext/selling/doctype/sales_order/sales_order.py:1722 #: erpnext/stock/doctype/pick_list/pick_list.py:182 msgid "Cannot create a pick list for Sales Order {0} because it has reserved stock. Please unreserve the stock in order to create a pick list." -msgstr "" +msgstr "Impossible de créer une liste de prélèvement pour la Commande client {0} car il y a du stock réservé. Veuillez annuler la réservation de stock pour créer une liste de prélèvement." #: erpnext/accounts/general_ledger.py:147 msgid "Cannot create accounting entries against disabled accounts: {0}" @@ -9552,7 +9552,7 @@ msgstr "Impossible de produire plus d'Article {0} que la quantité {1} du de la #: erpnext/manufacturing/doctype/work_order/work_order.py:1133 msgid "Cannot produce more item for {0}" -msgstr "" +msgstr "Impossible de produire plus d'articles pour {0}" #: erpnext/manufacturing/doctype/work_order/work_order.py:1137 msgid "Cannot produce more than {0} items for {1}" @@ -9646,11 +9646,11 @@ msgstr "Planification de Capacité Pendant (Jours)" #. Label of the stock_capacity (Float) field in DocType 'Putaway Rule' #: erpnext/stock/doctype/putaway_rule/putaway_rule.json msgid "Capacity in Stock UOM" -msgstr "" +msgstr "Capacité dans l'unité de stockage" #: erpnext/stock/doctype/putaway_rule/putaway_rule.py:85 msgid "Capacity must be greater than 0" -msgstr "" +msgstr "Capacité doit être plus grande que 0" #: erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py:26 #: erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts_with_account_number.py:39 @@ -9701,7 +9701,7 @@ msgstr "" #. Name of a UOM #: erpnext/setup/setup_wizard/data/uom_data.json msgid "Carat" -msgstr "" +msgstr "Carat" #. Title of an incoterm #: erpnext/setup/doctype/incoterm/incoterms.csv:6 @@ -9716,7 +9716,7 @@ msgstr "" #. Label of the carrier (Data) field in DocType 'Shipment' #: erpnext/stock/doctype/shipment/shipment.json msgid "Carrier" -msgstr "" +msgstr "Transporteur" #. Label of the carrier_service (Data) field in DocType 'Shipment' #: erpnext/stock/doctype/shipment/shipment.json @@ -9820,12 +9820,12 @@ msgstr "Attraper tout" #. Accounts' #: erpnext/accounts/doctype/process_statement_of_accounts/process_statement_of_accounts.json msgid "Categorize By" -msgstr "" +msgstr "Catégoriser par" #: erpnext/accounts/report/general_ledger/general_ledger.js:116 #: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.js:80 msgid "Categorize by" -msgstr "" +msgstr "Catégoriser par" #: erpnext/accounts/report/general_ledger/general_ledger.js:129 msgid "Categorize by Account" @@ -9833,7 +9833,7 @@ msgstr "" #: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.js:84 msgid "Categorize by Item" -msgstr "" +msgstr "Catégoriser par article" #: erpnext/accounts/report/general_ledger/general_ledger.js:133 msgid "Categorize by Party" @@ -9898,7 +9898,7 @@ msgstr "Numéro de téléphone portable" #. Name of a UOM #: erpnext/setup/setup_wizard/data/uom_data.json msgid "Celsius" -msgstr "" +msgstr "Celsius" #. Name of a UOM #: erpnext/setup/setup_wizard/data/uom_data.json @@ -9918,12 +9918,12 @@ msgstr "" #. Name of a UOM #: erpnext/setup/setup_wizard/data/uom_data.json msgid "Centilitre" -msgstr "" +msgstr "Centilitre" #. Name of a UOM #: erpnext/setup/setup_wizard/data/uom_data.json msgid "Centimeter" -msgstr "" +msgstr "Centimètre" #. Label of the certificate_attachement (Attach) field in DocType 'Asset #. Maintenance Log' @@ -10054,7 +10054,7 @@ msgstr "Graphique" #. Label of the tab_break_dpet (Tab Break) field in DocType 'Accounts Settings' #: erpnext/accounts/doctype/accounts_settings/accounts_settings.json msgid "Chart Of Accounts" -msgstr "" +msgstr "Plan Comptable" #. Label of the chart_of_accounts (Select) field in DocType 'Company' #: erpnext/setup/doctype/company/company.json @@ -10234,7 +10234,7 @@ msgstr "Chèques et Dépôts incorrectement compensés" #: erpnext/setup/setup_wizard/data/designation.txt:9 msgid "Chief Executive Officer" -msgstr "" +msgstr "Président.e Directeur.ice Général" #: erpnext/setup/setup_wizard/data/designation.txt:10 msgid "Chief Financial Officer" @@ -10317,7 +10317,7 @@ msgstr "" #. Deletion Record' #: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.json msgid "Clear Notifications" -msgstr "" +msgstr "Effacer les notifications" #. Label of the clear_table (Button) field in DocType 'Holiday List' #: erpnext/setup/doctype/holiday_list/holiday_list.json @@ -10386,7 +10386,7 @@ msgstr "" #. Option for the 'Lead Type' (Select) field in DocType 'Lead' #: erpnext/crm/doctype/lead/lead.json msgid "Client" -msgstr "" +msgstr "Client" #: erpnext/buying/doctype/purchase_order/purchase_order.js:374 #: erpnext/buying/doctype/purchase_order/purchase_order_list.js:54 @@ -10559,7 +10559,7 @@ msgstr "" #: erpnext/edi/doctype/code_list/code_list_import.js:172 #: erpnext/setup/doctype/incoterm/incoterm.json msgid "Code" -msgstr "" +msgstr "Code" #. Name of a DocType #. Label of the code_list (Link) field in DocType 'Common Code' @@ -10626,7 +10626,7 @@ msgstr "Colonne dans le fichier bancaire" #: erpnext/accounts/doctype/bank_statement_import/bank_statement_import.js:412 msgid "Column {0}" -msgstr "" +msgstr "Colonne {0}" #: erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.py:52 msgid "Columns are not according to template. Please compare the uploaded file with standard template" @@ -10665,7 +10665,7 @@ msgstr "" #: erpnext/selling/report/sales_partner_transaction_summary/sales_partner_transaction_summary.py:83 #: erpnext/stock/doctype/delivery_note/delivery_note.json msgid "Commission" -msgstr "" +msgstr "Commission" #. Label of the default_commission_rate (Float) field in DocType 'Customer' #. Label of the commission_rate (Float) field in DocType 'Sales Order' @@ -10684,7 +10684,7 @@ msgstr "Taux de Commission" #: erpnext/selling/report/sales_partner_transaction_summary/sales_partner_transaction_summary.py:78 #: erpnext/selling/report/sales_person_commission_summary/sales_person_commission_summary.py:82 msgid "Commission Rate %" -msgstr "" +msgstr "Taux de Commission %" #. Label of the commission_rate (Float) field in DocType 'POS Invoice' #. Label of the commission_rate (Float) field in DocType 'Sales Invoice' @@ -10693,7 +10693,7 @@ msgstr "" #: erpnext/accounts/doctype/sales_invoice/sales_invoice.json #: erpnext/stock/doctype/delivery_note/delivery_note.json msgid "Commission Rate (%)" -msgstr "" +msgstr "Taux de Commission (%)" #: erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py:55 #: erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts_with_account_number.py:80 @@ -11338,7 +11338,7 @@ msgstr "Le champ de l'entreprise est obligatoire" #: erpnext/accounts/report/invalid_ledger_entries/invalid_ledger_entries.py:77 msgid "Company is mandatory" -msgstr "" +msgstr "L'entreprise est obligatoire" #: erpnext/accounts/doctype/bank_account/bank_account.py:73 msgid "Company is mandatory for company account" @@ -11540,7 +11540,7 @@ msgstr "Effectué par" #. Label of the completed_on (Date) field in DocType 'Task' #: erpnext/projects/doctype/task/task.json msgid "Completed On" -msgstr "" +msgstr "Terminé le" #: erpnext/projects/doctype/task/task.py:173 msgid "Completed On cannot be greater than Today" @@ -11574,7 +11574,7 @@ msgstr "Quantité terminée" #: erpnext/projects/report/project_summary/project_summary.py:136 #: erpnext/public/js/templates/crm_activities.html:64 msgid "Completed Tasks" -msgstr "" +msgstr "Tâches terminées" #. Label of the completed_time (Data) field in DocType 'Job Card Operation' #: erpnext/manufacturing/doctype/job_card_operation/job_card_operation.json @@ -11633,7 +11633,7 @@ msgstr "Ordinateur" #: erpnext/accounts/doctype/pricing_rule/pricing_rule.json #: erpnext/support/doctype/service_level_agreement/service_level_agreement.json msgid "Condition" -msgstr "Conditions" +msgstr "Condition" #. Label of the condition (Code) field in DocType 'Inventory Dimension' #: erpnext/stock/doctype/inventory_dimension/inventory_dimension.json @@ -11661,7 +11661,7 @@ msgstr "Des conditions seront appliquées sur tous les éléments sélectionnés #: erpnext/accounts/doctype/pos_profile/pos_profile.json #: erpnext/manufacturing/doctype/work_order/work_order.json msgid "Configuration" -msgstr "" +msgstr "Paramétrage" #: erpnext/public/js/bom_configurator/bom_configurator.bundle.js:56 msgid "Configure Product Assembly" @@ -11728,7 +11728,7 @@ msgstr "Date de Confirmation" #: erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.json #: erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.json msgid "Connections" -msgstr "" +msgstr "Connexions" #: erpnext/accounts/report/general_ledger/general_ledger.js:175 msgid "Consider Accounting Dimensions" @@ -11822,7 +11822,7 @@ msgstr "Facture de vente consolidée" #: erpnext/crm/doctype/lead/lead.json #: erpnext/setup/setup_wizard/data/designation.txt:8 msgid "Consultant" -msgstr "" +msgstr "Consultant" #: erpnext/setup/setup_wizard/data/industry_type.txt:14 msgid "Consulting" @@ -11903,7 +11903,7 @@ msgstr "" #. Consumed Item' #: erpnext/assets/doctype/asset_repair_consumed_item/asset_repair_consumed_item.json msgid "Consumed Quantity" -msgstr "" +msgstr "Quantité consommée" #. Label of the section_break_16 (Section Break) field in DocType 'Asset #. Capitalization' @@ -11998,7 +11998,7 @@ msgstr "" #: erpnext/support/doctype/issue/issue.json #: erpnext/support/doctype/warranty_claim/warranty_claim.json msgid "Contact" -msgstr "" +msgstr "Contact" #. Label of the contact_desc (HTML) field in DocType 'Sales Partner' #: erpnext/setup/doctype/sales_partner/sales_partner.json @@ -12007,7 +12007,7 @@ msgstr "Desc. du Contact" #: erpnext/selling/page/point_of_sale/pos_item_cart.js:891 msgid "Contact Details" -msgstr "Coordonnées" +msgstr "Coordonnées du contact" #. Label of the contact_email (Data) field in DocType 'Dunning' #. Label of the contact_email (Data) field in DocType 'POS Invoice' @@ -12177,7 +12177,7 @@ msgstr "Contact: " #. Label of the contact_info (Tab Break) field in DocType 'Opportunity' #: erpnext/crm/doctype/opportunity/opportunity.json msgid "Contacts" -msgstr "" +msgstr "Contacts" #. Label of the utm_content (Data) field in DocType 'Sales Invoice' #. Label of the utm_content (Data) field in DocType 'Lead' @@ -12399,7 +12399,7 @@ msgstr "Convertir en groupe" #: erpnext/stock/doctype/warehouse/warehouse.js:53 msgctxt "Warehouse" msgid "Convert to Group" -msgstr "Convertir en groupe" +msgstr "Convertir en parent" #: erpnext/stock/doctype/stock_reposting_settings/stock_reposting_settings.js:10 msgid "Convert to Item Based Reposting" @@ -12454,20 +12454,20 @@ msgstr "Action corrective" #: erpnext/manufacturing/doctype/job_card/job_card.js:391 msgid "Corrective Job Card" -msgstr "" +msgstr "Carte de travail corrective" #. Label of the corrective_operation_section (Tab Break) field in DocType 'Job #. Card' #: erpnext/manufacturing/doctype/job_card/job_card.js:398 #: erpnext/manufacturing/doctype/job_card/job_card.json msgid "Corrective Operation" -msgstr "" +msgstr "Opération corrective" #. Label of the corrective_operation_cost (Currency) field in DocType 'Work #. Order' #: erpnext/manufacturing/doctype/work_order/work_order.json msgid "Corrective Operation Cost" -msgstr "" +msgstr "Coût des opérations correctives" #. Label of the corrective_preventive (Select) field in DocType 'Quality #. Action' @@ -12731,7 +12731,7 @@ msgstr "" #. Label of the cost_per_unit (Float) field in DocType 'BOM Operation' #: erpnext/manufacturing/doctype/bom_operation/bom_operation.json msgid "Cost Per Unit" -msgstr "" +msgstr "Coût par unité" #. Title of an incoterm #: erpnext/setup/doctype/incoterm/incoterms.csv:8 @@ -13179,7 +13179,7 @@ msgstr "Créer un nouveau contact" #: erpnext/public/js/call_popup/call_popup.js:128 msgid "Create New Customer" -msgstr "" +msgstr "Créer un nouveau client" #: erpnext/public/js/call_popup/call_popup.js:134 msgid "Create New Lead" @@ -13187,7 +13187,7 @@ msgstr "Créer une nouvelle lead" #: erpnext/crm/doctype/lead/lead.js:160 msgid "Create Opportunity" -msgstr "" +msgstr "Créer une opportunité" #: erpnext/selling/page/point_of_sale/pos_controller.js:67 msgid "Create POS Opening Entry" @@ -13199,7 +13199,7 @@ msgstr "Créer une entrée de paiement" #: erpnext/manufacturing/doctype/work_order/work_order.js:725 msgid "Create Pick List" -msgstr "Créer une liste de choix" +msgstr "Créer une liste de prélèvement" #: erpnext/accounts/doctype/cheque_print_template/cheque_print_template.js:10 msgid "Create Print Format" @@ -13207,7 +13207,7 @@ msgstr "Créer Format d'Impression" #: erpnext/crm/doctype/lead/lead_list.js:8 msgid "Create Prospect" -msgstr "" +msgstr "Créer un prospect" #: erpnext/selling/doctype/sales_order/sales_order.js:1226 #: erpnext/utilities/activation.py:105 @@ -13364,7 +13364,7 @@ msgstr "" #: erpnext/accounts/doctype/opening_invoice_creation_tool/opening_invoice_creation_tool.js:60 msgid "Creating Purchase Invoices ..." -msgstr "" +msgstr "Création de factures d'achat ..." #: erpnext/selling/doctype/sales_order/sales_order.js:1246 msgid "Creating Purchase Order ..." @@ -13374,16 +13374,16 @@ msgstr "Création d'une commande d'achat ..." #: erpnext/buying/doctype/purchase_order/purchase_order.js:552 #: erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.js:73 msgid "Creating Purchase Receipt ..." -msgstr "" +msgstr "Création d'un reçu d'achat ..." #: erpnext/accounts/doctype/opening_invoice_creation_tool/opening_invoice_creation_tool.js:58 msgid "Creating Sales Invoices ..." -msgstr "" +msgstr "Créer une facture de vente ..." #: erpnext/buying/doctype/purchase_order/purchase_order.js:123 #: erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.js:213 msgid "Creating Stock Entry" -msgstr "" +msgstr "Création d'une entrée de stock" #: erpnext/buying/doctype/purchase_order/purchase_order.js:567 msgid "Creating Subcontracting Order ..." @@ -13395,7 +13395,7 @@ msgstr "" #: erpnext/setup/doctype/employee/employee.js:80 msgid "Creating User..." -msgstr "" +msgstr "Création de l'utilisateur..." #: erpnext/accounts/doctype/opening_invoice_creation_tool/opening_invoice_creation_tool.py:284 msgid "Creating {} out of {} {}" @@ -13680,7 +13680,7 @@ msgstr "" #. Name of a UOM #: erpnext/setup/setup_wizard/data/uom_data.json msgid "Cubic Centimeter" -msgstr "" +msgstr "Centimètre cube" #. Name of a UOM #: erpnext/setup/setup_wizard/data/uom_data.json @@ -14255,7 +14255,7 @@ msgstr "Client" #. Label of the customer (Link) field in DocType 'Customer Item' #: erpnext/accounts/doctype/customer_item/customer_item.json msgid "Customer " -msgstr "" +msgstr "Client " #. Label of the master_name (Dynamic Link) field in DocType 'Authorization #. Rule' @@ -14465,7 +14465,7 @@ msgstr "Groupes de Clients" #. Name of a DocType #: erpnext/accounts/doctype/customer_item/customer_item.json msgid "Customer Item" -msgstr "" +msgstr "Article client" #. Label of the customer_items (Table) field in DocType 'Item' #: erpnext/stock/doctype/item/item.json @@ -15157,7 +15157,7 @@ msgstr "Débit" #: erpnext/accounts/report/general_ledger/general_ledger.py:674 msgid "Debit (Transaction)" -msgstr "" +msgstr "Débit (Transaction)" #: erpnext/accounts/report/general_ledger/general_ledger.py:649 msgid "Debit ({0})" @@ -15274,17 +15274,17 @@ msgstr "Débiteurs" #. Name of a UOM #: erpnext/setup/setup_wizard/data/uom_data.json msgid "Decigram/Litre" -msgstr "" +msgstr "Décigramme/Litre" #. Name of a UOM #: erpnext/setup/setup_wizard/data/uom_data.json msgid "Decilitre" -msgstr "" +msgstr "Décilitre" #. Name of a UOM #: erpnext/setup/setup_wizard/data/uom_data.json msgid "Decimeter" -msgstr "" +msgstr "Décimètre" #: erpnext/public/js/utils/sales_common.js:557 msgid "Declare Lost" @@ -15561,7 +15561,7 @@ msgstr "Fabricant de l'article par défaut" #. Label of the default_letter_head (Link) field in DocType 'Company' #: erpnext/setup/doctype/company/company.json msgid "Default Letter Head" -msgstr "En-Tête de Courrier par Défaut" +msgstr "En-tête et pied de page par défaut" #. Label of the default_manufacturer_part_no (Data) field in DocType 'Item' #: erpnext/stock/doctype/item/item.json @@ -16779,7 +16779,7 @@ msgstr "" #: erpnext/templates/generators/bom.html:83 #: erpnext/utilities/doctype/video/video.json msgid "Description" -msgstr "" +msgstr "Description" #. Label of the description_of_content (Small Text) field in DocType 'Shipment' #: erpnext/stock/doctype/shipment/shipment.json @@ -16818,7 +16818,7 @@ msgstr "" #: erpnext/stock/doctype/item/item.json #: erpnext/support/doctype/service_level_agreement/service_level_agreement.json msgid "Desk User" -msgstr "" +msgstr "Utilisateur du backoffice" #. Label of the order_lost_reason (Small Text) field in DocType 'Opportunity' #. Label of the order_lost_reason (Small Text) field in DocType 'Quotation' @@ -17857,7 +17857,7 @@ msgstr "" #. Label of the mute_emails (Check) field in DocType 'Bank Statement Import' #: erpnext/accounts/doctype/bank_statement_import/bank_statement_import.json msgid "Don't Send Emails" -msgstr "Ne pas envoyer d'emails" +msgstr "Ne pas envoyer d'emails" #. Label of the done (Check) field in DocType 'Transaction Deletion Record #. Details' @@ -18522,12 +18522,12 @@ msgstr "" #: erpnext/selling/page/point_of_sale/pos_item_cart.js:936 #: erpnext/setup/doctype/company/company.json msgid "Email" -msgstr "" +msgstr "Courriel" #. Label of a Card Break in the Settings Workspace #: erpnext/setup/workspace/settings/settings.json msgid "Email / Notifications" -msgstr "" +msgstr "Courriels et notifications" #. Label of a Link in the Home Workspace #. Label of a Link in the Settings Workspace @@ -18541,11 +18541,11 @@ msgstr "Compte Email" #. Label of the email_id (Data) field in DocType 'Warehouse' #: erpnext/stock/doctype/warehouse/warehouse.json msgid "Email Address" -msgstr "Adresse électronique" +msgstr "Email" #: erpnext/www/book_appointment/index.html:52 msgid "Email Address (required)" -msgstr "" +msgstr "Email (obligatoire)" #: erpnext/crm/doctype/lead/lead.py:164 msgid "Email Address must be unique, it is already used in {0}" @@ -18640,7 +18640,7 @@ msgstr "Paramètres d'Email" #: erpnext/crm/doctype/campaign_email_schedule/campaign_email_schedule.json #: erpnext/setup/workspace/settings/settings.json msgid "Email Template" -msgstr "Modèle d'email" +msgstr "Modèle d'email" #: erpnext/selling/page/point_of_sale/pos_past_order_summary.js:314 msgid "Email not sent to {0} (unsubscribed / disabled)" @@ -19352,7 +19352,7 @@ msgstr "Journal des Erreurs" #. Label of the error_message (Text) field in DocType 'Period Closing Voucher' #: erpnext/accounts/doctype/period_closing_voucher/period_closing_voucher.json msgid "Error Message" -msgstr "Message d'erreur" +msgstr "Message d'erreur" #: erpnext/accounts/doctype/opening_invoice_creation_tool/opening_invoice_creation_tool.py:274 msgid "Error Occurred" @@ -19659,7 +19659,7 @@ msgstr "" #. Label of the exit (Tab Break) field in DocType 'Employee' #: erpnext/setup/doctype/employee/employee.json msgid "Exit" -msgstr "" +msgstr "Départ" #. Label of the held_on (Date) field in DocType 'Employee' #: erpnext/setup/doctype/employee/employee.json @@ -20162,7 +20162,7 @@ msgstr "" #: erpnext/crm/doctype/prospect/prospect.json #: erpnext/setup/doctype/company/company.json msgid "Fax" -msgstr "" +msgstr "Fax" #. Label of the feedback (Link) field in DocType 'Quality Action' #. Label of the feedback (Text Editor) field in DocType 'Quality Feedback @@ -20298,7 +20298,7 @@ msgstr "Nom du Champ" #. Label of the fields (Table) field in DocType 'Item Variant Settings' #: erpnext/stock/doctype/item_variant_settings/item_variant_settings.json msgid "Fields" -msgstr "Champ" +msgstr "Champs" #. Description of the 'Do not update variants on save' (Check) field in DocType #. 'Item Variant Settings' @@ -20473,7 +20473,7 @@ msgstr "" #. Name of a Workspace #: erpnext/accounts/workspace/financial_reports/financial_reports.json msgid "Financial Reports" -msgstr "" +msgstr "Rapports financiers" #: erpnext/setup/setup_wizard/data/industry_type.txt:24 msgid "Financial Services" @@ -21401,7 +21401,7 @@ msgstr "La date de début et la date de fin sont obligatoires" #: erpnext/accounts/report/financial_statements.py:133 msgid "From Date and To Date are mandatory" -msgstr "" +msgstr "La date de début et la date de fin sont obligatoires" #: erpnext/accounts/report/tds_computation_summary/tds_computation_summary.py:46 msgid "From Date and To Date lie in different Fiscal Year" @@ -21928,7 +21928,7 @@ msgstr "" #: erpnext/selling/doctype/customer/customer.json #: erpnext/setup/doctype/employee/employee.json msgid "Gender" -msgstr "Sexe" +msgstr "Genre" #. Option for the 'Type' (Select) field in DocType 'Mode of Payment' #: erpnext/accounts/doctype/mode_of_payment/mode_of_payment.json @@ -22042,7 +22042,7 @@ msgstr "Obtenir le Stock Actuel" #: erpnext/selling/doctype/customer/customer.js:185 msgid "Get Customer Group Details" -msgstr "" +msgstr "Appliquer les informations depuis le Groupe de client" #. Label of the get_entries (Button) field in DocType 'Exchange Rate #. Revaluation' @@ -22754,7 +22754,7 @@ msgstr "Semestriel" #: erpnext/selling/report/sales_person_target_variance_based_on_item_group/sales_person_target_variance_based_on_item_group.js:34 #: erpnext/selling/report/territory_target_variance_based_on_item_group/territory_target_variance_based_on_item_group.js:34 msgid "Half-Yearly" -msgstr "" +msgstr "Demi-année" #. Option for the 'Periodicity' (Select) field in DocType 'Asset Maintenance #. Task' @@ -23336,7 +23336,7 @@ msgstr "" #. Description of the 'Scan Mode' (Check) field in DocType 'Pick List' #: erpnext/stock/doctype/pick_list/pick_list.json msgid "If checked, picked qty won't automatically be fulfilled on submit of pick list." -msgstr "" +msgstr "Si coché, la quantité prélevée ne sera pas automatiquement renseignée à la validation de la liste de prélèvement." #. Description of the 'Considered In Paid Amount' (Check) field in DocType #. 'Purchase Taxes and Charges' @@ -23382,7 +23382,7 @@ msgstr "Si coché, le champ 'Total Arrondi' ne sera visible dans aucune transact #. List' #: erpnext/stock/doctype/pick_list/pick_list.json msgid "If enabled then system won't apply the pricing rule on the delivery note which will be create from the pick list" -msgstr "" +msgstr "Si activé, les règles de prix ne seront pas appliqués sur le Bon de livraison qui serait créé depuis la liste de prélèvement" #. Description of the 'Pick Manually' (Check) field in DocType 'Pick List' #: erpnext/stock/doctype/pick_list/pick_list.json @@ -24837,7 +24837,7 @@ msgstr "" #: erpnext/stock/doctype/putaway_rule/putaway_rule.py:81 #: erpnext/stock/doctype/putaway_rule/putaway_rule.py:308 msgid "Insufficient Capacity" -msgstr "" +msgstr "Capacité insuffisante" #: erpnext/controllers/accounts_controller.py:3593 #: erpnext/controllers/accounts_controller.py:3617 @@ -25967,7 +25967,7 @@ msgstr "Est Standard" #: erpnext/manufacturing/doctype/bom_item/bom_item.json #: erpnext/selling/doctype/sales_order_item/sales_order_item.json msgid "Is Stock Item" -msgstr "" +msgstr "Article géré en stock" #. Label of the is_subcontracted (Check) field in DocType 'Purchase Invoice' #. Label of the is_subcontracted (Check) field in DocType 'Purchase Order' @@ -27710,7 +27710,7 @@ msgstr "Travail commencé" #: erpnext/crm/doctype/lead/lead.json #: erpnext/crm/doctype/opportunity/opportunity.json msgid "Job Title" -msgstr "Titre de l'Emploi" +msgstr "Titre du poste" #. Label of the supplier (Link) field in DocType 'Subcontracting Order' #. Label of the supplier (Link) field in DocType 'Subcontracting Receipt' @@ -28019,7 +28019,7 @@ msgstr "" #: erpnext/accounts/doctype/pos_field/pos_field.json #: erpnext/stock/doctype/item_website_specification/item_website_specification.json msgid "Label" -msgstr "Étiquette" +msgstr "Libellé" #. Label of the landed_cost_help (HTML) field in DocType 'Landed Cost Voucher' #: erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.json @@ -28198,7 +28198,7 @@ msgstr "" #: erpnext/setup/workspace/home/home.json #: erpnext/support/doctype/issue/issue.json msgid "Lead" -msgstr "" +msgstr "Lead" #: erpnext/crm/doctype/lead/lead.py:548 msgid "Lead -> Prospect" @@ -28505,7 +28505,7 @@ msgstr "Moins que le montant" #: erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.json #: erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.json msgid "Letter Head" -msgstr "En-Tête" +msgstr "En-tête et pied de page" #. Description of the 'Body Text' (Text Editor) field in DocType 'Dunning #. Letter Text' @@ -32344,7 +32344,7 @@ msgstr "Aucun {0} n'a été trouvé pour les transactions inter-sociétés." #: erpnext/assets/doctype/asset/asset.js:280 msgid "No." -msgstr "" +msgstr "N°." #. Label of the no_of_employees (Select) field in DocType 'Prospect' #: erpnext/crm/doctype/prospect/prospect.json @@ -32530,7 +32530,7 @@ msgstr "Pas permis" #: erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py:968 #: erpnext/templates/pages/timelog_info.html:43 msgid "Note" -msgstr "" +msgstr "Note" #: erpnext/manufacturing/doctype/bom_update_log/bom_update_log_list.js:21 msgid "Note: Automatic log deletion only applies to logs of type Update Cost" @@ -32861,7 +32861,7 @@ msgstr "" #: erpnext/support/report/issue_summary/issue_summary.js:44 #: erpnext/support/report/issue_summary/issue_summary.py:372 msgid "On Hold" -msgstr "" +msgstr "En attente" #. Label of the on_hold_since (Datetime) field in DocType 'Issue' #: erpnext/support/doctype/issue/issue.json @@ -34208,7 +34208,7 @@ msgstr "Surproduction pour les ventes et les bons de travail" #: erpnext/crm/doctype/prospect/prospect.json #: erpnext/setup/doctype/employee/employee.json msgid "Overview" -msgstr "" +msgstr "Vue d'ensemble" #. Option for the 'Permanent Address Is' (Select) field in DocType 'Employee' #. Option for the 'Current Address Is' (Select) field in DocType 'Employee' @@ -36432,7 +36432,7 @@ msgstr "" #: erpnext/setup/doctype/company/company.json #: erpnext/stock/doctype/warehouse/warehouse.json msgid "Phone No" -msgstr "" +msgstr "N° de Téléphone" #. Label of the phone_number (Data) field in DocType 'Payment Request' #. Label of the customer_phone_number (Data) field in DocType 'Appointment' @@ -36456,23 +36456,23 @@ msgstr "Numéro de téléphone" #: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.json #: erpnext/stock/workspace/stock/stock.json msgid "Pick List" -msgstr "Liste de sélection" +msgstr "Liste de prélèvement" #: erpnext/stock/doctype/pick_list/pick_list.py:194 msgid "Pick List Incomplete" -msgstr "" +msgstr "Liste de prélèvement incomplète" #. Label of the pick_list_item (Data) field in DocType 'Delivery Note Item' #. Name of a DocType #: erpnext/stock/doctype/delivery_note_item/delivery_note_item.json #: erpnext/stock/doctype/pick_list_item/pick_list_item.json msgid "Pick List Item" -msgstr "Élément de la liste de choix" +msgstr "Élément de la liste de prélèvement" #. Label of the pick_manually (Check) field in DocType 'Pick List' #: erpnext/stock/doctype/pick_list/pick_list.json msgid "Pick Manually" -msgstr "" +msgstr "Prélever manuellement" #. Label of the pick_serial_and_batch_based_on (Select) field in DocType 'Stock #. Settings' @@ -36492,7 +36492,7 @@ msgstr "" #: erpnext/stock/doctype/packed_item/packed_item.json #: erpnext/stock/doctype/pick_list_item/pick_list_item.json msgid "Pick Serial / Batch No" -msgstr "" +msgstr "Prélever des n° de série et lot" #. Label of the picked_qty (Float) field in DocType 'Packed Item' #: erpnext/stock/doctype/packed_item/packed_item.json @@ -36504,7 +36504,7 @@ msgstr "Quantité choisie" #: erpnext/selling/doctype/sales_order_item/sales_order_item.json #: erpnext/stock/doctype/pick_list_item/pick_list_item.json msgid "Picked Qty (in Stock UOM)" -msgstr "" +msgstr "Qté prélevée (en UdM de stock)" #. Option for the 'Pickup Type' (Select) field in DocType 'Shipment' #: erpnext/stock/doctype/shipment/shipment.json @@ -36751,7 +36751,7 @@ msgstr "Usines et Machines" #: erpnext/stock/doctype/pick_list/pick_list.py:537 msgid "Please Restock Items and Update the Pick List to continue. To discontinue, cancel the Pick List." -msgstr "Veuillez réapprovisionner les articles et mettre à jour la liste de sélection pour continuer. Pour interrompre, annulez la liste de sélection." +msgstr "Veuillez réapprovisionner les articles et mettre à jour la liste de prélèvement pour continuer. Pour interrompre, annulez la liste de liste prélèvement." #: erpnext/selling/page/sales_funnel/sales_funnel.py:18 msgid "Please Select a Company" @@ -40576,7 +40576,7 @@ msgstr "" #: erpnext/stock/doctype/putaway_rule/putaway_rule.json #: erpnext/stock/doctype/stock_entry_detail/stock_entry_detail.json msgid "Putaway Rule" -msgstr "" +msgstr "Règle de routage d'entrée en stock" #: erpnext/stock/doctype/putaway_rule/putaway_rule.py:52 msgid "Putaway Rule already exists for Item {0} in Warehouse {1}." @@ -40663,7 +40663,7 @@ msgstr "Qté" #: erpnext/templates/pages/order.html:178 msgid "Qty " -msgstr "" +msgstr "Qté " #. Label of the company_total_stock (Float) field in DocType 'Sales Invoice #. Item' @@ -42737,12 +42737,12 @@ msgstr "Détail de référence Non" #: erpnext/accounts/doctype/payment_entry/payment_entry.js:1671 msgid "Reference DocType" -msgstr "Référence DocType" +msgstr "DocType de référence" #. Label of the reference_doctype (Link) field in DocType 'Payment Request' #: erpnext/accounts/doctype/payment_request/payment_request.json msgid "Reference Doctype" -msgstr "DocType de la Référence" +msgstr "DocType de référence" #: erpnext/accounts/doctype/payment_entry/payment_entry.py:656 msgid "Reference Doctype must be one of {0}" @@ -42902,7 +42902,7 @@ msgstr "Ligne de Référence" #: erpnext/accounts/doctype/purchase_taxes_and_charges/purchase_taxes_and_charges.json #: erpnext/accounts/doctype/sales_taxes_and_charges/sales_taxes_and_charges.json msgid "Reference Row #" -msgstr "" +msgstr "Ligne de Référence #" #. Label of the reference_type (Link) field in DocType 'Advance Tax' #. Label of the reference_type (Select) field in DocType 'Journal Entry @@ -43438,11 +43438,11 @@ msgstr "Le Type de Rapport est nécessaire" #: erpnext/accounts/report/balance_sheet/balance_sheet.js:13 #: erpnext/accounts/report/profit_and_loss_statement/profit_and_loss_statement.js:13 msgid "Report View" -msgstr "" +msgstr "Vue rapport" #: erpnext/setup/install.py:160 msgid "Report an Issue" -msgstr "" +msgstr "Signaler un problème" #. Label of the reports_tab (Tab Break) field in DocType 'Accounts Settings' #. Label of a Card Break in the Payables Workspace @@ -43858,7 +43858,7 @@ msgstr "" #: erpnext/selling/doctype/sales_order/sales_order.js:76 #: erpnext/stock/doctype/pick_list/pick_list.js:133 msgid "Reserve" -msgstr "" +msgstr "Réserver" #. Label of the reserve_stock (Check) field in DocType 'Production Plan' #. Label of the reserve_stock (Check) field in DocType 'Sales Order' @@ -43919,11 +43919,11 @@ msgstr "Qté Réservée pour la Production" #. Label of the reserved_qty_for_production_plan (Float) field in DocType 'Bin' #: erpnext/stock/doctype/bin/bin.json msgid "Reserved Qty for Production Plan" -msgstr "" +msgstr "Qté Réservée pour un Plan de Production" #: erpnext/manufacturing/doctype/production_plan/production_plan.js:164 msgid "Reserved Qty for Production: Raw materials quantity to make manufacturing items." -msgstr "" +msgstr "Quantité réservée à la production : Quantité de matières premières pour fabriquer des articles à fabriquer." #. Label of the reserved_qty_for_sub_contract (Float) field in DocType 'Bin' #: erpnext/stock/doctype/bin/bin.json @@ -43932,7 +43932,7 @@ msgstr "" #: erpnext/manufacturing/doctype/production_plan/production_plan.js:164 msgid "Reserved Qty for Subcontract: Raw materials quantity to make subcontracted items." -msgstr "" +msgstr "Quantité réservée à la sous-traitance : Quantité de matières premières pour fabriquer les articles sous-traités." #: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:515 msgid "Reserved Qty should be greater than Delivered Qty." @@ -43940,7 +43940,7 @@ msgstr "" #: erpnext/manufacturing/doctype/production_plan/production_plan.js:164 msgid "Reserved Qty: Quantity ordered for sale, but not delivered." -msgstr "" +msgstr "Qté réservée : Quantité commandée pour la vente, mais non livrée." #: erpnext/stock/report/item_shortage_report/item_shortage_report.py:116 msgid "Reserved Quantity" @@ -43968,7 +43968,7 @@ msgstr "" #: erpnext/stock/report/stock_balance/stock_balance.py:499 #: erpnext/stock/stock_ledger.py:2139 msgid "Reserved Stock" -msgstr "" +msgstr "Stock réservé" #: erpnext/stock/stock_ledger.py:2185 msgid "Reserved Stock for Batch" @@ -43976,11 +43976,11 @@ msgstr "" #: erpnext/manufacturing/doctype/production_plan/production_plan.js:268 msgid "Reserved Stock for Raw Materials" -msgstr "" +msgstr "Stock réservé pour des matières premières" #: erpnext/manufacturing/doctype/production_plan/production_plan.js:242 msgid "Reserved Stock for Sub-assembly" -msgstr "" +msgstr "Stock réservé pour des sous-ensembles" #: erpnext/controllers/buying_controller.py:484 msgid "Reserved Warehouse is mandatory for the Item {item_code} in Raw Materials supplied." @@ -43988,19 +43988,19 @@ msgstr "" #: erpnext/stock/report/stock_projected_qty/stock_projected_qty.py:192 msgid "Reserved for POS Transactions" -msgstr "" +msgstr "Réservé aux transactions Caisse (POS)" #: erpnext/stock/report/stock_projected_qty/stock_projected_qty.py:171 msgid "Reserved for Production" -msgstr "" +msgstr "Réserver pour la production" #: erpnext/stock/report/stock_projected_qty/stock_projected_qty.py:178 msgid "Reserved for Production Plan" -msgstr "" +msgstr "Réserver pour un plan de production" #: erpnext/stock/report/stock_projected_qty/stock_projected_qty.py:185 msgid "Reserved for Sub Contracting" -msgstr "" +msgstr "Réservé à la sous-traitance" #: erpnext/stock/page/stock_balance/stock_balance.js:53 msgid "Reserved for manufacturing" @@ -44018,7 +44018,7 @@ msgstr "Réservé à la sous-traitance" #: erpnext/selling/doctype/sales_order/sales_order.js:381 #: erpnext/stock/doctype/pick_list/pick_list.js:278 msgid "Reserving Stock..." -msgstr "" +msgstr "Réservation de stock en cours..." #: erpnext/accounts/doctype/chart_of_accounts_importer/chart_of_accounts_importer.js:155 #: erpnext/support/doctype/issue/issue.js:57 @@ -44420,7 +44420,7 @@ msgstr "Qté Retournée" #. Label of the returned_qty (Float) field in DocType 'Work Order Item' #: erpnext/manufacturing/doctype/work_order_item/work_order_item.json msgid "Returned Qty " -msgstr "" +msgstr "Qté Retournée " #. Label of the returned_qty (Float) field in DocType 'Delivery Note Item' #. Label of the returned_qty (Float) field in DocType 'Purchase Receipt Item' @@ -45034,7 +45034,7 @@ msgstr "" #: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1382 msgid "Row #{0}: Item {1} has been picked, please reserve stock from the Pick List." -msgstr "" +msgstr "Ligne #{0} : l'article {1} a été prélevé, veuillez réserver le stock depuis la liste de prélèvement." #: erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py:725 msgid "Row #{0}: Item {1} is not a Serialized/Batched Item. It cannot have a Serial No/Batch No against it." @@ -45373,7 +45373,7 @@ msgstr "" #: erpnext/stock/doctype/pick_list/pick_list.py:161 msgid "Row #{}: item {} has been picked already." -msgstr "" +msgstr "Ligne #{}: l'article {} a déjà été prélevé." #: erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.py:127 #: erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.py:192 @@ -46405,7 +46405,7 @@ msgstr "Partenaire commercial" #. Label of the sales_partner (Link) field in DocType 'Sales Partner Item' #: erpnext/accounts/doctype/sales_partner_item/sales_partner_item.json msgid "Sales Partner " -msgstr "" +msgstr "Partenaire commercial " #. Name of a report #: erpnext/selling/report/sales_partner_commission_summary/sales_partner_commission_summary.json @@ -46940,7 +46940,7 @@ msgstr "Date du Calendrier" #: erpnext/maintenance/doctype/maintenance_visit/maintenance_visit.json #: erpnext/stock/doctype/delivery_trip/delivery_trip.json msgid "Scheduled" -msgstr "Prévu" +msgstr "Planifié" #. Label of the scheduled_date (Date) field in DocType 'Maintenance Schedule #. Detail' @@ -47171,7 +47171,7 @@ msgstr "" #: erpnext/accounts/report/financial_statements.py:646 msgid "Section" -msgstr "" +msgstr "Section" #: erpnext/accounts/report/tax_withholding_details/tax_withholding_details.py:174 #: erpnext/accounts/report/tds_computation_summary/tds_computation_summary.py:117 @@ -47242,7 +47242,7 @@ msgstr "Sélectionner une nomenclature, une quantité et un entrepôt" #: erpnext/public/js/utils/sales_common.js:417 #: erpnext/stock/doctype/pick_list/pick_list.js:359 msgid "Select Batch No" -msgstr "" +msgstr "Sélectionner le Lot" #. Label of the billing_address (Link) field in DocType 'Purchase Invoice' #. Label of the billing_address (Link) field in DocType 'Subcontracting @@ -47360,12 +47360,12 @@ msgstr "Sélectionner Quantité" #: erpnext/public/js/utils/sales_common.js:417 #: erpnext/stock/doctype/pick_list/pick_list.js:359 msgid "Select Serial No" -msgstr "" +msgstr "Sélectionner le n° de série" #: erpnext/public/js/utils/sales_common.js:420 #: erpnext/stock/doctype/pick_list/pick_list.js:362 msgid "Select Serial and Batch" -msgstr "" +msgstr "Sélectionner le lot et le n° de série" #. Label of the shipping_address (Link) field in DocType 'Purchase Invoice' #. Label of the shipping_address (Link) field in DocType 'Subcontracting @@ -48073,7 +48073,7 @@ msgstr "" #: erpnext/stock/report/stock_ledger_invariant_check/stock_ledger_invariant_check.py:177 #: erpnext/subcontracting/doctype/subcontracting_receipt_item/subcontracting_receipt_item.json msgid "Serial and Batch Bundle" -msgstr "" +msgstr "Ensemble de n° de série et lot" #: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:1599 msgid "Serial and Batch Bundle created" @@ -48752,7 +48752,7 @@ msgstr "Définir les Événements à {0}, puisque l'employé attaché au Commerc #: erpnext/stock/doctype/pick_list/pick_list.js:87 msgid "Setting Item Locations..." -msgstr "" +msgstr "Affectation de l'entrepôt en cours..." #: erpnext/setup/setup_wizard/setup_wizard.py:34 msgid "Setting defaults" @@ -50516,7 +50516,7 @@ msgstr "Type d'entrée de stock" #: erpnext/stock/doctype/pick_list/pick_list.py:1320 msgid "Stock Entry has been already created against this Pick List" -msgstr "Une entrée de stock a déjà été créée dans cette liste de choix" +msgstr "Une entrée de stock a déjà été créée dans cette liste de prélèvement" #: erpnext/stock/doctype/batch/batch.js:125 msgid "Stock Entry {0} created" @@ -50762,7 +50762,7 @@ msgstr "" #: erpnext/stock/doctype/stock_settings/stock_settings.py:204 #: erpnext/stock/doctype/stock_settings/stock_settings.py:218 msgid "Stock Reservation" -msgstr "" +msgstr "Réservation de stock" #: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1579 msgid "Stock Reservation Entries Cancelled" @@ -50790,7 +50790,7 @@ msgstr "" #: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:432 msgid "Stock Reservation Entry created against a Pick List cannot be updated. If you need to make changes, we recommend canceling the existing entry and creating a new one." -msgstr "" +msgstr "Une réservation de stock a été créée pour cette liste de prélèvement, il n'est plus possible de mettre à jour la liste de prélèvement. Si vous souhaitez la modifier, nous recommandons de l'annuler et d'en créer une nouvelle." #: erpnext/stock/doctype/delivery_note/delivery_note.py:536 msgid "Stock Reservation Warehouse Mismatch" @@ -50821,7 +50821,7 @@ msgstr "" #: erpnext/selling/doctype/sales_order_item/sales_order_item.json #: erpnext/stock/doctype/pick_list_item/pick_list_item.json msgid "Stock Reserved Qty (in Stock UOM)" -msgstr "" +msgstr "Qté de stock réservé (en UdM de stock)" #. Label of the auto_accounting_for_stock_settings (Section Break) field in #. DocType 'Company' @@ -53838,7 +53838,7 @@ msgstr "Le délai de paiement à la ligne {0} est probablement un doublon." #: erpnext/stock/doctype/pick_list/pick_list.py:268 msgid "The Pick List having Stock Reservation Entries cannot be updated. If you need to make changes, we recommend canceling the existing Stock Reservation Entries before updating the Pick List." -msgstr "" +msgstr "Une liste de prélèvement avec une écriture de réservation de stock ne peut être modifié. Si vous souhaitez la modifier, nous recommandons d'annuler l'écriture de réservation de stock et avant de modifier la liste de prélèvement." #: erpnext/stock/doctype/stock_entry/stock_entry.py:2104 msgid "The Process Loss Qty has reset as per job cards Process Loss Qty" @@ -54028,7 +54028,7 @@ msgstr "" #. 'Stock Settings' #: erpnext/stock/doctype/stock_settings/stock_settings.json msgid "The percentage you are allowed to pick more items in the pick list than the ordered quantity." -msgstr "" +msgstr "Le pourcentage qu'il est possible de prélever en plus sur la liste de prélèvement par rapport à la quantité commandée." #. Description of the 'Over Delivery/Receipt Allowance (%)' (Float) field in #. DocType 'Stock Settings' @@ -54152,7 +54152,7 @@ msgstr "" #: erpnext/manufacturing/doctype/work_order/work_order.js:1050 msgid "The warehouse where you store your raw materials. Each required item can have a separate source warehouse. Group warehouse also can be selected as source warehouse. On submission of the Work Order, the raw materials will be reserved in these warehouses for production usage." -msgstr "" +msgstr "L'entrepôt dans lequel vous stockez vos matières premières. Chaque article requis peut avoir un entrepôt source distinct. Un entrepôt de groupe peut également être sélectionné comme entrepôt source. Lors de la validation de l'ordre de fabrication, les matières premières seront réservées dans ces entrepôts pour la production." #: erpnext/manufacturing/doctype/work_order/work_order.js:1062 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." @@ -55483,7 +55483,7 @@ msgstr "Total des Frais Applicables dans la Table des Articles de Reçus d’Ach #: erpnext/accounts/report/balance_sheet/balance_sheet.py:210 msgid "Total Asset" -msgstr "" +msgstr "Total des actifs" #. Label of the total_asset_cost (Currency) field in DocType 'Asset' #: erpnext/assets/doctype/asset/asset.json @@ -56953,7 +56953,7 @@ msgstr "Montant Non Alloué" #: erpnext/stock/doctype/putaway_rule/putaway_rule.py:306 msgid "Unassigned Qty" -msgstr "" +msgstr "Qté non affectée" #: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js:105 msgid "Unblock Invoice" @@ -57151,7 +57151,7 @@ msgstr "" #: erpnext/selling/doctype/sales_order/sales_order.js:90 #: erpnext/stock/doctype/pick_list/pick_list.js:141 msgid "Unreserve" -msgstr "" +msgstr "Annuler la réservation" #: erpnext/public/js/stock_reservation.js:244 #: erpnext/selling/doctype/sales_order/sales_order.js:473 @@ -57170,7 +57170,7 @@ msgstr "" #: erpnext/selling/doctype/sales_order/sales_order.js:485 #: erpnext/stock/doctype/pick_list/pick_list.js:293 msgid "Unreserving Stock..." -msgstr "" +msgstr "Annulation de la réservation en cours..." #. Option for the 'Status' (Select) field in DocType 'Dunning' #: erpnext/accounts/doctype/dunning/dunning.json @@ -57613,7 +57613,7 @@ msgstr "" #: erpnext/subcontracting/doctype/subcontracting_receipt_item/subcontracting_receipt_item.json #: erpnext/subcontracting/doctype/subcontracting_receipt_supplied_item/subcontracting_receipt_supplied_item.json msgid "Use Serial No / Batch Fields" -msgstr "" +msgstr "Utiliser les champs N° de Série et lot" #. Label of the use_server_side_reactivity (Check) field in DocType 'Selling #. Settings' @@ -59131,7 +59131,7 @@ msgstr "" #: erpnext/accounts/doctype/cost_center_allocation/cost_center_allocation.py:114 msgid "Warning!" -msgstr "" +msgstr "Avertissement!" #: erpnext/accounts/doctype/journal_entry/journal_entry.py:1288 msgid "Warning: Another {0} # {1} exists against stock entry {2}" @@ -60105,7 +60105,7 @@ msgstr "Vous n'êtes pas autorisé à définir des valeurs gelées" #: erpnext/stock/doctype/pick_list/pick_list.py:449 msgid "You are picking more than required quantity for the item {0}. Check if there is any other pick list created for the sales order {1}." -msgstr "" +msgstr "Vous choisissez une quantité supérieure à la quantité requise pour l'article {0}. Vérifiez si une autre liste de prélèvement a été créée pour la commande client {1}." #: erpnext/accounts/doctype/pos_invoice_merge_log/pos_invoice_merge_log.py:113 msgid "You can add the original invoice {} manually to proceed." @@ -60429,7 +60429,7 @@ msgstr "" #: erpnext/crm/report/sales_pipeline_analytics/sales_pipeline_analytics.py:171 msgid "fieldname" -msgstr "" +msgstr "nom du Champ" #. Option for the 'Service Provider' (Select) field in DocType 'Currency #. Exchange Settings' @@ -60440,11 +60440,11 @@ msgstr "" #: erpnext/templates/form_grid/item_grid.html:66 #: erpnext/templates/form_grid/item_grid.html:80 msgid "hidden" -msgstr "" +msgstr "caché" #: erpnext/projects/doctype/project/project_dashboard.html:13 msgid "hours" -msgstr "" +msgstr "heures" #. Label of the image (Attach Image) field in DocType 'Batch' #: erpnext/stock/doctype/batch/batch.json @@ -60522,7 +60522,7 @@ msgstr "" #: erpnext/templates/includes/macros.html:207 #: erpnext/templates/includes/macros.html:211 msgid "out of 5" -msgstr "" +msgstr "sur 5" #: erpnext/accounts/doctype/payment_entry/payment_entry.py:1316 msgid "paid to" @@ -60685,7 +60685,7 @@ msgstr "vous devez sélectionner le compte des travaux d'immobilisations en cour #: erpnext/accounts/report/cash_flow/cash_flow.py:229 #: erpnext/accounts/report/cash_flow/cash_flow.py:230 msgid "{0}" -msgstr "" +msgstr "{0}" #: erpnext/controllers/accounts_controller.py:1112 msgid "{0} '{1}' is disabled" @@ -60984,11 +60984,11 @@ msgstr "" #: erpnext/stock/doctype/pick_list/pick_list.py:972 msgid "{0} units of Item {1} is not available in any of the warehouses." -msgstr "" +msgstr "La quantité {0} de l'article {1} n'est pas disponible, dans aucun entrepôt." #: erpnext/stock/doctype/pick_list/pick_list.py:964 msgid "{0} units of Item {1} is picked in another Pick List." -msgstr "" +msgstr "La quantité {0} de l'article {1} est déjà prélevé dans une autre liste de prélèvement." #: erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py:142 msgid "{0} units of {1} are required in {2} with the inventory dimension: {3} ({4}) on {5} {6} for {7} to complete the transaction." @@ -61025,7 +61025,7 @@ msgstr "" #: erpnext/manufacturing/doctype/job_card/job_card.py:875 msgid "{0} {1}" -msgstr "" +msgstr "{0} {1}" #: erpnext/public/js/utils/serial_no_batch_selector.js:254 msgid "{0} {1} Manually" @@ -61202,7 +61202,7 @@ msgstr "{0} {1} : Un Fournisseur est requis pour le Compte Créditeur {2}" #: erpnext/projects/doctype/project/project_list.js:6 msgid "{0}%" -msgstr "" +msgstr "{0}%" #: erpnext/controllers/website_list_for_contact.py:203 msgid "{0}% Billed" @@ -61302,7 +61302,7 @@ msgstr "{} Disponible" #: erpnext/quality_management/workspace/quality/quality.json #: erpnext/selling/workspace/selling/selling.json msgid "{} Open" -msgstr "" +msgstr "{} Ouvrir" #. Count format of shortcut in the Buying Workspace #. Count format of shortcut in the Stock Workspace diff --git a/erpnext/locale/sr_CS.po b/erpnext/locale/sr_CS.po index 48959710e40..e611ddd3427 100644 --- a/erpnext/locale/sr_CS.po +++ b/erpnext/locale/sr_CS.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: frappe\n" "Report-Msgid-Bugs-To: hello@frappe.io\n" "POT-Creation-Date: 2025-06-01 09:36+0000\n" -"PO-Revision-Date: 2025-06-01 21:35\n" +"PO-Revision-Date: 2025-06-03 22:20\n" "Last-Translator: hello@frappe.io\n" "Language-Team: Serbian (Latin)\n" "MIME-Version: 1.0\n" @@ -22355,7 +22355,7 @@ msgstr "Prikazivanje otpisanih stavki" #. Option for the 'Coupon Type' (Select) field in DocType 'Coupon Code' #: erpnext/accounts/doctype/coupon_code/coupon_code.json msgid "Gift Card" -msgstr "Poklon kartica" +msgstr "Poklon-kartica" #. Description of the 'Recurse Every (As Per Transaction UOM)' (Float) field in #. DocType 'Pricing Rule' @@ -25949,7 +25949,7 @@ msgstr "Izlazno" #. Label of the is_packed (Check) field in DocType 'Serial and Batch Bundle' #: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.json msgid "Is Packed" -msgstr "" +msgstr "Upakovana stavka" #. Label of the is_paid (Check) field in DocType 'Purchase Invoice' #: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json @@ -35260,7 +35260,7 @@ msgstr "Detalji stranke" #. Label of the party_full_name (Data) field in DocType 'Contract' #: erpnext/crm/doctype/contract/contract.json msgid "Party Full Name" -msgstr "" +msgstr "Pun naziv stranke" #. Label of the bank_party_iban (Data) field in DocType 'Bank Transaction' #: erpnext/accounts/doctype/bank_transaction/bank_transaction.json diff --git a/erpnext/locale/sv.po b/erpnext/locale/sv.po index c27873033c9..ab16e8f7b12 100644 --- a/erpnext/locale/sv.po +++ b/erpnext/locale/sv.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: frappe\n" "Report-Msgid-Bugs-To: hello@frappe.io\n" "POT-Creation-Date: 2025-06-01 09:36+0000\n" -"PO-Revision-Date: 2025-06-01 21:35\n" +"PO-Revision-Date: 2025-06-05 23:00\n" "Last-Translator: hello@frappe.io\n" "Language-Team: Swedish\n" "MIME-Version: 1.0\n" @@ -23504,7 +23504,7 @@ msgstr "Om aktiverad, kommer alla filer som bifogas detta dokument att bifogas t #: erpnext/stock/doctype/stock_settings/stock_settings.json msgid "If enabled, do not update serial / batch values in the stock transactions on creation of auto Serial \n" " / Batch Bundle. " -msgstr "Om aktiverad, uppdatera inte serie nummer /parti värde i lager transaktioner vid skapande av automatiskt Serie Nummer \n" +msgstr "Om aktiverad, uppdatera inte serie nummer /parti värde i lager transaktioner vid skapande av automatiskt Serie \n" " / Parti Paket. " #. Description of the 'Consider Projected Qty in Calculation' (Check) field in @@ -23551,7 +23551,7 @@ msgstr "Om aktiverad kommer system att tillåta val av Enhet i försäljning och #. in DocType 'Buying Settings' #: erpnext/buying/doctype/buying_settings/buying_settings.json msgid "If enabled, the system will generate an accounting entry for materials rejected in the Purchase Receipt." -msgstr "Om aktiverat skapar system bokföring post för material som avvisats i Inköp Följesedel." +msgstr "Om aktiverad, skapar system bokföring post för material som avvisats i Inköp Följesedel." #. Description of the 'Do Not Use Batch-wise Valuation' (Check) field in #. DocType 'Stock Settings' @@ -57553,7 +57553,7 @@ msgstr "Uppdatera ändrad tidsstämpel på ny konversation mottagen i Potentiell #. 'CRM Settings' #: erpnext/crm/doctype/crm_settings/crm_settings.json msgid "Update timestamp on new communication" -msgstr "Uppdatera tidsstämpel på ny Konversation" +msgstr "Uppdatera tidsstämpel på ny kommunikation" #: erpnext/manufacturing/doctype/bom_creator/bom_creator.py:534 msgid "Updated successfully" diff --git a/erpnext/locale/tr.po b/erpnext/locale/tr.po index f2f665a9aa4..792d78eb3b0 100644 --- a/erpnext/locale/tr.po +++ b/erpnext/locale/tr.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: frappe\n" "Report-Msgid-Bugs-To: hello@frappe.io\n" "POT-Creation-Date: 2025-06-01 09:36+0000\n" -"PO-Revision-Date: 2025-06-01 21:35\n" +"PO-Revision-Date: 2025-06-04 22:49\n" "Last-Translator: hello@frappe.io\n" "Language-Team: Turkish\n" "MIME-Version: 1.0\n" @@ -4393,7 +4393,7 @@ msgstr "Kullanıcının Fiyatı Düzenlemesine İzin Verin" #. Settings' #: erpnext/stock/doctype/item_variant_settings/item_variant_settings.json msgid "Allow Variant UOM to be different from Template UOM" -msgstr "" +msgstr "Varyant Ölçü Biriminin Şablon Ölçü Biriminden farklı olmasına izin ver" #. Label of the allow_zero_rate (Check) field in DocType 'Repost Item #. Valuation' @@ -5003,7 +5003,7 @@ msgstr "Tutar Farkı" #. DocType 'Purchase Receipt Item' #: erpnext/stock/doctype/purchase_receipt_item/purchase_receipt_item.json msgid "Amount Difference with Purchase Invoice" -msgstr "" +msgstr "Satın Alma Faturası ile Fiyat Farkı" #. Label of the amount_eligible_for_commission (Currency) field in DocType 'POS #. Invoice' @@ -5035,7 +5035,7 @@ msgstr "Hesap Para Birimindeki Tutar" #: erpnext/accounts/print_format/sales_invoice_print/sales_invoice_print.html:119 msgid "Amount in Words" -msgstr "" +msgstr "Yazı ile Tutar" #. Description of the 'Outstanding Amount' (Currency) field in DocType 'Payment #. Request' @@ -8958,7 +8958,7 @@ msgstr "Satış Siparişinde Borç Limiti Kontrolünü Atla" #: erpnext/accounts/print_format/sales_invoice_print/sales_invoice_print.html:11 msgid "CANCELLED" -msgstr "" +msgstr "İPTAL EDİLDİ" #. Label of the cc (Link) field in DocType 'Process Statement Of Accounts CC' #: erpnext/accounts/doctype/process_statement_of_accounts_cc/process_statement_of_accounts_cc.json @@ -9913,30 +9913,30 @@ msgstr "" #: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.js:84 msgid "Categorize by Item" -msgstr "" +msgstr "Ürüne Göre" #: erpnext/accounts/report/general_ledger/general_ledger.js:133 msgid "Categorize by Party" -msgstr "" +msgstr "Cariye Göre" #: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.js:83 #: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.js:86 msgid "Categorize by Supplier" -msgstr "" +msgstr "Tedarikçiye Göre" #. Option for the 'Categorize By' (Select) field in DocType 'Process Statement #. Of Accounts' #: erpnext/accounts/doctype/process_statement_of_accounts/process_statement_of_accounts.json #: erpnext/accounts/report/general_ledger/general_ledger.js:121 msgid "Categorize by Voucher" -msgstr "" +msgstr "Faturaya Göre" #. Option for the 'Categorize By' (Select) field in DocType 'Process Statement #. Of Accounts' #: erpnext/accounts/doctype/process_statement_of_accounts/process_statement_of_accounts.json #: erpnext/accounts/report/general_ledger/general_ledger.js:125 msgid "Categorize by Voucher (Consolidated)" -msgstr "" +msgstr "Faturaya Göre (Konsolide)" #. Label of the category (Link) field in DocType 'UOM Conversion Factor' #: erpnext/setup/doctype/uom_conversion_factor/uom_conversion_factor.json @@ -10633,7 +10633,7 @@ msgstr "Kapanış Metni" #: erpnext/accounts/report/general_ledger/general_ledger.html:135 msgid "Closing [Opening + Total] " -msgstr "" +msgstr "Kapanış [Açılış + Toplam] " #. Label of the code (Data) field in DocType 'Incoterm' #: erpnext/edi/doctype/code_list/code_list_import.js:172 @@ -14639,17 +14639,17 @@ msgstr "Müşteri Adlandırması" #. Supplier' #: erpnext/buying/doctype/customer_number_at_supplier/customer_number_at_supplier.json msgid "Customer Number" -msgstr "" +msgstr "Müşteri Numarası" #. Name of a DocType #: erpnext/buying/doctype/customer_number_at_supplier/customer_number_at_supplier.json msgid "Customer Number At Supplier" -msgstr "" +msgstr "Tedarikçideki Müşteri Numarası" #. Label of the customer_numbers (Table) field in DocType 'Supplier' #: erpnext/buying/doctype/supplier/supplier.json msgid "Customer Numbers" -msgstr "" +msgstr "Müşteri Numaraları" #: erpnext/stock/report/delayed_item_report/delayed_item_report.py:165 #: erpnext/stock/report/delayed_order_report/delayed_order_report.py:80 @@ -14936,7 +14936,7 @@ msgstr "Tarihe Göre" #. 'Accounts Settings' #: erpnext/accounts/doctype/accounts_settings/accounts_settings.json msgid "Data Fetch Method" -msgstr "" +msgstr "Veri Alma Yöntemi" #. Label of the data_import_configuration_section (Section Break) field in #. DocType 'Bank' @@ -16987,11 +16987,11 @@ msgstr "Fark Hesabı" #: erpnext/stock/doctype/stock_entry/stock_entry.py:545 msgid "Difference Account in Items Table" -msgstr "" +msgstr "Kalemler Tablosundaki Fark Hesabı" #: erpnext/stock/doctype/stock_entry/stock_entry.py:534 msgid "Difference Account must be a Asset/Liability type account (Temporary Opening), since this Stock Entry is an Opening Entry" -msgstr "" +msgstr "Bu Stok Mutabakatı bir Hesap Açılış Kaydı olduğundan farklı hesabının aktif ya da pasif bir hesap tipi olması gerekmektedir" #: erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py:950 msgid "Difference Account must be a Asset/Liability type account, since this Stock Reconciliation is an Opening Entry" @@ -17302,7 +17302,7 @@ msgstr "Dağıtıldı" #. Profile' #: erpnext/accounts/doctype/pos_profile/pos_profile.json msgid "Discard Changes and Load New Invoice" -msgstr "" +msgstr "Değişiklikleri Sil ve Yeni Fatura Yükle" #. Label of the discount (Float) field in DocType 'Payment Schedule' #. Label of the discount (Float) field in DocType 'Payment Term' @@ -17571,7 +17571,7 @@ msgstr "Sevkiyat Adresi" #. 'Purchase Order' #: erpnext/buying/doctype/purchase_order/purchase_order.json msgid "Dispatch Address Details" -msgstr "" +msgstr "Gönderim Adresi Ayrıntıları" #. Label of the dispatch_address_name (Link) field in DocType 'Sales Invoice' #. Label of the dispatch_address_name (Link) field in DocType 'Sales Order' @@ -17585,7 +17585,7 @@ msgstr "Sevk Adresi" #. Label of the dispatch_address (Link) field in DocType 'Purchase Receipt' #: erpnext/stock/doctype/purchase_receipt/purchase_receipt.json msgid "Dispatch Address Template" -msgstr "" +msgstr "Gönderim Adresi Şablonu" #. Label of the section_break_9 (Section Break) field in DocType 'Delivery #. Stop' @@ -17624,7 +17624,7 @@ msgstr "Bertaraf Tarihi" #: erpnext/assets/doctype/asset/depreciation.py:824 msgid "Disposal date {0} cannot be before {1} date {2} of the asset." -msgstr "" +msgstr "Elden çıkarma tarihi {0} varlığın {1} tarihinden {2} önce olamaz." #. Label of the distance (Float) field in DocType 'Delivery Stop' #: erpnext/stock/doctype/delivery_stop/delivery_stop.json @@ -17799,7 +17799,7 @@ msgstr "Hala negatif envanteri etkinleştirmek istiyor musunuz?" #: erpnext/stock/doctype/item/item.js:24 msgid "Do you want to change valuation method?" -msgstr "" +msgstr "Değerleme yöntemini değiştirmek istiyor musunuz?" #: erpnext/stock/doctype/delivery_trip/delivery_trip.js:156 msgid "Do you want to notify all the customers by email?" @@ -18319,7 +18319,7 @@ msgstr "Projeyi Görevlerle Çoğalt" #: erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.py:144 msgid "Duplicate Sales Invoices found" -msgstr "" +msgstr "Yinelenen Satış Faturaları bulundu" #: erpnext/stock/doctype/stock_closing_entry/stock_closing_entry.py:78 msgid "Duplicate Stock Closing Entry" @@ -19091,7 +19091,7 @@ msgstr "" #. 'Manufacturing Settings' #: erpnext/manufacturing/doctype/manufacturing_settings/manufacturing_settings.json msgid "Enabling this checkbox will force each Job Card Time Log to have From Time and To Time" -msgstr "" +msgstr "Bu onay kutusunun etkinleştirilmesi, her İş Kartı Zaman Günlüğünün Şu Zamandan ve Şu Zamana sahip olmasını zorunlu kılar" #. Description of the 'Check Supplier Invoice Number Uniqueness' (Check) field #. in DocType 'Accounts Settings' @@ -19216,7 +19216,7 @@ msgstr "Enerji" #. Settings' #: erpnext/manufacturing/doctype/manufacturing_settings/manufacturing_settings.json msgid "Enforce Time Logs" -msgstr "" +msgstr "Zaman Günlüklerini Uygula" #: erpnext/setup/setup_wizard/data/designation.txt:15 msgid "Engineer" @@ -19946,7 +19946,7 @@ msgstr "Gider hesabı {0} kalemi için zorunludur" #: erpnext/assets/doctype/asset_repair/asset_repair.py:108 msgid "Expense account {0} not present in Purchase Invoice {1}" -msgstr "" +msgstr "Satın Alma Faturasında {0} Gider Hesabı Belirtilmemiş" #: erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py:42 #: erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts_with_account_number.py:61 @@ -20291,7 +20291,7 @@ msgstr "Ürünleri Depodan Getir" #: erpnext/crm/doctype/opportunity/opportunity.js:117 msgid "Fetch Latest Exchange Rate" -msgstr "" +msgstr "Son Döviz Kurunu Getir" #: erpnext/accounts/doctype/dunning/dunning.js:61 msgid "Fetch Overdue Payments" @@ -20660,7 +20660,7 @@ msgstr "Bitmiş Ürün Miktarı " #. field in DocType 'Work Order' #: erpnext/manufacturing/doctype/work_order/work_order.json msgid "Finished Good Serial / Batch" -msgstr "" +msgstr "Bitmiş Ürün Seri / Parti" #. Label of the finished_good_uom (Link) field in DocType 'Subcontracting BOM' #: erpnext/subcontracting/doctype/subcontracting_bom/subcontracting_bom.json @@ -23117,7 +23117,7 @@ msgstr "Resimleri Gizle" #: erpnext/selling/page/point_of_sale/pos_controller.js:282 msgid "Hide Recent Orders" -msgstr "" +msgstr "Son Siparişleri Gizle" #. Label of the hide_unavailable_items (Check) field in DocType 'POS Profile' #: erpnext/accounts/doctype/pos_profile/pos_profile.json @@ -25947,7 +25947,7 @@ msgstr "Giden" #. Label of the is_packed (Check) field in DocType 'Serial and Batch Bundle' #: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.json msgid "Is Packed" -msgstr "" +msgstr "Paketlendi" #. Label of the is_paid (Check) field in DocType 'Purchase Invoice' #: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json @@ -26109,7 +26109,7 @@ msgstr "Abonelik" #. Label of the is_created_using_pos (Check) field in DocType 'Sales Invoice' #: erpnext/accounts/doctype/sales_invoice/sales_invoice.json msgid "Is created using POS" -msgstr "" +msgstr "POS kullanılarak oluşturuldu" #. Label of the included_in_print_rate (Check) field in DocType 'Purchase Taxes #. and Charges' @@ -28510,7 +28510,7 @@ msgstr "Sol Dizin" #. Settings' #: erpnext/accounts/doctype/accounts_settings/accounts_settings.json msgid "Legacy Fields" -msgstr "" +msgstr "Eski Alanlar" #: erpnext/setup/doctype/company/company.py:420 #: erpnext/setup/setup_wizard/data/industry_type.txt:30 @@ -31676,7 +31676,7 @@ msgstr "Net Kâr/Zarar" #. Label of the gross_purchase_amount (Currency) field in DocType 'Asset' #: erpnext/assets/doctype/asset/asset.json msgid "Net Purchase Amount" -msgstr "" +msgstr "Net Satın Alma Tutarı" #. Label of the net_rate (Currency) field in DocType 'POS Invoice Item' #. Label of the net_rate (Currency) field in DocType 'Purchase Invoice Item' @@ -31917,7 +31917,7 @@ msgstr "Yeni Gelir" #: erpnext/selling/page/point_of_sale/pos_controller.js:244 msgid "New Invoice" -msgstr "" +msgstr "Yeni Fatura" #: erpnext/assets/doctype/location/location_tree.js:23 msgid "New Location" @@ -32181,7 +32181,7 @@ msgstr "Açıklama Yok" #: erpnext/public/js/utils/unreconcile.js:147 msgid "No Selection" -msgstr "" +msgstr "Seçim Yok" #: erpnext/controllers/sales_and_purchase_return.py:824 msgid "No Serial / Batches are available for return" @@ -35921,7 +35921,7 @@ msgstr "Ödeme Planı" #: erpnext/accounts/print_format/sales_invoice_print/sales_invoice_print.html:123 msgid "Payment Status" -msgstr "" +msgstr "Ödeme Durumu" #. Label of the payment_term (Link) field in DocType 'Overdue Payment' #. Label of the payment_term (Link) field in DocType 'Payment Entry Reference' @@ -42628,7 +42628,7 @@ msgstr "İade Edilebilir Standart Oranlı Giderler, Ters Yükleme Uygulanıyorke #. Valuation' #: erpnext/stock/doctype/repost_item_valuation/repost_item_valuation.json msgid "Recreate Stock Ledgers" -msgstr "" +msgstr "Stok Defterlerini Yeniden Oluştur" #. Label of the recurse_for (Float) field in DocType 'Pricing Rule' #. Label of the recurse_for (Float) field in DocType 'Promotional Scheme @@ -46137,7 +46137,7 @@ msgstr "Satış Faturası Ödemesi" #. Name of a DocType #: erpnext/accounts/doctype/sales_invoice_reference/sales_invoice_reference.json msgid "Sales Invoice Reference" -msgstr "" +msgstr "Satış Faturası Referansı" #. Name of a DocType #: erpnext/accounts/doctype/sales_invoice_timesheet/sales_invoice_timesheet.json @@ -46148,7 +46148,7 @@ msgstr "Satış Faturası Zaman Çizelgesi" #. Closing Entry' #: erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.json msgid "Sales Invoice Transactions" -msgstr "" +msgstr "Satış Fatura İşlemleri" #. Name of a report #. Label of a Link in the Financial Reports Workspace @@ -46161,7 +46161,7 @@ msgstr "Satış Faturası Trendleri" #: erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.py:169 msgid "Sales Invoice does not have Payments" -msgstr "" +msgstr "Satış Faturasında Ödemeler Yok" #: erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.py:165 msgid "Sales Invoice is already consolidated" @@ -46173,11 +46173,11 @@ msgstr "" #: erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.py:177 msgid "Sales Invoice is not submitted" -msgstr "" +msgstr "Satış Faturası gönderilmedi" #: erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.py:180 msgid "Sales Invoice isn't created by user {}" -msgstr "" +msgstr "Satış Faturası {} kullanıcısı tarafından oluşturulmadı" #: erpnext/accounts/doctype/pos_invoice/pos_invoice.py:431 msgid "Sales Invoice mode is activated in POS. Please create Sales Invoice instead." From 26abf9f13a59bfd9ff60cdf2adce585c9127035b Mon Sep 17 00:00:00 2001 From: MochaMind Date: Sun, 8 Jun 2025 18:26:06 +0530 Subject: [PATCH 17/20] chore: update POT file (#47956) --- erpnext/locale/main.pot | 1401 ++++++++++++++++++++------------------- 1 file changed, 722 insertions(+), 679 deletions(-) diff --git a/erpnext/locale/main.pot b/erpnext/locale/main.pot index 713c1b1a1bc..fb1157e082a 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: 2025-06-01 09:36+0000\n" -"PO-Revision-Date: 2025-06-01 09:36+0000\n" +"POT-Creation-Date: 2025-06-08 09:35+0000\n" +"PO-Revision-Date: 2025-06-08 09:35+0000\n" "Last-Translator: hello@frappe.io\n" "Language-Team: hello@frappe.io\n" "MIME-Version: 1.0\n" @@ -211,11 +211,11 @@ msgstr "" msgid "% of materials delivered against this Sales Order" msgstr "" -#: erpnext/controllers/accounts_controller.py:2200 +#: erpnext/controllers/accounts_controller.py:2285 msgid "'Account' in the Accounting section of Customer {0}" msgstr "" -#: erpnext/selling/doctype/sales_order/sales_order.py:299 +#: erpnext/selling/doctype/sales_order/sales_order.py:297 msgid "'Allow Multiple Sales Orders Against a Customer's Purchase Order'" msgstr "" @@ -227,7 +227,7 @@ msgstr "" msgid "'Days Since Last Order' must be greater than or equal to zero" msgstr "" -#: erpnext/controllers/accounts_controller.py:2205 +#: erpnext/controllers/accounts_controller.py:2290 msgid "'Default {0} Account' in Company {1}" msgstr "" @@ -245,7 +245,7 @@ msgstr "" msgid "'From Date' must be after 'To Date'" msgstr "" -#: erpnext/stock/doctype/item/item.py:401 +#: erpnext/stock/doctype/item/item.py:399 msgid "'Has Serial No' can not be 'Yes' for non-stock item" msgstr "" @@ -1210,15 +1210,15 @@ msgstr "" #: erpnext/accounts/report/budget_variance_report/budget_variance_report.py:83 #: erpnext/accounts/report/consolidated_financial_statement/consolidated_financial_statement.py:286 #: erpnext/accounts/report/dimension_wise_accounts_balance_report/dimension_wise_accounts_balance_report.py:201 -#: erpnext/accounts/report/financial_statements.py:646 +#: erpnext/accounts/report/financial_statements.py:642 #: erpnext/accounts/report/general_and_payment_ledger_comparison/general_and_payment_ledger_comparison.js:30 #: erpnext/accounts/report/general_and_payment_ledger_comparison/general_and_payment_ledger_comparison.py:190 #: erpnext/accounts/report/general_ledger/general_ledger.js:38 -#: erpnext/accounts/report/general_ledger/general_ledger.py:642 +#: erpnext/accounts/report/general_ledger/general_ledger.py:640 #: erpnext/accounts/report/invalid_ledger_entries/invalid_ledger_entries.js:30 #: erpnext/accounts/report/payment_ledger/payment_ledger.js:30 #: erpnext/accounts/report/payment_ledger/payment_ledger.py:146 -#: erpnext/accounts/report/trial_balance/trial_balance.py:433 +#: erpnext/accounts/report/trial_balance/trial_balance.py:429 #: erpnext/accounts/report/trial_balance_for_party/trial_balance_for_party.js:70 #: erpnext/regional/doctype/uae_vat_account/uae_vat_account.json #: erpnext/stock/doctype/warehouse/warehouse.json @@ -1315,7 +1315,7 @@ msgid "Account Manager" msgstr "" #: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:949 -#: erpnext/controllers/accounts_controller.py:2209 +#: erpnext/controllers/accounts_controller.py:2294 msgid "Account Missing" msgstr "" @@ -1490,7 +1490,7 @@ msgstr "" msgid "Account {0} is frozen" msgstr "" -#: erpnext/controllers/accounts_controller.py:1291 +#: erpnext/controllers/accounts_controller.py:1378 msgid "Account {0} is invalid. Account Currency must be {1}" msgstr "" @@ -1514,7 +1514,7 @@ msgstr "" msgid "Account {0}: You can not assign itself as parent account" msgstr "" -#: erpnext/accounts/general_ledger.py:433 +#: erpnext/accounts/general_ledger.py:435 msgid "Account: {0} is capital Work in progress and can not be updated by Journal Entry" msgstr "" @@ -1526,7 +1526,7 @@ msgstr "" msgid "Account: {0} is not permitted under Payment Entry" msgstr "" -#: erpnext/controllers/accounts_controller.py:3040 +#: erpnext/controllers/accounts_controller.py:3125 msgid "Account: {0} with currency: {1} can not be selected" msgstr "" @@ -1582,6 +1582,8 @@ msgstr "" #. 'Subcontracting Order Item' #. Label of the accounting_details_section (Section Break) field in DocType #. 'Subcontracting Receipt Item' +#. Label of the accounting_details_section (Section Break) field in DocType +#. 'Subcontracting Receipt Supplied Item' #: erpnext/accounts/doctype/dunning/dunning.json #: erpnext/accounts/doctype/dunning_type/dunning_type.json #: erpnext/accounts/doctype/pos_invoice/pos_invoice.json @@ -1595,6 +1597,7 @@ msgstr "" #: erpnext/stock/doctype/purchase_receipt_item/purchase_receipt_item.json #: erpnext/subcontracting/doctype/subcontracting_order_item/subcontracting_order_item.json #: erpnext/subcontracting/doctype/subcontracting_receipt_item/subcontracting_receipt_item.json +#: erpnext/subcontracting/doctype/subcontracting_receipt_supplied_item/subcontracting_receipt_supplied_item.json msgid "Accounting Details" msgstr "" @@ -1718,6 +1721,8 @@ msgstr "" #. 'Subcontracting Order Item' #. Label of the accounting_dimensions_section (Section Break) field in DocType #. 'Subcontracting Receipt Item' +#. Label of the accounting_dimensions_section (Section Break) field in DocType +#. 'Subcontracting Receipt Supplied Item' #: erpnext/accounts/doctype/advance_taxes_and_charges/advance_taxes_and_charges.json #: erpnext/accounts/doctype/journal_entry_account/journal_entry_account.json #: erpnext/accounts/doctype/loyalty_program/loyalty_program.json @@ -1762,6 +1767,7 @@ msgstr "" #: erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.json #: erpnext/subcontracting/doctype/subcontracting_order_item/subcontracting_order_item.json #: erpnext/subcontracting/doctype/subcontracting_receipt_item/subcontracting_receipt_item.json +#: erpnext/subcontracting/doctype/subcontracting_receipt_supplied_item/subcontracting_receipt_supplied_item.json msgid "Accounting Dimensions" msgstr "" @@ -1812,12 +1818,12 @@ msgstr "" #: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:1210 #: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:1446 #: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:1468 -#: erpnext/controllers/stock_controller.py:550 -#: erpnext/controllers/stock_controller.py:567 +#: erpnext/controllers/stock_controller.py:561 +#: erpnext/controllers/stock_controller.py:578 #: erpnext/stock/doctype/purchase_receipt/purchase_receipt.py:898 #: erpnext/stock/doctype/stock_entry/stock_entry.py:1586 #: erpnext/stock/doctype/stock_entry/stock_entry.py:1600 -#: erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.py:561 +#: erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.py:607 msgid "Accounting Entry for Stock" msgstr "" @@ -1825,7 +1831,7 @@ msgstr "" msgid "Accounting Entry for {0}" msgstr "" -#: erpnext/controllers/accounts_controller.py:2250 +#: erpnext/controllers/accounts_controller.py:2335 msgid "Accounting Entry for {0}: {1} can only be made in currency: {2}" msgstr "" @@ -2330,6 +2336,12 @@ msgstr "" msgid "Action if Anual Budget Exceeded on Cumulative Expense" msgstr "" +#. Label of the maintain_same_rate_action (Select) field in DocType 'Accounts +#. Settings' +#: erpnext/accounts/doctype/accounts_settings/accounts_settings.json +msgid "Action if Same Rate is Not Maintained Throughout Internal Transaction" +msgstr "" + #. Label of the maintain_same_rate_action (Select) field in DocType 'Selling #. Settings' #: erpnext/selling/doctype/selling_settings/selling_settings.json @@ -2815,7 +2827,7 @@ msgstr "" msgid "Add Template" msgstr "" -#: erpnext/utilities/activation.py:123 +#: erpnext/utilities/activation.py:124 msgid "Add Timesheets" msgstr "" @@ -2844,7 +2856,7 @@ msgstr "" msgid "Add or Deduct" msgstr "" -#: erpnext/utilities/activation.py:113 +#: erpnext/utilities/activation.py:114 msgid "Add the rest of your organization as your users. You can also add invite Customers to your portal by adding them from Contacts" msgstr "" @@ -3418,7 +3430,7 @@ msgstr "" #: 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/controllers/accounts_controller.py:270 +#: erpnext/controllers/accounts_controller.py:272 #: erpnext/setup/doctype/company/company.json msgid "Advance Payments" msgstr "" @@ -3443,7 +3455,7 @@ msgstr "" msgid "Advance amount" msgstr "" -#: erpnext/controllers/taxes_and_totals.py:855 +#: erpnext/controllers/taxes_and_totals.py:843 msgid "Advance amount cannot be greater than {0} {1}" msgstr "" @@ -3504,7 +3516,7 @@ msgstr "" #: erpnext/accounts/doctype/journal_entry_account/journal_entry_account.json #: erpnext/accounts/report/bank_clearance_summary/bank_clearance_summary.py:39 #: erpnext/accounts/report/bank_reconciliation_statement/bank_reconciliation_statement.py:91 -#: erpnext/accounts/report/general_ledger/general_ledger.py:711 +#: erpnext/accounts/report/general_ledger/general_ledger.py:709 msgid "Against Account" msgstr "" @@ -3616,7 +3628,7 @@ msgstr "" #. Label of the against_voucher (Dynamic Link) field in DocType 'GL Entry' #: erpnext/accounts/doctype/gl_entry/gl_entry.json -#: erpnext/accounts/report/general_ledger/general_ledger.py:731 +#: erpnext/accounts/report/general_ledger/general_ledger.py:729 msgid "Against Voucher" msgstr "" @@ -3640,7 +3652,7 @@ msgstr "" #: erpnext/accounts/doctype/advance_payment_ledger_entry/advance_payment_ledger_entry.json #: erpnext/accounts/doctype/gl_entry/gl_entry.json #: erpnext/accounts/doctype/payment_ledger_entry/payment_ledger_entry.json -#: erpnext/accounts/report/general_ledger/general_ledger.py:729 +#: erpnext/accounts/report/general_ledger/general_ledger.py:727 #: erpnext/accounts/report/payment_ledger/payment_ledger.py:177 msgid "Against Voucher Type" msgstr "" @@ -3767,7 +3779,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:1422 erpnext/public/js/setup_wizard.js:173 +#: erpnext/accounts/utils.py:1422 erpnext/public/js/setup_wizard.js:180 msgid "All Accounts" msgstr "" @@ -3931,7 +3943,7 @@ msgstr "" msgid "All items are already requested" msgstr "" -#: erpnext/stock/doctype/purchase_receipt/purchase_receipt.py:1326 +#: erpnext/stock/doctype/purchase_receipt/purchase_receipt.py:1324 msgid "All items have already been Invoiced/Returned" msgstr "" @@ -4141,7 +4153,7 @@ msgstr "" msgid "Allow Item To Be Added Multiple Times in a Transaction" msgstr "" -#: erpnext/controllers/selling_controller.py:763 +#: erpnext/controllers/selling_controller.py:765 msgid "Allow Item to Be Added Multiple Times in a Transaction" msgstr "" @@ -5576,7 +5588,7 @@ msgstr "" msgid "As the field {0} is enabled, the value of the field {1} should be more than 1." msgstr "" -#: erpnext/stock/doctype/item/item.py:983 +#: erpnext/stock/doctype/item/item.py:979 msgid "As there are existing submitted transactions against item {0}, you can not change the value of {1}." msgstr "" @@ -5979,7 +5991,7 @@ msgstr "" msgid "Asset cannot be cancelled, as it is already {0}" msgstr "" -#: erpnext/assets/doctype/asset/depreciation.py:389 +#: erpnext/assets/doctype/asset/depreciation.py:387 msgid "Asset cannot be scrapped before the last depreciation entry." msgstr "" @@ -6015,7 +6027,7 @@ msgstr "" msgid "Asset received at Location {0} and issued to Employee {1}" msgstr "" -#: erpnext/assets/doctype/asset/depreciation.py:450 +#: erpnext/assets/doctype/asset/depreciation.py:448 msgid "Asset restored" msgstr "" @@ -6023,20 +6035,20 @@ msgstr "" msgid "Asset restored after Asset Capitalization {0} was cancelled" msgstr "" -#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:1341 +#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:1339 msgid "Asset returned" msgstr "" -#: erpnext/assets/doctype/asset/depreciation.py:437 +#: erpnext/assets/doctype/asset/depreciation.py:435 msgid "Asset scrapped" msgstr "" -#: erpnext/assets/doctype/asset/depreciation.py:439 +#: erpnext/assets/doctype/asset/depreciation.py:437 msgid "Asset scrapped via Journal Entry {0}" msgstr "" -#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:1341 -#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:1344 +#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:1339 +#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:1342 msgid "Asset sold" msgstr "" @@ -6060,7 +6072,7 @@ msgstr "" msgid "Asset {0} cannot be received at a location and given to an employee in a single movement" msgstr "" -#: erpnext/assets/doctype/asset/depreciation.py:371 +#: erpnext/assets/doctype/asset/depreciation.py:369 msgid "Asset {0} cannot be scrapped, as it is already {1}" msgstr "" @@ -6093,11 +6105,11 @@ msgstr "" msgid "Asset {0} has been updated. Please set the depreciation details if any and submit it." msgstr "" -#: erpnext/assets/doctype/asset/depreciation.py:369 +#: erpnext/assets/doctype/asset/depreciation.py:367 msgid "Asset {0} must be submitted" msgstr "" -#: erpnext/controllers/buying_controller.py:859 +#: erpnext/controllers/buying_controller.py:913 msgid "Asset {assets_link} created for {item_code}" msgstr "" @@ -6127,11 +6139,11 @@ msgstr "" msgid "Assets" msgstr "" -#: erpnext/controllers/buying_controller.py:877 +#: erpnext/controllers/buying_controller.py:931 msgid "Assets not created for {item_code}. You will have to create asset manually." msgstr "" -#: erpnext/controllers/buying_controller.py:864 +#: erpnext/controllers/buying_controller.py:918 msgid "Assets {assets_link} created for {item_code}" msgstr "" @@ -6189,7 +6201,7 @@ msgstr "" msgid "At least one asset has to be selected." msgstr "" -#: erpnext/accounts/doctype/pos_invoice/pos_invoice.py:883 +#: erpnext/accounts/doctype/pos_invoice/pos_invoice.py:881 msgid "At least one invoice has to be selected." msgstr "" @@ -6197,7 +6209,7 @@ msgstr "" msgid "At least one item should be entered with negative quantity in return document" msgstr "" -#: erpnext/accounts/doctype/pos_invoice/pos_invoice.py:493 +#: erpnext/accounts/doctype/pos_invoice/pos_invoice.py:491 #: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:538 msgid "At least one mode of payment is required for POS invoice." msgstr "" @@ -6226,7 +6238,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:865 +#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:863 msgid "At row {0}: Batch No is mandatory for Item {1}" msgstr "" @@ -6234,15 +6246,15 @@ 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:850 +#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:848 msgid "At row {0}: Qty is mandatory for the batch {1}" msgstr "" -#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:857 +#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:855 msgid "At row {0}: Serial No is mandatory for Item {1}" msgstr "" -#: erpnext/controllers/stock_controller.py:504 +#: erpnext/controllers/stock_controller.py:515 msgid "At row {0}: Serial and Batch Bundle {1} has already created. Please remove the values from the serial no or batch no fields." msgstr "" @@ -6312,7 +6324,7 @@ msgstr "" msgid "Attribute Value" msgstr "" -#: erpnext/stock/doctype/item/item.py:924 +#: erpnext/stock/doctype/item/item.py:922 msgid "Attribute table is mandatory" msgstr "" @@ -6320,11 +6332,11 @@ msgstr "" msgid "Attribute value: {0} must appear only once" msgstr "" -#: erpnext/stock/doctype/item/item.py:928 +#: erpnext/stock/doctype/item/item.py:926 msgid "Attribute {0} selected multiple times in Attributes Table" msgstr "" -#: erpnext/stock/doctype/item/item.py:856 +#: erpnext/stock/doctype/item/item.py:854 msgid "Attributes" msgstr "" @@ -7203,7 +7215,7 @@ msgstr "" msgid "Balance (Dr - Cr)" msgstr "" -#: erpnext/accounts/report/general_ledger/general_ledger.py:663 +#: erpnext/accounts/report/general_ledger/general_ledger.py:661 msgid "Balance ({0})" msgstr "" @@ -7608,11 +7620,11 @@ msgstr "" msgid "Barcode Type" msgstr "" -#: erpnext/stock/doctype/item/item.py:460 +#: erpnext/stock/doctype/item/item.py:458 msgid "Barcode {0} already used in Item {1}" msgstr "" -#: erpnext/stock/doctype/item/item.py:475 +#: erpnext/stock/doctype/item/item.py:473 msgid "Barcode {0} is not a valid {1} code" msgstr "" @@ -7893,11 +7905,11 @@ msgstr "" msgid "Batch No" msgstr "" -#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:868 +#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:866 msgid "Batch No is mandatory" msgstr "" -#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:2630 +#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:2628 msgid "Batch No {0} does not exists" msgstr "" @@ -7905,7 +7917,7 @@ msgstr "" 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:365 +#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:363 msgid "Batch No {0} is not present in the original {1} {2}, hence you can't return it against the {1} {2}" msgstr "" @@ -7920,7 +7932,7 @@ msgstr "" msgid "Batch Nos" msgstr "" -#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:1422 +#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:1420 msgid "Batch Nos are created successfully" msgstr "" @@ -7969,7 +7981,7 @@ msgstr "" msgid "Batch not created for item {} since it does not have a batch series." msgstr "" -#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:258 +#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:256 msgid "Batch {0} and Warehouse" msgstr "" @@ -8146,7 +8158,7 @@ msgstr "" msgid "Billing Address Name" msgstr "" -#: erpnext/controllers/accounts_controller.py:501 +#: erpnext/controllers/accounts_controller.py:503 msgid "Billing Address does not belong to the {0}" msgstr "" @@ -8472,7 +8484,7 @@ msgstr "" msgid "Booked Fixed Asset" msgstr "" -#: erpnext/stock/doctype/warehouse/warehouse.py:142 +#: erpnext/stock/doctype/warehouse/warehouse.py:143 msgid "Booking stock value across multiple accounts will make it harder to track stock and account value." msgstr "" @@ -9249,7 +9261,7 @@ msgid "Can only make payment against unbilled {0}" msgstr "" #: erpnext/accounts/doctype/payment_entry/payment_entry.js:1458 -#: erpnext/controllers/accounts_controller.py:2949 +#: erpnext/controllers/accounts_controller.py:3034 #: erpnext/public/js/controllers/accounts.js:90 msgid "Can refer row only if the charge type is 'On Previous Row Amount' or 'Previous Row Total'" msgstr "" @@ -9411,9 +9423,9 @@ msgstr "" msgid "Cannot Create Return" msgstr "" -#: erpnext/stock/doctype/item/item.py:631 -#: erpnext/stock/doctype/item/item.py:644 -#: erpnext/stock/doctype/item/item.py:658 +#: erpnext/stock/doctype/item/item.py:629 +#: erpnext/stock/doctype/item/item.py:642 +#: erpnext/stock/doctype/item/item.py:656 msgid "Cannot Merge" msgstr "" @@ -9453,7 +9465,7 @@ msgstr "" msgid "Cannot cancel the transaction. Reposting of item valuation on submission is not completed yet." msgstr "" -#: erpnext/controllers/buying_controller.py:967 +#: erpnext/controllers/buying_controller.py:1021 msgid "Cannot cancel this document as it is linked with the submitted asset {asset_link}. Please cancel the asset to continue." msgstr "" @@ -9461,7 +9473,7 @@ msgstr "" msgid "Cannot cancel transaction for Completed Work Order." msgstr "" -#: erpnext/stock/doctype/item/item.py:876 +#: erpnext/stock/doctype/item/item.py:874 msgid "Cannot change Attributes after stock transaction. Make a new Item and transfer stock to the new Item" msgstr "" @@ -9477,7 +9489,7 @@ msgstr "" msgid "Cannot change Service Stop Date for item in row {0}" msgstr "" -#: erpnext/stock/doctype/item/item.py:867 +#: erpnext/stock/doctype/item/item.py:865 msgid "Cannot change Variant properties after stock transaction. You will have to make a new Item to do this." msgstr "" @@ -9505,16 +9517,16 @@ msgstr "" msgid "Cannot covert to Group because Account Type is selected." msgstr "" -#: erpnext/stock/doctype/purchase_receipt/purchase_receipt.py:981 +#: erpnext/stock/doctype/purchase_receipt/purchase_receipt.py:979 msgid "Cannot create Stock Reservation Entries for future dated Purchase Receipts." msgstr "" -#: erpnext/selling/doctype/sales_order/sales_order.py:1722 +#: erpnext/selling/doctype/sales_order/sales_order.py:1720 #: erpnext/stock/doctype/pick_list/pick_list.py:182 msgid "Cannot create a pick list for Sales Order {0} because it has reserved stock. Please unreserve the stock in order to create a pick list." msgstr "" -#: erpnext/accounts/general_ledger.py:147 +#: erpnext/accounts/general_ledger.py:148 msgid "Cannot create accounting entries against disabled accounts: {0}" msgstr "" @@ -9547,8 +9559,8 @@ msgstr "" msgid "Cannot enqueue multi docs for one company. {0} is already queued/running for company: {1}" msgstr "" -#: erpnext/selling/doctype/sales_order/sales_order.py:701 -#: erpnext/selling/doctype/sales_order/sales_order.py:724 +#: erpnext/selling/doctype/sales_order/sales_order.py:699 +#: erpnext/selling/doctype/sales_order/sales_order.py:722 msgid "Cannot ensure delivery by Serial No as Item {0} is added with and without Ensure Delivery by Serial No." msgstr "" @@ -9556,7 +9568,7 @@ msgstr "" msgid "Cannot find Item with this Barcode" msgstr "" -#: erpnext/controllers/accounts_controller.py:3486 +#: erpnext/controllers/accounts_controller.py:3571 msgid "Cannot find a default warehouse for item {0}. Please set one in the Item Master or in Stock Settings." msgstr "" @@ -9564,7 +9576,7 @@ msgstr "" msgid "Cannot make any transactions until the deletion job is completed" msgstr "" -#: erpnext/controllers/accounts_controller.py:2077 +#: erpnext/controllers/accounts_controller.py:2162 msgid "Cannot overbill for Item {0} in row {1} more than {2}. To allow over-billing, please set allowance in Accounts Settings" msgstr "" @@ -9585,7 +9597,7 @@ msgid "Cannot receive from customer against negative outstanding" msgstr "" #: erpnext/accounts/doctype/payment_entry/payment_entry.js:1475 -#: erpnext/controllers/accounts_controller.py:2964 +#: erpnext/controllers/accounts_controller.py:3049 #: erpnext/public/js/controllers/accounts.js:100 msgid "Cannot refer row number greater than or equal to current row number for this Charge type" msgstr "" @@ -9601,13 +9613,13 @@ msgstr "" #: erpnext/accounts/doctype/payment_entry/payment_entry.js:1467 #: erpnext/accounts/doctype/payment_entry/payment_entry.js:1646 #: erpnext/accounts/doctype/payment_entry/payment_entry.py:1917 -#: erpnext/controllers/accounts_controller.py:2954 +#: erpnext/controllers/accounts_controller.py:3039 #: erpnext/public/js/controllers/accounts.js:94 #: erpnext/public/js/controllers/taxes_and_totals.js:470 msgid "Cannot select charge type as 'On Previous Row Amount' or 'On Previous Row Total' for first row" msgstr "" -#: erpnext/selling/doctype/quotation/quotation.py:290 +#: erpnext/selling/doctype/quotation/quotation.py:283 msgid "Cannot set as Lost as Sales Order is made." msgstr "" @@ -9615,15 +9627,15 @@ msgstr "" msgid "Cannot set authorization on basis of Discount for {0}" msgstr "" -#: erpnext/stock/doctype/item/item.py:722 +#: erpnext/stock/doctype/item/item.py:720 msgid "Cannot set multiple Item Defaults for a company." msgstr "" -#: erpnext/controllers/accounts_controller.py:3634 +#: erpnext/controllers/accounts_controller.py:3719 msgid "Cannot set quantity less than delivered quantity" msgstr "" -#: erpnext/controllers/accounts_controller.py:3637 +#: erpnext/controllers/accounts_controller.py:3722 msgid "Cannot set quantity less than received quantity" msgstr "" @@ -9783,15 +9795,15 @@ msgstr "" msgid "Cash Flow Statement" msgstr "" -#: erpnext/accounts/report/cash_flow/cash_flow.py:153 +#: erpnext/accounts/report/cash_flow/cash_flow.py:157 msgid "Cash Flow from Financing" msgstr "" -#: erpnext/accounts/report/cash_flow/cash_flow.py:146 +#: erpnext/accounts/report/cash_flow/cash_flow.py:150 msgid "Cash Flow from Investing" msgstr "" -#: erpnext/accounts/report/cash_flow/cash_flow.py:134 +#: erpnext/accounts/report/cash_flow/cash_flow.py:138 msgid "Cash Flow from Operations" msgstr "" @@ -10046,7 +10058,7 @@ msgid "Channel Partner" msgstr "" #: erpnext/accounts/doctype/payment_entry/payment_entry.py:2346 -#: erpnext/controllers/accounts_controller.py:3017 +#: erpnext/controllers/accounts_controller.py:3102 msgid "Charge of type 'Actual' in row {0} cannot be included in Item Rate or Paid Amount" msgstr "" @@ -10102,7 +10114,7 @@ msgstr "" #: erpnext/accounts/doctype/account/account_tree.js:5 #: erpnext/accounts/doctype/cost_center/cost_center_tree.js:52 #: erpnext/accounts/workspace/accounting/accounting.json -#: erpnext/public/js/setup_wizard.js:36 +#: erpnext/public/js/setup_wizard.js:43 #: erpnext/setup/doctype/company/company.js:104 #: erpnext/setup/doctype/company/company.json #: erpnext/setup/workspace/home/home.json @@ -10290,7 +10302,7 @@ msgstr "" msgid "Child nodes can be only created under 'Group' type nodes" msgstr "" -#: erpnext/stock/doctype/warehouse/warehouse.py:99 +#: erpnext/stock/doctype/warehouse/warehouse.py:100 msgid "Child warehouse exists for this warehouse. You can not delete this warehouse." msgstr "" @@ -10442,7 +10454,7 @@ msgstr "" msgid "Close Replied Opportunity After Days" msgstr "" -#: erpnext/selling/page/point_of_sale/pos_controller.js:238 +#: erpnext/selling/page/point_of_sale/pos_controller.js:237 msgid "Close the POS" msgstr "" @@ -10504,7 +10516,7 @@ msgstr "" msgid "Closed Work Order can not be stopped or Re-opened" msgstr "" -#: erpnext/selling/doctype/sales_order/sales_order.py:467 +#: erpnext/selling/doctype/sales_order/sales_order.py:465 msgid "Closed order cannot be cancelled. Unclose to cancel." msgstr "" @@ -10513,17 +10525,17 @@ msgstr "" msgid "Closing" msgstr "" -#: erpnext/accounts/report/trial_balance/trial_balance.py:482 +#: erpnext/accounts/report/trial_balance/trial_balance.py:478 #: erpnext/accounts/report/trial_balance_for_party/trial_balance_for_party.py:226 msgid "Closing (Cr)" msgstr "" -#: erpnext/accounts/report/trial_balance/trial_balance.py:475 +#: erpnext/accounts/report/trial_balance/trial_balance.py:471 #: erpnext/accounts/report/trial_balance_for_party/trial_balance_for_party.py:219 msgid "Closing (Dr)" msgstr "" -#: erpnext/accounts/report/general_ledger/general_ledger.py:381 +#: erpnext/accounts/report/general_ledger/general_ledger.py:379 msgid "Closing (Opening + Total)" msgstr "" @@ -10597,7 +10609,7 @@ msgstr "" #: erpnext/public/js/bom_configurator/bom_configurator.bundle.js:144 #: erpnext/public/js/bom_configurator/bom_configurator.bundle.js:151 #: erpnext/public/js/bom_configurator/bom_configurator.bundle.js:194 -#: erpnext/public/js/setup_wizard.js:189 +#: erpnext/public/js/setup_wizard.js:196 msgid "Collapse All" msgstr "" @@ -10758,7 +10770,7 @@ msgstr "" msgid "Communication Medium Type" msgstr "" -#: erpnext/setup/install.py:100 +#: erpnext/setup/install.py:93 msgid "Compact Item Print" msgstr "" @@ -11196,11 +11208,11 @@ msgstr "" msgid "Company" msgstr "" -#: erpnext/public/js/setup_wizard.js:29 +#: erpnext/public/js/setup_wizard.js:36 msgid "Company Abbreviation" msgstr "" -#: erpnext/public/js/setup_wizard.js:163 +#: erpnext/public/js/setup_wizard.js:170 msgid "Company Abbreviation cannot have more than 5 characters" msgstr "" @@ -11323,11 +11335,11 @@ msgstr "" #. Label of the company_name (Data) field in DocType 'Prospect' #: erpnext/crm/doctype/prospect/prospect.json -#: erpnext/public/js/setup_wizard.js:23 +#: erpnext/public/js/setup_wizard.js:30 msgid "Company Name" msgstr "" -#: erpnext/public/js/setup_wizard.js:66 +#: erpnext/public/js/setup_wizard.js:73 msgid "Company Name cannot be Company" msgstr "" @@ -11349,7 +11361,7 @@ msgstr "" msgid "Company and Posting Date is mandatory" msgstr "" -#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:2376 +#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:2374 msgid "Company currencies of both the companies should match for Inter Company Transactions." msgstr "" @@ -11417,7 +11429,7 @@ msgstr "" msgid "Company {} does not exist yet. Taxes setup aborted." msgstr "" -#: erpnext/accounts/doctype/pos_invoice/pos_invoice.py:537 +#: erpnext/accounts/doctype/pos_invoice/pos_invoice.py:535 msgid "Company {} does not match with POS Profile Company {}" msgstr "" @@ -12183,7 +12195,7 @@ msgstr "" msgid "Contact Person" msgstr "" -#: erpnext/controllers/accounts_controller.py:513 +#: erpnext/controllers/accounts_controller.py:515 msgid "Contact Person does not belong to the {0}" msgstr "" @@ -12387,23 +12399,23 @@ msgstr "" msgid "Conversion Rate" msgstr "" -#: erpnext/stock/doctype/item/item.py:396 +#: erpnext/stock/doctype/item/item.py:394 msgid "Conversion factor for default Unit of Measure must be 1 in row {0}" msgstr "" -#: erpnext/controllers/stock_controller.py:76 +#: erpnext/controllers/stock_controller.py:77 msgid "Conversion factor for item {0} has been reset to 1.0 as the uom {1} is same as stock uom {2}." msgstr "" -#: erpnext/controllers/accounts_controller.py:2770 +#: erpnext/controllers/accounts_controller.py:2855 msgid "Conversion rate cannot be 0" msgstr "" -#: erpnext/controllers/accounts_controller.py:2777 +#: erpnext/controllers/accounts_controller.py:2862 msgid "Conversion rate is 1.00, but document currency is different from company currency" msgstr "" -#: erpnext/controllers/accounts_controller.py:2773 +#: erpnext/controllers/accounts_controller.py:2858 msgid "Conversion rate must be 1.00 if document currency is same as company currency" msgstr "" @@ -12579,6 +12591,8 @@ msgstr "" #. Label of the cost_center (Link) field in DocType 'Subcontracting Receipt' #. Label of the cost_center (Link) field in DocType 'Subcontracting Receipt #. Item' +#. Label of the cost_center (Link) field in DocType 'Subcontracting Receipt +#. Supplied Item' #: erpnext/accounts/doctype/account_closing_balance/account_closing_balance.json #: erpnext/accounts/doctype/advance_taxes_and_charges/advance_taxes_and_charges.json #: erpnext/accounts/doctype/budget/budget.json @@ -12622,7 +12636,7 @@ msgstr "" #: erpnext/accounts/report/asset_depreciation_ledger/asset_depreciation_ledger.py:197 #: erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.js:98 #: erpnext/accounts/report/general_ledger/general_ledger.js:153 -#: erpnext/accounts/report/general_ledger/general_ledger.py:724 +#: erpnext/accounts/report/general_ledger/general_ledger.py:722 #: erpnext/accounts/report/gross_profit/gross_profit.js:68 #: erpnext/accounts/report/gross_profit/gross_profit.py:364 #: erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.py:307 @@ -12663,6 +12677,7 @@ msgstr "" #: erpnext/subcontracting/doctype/subcontracting_order_item/subcontracting_order_item.json #: erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.json #: erpnext/subcontracting/doctype/subcontracting_receipt_item/subcontracting_receipt_item.json +#: erpnext/subcontracting/doctype/subcontracting_receipt_supplied_item/subcontracting_receipt_supplied_item.json msgid "Cost Center" msgstr "" @@ -12737,7 +12752,7 @@ msgstr "" msgid "Cost Center {} is a group cost center and group cost centers cannot be used in transactions" msgstr "" -#: erpnext/accounts/report/financial_statements.py:637 +#: erpnext/accounts/report/financial_statements.py:633 msgid "Cost Center: {0} does not exist" msgstr "" @@ -12845,7 +12860,7 @@ msgstr "" msgid "Could Not Delete Demo Data" msgstr "" -#: erpnext/selling/doctype/quotation/quotation.py:602 +#: erpnext/selling/doctype/quotation/quotation.py:584 msgid "Could not auto create Customer due to the following missing mandatory field(s):" msgstr "" @@ -13123,15 +13138,15 @@ msgstr "" msgid "Create Depreciation Entry" msgstr "" -#: erpnext/utilities/activation.py:136 +#: erpnext/utilities/activation.py:137 msgid "Create Employee" msgstr "" -#: erpnext/utilities/activation.py:134 +#: erpnext/utilities/activation.py:135 msgid "Create Employee Records" msgstr "" -#: erpnext/utilities/activation.py:135 +#: erpnext/utilities/activation.py:136 msgid "Create Employee records." msgstr "" @@ -13166,11 +13181,11 @@ msgstr "" msgid "Create Journal Entry" msgstr "" -#: erpnext/utilities/activation.py:78 +#: erpnext/utilities/activation.py:79 msgid "Create Lead" msgstr "" -#: erpnext/utilities/activation.py:76 +#: erpnext/utilities/activation.py:77 msgid "Create Leads" msgstr "" @@ -13232,15 +13247,15 @@ msgid "Create Prospect" msgstr "" #: erpnext/selling/doctype/sales_order/sales_order.js:1226 -#: erpnext/utilities/activation.py:105 +#: erpnext/utilities/activation.py:106 msgid "Create Purchase Order" msgstr "" -#: erpnext/utilities/activation.py:103 +#: erpnext/utilities/activation.py:104 msgid "Create Purchase Orders" msgstr "" -#: erpnext/utilities/activation.py:87 +#: erpnext/utilities/activation.py:88 msgid "Create Quotation" msgstr "" @@ -13264,11 +13279,11 @@ msgstr "" msgid "Create Sales Invoice" msgstr "" -#: erpnext/utilities/activation.py:96 +#: erpnext/utilities/activation.py:97 msgid "Create Sales Order" msgstr "" -#: erpnext/utilities/activation.py:95 +#: erpnext/utilities/activation.py:96 msgid "Create Sales Orders to help you plan your work and deliver on-time" msgstr "" @@ -13289,13 +13304,13 @@ msgstr "" msgid "Create Tax Template" msgstr "" -#: erpnext/utilities/activation.py:127 +#: erpnext/utilities/activation.py:128 msgid "Create Timesheet" msgstr "" #. Label of the create_user (Button) field in DocType 'Employee' #: erpnext/setup/doctype/employee/employee.json -#: erpnext/utilities/activation.py:116 +#: erpnext/utilities/activation.py:117 msgid "Create User" msgstr "" @@ -13304,7 +13319,7 @@ msgstr "" msgid "Create User Permission" msgstr "" -#: erpnext/utilities/activation.py:112 +#: erpnext/utilities/activation.py:113 msgid "Create Users" msgstr "" @@ -13332,11 +13347,11 @@ msgstr "" msgid "Create a variant with the template image." msgstr "" -#: erpnext/stock/stock_ledger.py:1886 +#: erpnext/stock/stock_ledger.py:1889 msgid "Create an incoming stock transaction for the Item." msgstr "" -#: erpnext/utilities/activation.py:85 +#: erpnext/utilities/activation.py:86 msgid "Create customer quotes" msgstr "" @@ -13462,17 +13477,17 @@ msgstr "" #: erpnext/accounts/report/general_ledger/general_ledger.html:87 #: 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:468 +#: erpnext/accounts/report/trial_balance/trial_balance.py:464 #: 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" msgstr "" -#: erpnext/accounts/report/general_ledger/general_ledger.py:681 +#: erpnext/accounts/report/general_ledger/general_ledger.py:679 msgid "Credit (Transaction)" msgstr "" -#: erpnext/accounts/report/general_ledger/general_ledger.py:656 +#: erpnext/accounts/report/general_ledger/general_ledger.py:654 msgid "Credit ({0})" msgstr "" @@ -13623,7 +13638,7 @@ msgstr "" #: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json #: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:368 #: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:376 -#: erpnext/controllers/accounts_controller.py:2189 +#: erpnext/controllers/accounts_controller.py:2274 msgid "Credit To" msgstr "" @@ -13692,7 +13707,7 @@ msgstr "" msgid "Criteria weights must add up to 100%" msgstr "" -#: erpnext/accounts/doctype/accounts_settings/accounts_settings.py:139 +#: erpnext/accounts/doctype/accounts_settings/accounts_settings.py:142 msgid "Cron Interval should be between 1 and 59 Min" msgstr "" @@ -13816,7 +13831,7 @@ msgstr "" #: erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.py:208 #: erpnext/accounts/report/dimension_wise_accounts_balance_report/dimension_wise_accounts_balance_report.py:208 #: erpnext/accounts/report/financial_statements.html:29 -#: erpnext/accounts/report/financial_statements.py:656 +#: erpnext/accounts/report/financial_statements.py:652 #: erpnext/accounts/report/general_ledger/general_ledger.js:147 #: erpnext/accounts/report/gross_profit/gross_profit.py:427 #: erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.py:696 @@ -13825,7 +13840,7 @@ msgstr "" #: erpnext/accounts/report/purchase_register/purchase_register.py:229 #: erpnext/accounts/report/sales_register/sales_register.py:265 #: erpnext/accounts/report/trial_balance/trial_balance.js:76 -#: erpnext/accounts/report/trial_balance/trial_balance.py:440 +#: erpnext/accounts/report/trial_balance/trial_balance.py:436 #: erpnext/accounts/report/trial_balance_for_party/trial_balance_for_party.py:233 #: erpnext/accounts/workspace/accounting/accounting.json #: erpnext/buying/doctype/purchase_order/purchase_order.json @@ -14692,7 +14707,7 @@ msgid "Customer required for 'Customerwise Discount'" msgstr "" #: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:1085 -#: erpnext/selling/doctype/sales_order/sales_order.py:373 +#: erpnext/selling/doctype/sales_order/sales_order.py:371 #: erpnext/stock/doctype/delivery_note/delivery_note.py:406 msgid "Customer {0} does not belong to project {1}" msgstr "" @@ -15173,17 +15188,17 @@ msgstr "" #: erpnext/accounts/report/general_ledger/general_ledger.html:86 #: 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:461 +#: erpnext/accounts/report/trial_balance/trial_balance.py:457 #: 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" msgstr "" -#: erpnext/accounts/report/general_ledger/general_ledger.py:674 +#: erpnext/accounts/report/general_ledger/general_ledger.py:672 msgid "Debit (Transaction)" msgstr "" -#: erpnext/accounts/report/general_ledger/general_ledger.py:649 +#: erpnext/accounts/report/general_ledger/general_ledger.py:647 msgid "Debit ({0})" msgstr "" @@ -15249,7 +15264,7 @@ msgstr "" #: erpnext/accounts/doctype/sales_invoice/sales_invoice.json #: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:953 #: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:964 -#: erpnext/controllers/accounts_controller.py:2189 +#: erpnext/controllers/accounts_controller.py:2274 msgid "Debit To" msgstr "" @@ -15257,7 +15272,7 @@ msgstr "" msgid "Debit To is required" msgstr "" -#: erpnext/accounts/general_ledger.py:504 +#: erpnext/accounts/general_ledger.py:506 msgid "Debit and Credit not equal for {0} #{1}. Difference is {2}." msgstr "" @@ -15406,7 +15421,7 @@ msgstr "" msgid "Default BOM" msgstr "" -#: erpnext/stock/doctype/item/item.py:421 +#: erpnext/stock/doctype/item/item.py:419 msgid "Default BOM ({0}) must be active for this item or its template" msgstr "" @@ -15414,7 +15429,7 @@ msgstr "" msgid "Default BOM for {0} not found" msgstr "" -#: erpnext/controllers/accounts_controller.py:3675 +#: erpnext/controllers/accounts_controller.py:3760 msgid "Default BOM not found for FG Item {0}" msgstr "" @@ -15749,15 +15764,15 @@ msgstr "" msgid "Default Unit of Measure" msgstr "" -#: erpnext/stock/doctype/item/item.py:1266 +#: erpnext/stock/doctype/item/item.py:1262 msgid "Default Unit of Measure for Item {0} cannot be changed directly because you have already made some transaction(s) with another UOM. You need to either cancel the linked documents or create a new Item." msgstr "" -#: erpnext/stock/doctype/item/item.py:1249 +#: erpnext/stock/doctype/item/item.py:1245 msgid "Default Unit of Measure for Item {0} cannot be changed directly because you have already made some transaction(s) with another UOM. You will need to create a new Item to use a different Default UOM." msgstr "" -#: erpnext/stock/doctype/item/item.py:902 +#: erpnext/stock/doctype/item/item.py:900 msgid "Default Unit of Measure for Variant '{0}' must be same as in Template '{1}'" msgstr "" @@ -16212,7 +16227,7 @@ msgstr "" msgid "Delivery Note Trends" msgstr "" -#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:1271 +#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:1269 msgid "Delivery Note {0} is not submitted" msgstr "" @@ -16288,7 +16303,7 @@ msgstr "" msgid "Delivery to" msgstr "" -#: erpnext/selling/doctype/sales_order/sales_order.py:392 +#: erpnext/selling/doctype/sales_order/sales_order.py:390 msgid "Delivery warehouse required for stock item {0}" msgstr "" @@ -16406,7 +16421,7 @@ msgstr "" #: erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py:56 #: erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts_with_account_number.py:81 #: erpnext/accounts/report/account_balance/account_balance.js:44 -#: erpnext/accounts/report/cash_flow/cash_flow.py:136 +#: erpnext/accounts/report/cash_flow/cash_flow.py:140 #: erpnext/assets/doctype/asset/asset.json msgid "Depreciation" msgstr "" @@ -16459,7 +16474,7 @@ msgstr "" msgid "Depreciation Expense Account" msgstr "" -#: erpnext/assets/doctype/asset/depreciation.py:299 +#: erpnext/assets/doctype/asset/depreciation.py:297 msgid "Depreciation Expense Account should be an Income or Expense Account." msgstr "" @@ -16935,7 +16950,7 @@ msgstr "" msgid "Difference Account must be a Asset/Liability type account (Temporary Opening), since this Stock Entry is an Opening Entry" msgstr "" -#: erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py:950 +#: erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py:955 msgid "Difference Account must be a Asset/Liability type account, since this Stock Reconciliation is an Opening Entry" msgstr "" @@ -17193,7 +17208,7 @@ msgstr "" msgid "Disabled" msgstr "" -#: erpnext/accounts/general_ledger.py:148 +#: erpnext/accounts/general_ledger.py:149 msgid "Disabled Account Selected" msgstr "" @@ -17201,11 +17216,11 @@ msgstr "" msgid "Disabled Warehouse {0} cannot be used for this transaction." msgstr "" -#: erpnext/controllers/accounts_controller.py:748 +#: erpnext/controllers/accounts_controller.py:833 msgid "Disabled pricing rules since this {} is an internal transfer" msgstr "" -#: erpnext/controllers/accounts_controller.py:762 +#: erpnext/controllers/accounts_controller.py:847 msgid "Disabled tax included prices since this {} is an internal transfer" msgstr "" @@ -17564,7 +17579,7 @@ msgstr "" msgid "Disposal Date" msgstr "" -#: erpnext/assets/doctype/asset/depreciation.py:824 +#: erpnext/assets/doctype/asset/depreciation.py:822 msgid "Disposal date {0} cannot be before {1} date {2} of the asset." msgstr "" @@ -17831,7 +17846,7 @@ msgstr "" msgid "Document Type already used as a dimension" msgstr "" -#: erpnext/setup/install.py:158 +#: erpnext/setup/install.py:151 msgid "Documentation" msgstr "" @@ -18250,7 +18265,7 @@ msgstr "" msgid "Duplicate POS Fields" msgstr "" -#: erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.py:91 +#: erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.py:89 #: erpnext/accounts/doctype/pos_invoice_merge_log/pos_invoice_merge_log.py:66 msgid "Duplicate POS Invoices found" msgstr "" @@ -18259,7 +18274,7 @@ msgstr "" msgid "Duplicate Project with Tasks" msgstr "" -#: erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.py:144 +#: erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.py:142 msgid "Duplicate Sales Invoices found" msgstr "" @@ -18867,7 +18882,7 @@ msgstr "" msgid "Ems(Pica)" msgstr "" -#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1475 +#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1473 msgid "Enable Allow Partial Reservation in the Stock Settings to reserve partial stock." msgstr "" @@ -18883,7 +18898,7 @@ msgstr "" msgid "Enable Auto Email" msgstr "" -#: erpnext/stock/doctype/item/item.py:1058 +#: erpnext/stock/doctype/item/item.py:1054 msgid "Enable Auto Re-Order" msgstr "" @@ -19088,7 +19103,7 @@ msgstr "" #: erpnext/projects/doctype/timesheet/timesheet.json #: erpnext/projects/report/project_summary/project_summary.py:80 #: erpnext/public/js/financial_statements.js:193 -#: erpnext/public/js/setup_wizard.js:43 +#: erpnext/public/js/setup_wizard.js:50 #: erpnext/selling/report/payment_terms_status_for_sales_order/payment_terms_status_for_sales_order.js:23 #: erpnext/setup/doctype/vehicle/vehicle.json #: erpnext/support/doctype/service_level_agreement/service_level_agreement.json @@ -19348,7 +19363,7 @@ msgstr "" #: erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.json #: erpnext/manufacturing/doctype/job_card/job_card.py:875 #: erpnext/stock/doctype/repost_item_valuation/repost_item_valuation.json -#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:298 +#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:296 msgid "Error" msgstr "" @@ -19396,7 +19411,7 @@ msgstr "" msgid "Error in party matching for Bank Transaction {0}" msgstr "" -#: erpnext/assets/doctype/asset/depreciation.py:315 +#: erpnext/assets/doctype/asset/depreciation.py:313 msgid "Error while posting depreciation entries" msgstr "" @@ -19472,7 +19487,7 @@ msgstr "" msgid "Example URL" msgstr "" -#: erpnext/stock/doctype/item/item.py:989 +#: erpnext/stock/doctype/item/item.py:985 msgid "Example of a linked document: {0}" msgstr "" @@ -19488,7 +19503,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:2149 +#: erpnext/stock/stock_ledger.py:2152 msgid "Example: Serial No {0} reserved in {1}." msgstr "" @@ -19542,8 +19557,8 @@ msgstr "" msgid "Exchange Gain/Loss" msgstr "" -#: erpnext/controllers/accounts_controller.py:1596 -#: erpnext/controllers/accounts_controller.py:1680 +#: erpnext/controllers/accounts_controller.py:1683 +#: erpnext/controllers/accounts_controller.py:1767 msgid "Exchange Gain/Loss amount has been booked through {0}" msgstr "" @@ -19697,7 +19712,7 @@ msgstr "" #: erpnext/public/js/bom_configurator/bom_configurator.bundle.js:154 #: erpnext/public/js/bom_configurator/bom_configurator.bundle.js:187 #: erpnext/public/js/bom_configurator/bom_configurator.bundle.js:197 -#: erpnext/public/js/setup_wizard.js:180 +#: erpnext/public/js/setup_wizard.js:187 msgid "Expand All" msgstr "" @@ -19741,7 +19756,7 @@ msgstr "" msgid "Expected Delivery Date" msgstr "" -#: erpnext/selling/doctype/sales_order/sales_order.py:354 +#: erpnext/selling/doctype/sales_order/sales_order.py:352 msgid "Expected Delivery Date should be after Sales Order Date" msgstr "" @@ -19819,7 +19834,7 @@ msgstr "" msgid "Expense" msgstr "" -#: erpnext/controllers/stock_controller.py:756 +#: erpnext/controllers/stock_controller.py:767 msgid "Expense / Difference account ({0}) must be a 'Profit or Loss' account" msgstr "" @@ -19842,6 +19857,8 @@ msgstr "" #. Item' #. Label of the expense_account (Link) field in DocType 'Subcontracting Receipt #. Item' +#. Label of the expense_account (Link) field in DocType 'Subcontracting Receipt +#. Supplied Item' #: erpnext/accounts/doctype/account/account.json #: erpnext/accounts/doctype/loyalty_program/loyalty_program.json #: erpnext/accounts/doctype/pos_invoice_item/pos_invoice_item.json @@ -19858,10 +19875,11 @@ msgstr "" #: erpnext/stock/doctype/purchase_receipt_item/purchase_receipt_item.json #: erpnext/subcontracting/doctype/subcontracting_order_item/subcontracting_order_item.json #: erpnext/subcontracting/doctype/subcontracting_receipt_item/subcontracting_receipt_item.json +#: erpnext/subcontracting/doctype/subcontracting_receipt_supplied_item/subcontracting_receipt_supplied_item.json msgid "Expense Account" msgstr "" -#: erpnext/controllers/stock_controller.py:736 +#: erpnext/controllers/stock_controller.py:747 msgid "Expense Account Missing" msgstr "" @@ -20513,7 +20531,7 @@ msgstr "" msgid "Financial Statements" msgstr "" -#: erpnext/public/js/setup_wizard.js:41 +#: erpnext/public/js/setup_wizard.js:48 msgid "Financial Year Begins On" msgstr "" @@ -20574,15 +20592,15 @@ msgstr "" msgid "Finished Good Item Quantity" msgstr "" -#: erpnext/controllers/accounts_controller.py:3661 +#: erpnext/controllers/accounts_controller.py:3746 msgid "Finished Good Item is not specified for service item {0}" msgstr "" -#: erpnext/controllers/accounts_controller.py:3678 +#: erpnext/controllers/accounts_controller.py:3763 msgid "Finished Good Item {0} Qty can not be zero" msgstr "" -#: erpnext/controllers/accounts_controller.py:3672 +#: erpnext/controllers/accounts_controller.py:3757 msgid "Finished Good Item {0} must be a sub-contracted item" msgstr "" @@ -20958,7 +20976,7 @@ msgstr "" msgid "For Item" msgstr "" -#: erpnext/controllers/stock_controller.py:1216 +#: erpnext/controllers/stock_controller.py:1225 msgid "For Item {0} cannot be received more than {1} qty against the {2} {3}" msgstr "" @@ -20999,7 +21017,7 @@ msgstr "" msgid "For Raw Materials" msgstr "" -#: erpnext/controllers/accounts_controller.py:1262 +#: erpnext/controllers/accounts_controller.py:1349 msgid "For Return Invoices with Stock effect, '0' qty Items are not allowed. Following rows are affected: {0}" msgstr "" @@ -21105,7 +21123,7 @@ msgctxt "Clear payment terms template and/or payment schedule when due date is c msgid "For the new {0} to take effect, would you like to clear the current {1}?" msgstr "" -#: erpnext/controllers/stock_controller.py:302 +#: erpnext/controllers/stock_controller.py:313 msgid "For the {0}, no stock is available for the return in the warehouse {1}." msgstr "" @@ -21708,7 +21726,7 @@ msgstr "" msgid "Fulfilled" msgstr "" -#: erpnext/selling/doctype/sales_order/sales_order_dashboard.py:23 +#: erpnext/selling/doctype/sales_order/sales_order_dashboard.py:24 msgid "Fulfillment" msgstr "" @@ -21839,7 +21857,7 @@ msgstr "" msgid "Future Payments" msgstr "" -#: erpnext/assets/doctype/asset/depreciation.py:378 +#: erpnext/assets/doctype/asset/depreciation.py:376 msgid "Future date is not allowed" msgstr "" @@ -21855,7 +21873,7 @@ msgstr "" #. Name of a DocType #: erpnext/accounts/doctype/gl_entry/gl_entry.json -#: erpnext/accounts/report/general_ledger/general_ledger.py:634 +#: erpnext/accounts/report/general_ledger/general_ledger.py:632 msgid "GL Entry" msgstr "" @@ -22000,7 +22018,7 @@ msgstr "" msgid "General and Payment Ledger mismatch" msgstr "" -#: erpnext/public/js/setup_wizard.js:47 +#: erpnext/public/js/setup_wizard.js:54 msgid "Generate Demo Data for Exploration" msgstr "" @@ -22961,7 +22979,7 @@ msgstr "" msgid "Height (cm)" msgstr "" -#: erpnext/assets/doctype/asset/depreciation.py:338 +#: erpnext/assets/doctype/asset/depreciation.py:336 msgid "Hello," msgstr "" @@ -23000,11 +23018,11 @@ msgstr "" msgid "Helps you distribute the Budget/Target across months if you have seasonality in your business." msgstr "" -#: erpnext/assets/doctype/asset/depreciation.py:345 +#: erpnext/assets/doctype/asset/depreciation.py:343 msgid "Here are the error logs for the aforementioned failed depreciation entries: {0}" msgstr "" -#: erpnext/stock/stock_ledger.py:1871 +#: erpnext/stock/stock_ledger.py:1874 msgid "Here are the options to proceed:" msgstr "" @@ -23057,7 +23075,7 @@ msgstr "" msgid "Hide Images" msgstr "" -#: erpnext/selling/page/point_of_sale/pos_controller.js:282 +#: erpnext/selling/page/point_of_sale/pos_controller.js:281 msgid "Hide Recent Orders" msgstr "" @@ -23385,7 +23403,7 @@ msgstr "" msgid "If checked, the tax amount will be considered as already included in the Print Rate / Print Amount" msgstr "" -#: erpnext/public/js/setup_wizard.js:49 +#: erpnext/public/js/setup_wizard.js:56 msgid "If checked, we will create demo data for you to explore the system. This demo data can be erased later." msgstr "" @@ -23530,7 +23548,7 @@ msgstr "" msgid "If more than one package of the same type (for print)" msgstr "" -#: erpnext/stock/stock_ledger.py:1881 +#: erpnext/stock/stock_ledger.py:1884 msgid "If not, you can Cancel / Submit this entry" msgstr "" @@ -23555,7 +23573,7 @@ msgstr "" msgid "If the account is frozen, entries are allowed to restricted users." msgstr "" -#: erpnext/stock/stock_ledger.py:1874 +#: erpnext/stock/stock_ledger.py:1877 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 "" @@ -24469,7 +24487,7 @@ msgstr "" #: erpnext/accounts/doctype/process_deferred_accounting/process_deferred_accounting.json #: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:406 #: erpnext/accounts/report/account_balance/account_balance.js:27 -#: erpnext/accounts/report/financial_statements.py:733 +#: erpnext/accounts/report/financial_statements.py:729 #: erpnext/accounts/report/profit_and_loss_statement/profit_and_loss_statement.py:176 #: erpnext/accounts/report/profitability_analysis/profitability_analysis.py:182 msgid "Income" @@ -24553,7 +24571,7 @@ msgstr "" msgid "Incorrect Batch Consumed" msgstr "" -#: erpnext/stock/doctype/item/item.py:517 +#: erpnext/stock/doctype/item/item.py:515 msgid "Incorrect Check in (group) Warehouse for Reorder" msgstr "" @@ -24611,7 +24629,7 @@ msgstr "" msgid "Incorrect Warehouse" msgstr "" -#: erpnext/accounts/general_ledger.py:61 +#: erpnext/accounts/general_ledger.py:62 msgid "Incorrect number of General Ledger Entries found. You might have selected a wrong Account in the transaction." msgstr "" @@ -24769,13 +24787,13 @@ msgstr "" msgid "Inspected By" msgstr "" -#: erpnext/controllers/stock_controller.py:1108 +#: erpnext/controllers/stock_controller.py:1119 msgid "Inspection Rejected" msgstr "" #. Label of the inspection_required (Check) field in DocType 'Stock Entry' -#: erpnext/controllers/stock_controller.py:1078 -#: erpnext/controllers/stock_controller.py:1080 +#: erpnext/controllers/stock_controller.py:1089 +#: erpnext/controllers/stock_controller.py:1091 #: erpnext/stock/doctype/stock_entry/stock_entry.json msgid "Inspection Required" msgstr "" @@ -24792,7 +24810,7 @@ msgstr "" msgid "Inspection Required before Purchase" msgstr "" -#: erpnext/controllers/stock_controller.py:1093 +#: erpnext/controllers/stock_controller.py:1104 msgid "Inspection Submission" msgstr "" @@ -24871,8 +24889,8 @@ msgstr "" msgid "Insufficient Capacity" msgstr "" -#: erpnext/controllers/accounts_controller.py:3593 -#: erpnext/controllers/accounts_controller.py:3617 +#: erpnext/controllers/accounts_controller.py:3678 +#: erpnext/controllers/accounts_controller.py:3702 msgid "Insufficient Permissions" msgstr "" @@ -24880,12 +24898,12 @@ msgstr "" #: erpnext/stock/doctype/pick_list/pick_list.py:127 #: erpnext/stock/doctype/pick_list/pick_list.py:975 #: erpnext/stock/doctype/stock_entry/stock_entry.py:759 -#: erpnext/stock/serial_batch_bundle.py:1021 erpnext/stock/stock_ledger.py:1568 -#: erpnext/stock/stock_ledger.py:2040 +#: erpnext/stock/serial_batch_bundle.py:1017 erpnext/stock/stock_ledger.py:1571 +#: erpnext/stock/stock_ledger.py:2043 msgid "Insufficient Stock" msgstr "" -#: erpnext/stock/stock_ledger.py:2055 +#: erpnext/stock/stock_ledger.py:2058 msgid "Insufficient Stock for Batch" msgstr "" @@ -25023,11 +25041,11 @@ msgstr "" msgid "Internal Customer for company {0} already exists" msgstr "" -#: erpnext/controllers/accounts_controller.py:731 +#: erpnext/controllers/accounts_controller.py:733 msgid "Internal Sale or Delivery Reference missing." msgstr "" -#: erpnext/controllers/accounts_controller.py:733 +#: erpnext/controllers/accounts_controller.py:735 msgid "Internal Sales Reference Missing" msgstr "" @@ -25058,7 +25076,7 @@ msgstr "" msgid "Internal Transfer" msgstr "" -#: erpnext/controllers/accounts_controller.py:742 +#: erpnext/controllers/accounts_controller.py:744 msgid "Internal Transfer Reference Missing" msgstr "" @@ -25071,7 +25089,7 @@ msgstr "" msgid "Internal Work History" msgstr "" -#: erpnext/controllers/stock_controller.py:1175 +#: erpnext/controllers/stock_controller.py:1186 msgid "Internal transfers can only be done in company's default currency" msgstr "" @@ -25101,8 +25119,8 @@ msgstr "" #: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:969 #: erpnext/assets/doctype/asset_category/asset_category.py:69 #: erpnext/assets/doctype/asset_category/asset_category.py:97 -#: erpnext/controllers/accounts_controller.py:2978 -#: erpnext/controllers/accounts_controller.py:2986 +#: erpnext/controllers/accounts_controller.py:3063 +#: erpnext/controllers/accounts_controller.py:3071 msgid "Invalid Account" msgstr "" @@ -25119,7 +25137,7 @@ msgstr "" msgid "Invalid Attribute" msgstr "" -#: erpnext/controllers/accounts_controller.py:553 +#: erpnext/controllers/accounts_controller.py:555 msgid "Invalid Auto Repeat Date" msgstr "" @@ -25135,13 +25153,13 @@ msgstr "" msgid "Invalid Child Procedure" msgstr "" -#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:2155 +#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:2153 msgid "Invalid Company for Inter Company Transaction." msgstr "" #: erpnext/assets/doctype/asset/asset.py:295 #: erpnext/assets/doctype/asset/asset.py:302 -#: erpnext/controllers/accounts_controller.py:3001 +#: erpnext/controllers/accounts_controller.py:3086 msgid "Invalid Cost Center" msgstr "" @@ -25149,7 +25167,7 @@ msgstr "" msgid "Invalid Credentials" msgstr "" -#: erpnext/selling/doctype/sales_order/sales_order.py:356 +#: erpnext/selling/doctype/sales_order/sales_order.py:354 msgid "Invalid Delivery Date" msgstr "" @@ -25178,12 +25196,12 @@ msgstr "" msgid "Invalid Group By" msgstr "" -#: erpnext/accounts/doctype/pos_invoice/pos_invoice.py:462 +#: erpnext/accounts/doctype/pos_invoice/pos_invoice.py:460 #: erpnext/manufacturing/doctype/production_plan/production_plan.py:901 msgid "Invalid Item" msgstr "" -#: erpnext/stock/doctype/item/item.py:1404 +#: erpnext/stock/doctype/item/item.py:1400 msgid "Invalid Item Defaults" msgstr "" @@ -25197,7 +25215,7 @@ msgstr "" msgid "Invalid Opening Entry" msgstr "" -#: erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.py:129 +#: erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.py:127 msgid "Invalid POS Invoices" msgstr "" @@ -25229,11 +25247,11 @@ msgstr "" msgid "Invalid Purchase Invoice" msgstr "" -#: erpnext/controllers/accounts_controller.py:3630 +#: erpnext/controllers/accounts_controller.py:3715 msgid "Invalid Qty" msgstr "" -#: erpnext/controllers/accounts_controller.py:1280 +#: erpnext/controllers/accounts_controller.py:1367 msgid "Invalid Quantity" msgstr "" @@ -25241,7 +25259,7 @@ msgstr "" msgid "Invalid Return" msgstr "" -#: erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.py:194 +#: erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.py:192 msgid "Invalid Sales Invoices" msgstr "" @@ -25250,7 +25268,7 @@ msgstr "" msgid "Invalid Schedule" msgstr "" -#: erpnext/controllers/selling_controller.py:251 +#: erpnext/controllers/selling_controller.py:255 msgid "Invalid Selling Price" msgstr "" @@ -25279,11 +25297,11 @@ msgstr "" msgid "Invalid condition expression" msgstr "" -#: erpnext/selling/doctype/quotation/quotation.py:277 +#: erpnext/selling/doctype/quotation/quotation.py:270 msgid "Invalid lost reason {0}, please create a new lost reason" msgstr "" -#: erpnext/stock/doctype/item/item.py:411 +#: erpnext/stock/doctype/item/item.py:409 msgid "Invalid naming series (. missing) for {0}" msgstr "" @@ -25306,7 +25324,7 @@ msgstr "" msgid "Invalid {0}" msgstr "" -#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:2153 +#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:2151 msgid "Invalid {0} for Inter Company Transaction." msgstr "" @@ -25502,7 +25520,7 @@ msgstr "" #: erpnext/accounts/doctype/opening_invoice_creation_tool/opening_invoice_creation_tool.json #: erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.json #: erpnext/accounts/doctype/pos_profile/pos_profile.json -#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:2204 +#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:2202 #: erpnext/buying/doctype/supplier/supplier.json #: erpnext/selling/report/payment_terms_status_for_sales_order/payment_terms_status_for_sales_order.py:62 msgid "Invoices" @@ -26175,7 +26193,7 @@ msgstr "" msgid "Issuing cannot be done to a location. Please enter employee to issue the Asset {0} to" msgstr "" -#: erpnext/stock/doctype/item/item.py:571 +#: erpnext/stock/doctype/item/item.py:569 msgid "It can take upto few hours for accurate stock values to be visible after merging items." msgstr "" @@ -26229,7 +26247,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:1135 +#: erpnext/controllers/taxes_and_totals.py:1123 #: erpnext/manufacturing/doctype/blanket_order/blanket_order.json #: erpnext/manufacturing/doctype/bom/bom.js:944 #: erpnext/manufacturing/doctype/bom/bom.json @@ -26586,7 +26604,7 @@ msgstr "" msgid "Item Code required at Row No {0}" msgstr "" -#: erpnext/selling/page/point_of_sale/pos_controller.js:826 +#: erpnext/selling/page/point_of_sale/pos_controller.js:825 #: erpnext/selling/page/point_of_sale/pos_item_details.js:275 msgid "Item Code: {0} is not available under warehouse {1}." msgstr "" @@ -27013,8 +27031,11 @@ msgstr "" msgid "Item Price" msgstr "" +#. Label of the item_price_settings_section (Section Break) field in DocType +#. 'Accounts Settings' #. Label of the item_price_settings_section (Section Break) field in DocType #. 'Selling Settings' +#: erpnext/accounts/doctype/accounts_settings/accounts_settings.json #: erpnext/selling/doctype/selling_settings/selling_settings.json msgid "Item Price Settings" msgstr "" @@ -27026,7 +27047,7 @@ msgstr "" msgid "Item Price Stock" msgstr "" -#: erpnext/stock/get_item_details.py:1047 +#: erpnext/stock/get_item_details.py:1048 msgid "Item Price added for {0} in Price List {1}" msgstr "" @@ -27034,7 +27055,7 @@ msgstr "" msgid "Item Price appears multiple times based on Price List, Supplier/Customer, Currency, Item, Batch, UOM, Qty, and Dates." msgstr "" -#: erpnext/stock/get_item_details.py:1026 +#: erpnext/stock/get_item_details.py:1027 msgid "Item Price updated for {0} in Price List {1}" msgstr "" @@ -27212,7 +27233,7 @@ msgstr "" msgid "Item Variant {0} already exists with same attributes" msgstr "" -#: erpnext/stock/doctype/item/item.py:772 +#: erpnext/stock/doctype/item/item.py:770 msgid "Item Variants updated" msgstr "" @@ -27278,7 +27299,7 @@ msgstr "" msgid "Item for row {0} does not match Material Request" msgstr "" -#: erpnext/stock/doctype/item/item.py:789 +#: erpnext/stock/doctype/item/item.py:787 msgid "Item has variants." msgstr "" @@ -27304,7 +27325,7 @@ msgstr "" msgid "Item operation" msgstr "" -#: erpnext/controllers/accounts_controller.py:3653 +#: erpnext/controllers/accounts_controller.py:3738 msgid "Item qty can not be updated as raw materials are already processed." msgstr "" @@ -27330,7 +27351,7 @@ msgstr "" msgid "Item valuation reposting in progress. Report might show incorrect item valuation." msgstr "" -#: erpnext/stock/doctype/item/item.py:946 +#: erpnext/stock/doctype/item/item.py:944 msgid "Item variant {0} exists with same attributes" msgstr "" @@ -27343,7 +27364,7 @@ msgid "Item {0} cannot be ordered more than {1} against Blanket Order {2}." msgstr "" #: erpnext/assets/doctype/asset/asset.py:277 -#: erpnext/stock/doctype/item/item.py:636 +#: erpnext/stock/doctype/item/item.py:634 msgid "Item {0} does not exist" msgstr "" @@ -27351,11 +27372,11 @@ msgstr "" msgid "Item {0} does not exist in the system or has expired" msgstr "" -#: erpnext/controllers/stock_controller.py:392 +#: erpnext/controllers/stock_controller.py:403 msgid "Item {0} does not exist." msgstr "" -#: erpnext/controllers/selling_controller.py:760 +#: erpnext/controllers/selling_controller.py:762 msgid "Item {0} entered multiple times." msgstr "" @@ -27367,11 +27388,11 @@ msgstr "" msgid "Item {0} has been disabled" msgstr "" -#: erpnext/selling/doctype/sales_order/sales_order.py:708 +#: erpnext/selling/doctype/sales_order/sales_order.py:706 msgid "Item {0} has no Serial No. Only serialized items can have delivery based on Serial No" msgstr "" -#: erpnext/stock/doctype/item/item.py:1120 +#: erpnext/stock/doctype/item/item.py:1116 msgid "Item {0} has reached its end of life on {1}" msgstr "" @@ -27379,15 +27400,15 @@ msgstr "" msgid "Item {0} ignored since it is not a stock item" msgstr "" -#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:474 +#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:472 msgid "Item {0} is already reserved/delivered against Sales Order {1}." msgstr "" -#: erpnext/stock/doctype/item/item.py:1140 +#: erpnext/stock/doctype/item/item.py:1136 msgid "Item {0} is cancelled" msgstr "" -#: erpnext/stock/doctype/item/item.py:1124 +#: erpnext/stock/doctype/item/item.py:1120 msgid "Item {0} is disabled" msgstr "" @@ -27395,7 +27416,7 @@ msgstr "" msgid "Item {0} is not a serialized Item" msgstr "" -#: erpnext/stock/doctype/item/item.py:1132 +#: erpnext/stock/doctype/item/item.py:1128 msgid "Item {0} is not a stock Item" msgstr "" @@ -27411,11 +27432,11 @@ msgstr "" msgid "Item {0} must be a Fixed Asset Item" msgstr "" -#: erpnext/stock/get_item_details.py:327 +#: erpnext/stock/get_item_details.py:328 msgid "Item {0} must be a Non-Stock Item" msgstr "" -#: erpnext/stock/get_item_details.py:324 +#: erpnext/stock/get_item_details.py:325 msgid "Item {0} must be a Sub-contracted Item" msgstr "" @@ -27439,7 +27460,7 @@ msgstr "" msgid "Item {0}: {1} qty produced. " msgstr "" -#: erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py:1423 +#: erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py:1428 msgid "Item {} does not exist." msgstr "" @@ -27579,7 +27600,7 @@ msgstr "" msgid "Items and Pricing" msgstr "" -#: erpnext/controllers/accounts_controller.py:3875 +#: erpnext/controllers/accounts_controller.py:3960 msgid "Items cannot be updated as Subcontracting Order is created against the Purchase Order {0}." msgstr "" @@ -27616,7 +27637,7 @@ msgstr "" msgid "Items under this warehouse will be suggested" msgstr "" -#: erpnext/controllers/stock_controller.py:92 +#: erpnext/controllers/stock_controller.py:103 msgid "Items {0} do not exist in the Item master." msgstr "" @@ -28332,7 +28353,7 @@ msgstr "" msgid "Leads" msgstr "" -#: erpnext/utilities/activation.py:77 +#: erpnext/utilities/activation.py:78 msgid "Leads help you get business, add all your contacts and more as your leads" msgstr "" @@ -28606,7 +28627,7 @@ msgstr "" msgid "Likes" msgstr "" -#: erpnext/controllers/status_updater.py:398 +#: erpnext/controllers/status_updater.py:396 msgid "Limit Crossed" msgstr "" @@ -28691,7 +28712,7 @@ msgstr "" msgid "Linked Location" msgstr "" -#: erpnext/stock/doctype/item/item.py:993 +#: erpnext/stock/doctype/item/item.py:989 msgid "Linked with submitted documents" msgstr "" @@ -29067,6 +29088,12 @@ msgstr "" msgid "Maintain Asset" msgstr "" +#. Label of the maintain_same_internal_transaction_rate (Check) field in +#. DocType 'Accounts Settings' +#: erpnext/accounts/doctype/accounts_settings/accounts_settings.json +msgid "Maintain Same Rate Throughout Internal Transaction" +msgstr "" + #. Label of the maintain_same_sales_rate (Check) field in DocType 'Selling #. Settings' #: erpnext/selling/doctype/selling_settings/selling_settings.json @@ -29403,7 +29430,7 @@ msgstr "" msgid "Manage cost of operations" msgstr "" -#: erpnext/utilities/activation.py:94 +#: erpnext/utilities/activation.py:95 msgid "Manage your orders" msgstr "" @@ -29450,7 +29477,7 @@ msgstr "" msgid "Mandatory Depends On" msgstr "" -#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:1698 +#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:1696 msgid "Mandatory Field" msgstr "" @@ -29466,7 +29493,7 @@ msgstr "" msgid "Mandatory For Profit and Loss Account" msgstr "" -#: erpnext/selling/doctype/quotation/quotation.py:606 +#: erpnext/selling/doctype/quotation/quotation.py:588 msgid "Mandatory Missing" msgstr "" @@ -29646,7 +29673,7 @@ msgstr "" #: erpnext/buying/doctype/purchase_order/purchase_order_dashboard.py:30 #: 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:28 +#: erpnext/selling/doctype/sales_order/sales_order_dashboard.py:29 #: erpnext/setup/doctype/company/company.json #: erpnext/setup/setup_wizard/data/industry_type.txt:31 #: erpnext/stock/doctype/batch/batch.json erpnext/stock/doctype/item/item.json @@ -30065,7 +30092,7 @@ msgstr "" msgid "Material Request Type" msgstr "" -#: erpnext/selling/doctype/sales_order/sales_order.py:1668 +#: erpnext/selling/doctype/sales_order/sales_order.py:1666 msgid "Material Request not created, as quantity for Raw Materials already available." msgstr "" @@ -30286,7 +30313,7 @@ msgstr "" msgid "Maximum Value" msgstr "" -#: erpnext/controllers/selling_controller.py:220 +#: erpnext/controllers/selling_controller.py:224 msgid "Maximum discount for Item {0} is {1}%" msgstr "" @@ -30356,7 +30383,7 @@ msgstr "" msgid "Megawatt" msgstr "" -#: erpnext/stock/stock_ledger.py:1887 +#: erpnext/stock/stock_ledger.py:1890 msgid "Mention Valuation Rate in the Item master." msgstr "" @@ -30474,7 +30501,7 @@ msgstr "" msgid "Messages greater than 160 characters will be split into multiple messages" msgstr "" -#: erpnext/setup/install.py:130 +#: erpnext/setup/install.py:123 msgid "Messaging CRM Campagin" msgstr "" @@ -30751,19 +30778,19 @@ msgstr "" msgid "Miscellaneous Expenses" msgstr "" -#: erpnext/controllers/buying_controller.py:548 +#: erpnext/controllers/buying_controller.py:602 msgid "Mismatch" msgstr "" -#: erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py:1424 +#: erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py:1429 msgid "Missing" msgstr "" #: erpnext/accounts/doctype/pos_opening_entry/pos_opening_entry.py:69 #: erpnext/accounts/doctype/pos_profile/pos_profile.py:183 #: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:587 -#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:2220 -#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:2820 +#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:2218 +#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:2818 #: erpnext/assets/doctype/asset_category/asset_category.py:116 msgid "Missing Account" msgstr "" @@ -31278,11 +31305,11 @@ msgstr "" msgid "Multiple Variants" msgstr "" -#: erpnext/stock/doctype/warehouse/warehouse.py:148 +#: erpnext/stock/doctype/warehouse/warehouse.py:149 msgid "Multiple Warehouse Accounts" msgstr "" -#: erpnext/controllers/accounts_controller.py:1132 +#: erpnext/controllers/accounts_controller.py:1217 msgid "Multiple fiscal years exist for the date {0}. Please set company in Fiscal Year" msgstr "" @@ -31433,7 +31460,7 @@ msgstr "" msgid "Naming Series and Price Defaults" msgstr "" -#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:91 +#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:89 msgid "Naming Series is mandatory" msgstr "" @@ -31472,15 +31499,15 @@ msgstr "" msgid "Needs Analysis" msgstr "" -#: erpnext/stock/serial_batch_bundle.py:1309 +#: erpnext/stock/serial_batch_bundle.py:1305 msgid "Negative Batch Quantity" msgstr "" -#: erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py:606 +#: erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py:607 msgid "Negative Quantity is not allowed" msgstr "" -#: erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py:611 +#: erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py:612 msgid "Negative Valuation Rate is not allowed" msgstr "" @@ -31563,40 +31590,40 @@ msgstr "" msgid "Net Asset value as on" msgstr "" -#: erpnext/accounts/report/cash_flow/cash_flow.py:152 +#: erpnext/accounts/report/cash_flow/cash_flow.py:156 msgid "Net Cash from Financing" msgstr "" -#: erpnext/accounts/report/cash_flow/cash_flow.py:145 +#: erpnext/accounts/report/cash_flow/cash_flow.py:149 msgid "Net Cash from Investing" msgstr "" -#: erpnext/accounts/report/cash_flow/cash_flow.py:133 +#: erpnext/accounts/report/cash_flow/cash_flow.py:137 msgid "Net Cash from Operations" msgstr "" -#: erpnext/accounts/report/cash_flow/cash_flow.py:138 +#: erpnext/accounts/report/cash_flow/cash_flow.py:142 msgid "Net Change in Accounts Payable" msgstr "" -#: erpnext/accounts/report/cash_flow/cash_flow.py:137 +#: erpnext/accounts/report/cash_flow/cash_flow.py:141 msgid "Net Change in Accounts Receivable" msgstr "" -#: erpnext/accounts/report/cash_flow/cash_flow.py:119 +#: erpnext/accounts/report/cash_flow/cash_flow.py:123 #: erpnext/accounts/report/consolidated_financial_statement/consolidated_financial_statement.py:253 msgid "Net Change in Cash" msgstr "" -#: erpnext/accounts/report/cash_flow/cash_flow.py:154 +#: erpnext/accounts/report/cash_flow/cash_flow.py:158 msgid "Net Change in Equity" msgstr "" -#: erpnext/accounts/report/cash_flow/cash_flow.py:147 +#: erpnext/accounts/report/cash_flow/cash_flow.py:151 msgid "Net Change in Fixed Asset" msgstr "" -#: erpnext/accounts/report/cash_flow/cash_flow.py:139 +#: erpnext/accounts/report/cash_flow/cash_flow.py:143 msgid "Net Change in Inventory" msgstr "" @@ -31762,7 +31789,7 @@ msgstr "" msgid "Net Weight UOM" msgstr "" -#: erpnext/controllers/accounts_controller.py:1486 +#: erpnext/controllers/accounts_controller.py:1573 msgid "Net total calculation precision loss" msgstr "" @@ -31859,7 +31886,7 @@ msgstr "" msgid "New Income" msgstr "" -#: erpnext/selling/page/point_of_sale/pos_controller.js:244 +#: erpnext/selling/page/point_of_sale/pos_controller.js:243 msgid "New Invoice" msgstr "" @@ -32049,11 +32076,11 @@ msgstr "" msgid "No Answer" msgstr "" -#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:2322 +#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:2320 msgid "No Customer found for Inter Company Transactions which represents company {0}" msgstr "" -#: erpnext/accounts/doctype/process_statement_of_accounts/process_statement_of_accounts.js:115 +#: erpnext/accounts/doctype/process_statement_of_accounts/process_statement_of_accounts.js:129 #: erpnext/accounts/doctype/process_statement_of_accounts/process_statement_of_accounts.py:363 msgid "No Customers found with selected options." msgstr "" @@ -32066,11 +32093,11 @@ msgstr "" msgid "No Delivery Note selected for Customer {}" msgstr "" -#: erpnext/stock/get_item_details.py:298 +#: erpnext/stock/get_item_details.py:299 msgid "No Item with Barcode {0}" msgstr "" -#: erpnext/stock/get_item_details.py:302 +#: erpnext/stock/get_item_details.py:303 msgid "No Item with Serial No {0}" msgstr "" @@ -32098,14 +32125,14 @@ msgstr "" msgid "No Outstanding Invoices found for this party" msgstr "" -#: erpnext/accounts/doctype/pos_invoice/pos_invoice.py:618 +#: erpnext/accounts/doctype/pos_invoice/pos_invoice.py:616 msgid "No POS Profile found. Please create a New POS Profile first" msgstr "" #: erpnext/accounts/doctype/journal_entry/journal_entry.py:1539 #: erpnext/accounts/doctype/journal_entry/journal_entry.py:1599 #: erpnext/accounts/doctype/journal_entry/journal_entry.py:1613 -#: erpnext/stock/doctype/item/item.py:1365 +#: erpnext/stock/doctype/item/item.py:1361 msgid "No Permission" msgstr "" @@ -32139,7 +32166,7 @@ msgstr "" msgid "No Summary" msgstr "" -#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:2306 +#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:2304 msgid "No Supplier found for Inter Company Transactions which represents company {0}" msgstr "" @@ -32164,11 +32191,11 @@ msgid "No Work Orders were created" msgstr "" #: erpnext/stock/doctype/purchase_receipt/purchase_receipt.py:794 -#: erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.py:689 +#: erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.py:736 msgid "No accounting entries for the following warehouses" msgstr "" -#: erpnext/selling/doctype/sales_order/sales_order.py:714 +#: erpnext/selling/doctype/sales_order/sales_order.py:712 msgid "No active BOM found for item {0}. Delivery by Serial No cannot be ensured" msgstr "" @@ -32352,7 +32379,7 @@ msgstr "" msgid "No reserved stock to unreserve." msgstr "" -#: erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py:769 +#: erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py:770 msgid "No stock ledger entries were created. Please set the quantity or valuation rate for the items properly and try again." msgstr "" @@ -32371,7 +32398,7 @@ msgstr "" msgid "No {0} Accounts found for this company." msgstr "" -#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:2370 +#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:2368 msgid "No {0} found for Inter Company Transactions." msgstr "" @@ -32420,7 +32447,7 @@ msgstr "" msgid "None" msgstr "" -#: erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py:543 +#: erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py:544 msgid "None of the items have any change in quantity or value." msgstr "" @@ -32436,7 +32463,7 @@ msgstr "" #: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:566 #: erpnext/assets/doctype/asset/asset.js:612 #: erpnext/assets/doctype/asset/asset.js:627 -#: erpnext/controllers/buying_controller.py:233 +#: erpnext/controllers/buying_controller.py:235 #: erpnext/selling/doctype/product_bundle/product_bundle.py:72 #: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py:80 msgid "Not Allowed" @@ -32449,8 +32476,8 @@ msgstr "" msgid "Not Applicable" msgstr "" -#: erpnext/selling/page/point_of_sale/pos_controller.js:825 -#: erpnext/selling/page/point_of_sale/pos_controller.js:854 +#: erpnext/selling/page/point_of_sale/pos_controller.js:824 +#: erpnext/selling/page/point_of_sale/pos_controller.js:853 msgid "Not Available" msgstr "" @@ -32539,8 +32566,8 @@ msgstr "" #: erpnext/manufacturing/doctype/work_order/work_order.py:1815 #: erpnext/manufacturing/doctype/work_order/work_order.py:1973 #: erpnext/manufacturing/doctype/work_order/work_order.py:2040 -#: erpnext/selling/doctype/sales_order/sales_order.py:824 -#: erpnext/selling/doctype/sales_order/sales_order.py:1654 +#: erpnext/selling/doctype/sales_order/sales_order.py:822 +#: erpnext/selling/doctype/sales_order/sales_order.py:1652 msgid "Not permitted" msgstr "" @@ -32557,10 +32584,10 @@ msgstr "" #: erpnext/selling/doctype/customer/customer.py:129 #: erpnext/selling/doctype/sales_order/sales_order.js:1168 #: erpnext/stock/doctype/item/item.js:526 -#: erpnext/stock/doctype/item/item.py:573 +#: erpnext/stock/doctype/item/item.py:571 #: erpnext/stock/doctype/item_price/item_price.json #: erpnext/stock/doctype/stock_entry/stock_entry.py:1374 -#: erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py:968 +#: erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py:973 #: erpnext/templates/pages/timelog_info.html:43 msgid "Note" msgstr "" @@ -32587,7 +32614,7 @@ msgstr "" msgid "Note: Item {0} added multiple times" msgstr "" -#: erpnext/controllers/accounts_controller.py:639 +#: erpnext/controllers/accounts_controller.py:641 msgid "Note: Payment Entry will not be created since 'Cash or Bank Account' was not specified" msgstr "" @@ -32595,7 +32622,7 @@ msgstr "" msgid "Note: This Cost Center is a Group. Cannot make accounting entries against groups." msgstr "" -#: erpnext/stock/doctype/item/item.py:627 +#: erpnext/stock/doctype/item/item.py:625 msgid "Note: To merge the items, create a separate Stock Reconciliation for the old item {0}" msgstr "" @@ -32852,7 +32879,7 @@ msgstr "" msgid "Offsetting Account" msgstr "" -#: erpnext/accounts/general_ledger.py:91 +#: erpnext/accounts/general_ledger.py:92 msgid "Offsetting for Accounting Dimension" msgstr "" @@ -33150,7 +33177,7 @@ msgstr "" msgid "Open Events" msgstr "" -#: erpnext/selling/page/point_of_sale/pos_controller.js:237 +#: erpnext/selling/page/point_of_sale/pos_controller.js:236 msgid "Open Form View" msgstr "" @@ -33225,7 +33252,7 @@ msgstr "" msgid "Open a new ticket" msgstr "" -#: erpnext/accounts/report/general_ledger/general_ledger.py:379 +#: erpnext/accounts/report/general_ledger/general_ledger.py:377 #: erpnext/public/js/stock_analytics.js:97 msgid "Opening" msgstr "" @@ -33235,12 +33262,12 @@ msgstr "" msgid "Opening & Closing" msgstr "" -#: erpnext/accounts/report/trial_balance/trial_balance.py:454 +#: erpnext/accounts/report/trial_balance/trial_balance.py:450 #: erpnext/accounts/report/trial_balance_for_party/trial_balance_for_party.py:198 msgid "Opening (Cr)" msgstr "" -#: erpnext/accounts/report/trial_balance/trial_balance.py:447 +#: erpnext/accounts/report/trial_balance/trial_balance.py:443 #: erpnext/accounts/report/trial_balance_for_party/trial_balance_for_party.py:191 msgid "Opening (Dr)" msgstr "" @@ -33323,7 +33350,7 @@ msgid "Opening Invoice Item" msgstr "" #: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:1625 -#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:1807 +#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:1805 msgid "Opening Invoice has rounding adjustment of {0}.

'{1}' account is required to post these values. Please set it in Company: {2}.

Or, '{3}' can be enabled to not post any rounding adjustment." msgstr "" @@ -33857,7 +33884,7 @@ msgstr "" #: erpnext/buying/doctype/supplier/supplier_dashboard.py:11 #: erpnext/selling/doctype/customer/customer_dashboard.py:20 -#: erpnext/selling/doctype/sales_order/sales_order.py:809 +#: erpnext/selling/doctype/sales_order/sales_order.py:807 #: erpnext/setup/doctype/company/company_dashboard.py:23 msgid "Orders" msgstr "" @@ -34118,7 +34145,7 @@ msgstr "" msgid "Over Billing Allowance (%)" msgstr "" -#: erpnext/stock/doctype/purchase_receipt/purchase_receipt.py:1251 +#: erpnext/stock/doctype/purchase_receipt/purchase_receipt.py:1249 msgid "Over Billing Allowance exceeded for Purchase Receipt Item {0} ({1}) by {2}%" msgstr "" @@ -34136,11 +34163,11 @@ msgstr "" msgid "Over Picking Allowance" msgstr "" -#: erpnext/controllers/stock_controller.py:1343 +#: erpnext/controllers/stock_controller.py:1352 msgid "Over Receipt" msgstr "" -#: erpnext/controllers/status_updater.py:403 +#: erpnext/controllers/status_updater.py:401 msgid "Over Receipt/Delivery of {0} {1} ignored for item {2} because you have {3} role." msgstr "" @@ -34155,11 +34182,11 @@ msgstr "" msgid "Over Transfer Allowance (%)" msgstr "" -#: erpnext/controllers/status_updater.py:405 +#: erpnext/controllers/status_updater.py:403 msgid "Overbilling of {0} {1} ignored for item {2} because you have {3} role." msgstr "" -#: erpnext/controllers/accounts_controller.py:2016 +#: erpnext/controllers/accounts_controller.py:2101 msgid "Overbilling of {} ignored because you have {} role." msgstr "" @@ -34285,7 +34312,7 @@ msgstr "" msgid "POS" msgstr "" -#: erpnext/selling/page/point_of_sale/pos_controller.js:186 +#: erpnext/selling/page/point_of_sale/pos_controller.js:185 msgid "POS Closed" msgstr "" @@ -34363,15 +34390,15 @@ msgstr "" msgid "POS Invoice Reference" msgstr "" -#: erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.py:104 +#: erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.py:102 msgid "POS Invoice is already consolidated" msgstr "" -#: erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.py:112 +#: erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.py:110 msgid "POS Invoice is not submitted" msgstr "" -#: erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.py:115 +#: erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.py:113 msgid "POS Invoice isn't created by user {}" msgstr "" @@ -34384,7 +34411,7 @@ msgstr "" msgid "POS Invoices" msgstr "" -#: erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.py:73 +#: erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.py:71 msgid "POS Invoices can't be added when Sales Invoice is enabled" msgstr "" @@ -34446,8 +34473,8 @@ msgstr "" msgid "POS Profile User" msgstr "" -#: erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.py:109 -#: erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.py:174 +#: erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.py:107 +#: erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.py:172 msgid "POS Profile doesn't match {}" msgstr "" @@ -34455,7 +34482,7 @@ msgstr "" msgid "POS Profile is mandatory to mark this invoice as POS Transaction." msgstr "" -#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:1251 +#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:1249 msgid "POS Profile required to make POS Entry" msgstr "" @@ -34497,11 +34524,11 @@ msgstr "" msgid "POS Transactions" msgstr "" -#: erpnext/selling/page/point_of_sale/pos_controller.js:189 +#: erpnext/selling/page/point_of_sale/pos_controller.js:188 msgid "POS has been closed at {0}. Please refresh the page." msgstr "" -#: erpnext/selling/page/point_of_sale/pos_controller.js:476 +#: erpnext/selling/page/point_of_sale/pos_controller.js:475 msgid "POS invoice {0} created successfully" msgstr "" @@ -34550,7 +34577,7 @@ msgstr "" msgid "Packed Items" msgstr "" -#: erpnext/controllers/stock_controller.py:1179 +#: erpnext/controllers/stock_controller.py:1190 msgid "Packed Items cannot be transferred internally" msgstr "" @@ -34942,12 +34969,12 @@ msgstr "" msgid "Partial Material Transferred" msgstr "" -#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:1111 -#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:1117 +#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:1109 +#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:1115 msgid "Partial Payment in POS Transactions are not allowed." msgstr "" -#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1478 +#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1476 msgid "Partial Stock Reservation" msgstr "" @@ -35133,7 +35160,7 @@ msgstr "" #: erpnext/accounts/report/accounts_receivable_summary/accounts_receivable_summary.py:147 #: erpnext/accounts/report/general_and_payment_ledger_comparison/general_and_payment_ledger_comparison.py:228 #: erpnext/accounts/report/general_ledger/general_ledger.js:74 -#: erpnext/accounts/report/general_ledger/general_ledger.py:713 +#: erpnext/accounts/report/general_ledger/general_ledger.py:711 #: erpnext/accounts/report/payment_ledger/payment_ledger.js:51 #: erpnext/accounts/report/payment_ledger/payment_ledger.py:155 #: erpnext/accounts/report/payment_period_based_on_invoice_date/payment_period_based_on_invoice_date.js:46 @@ -35181,7 +35208,7 @@ msgstr "" msgid "Party Account No. (Bank Statement)" msgstr "" -#: erpnext/controllers/accounts_controller.py:2281 +#: erpnext/controllers/accounts_controller.py:2366 msgid "Party Account {0} currency ({1}) and document currency ({2}) should be same" msgstr "" @@ -35292,7 +35319,7 @@ msgstr "" #: erpnext/accounts/report/accounts_receivable_summary/accounts_receivable_summary.py:141 #: erpnext/accounts/report/general_and_payment_ledger_comparison/general_and_payment_ledger_comparison.py:219 #: erpnext/accounts/report/general_ledger/general_ledger.js:65 -#: erpnext/accounts/report/general_ledger/general_ledger.py:712 +#: erpnext/accounts/report/general_ledger/general_ledger.py:710 #: erpnext/accounts/report/payment_ledger/payment_ledger.js:41 #: erpnext/accounts/report/payment_ledger/payment_ledger.py:151 #: erpnext/accounts/report/payment_period_based_on_invoice_date/payment_period_based_on_invoice_date.js:35 @@ -35309,7 +35336,7 @@ msgstr "" msgid "Party Type" msgstr "" -#: erpnext/accounts/party.py:825 +#: erpnext/accounts/party.py:823 msgid "Party Type and Party can only be set for Receivable / Payable account

{0}" msgstr "" @@ -35466,7 +35493,7 @@ msgstr "" #: erpnext/buying/doctype/purchase_order/purchase_order.js:445 #: erpnext/buying/doctype/purchase_order/purchase_order_dashboard.py:24 #: erpnext/selling/doctype/sales_order/sales_order.js:758 -#: erpnext/selling/doctype/sales_order/sales_order_dashboard.py:30 +#: erpnext/selling/doctype/sales_order/sales_order_dashboard.py:31 msgid "Payment" msgstr "" @@ -35597,7 +35624,7 @@ msgstr "" msgid "Payment Entry is already created" msgstr "" -#: erpnext/controllers/accounts_controller.py:1437 +#: erpnext/controllers/accounts_controller.py:1524 msgid "Payment Entry {0} is linked against Order {1}, check if it should be pulled as advance in this invoice." msgstr "" @@ -35993,7 +36020,7 @@ msgstr "" msgid "Payment against {0} {1} cannot be greater than Outstanding Amount {2}" msgstr "" -#: erpnext/accounts/doctype/pos_invoice/pos_invoice.py:743 +#: erpnext/accounts/doctype/pos_invoice/pos_invoice.py:741 msgid "Payment amount cannot be less than or equal to 0" msgstr "" @@ -36857,7 +36884,7 @@ msgstr "" msgid "Please add {1} role to user {0}." msgstr "" -#: erpnext/controllers/stock_controller.py:1354 +#: erpnext/controllers/stock_controller.py:1363 msgid "Please adjust the qty or edit {0} to proceed." msgstr "" @@ -36865,7 +36892,7 @@ msgstr "" msgid "Please attach CSV file" msgstr "" -#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:2957 +#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:2955 msgid "Please cancel and amend the Payment Entry" msgstr "" @@ -36931,7 +36958,7 @@ msgstr "" msgid "Please convert the parent account in corresponding child company to a group account." msgstr "" -#: erpnext/selling/doctype/quotation/quotation.py:604 +#: erpnext/selling/doctype/quotation/quotation.py:586 msgid "Please create Customer from Lead {0}." msgstr "" @@ -36943,7 +36970,7 @@ msgstr "" msgid "Please create a new Accounting Dimension if required." msgstr "" -#: erpnext/controllers/accounts_controller.py:732 +#: erpnext/controllers/accounts_controller.py:734 msgid "Please create purchase from internal sale or delivery document itself" msgstr "" @@ -36951,11 +36978,11 @@ msgstr "" msgid "Please create purchase receipt or purchase invoice for the item {0}" msgstr "" -#: erpnext/stock/doctype/item/item.py:655 +#: erpnext/stock/doctype/item/item.py:653 msgid "Please delete Product Bundle {0}, before merging {1} into {2}" msgstr "" -#: erpnext/assets/doctype/asset/depreciation.py:552 +#: erpnext/assets/doctype/asset/depreciation.py:550 msgid "Please disable workflow temporarily for Journal Entry {0}" msgstr "" @@ -36989,11 +37016,11 @@ msgstr "" msgid "Please enable pop-ups" msgstr "" -#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:574 +#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:572 msgid "Please enable {0} in the {1}." msgstr "" -#: erpnext/controllers/selling_controller.py:762 +#: erpnext/controllers/selling_controller.py:764 msgid "Please enable {} in {} to allow same item in multiple rows" msgstr "" @@ -37017,8 +37044,8 @@ msgstr "" msgid "Please enter Difference Account or set default Stock Adjustment Account for company {0}" msgstr "" -#: erpnext/accounts/doctype/pos_invoice/pos_invoice.py:517 -#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:1158 +#: erpnext/accounts/doctype/pos_invoice/pos_invoice.py:515 +#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:1156 msgid "Please enter Account for Change Amount" msgstr "" @@ -37026,11 +37053,11 @@ msgstr "" msgid "Please enter Approving Role or Approving User" msgstr "" -#: erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py:935 +#: erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py:940 msgid "Please enter Cost Center" msgstr "" -#: erpnext/selling/doctype/sales_order/sales_order.py:360 +#: erpnext/selling/doctype/sales_order/sales_order.py:358 msgid "Please enter Delivery Date" msgstr "" @@ -37038,7 +37065,7 @@ msgstr "" msgid "Please enter Employee Id of this sales person" msgstr "" -#: erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py:944 +#: erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py:949 msgid "Please enter Expense Account" msgstr "" @@ -37100,7 +37127,7 @@ msgid "Please enter Warehouse and Date" msgstr "" #: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:652 -#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:1154 +#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:1152 msgid "Please enter Write Off Account" msgstr "" @@ -37112,7 +37139,7 @@ msgstr "" msgid "Please enter company name first" msgstr "" -#: erpnext/controllers/accounts_controller.py:2767 +#: erpnext/controllers/accounts_controller.py:2852 msgid "Please enter default currency in Company Master" msgstr "" @@ -37144,15 +37171,15 @@ msgstr "" msgid "Please enter the company name to confirm" msgstr "" -#: erpnext/accounts/doctype/pos_invoice/pos_invoice.py:746 +#: erpnext/accounts/doctype/pos_invoice/pos_invoice.py:744 msgid "Please enter the phone number first" msgstr "" -#: erpnext/controllers/buying_controller.py:1015 +#: erpnext/controllers/buying_controller.py:1069 msgid "Please enter the {schedule_date}." msgstr "" -#: erpnext/public/js/setup_wizard.js:86 +#: erpnext/public/js/setup_wizard.js:93 msgid "Please enter valid Financial Year Start and End Dates" msgstr "" @@ -37212,8 +37239,8 @@ msgstr "" msgid "Please mention 'Weight UOM' along with Weight." msgstr "" -#: erpnext/accounts/general_ledger.py:622 -#: erpnext/accounts/general_ledger.py:629 +#: erpnext/accounts/general_ledger.py:624 +#: erpnext/accounts/general_ledger.py:631 msgid "Please mention '{0}' in Company: {1}" msgstr "" @@ -37250,12 +37277,12 @@ msgstr "" msgid "Please select Template Type to download template" msgstr "" -#: erpnext/controllers/taxes_and_totals.py:731 +#: erpnext/controllers/taxes_and_totals.py:719 #: erpnext/public/js/controllers/taxes_and_totals.js:721 msgid "Please select Apply Discount On" msgstr "" -#: erpnext/selling/doctype/sales_order/sales_order.py:1619 +#: erpnext/selling/doctype/sales_order/sales_order.py:1617 msgid "Please select BOM against item {0}" msgstr "" @@ -37263,7 +37290,7 @@ msgstr "" msgid "Please select BOM for Item in Row {0}" msgstr "" -#: erpnext/controllers/buying_controller.py:475 +#: erpnext/controllers/buying_controller.py:529 msgid "Please select BOM in BOM field for Item {item_code}." msgstr "" @@ -37341,15 +37368,15 @@ msgstr "" msgid "Please select Price List" msgstr "" -#: erpnext/selling/doctype/sales_order/sales_order.py:1621 +#: erpnext/selling/doctype/sales_order/sales_order.py:1619 msgid "Please select Qty against item {0}" msgstr "" -#: erpnext/stock/doctype/item/item.py:323 +#: erpnext/stock/doctype/item/item.py:321 msgid "Please select Sample Retention Warehouse in Stock Settings first" msgstr "" -#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:325 +#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:323 msgid "Please select Serial/Batch Nos to reserve or change Reservation Based On to Qty." msgstr "" @@ -37361,7 +37388,7 @@ msgstr "" msgid "Please select Subcontracting Order instead of Purchase Order {0}" msgstr "" -#: erpnext/controllers/accounts_controller.py:2616 +#: erpnext/controllers/accounts_controller.py:2701 msgid "Please select Unrealized Profit / Loss account or add default Unrealized Profit / Loss account account for company {0}" msgstr "" @@ -37539,15 +37566,15 @@ msgstr "" msgid "Please set 'Apply Additional Discount On'" msgstr "" -#: erpnext/assets/doctype/asset/depreciation.py:779 +#: erpnext/assets/doctype/asset/depreciation.py:777 msgid "Please set 'Asset Depreciation Cost Center' in Company {0}" msgstr "" -#: erpnext/assets/doctype/asset/depreciation.py:777 +#: erpnext/assets/doctype/asset/depreciation.py:775 msgid "Please set 'Gain/Loss Account on Asset Disposal' in Company {0}" msgstr "" -#: erpnext/accounts/general_ledger.py:528 +#: erpnext/accounts/general_ledger.py:530 msgid "Please set '{0}' in Company: {1}" msgstr "" @@ -37555,7 +37582,7 @@ msgstr "" msgid "Please set Account" msgstr "" -#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:1698 +#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:1696 msgid "Please set Account for Change Amount" msgstr "" @@ -37578,7 +37605,7 @@ msgstr "" msgid "Please set Company" msgstr "" -#: erpnext/assets/doctype/asset/depreciation.py:741 +#: erpnext/assets/doctype/asset/depreciation.py:739 msgid "Please set Depreciation related Accounts in Asset Category {0} or Company {1}" msgstr "" @@ -37596,7 +37623,7 @@ msgstr "" msgid "Please set Fiscal Code for the public administration '%s'" msgstr "" -#: erpnext/assets/doctype/asset/depreciation.py:727 +#: erpnext/assets/doctype/asset/depreciation.py:725 msgid "Please set Fixed Asset Account in Asset Category {0}" msgstr "" @@ -37638,7 +37665,7 @@ msgstr "" msgid "Please set a Cost Center for the Asset or set an Asset Depreciation Cost Center for the Company {}" msgstr "" -#: erpnext/selling/doctype/sales_order/sales_order.py:1395 +#: erpnext/selling/doctype/sales_order/sales_order.py:1393 msgid "Please set a Supplier against the Items to be considered in the Purchase Order." msgstr "" @@ -37659,7 +37686,7 @@ msgstr "" msgid "Please set an Address on the Company '%s'" msgstr "" -#: erpnext/controllers/stock_controller.py:731 +#: erpnext/controllers/stock_controller.py:742 msgid "Please set an Expense Account in the Items table" msgstr "" @@ -37675,19 +37702,19 @@ msgstr "" msgid "Please set both the Tax ID and Fiscal Code on Company {0}" msgstr "" -#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:2217 +#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:2215 msgid "Please set default Cash or Bank account in Mode of Payment {0}" msgstr "" #: erpnext/accounts/doctype/pos_opening_entry/pos_opening_entry.py:66 #: erpnext/accounts/doctype/pos_profile/pos_profile.py:180 -#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:2817 +#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:2815 msgid "Please set default Cash or Bank account in Mode of Payment {}" msgstr "" #: erpnext/accounts/doctype/pos_opening_entry/pos_opening_entry.py:68 #: erpnext/accounts/doctype/pos_profile/pos_profile.py:182 -#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:2819 +#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:2817 msgid "Please set default Cash or Bank account in Mode of Payments {}" msgstr "" @@ -37703,7 +37730,7 @@ msgstr "" msgid "Please set default UOM in Stock Settings" msgstr "" -#: erpnext/controllers/stock_controller.py:592 +#: erpnext/controllers/stock_controller.py:603 msgid "Please set default cost of goods sold account in company {0} for booking rounding gain and loss during stock transfer" msgstr "" @@ -37720,7 +37747,7 @@ msgstr "" msgid "Please set filters" msgstr "" -#: erpnext/controllers/accounts_controller.py:2197 +#: erpnext/controllers/accounts_controller.py:2282 msgid "Please set one of the following:" msgstr "" @@ -37787,7 +37814,7 @@ msgstr "" msgid "Please set {0} in Company {1} to account for Exchange Gain / Loss" msgstr "" -#: erpnext/controllers/accounts_controller.py:521 +#: erpnext/controllers/accounts_controller.py:523 msgid "Please set {0} to {1}, the same account that was used in the original invoice {2}." msgstr "" @@ -37795,7 +37822,7 @@ msgstr "" msgid "Please setup and enable a group account with the Account Type - {0} for the company {1}" msgstr "" -#: erpnext/assets/doctype/asset/depreciation.py:350 +#: erpnext/assets/doctype/asset/depreciation.py:348 msgid "Please share this email with your support team so that they can find and fix the issue." msgstr "" @@ -37803,7 +37830,7 @@ msgstr "" msgid "Please specify" msgstr "" -#: erpnext/stock/get_item_details.py:309 +#: erpnext/stock/get_item_details.py:310 msgid "Please specify Company" msgstr "" @@ -37814,7 +37841,7 @@ msgid "Please specify Company to proceed" msgstr "" #: erpnext/accounts/doctype/payment_entry/payment_entry.js:1472 -#: erpnext/controllers/accounts_controller.py:2960 +#: erpnext/controllers/accounts_controller.py:3045 #: erpnext/public/js/controllers/accounts.js:97 msgid "Please specify a valid Row ID for row {0} in table {1}" msgstr "" @@ -37827,7 +37854,7 @@ msgstr "" msgid "Please specify at least one attribute in the Attributes table" msgstr "" -#: erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py:601 +#: erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py:602 msgid "Please specify either Quantity or Valuation Rate or both" msgstr "" @@ -38015,7 +38042,7 @@ msgstr "" #: erpnext/accounts/report/bank_reconciliation_statement/bank_reconciliation_statement.py:61 #: erpnext/accounts/report/billed_items_to_be_received/billed_items_to_be_received.py:66 #: erpnext/accounts/report/cheques_and_deposits_incorrectly_cleared/cheques_and_deposits_incorrectly_cleared.py:151 -#: erpnext/accounts/report/general_ledger/general_ledger.py:640 +#: erpnext/accounts/report/general_ledger/general_ledger.py:638 #: erpnext/accounts/report/gross_profit/gross_profit.py:269 #: erpnext/accounts/report/item_wise_purchase_register/item_wise_purchase_register.py:183 #: erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.py:202 @@ -38062,7 +38089,7 @@ msgid "Posting Date Inheritance for Exchange Gain / Loss" msgstr "" #: erpnext/stock/doctype/purchase_receipt/purchase_receipt.py:253 -#: erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.py:126 +#: erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.py:130 msgid "Posting Date cannot be future date" msgstr "" @@ -38515,7 +38542,7 @@ msgstr "" msgid "Price Per Unit ({0})" msgstr "" -#: erpnext/selling/page/point_of_sale/pos_controller.js:702 +#: erpnext/selling/page/point_of_sale/pos_controller.js:700 msgid "Price is not set for the item." msgstr "" @@ -38869,7 +38896,7 @@ msgstr "" msgid "Print Style" msgstr "" -#: erpnext/setup/install.py:107 +#: erpnext/setup/install.py:100 msgid "Print UOM after Quantity" msgstr "" @@ -38887,7 +38914,7 @@ msgstr "" msgid "Print settings updated in respective print format" msgstr "" -#: erpnext/setup/install.py:114 +#: erpnext/setup/install.py:107 msgid "Print taxes with zero amount" msgstr "" @@ -39544,7 +39571,7 @@ msgstr "" #: erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.js:109 #: erpnext/accounts/report/delivered_items_to_be_billed/delivered_items_to_be_billed.py:74 #: erpnext/accounts/report/general_ledger/general_ledger.js:164 -#: erpnext/accounts/report/general_ledger/general_ledger.py:717 +#: erpnext/accounts/report/general_ledger/general_ledger.py:715 #: erpnext/accounts/report/gross_profit/gross_profit.js:79 #: erpnext/accounts/report/gross_profit/gross_profit.py:357 #: erpnext/accounts/report/item_wise_purchase_register/item_wise_purchase_register.py:225 @@ -39781,7 +39808,7 @@ msgstr "" #: erpnext/config/projects.py:7 erpnext/projects/doctype/project/project.py:445 #: erpnext/projects/workspace/projects/projects.json #: erpnext/selling/doctype/customer/customer_dashboard.py:26 -#: erpnext/selling/doctype/sales_order/sales_order_dashboard.py:27 +#: erpnext/selling/doctype/sales_order/sales_order_dashboard.py:28 #: erpnext/setup/doctype/company/company_dashboard.py:25 msgid "Projects" msgstr "" @@ -40189,7 +40216,7 @@ msgstr "" #: erpnext/buying/report/purchase_order_analysis/purchase_order_analysis.js:48 #: erpnext/buying/report/purchase_order_analysis/purchase_order_analysis.py:203 #: erpnext/buying/workspace/buying/buying.json -#: erpnext/controllers/buying_controller.py:747 +#: erpnext/controllers/buying_controller.py:801 #: erpnext/crm/doctype/contract/contract.json #: erpnext/manufacturing/doctype/blanket_order/blanket_order.js:54 #: erpnext/manufacturing/doctype/production_plan_sub_assembly_item/production_plan_sub_assembly_item.json @@ -40262,7 +40289,7 @@ msgstr "" msgid "Purchase Order Item Supplied" msgstr "" -#: erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.py:735 +#: erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.py:782 msgid "Purchase Order Item reference is missing in Subcontracting Receipt {0}" msgstr "" @@ -40328,7 +40355,7 @@ msgstr "" msgid "Purchase Orders to Receive" msgstr "" -#: erpnext/controllers/accounts_controller.py:1836 +#: erpnext/controllers/accounts_controller.py:1921 msgid "Purchase Orders {0} are un-linked" msgstr "" @@ -40438,7 +40465,7 @@ msgstr "" msgid "Purchase Receipt doesn't have any Item for which Retain Sample is enabled." msgstr "" -#: erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.py:812 +#: erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.py:859 msgid "Purchase Receipt {0} created." msgstr "" @@ -40543,7 +40570,7 @@ msgstr "" msgid "Purchase Value" msgstr "" -#: erpnext/utilities/activation.py:104 +#: erpnext/utilities/activation.py:105 msgid "Purchase orders help you plan and follow up on your purchases" msgstr "" @@ -40559,7 +40586,7 @@ msgstr "" #. Option for the 'Order Type' (Select) field in DocType 'Blanket Order' #. Label of the purchasing_tab (Tab Break) field in DocType 'Item' #: erpnext/manufacturing/doctype/blanket_order/blanket_order.json -#: erpnext/selling/doctype/sales_order/sales_order_dashboard.py:26 +#: erpnext/selling/doctype/sales_order/sales_order_dashboard.py:27 #: erpnext/stock/doctype/item/item.json msgid "Purchasing" msgstr "" @@ -41449,7 +41476,7 @@ msgstr "" msgid "Query Route String" msgstr "" -#: erpnext/accounts/doctype/accounts_settings/accounts_settings.py:143 +#: erpnext/accounts/doctype/accounts_settings/accounts_settings.py:146 msgid "Queue Size should be between 5 and 100" msgstr "" @@ -41574,20 +41601,20 @@ msgstr "" msgid "Quotation Trends" msgstr "" -#: erpnext/selling/doctype/sales_order/sales_order.py:424 +#: erpnext/selling/doctype/sales_order/sales_order.py:422 msgid "Quotation {0} is cancelled" msgstr "" -#: erpnext/selling/doctype/sales_order/sales_order.py:337 +#: erpnext/selling/doctype/sales_order/sales_order.py:335 msgid "Quotation {0} not of type {1}" msgstr "" -#: erpnext/selling/doctype/quotation/quotation.py:350 +#: erpnext/selling/doctype/quotation/quotation.py:343 #: erpnext/selling/page/sales_funnel/sales_funnel.py:57 msgid "Quotations" msgstr "" -#: erpnext/utilities/activation.py:86 +#: erpnext/utilities/activation.py:87 msgid "Quotations are proposals, bids you have sent to your customers" msgstr "" @@ -42426,8 +42453,8 @@ msgstr "" msgid "Receiving" msgstr "" -#: erpnext/selling/page/point_of_sale/pos_controller.js:245 -#: erpnext/selling/page/point_of_sale/pos_controller.js:282 +#: erpnext/selling/page/point_of_sale/pos_controller.js:244 +#: erpnext/selling/page/point_of_sale/pos_controller.js:281 #: erpnext/selling/page/point_of_sale/pos_past_order_list.js:17 msgid "Recent Orders" msgstr "" @@ -42723,7 +42750,7 @@ msgstr "" #: erpnext/manufacturing/doctype/material_request_plan_item/material_request_plan_item.json #: erpnext/manufacturing/doctype/production_plan_item/production_plan_item.json #: erpnext/manufacturing/doctype/work_order/work_order_dashboard.py:13 -#: erpnext/selling/doctype/sales_order/sales_order_dashboard.py:29 +#: erpnext/selling/doctype/sales_order/sales_order_dashboard.py:30 #: erpnext/setup/setup_wizard/data/marketing_source.txt:2 #: erpnext/stock/doctype/delivery_note/delivery_note_dashboard.py:23 #: erpnext/stock/doctype/item_price/item_price.json @@ -43030,7 +43057,7 @@ msgid "Referral Sales Partner" msgstr "" #: erpnext/public/js/plant_floor_visual/visual_plant.js:151 -#: erpnext/selling/page/point_of_sale/pos_controller.js:191 +#: erpnext/selling/page/point_of_sale/pos_controller.js:190 #: erpnext/selling/page/sales_funnel/sales_funnel.js:53 msgid "Refresh" msgstr "" @@ -43238,7 +43265,7 @@ msgstr "" #: erpnext/accounts/report/accounts_receivable/accounts_receivable.py:1169 #: erpnext/accounts/report/general_ledger/general_ledger.html:84 #: erpnext/accounts/report/general_ledger/general_ledger.html:110 -#: erpnext/accounts/report/general_ledger/general_ledger.py:742 +#: erpnext/accounts/report/general_ledger/general_ledger.py:740 #: erpnext/accounts/report/payment_period_based_on_invoice_date/payment_period_based_on_invoice_date.py:112 #: erpnext/accounts/report/purchase_register/purchase_register.py:296 #: erpnext/accounts/report/sales_register/sales_register.py:335 @@ -43276,7 +43303,7 @@ msgstr "" msgid "Remove item if charges is not applicable to that item" msgstr "" -#: erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py:551 +#: erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py:552 msgid "Removed items with no change in quantity or value." msgstr "" @@ -43475,7 +43502,7 @@ msgstr "" msgid "Report View" msgstr "" -#: erpnext/setup/install.py:160 +#: erpnext/setup/install.py:153 msgid "Report an Issue" msgstr "" @@ -43969,7 +43996,7 @@ msgstr "" msgid "Reserved Qty for Subcontract: Raw materials quantity to make subcontracted items." msgstr "" -#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:515 +#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:513 msgid "Reserved Qty should be greater than Delivered Qty." msgstr "" @@ -43985,7 +44012,7 @@ msgstr "" msgid "Reserved Quantity for Production" msgstr "" -#: erpnext/stock/stock_ledger.py:2155 +#: erpnext/stock/stock_ledger.py:2158 msgid "Reserved Serial No." msgstr "" @@ -44001,11 +44028,11 @@ msgstr "" #: erpnext/stock/doctype/pick_list/pick_list.js:153 #: erpnext/stock/report/reserved_stock/reserved_stock.json #: erpnext/stock/report/stock_balance/stock_balance.py:499 -#: erpnext/stock/stock_ledger.py:2139 +#: erpnext/stock/stock_ledger.py:2142 msgid "Reserved Stock" msgstr "" -#: erpnext/stock/stock_ledger.py:2185 +#: erpnext/stock/stock_ledger.py:2188 msgid "Reserved Stock for Batch" msgstr "" @@ -44017,7 +44044,7 @@ msgstr "" msgid "Reserved Stock for Sub-assembly" msgstr "" -#: erpnext/controllers/buying_controller.py:484 +#: erpnext/controllers/buying_controller.py:538 msgid "Reserved Warehouse is mandatory for the Item {item_code} in Raw Materials supplied." msgstr "" @@ -44405,7 +44432,7 @@ msgstr "" msgid "Return Qty from Rejected Warehouse" msgstr "" -#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:1344 +#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:1342 msgid "Return invoice of asset cancelled" msgstr "" @@ -44586,10 +44613,13 @@ msgstr "" msgid "Role Allowed to Over Deliver/Receive" msgstr "" +#. Label of the role_to_override_stop_action (Link) field in DocType 'Accounts +#. Settings' #. Label of the role_to_override_stop_action (Link) field in DocType 'Buying #. Settings' #. Label of the role_to_override_stop_action (Link) field in DocType 'Selling #. Settings' +#: erpnext/accounts/doctype/accounts_settings/accounts_settings.json #: erpnext/buying/doctype/buying_settings/buying_settings.json #: erpnext/selling/doctype/selling_settings/selling_settings.json msgid "Role Allowed to Override Stop Action" @@ -44802,8 +44832,8 @@ msgstr "" msgid "Rounding Loss Allowance should be between 0 and 1" msgstr "" -#: erpnext/controllers/stock_controller.py:604 -#: erpnext/controllers/stock_controller.py:619 +#: erpnext/controllers/stock_controller.py:615 +#: erpnext/controllers/stock_controller.py:630 msgid "Rounding gain/loss Entry for Stock Transfer" msgstr "" @@ -44831,11 +44861,11 @@ msgstr "" msgid "Routing Name" msgstr "" -#: erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py:663 +#: erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py:664 msgid "Row #" msgstr "" -#: erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py:567 +#: erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py:568 msgid "Row # {0}:" msgstr "" @@ -44843,11 +44873,11 @@ msgstr "" msgid "Row # {0}: Cannot return more than {1} for Item {2}" msgstr "" -#: erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py:182 +#: erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py:185 msgid "Row # {0}: Please add Serial and Batch Bundle for Item {1}" msgstr "" -#: erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py:201 +#: erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py:204 msgid "Row # {0}: Please enter quantity for Item {1} as it is not zero." msgstr "" @@ -44859,17 +44889,17 @@ msgstr "" msgid "Row # {0}: Returned Item {1} does not exist in {2} {3}" msgstr "" -#: erpnext/accounts/doctype/pos_invoice/pos_invoice.py:526 -#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:1890 +#: erpnext/accounts/doctype/pos_invoice/pos_invoice.py:524 +#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:1888 msgid "Row #{0} (Payment Table): Amount must be negative" msgstr "" -#: erpnext/accounts/doctype/pos_invoice/pos_invoice.py:524 -#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:1885 +#: erpnext/accounts/doctype/pos_invoice/pos_invoice.py:522 +#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:1883 msgid "Row #{0} (Payment Table): Amount must be positive" msgstr "" -#: erpnext/stock/doctype/item/item.py:498 +#: erpnext/stock/doctype/item/item.py:496 msgid "Row #{0}: A reorder entry already exists for warehouse {1} with reorder type {2}." msgstr "" @@ -44882,15 +44912,15 @@ msgid "Row #{0}: Acceptance Criteria Formula is required." msgstr "" #: erpnext/controllers/subcontracting_controller.py:72 -#: erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.py:453 +#: erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.py:487 msgid "Row #{0}: Accepted Warehouse and Rejected Warehouse cannot be same" msgstr "" -#: erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.py:446 +#: erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.py:480 msgid "Row #{0}: Accepted Warehouse is mandatory for the accepted Item {1}" msgstr "" -#: erpnext/controllers/accounts_controller.py:1120 +#: erpnext/controllers/accounts_controller.py:1205 msgid "Row #{0}: Account {1} does not belong to company {2}" msgstr "" @@ -44923,7 +44953,7 @@ msgstr "" msgid "Row #{0}: BOM is not specified for subcontracting item {0}" msgstr "" -#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:315 +#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:313 msgid "Row #{0}: Batch No {1} is already selected." msgstr "" @@ -44931,27 +44961,27 @@ msgstr "" msgid "Row #{0}: Cannot allocate more than {1} against payment term {2}" msgstr "" -#: erpnext/controllers/accounts_controller.py:3527 +#: erpnext/controllers/accounts_controller.py:3612 msgid "Row #{0}: Cannot delete item {1} which has already been billed." msgstr "" -#: erpnext/controllers/accounts_controller.py:3501 +#: erpnext/controllers/accounts_controller.py:3586 msgid "Row #{0}: Cannot delete item {1} which has already been delivered" msgstr "" -#: erpnext/controllers/accounts_controller.py:3520 +#: erpnext/controllers/accounts_controller.py:3605 msgid "Row #{0}: Cannot delete item {1} which has already been received" msgstr "" -#: erpnext/controllers/accounts_controller.py:3507 +#: erpnext/controllers/accounts_controller.py:3592 msgid "Row #{0}: Cannot delete item {1} which has work order assigned to it." msgstr "" -#: erpnext/controllers/accounts_controller.py:3513 +#: erpnext/controllers/accounts_controller.py:3598 msgid "Row #{0}: Cannot delete item {1} which is assigned to customer's purchase order." msgstr "" -#: erpnext/controllers/accounts_controller.py:3768 +#: erpnext/controllers/accounts_controller.py:3853 msgid "Row #{0}: Cannot set Rate if the billed amount is greater than the amount for Item {1}." msgstr "" @@ -45011,7 +45041,7 @@ msgstr "" msgid "Row #{0}: Expected Delivery Date cannot be before Purchase Order Date" msgstr "" -#: erpnext/controllers/stock_controller.py:733 +#: erpnext/controllers/stock_controller.py:744 msgid "Row #{0}: Expense Account not set for the Item {1}. {2}" msgstr "" @@ -45031,7 +45061,7 @@ msgstr "" msgid "Row #{0}: Finished Good must be {1}" msgstr "" -#: erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.py:434 +#: erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.py:468 msgid "Row #{0}: Finished Good reference is mandatory for Scrap Item {1}." msgstr "" @@ -45067,11 +45097,15 @@ msgstr "" msgid "Row #{0}: Item {1} does not exist" msgstr "" -#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1382 +#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1380 msgid "Row #{0}: Item {1} has been picked, please reserve stock from the Pick List." msgstr "" -#: erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py:725 +#: erpnext/controllers/stock_controller.py:87 +msgid "Row #{0}: Item {1} has zero rate but 'Allow Zero Valuation Rate' is not enabled." +msgstr "" + +#: erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py:726 msgid "Row #{0}: Item {1} is not a Serialized/Batched Item. It cannot have a Serial No/Batch No against it." msgstr "" @@ -45095,11 +45129,11 @@ msgstr "" msgid "Row #{0}: Next Depreciation Date cannot be before Purchase Date" msgstr "" -#: erpnext/selling/doctype/sales_order/sales_order.py:587 +#: erpnext/selling/doctype/sales_order/sales_order.py:585 msgid "Row #{0}: Not allowed to change Supplier as Purchase Order already exists" msgstr "" -#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1465 +#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1463 msgid "Row #{0}: Only {1} available to reserve for the Item {2}" msgstr "" @@ -45127,11 +45161,11 @@ msgstr "" msgid "Row #{0}: Please select the Sub Assembly Warehouse" msgstr "" -#: erpnext/stock/doctype/item/item.py:505 +#: erpnext/stock/doctype/item/item.py:503 msgid "Row #{0}: Please set reorder quantity" msgstr "" -#: erpnext/controllers/accounts_controller.py:544 +#: erpnext/controllers/accounts_controller.py:546 msgid "Row #{0}: Please update deferred revenue/expense account in item row or default account in company master" msgstr "" @@ -45144,31 +45178,33 @@ msgstr "" msgid "Row #{0}: Qty must be a positive number" msgstr "" -#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:303 +#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:301 msgid "Row #{0}: Qty should be less than or equal to Available Qty to Reserve (Actual Qty - Reserved Qty) {1} for Iem {2} against Batch {3} in Warehouse {4}." msgstr "" -#: erpnext/controllers/stock_controller.py:1074 +#: erpnext/controllers/stock_controller.py:1085 msgid "Row #{0}: Quality Inspection is required for Item {1}" msgstr "" -#: erpnext/controllers/stock_controller.py:1089 +#: erpnext/controllers/stock_controller.py:1100 msgid "Row #{0}: Quality Inspection {1} is not submitted for the item: {2}" msgstr "" -#: erpnext/controllers/stock_controller.py:1104 +#: erpnext/controllers/stock_controller.py:1115 msgid "Row #{0}: Quality Inspection {1} was rejected for item {2}" msgstr "" -#: erpnext/controllers/accounts_controller.py:1277 -#: erpnext/controllers/accounts_controller.py:3627 +#: erpnext/controllers/accounts_controller.py:1364 +#: erpnext/controllers/accounts_controller.py:3712 msgid "Row #{0}: Quantity for Item {1} cannot be zero." msgstr "" -#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1450 +#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1448 msgid "Row #{0}: Quantity to reserve for the Item {1} should be greater than 0." msgstr "" +#: erpnext/controllers/accounts_controller.py:801 +#: erpnext/controllers/accounts_controller.py:813 #: erpnext/utilities/transaction_base.py:114 #: erpnext/utilities/transaction_base.py:120 msgid "Row #{0}: Rate must be same as {1}: {2} ({3} / {4})" @@ -45182,7 +45218,7 @@ msgstr "" msgid "Row #{0}: Reference Document Type must be one of Sales Order, Sales Invoice, Journal Entry or Dunning" msgstr "" -#: erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.py:427 +#: erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.py:461 msgid "Row #{0}: Rejected Qty cannot be set for Scrap Item {1}." msgstr "" @@ -45194,11 +45230,11 @@ msgstr "" msgid "Row #{0}: Return Against is required for returning asset" msgstr "" -#: erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.py:422 +#: erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.py:456 msgid "Row #{0}: Scrap Item Qty cannot be zero" msgstr "" -#: erpnext/controllers/selling_controller.py:238 +#: erpnext/controllers/selling_controller.py:242 msgid "" "Row #{0}: Selling rate for item {1} is lower than its {2}.\n" "\t\t\t\t\tSelling {3} should be atleast {4}.

Alternatively,\n" @@ -45206,31 +45242,31 @@ msgid "" "\t\t\t\t\tthis validation." msgstr "" -#: erpnext/controllers/stock_controller.py:173 +#: erpnext/controllers/stock_controller.py:184 msgid "Row #{0}: Serial No {1} does not belong to Batch {2}" msgstr "" -#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:252 +#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:250 msgid "Row #{0}: Serial No {1} for Item {2} is not available in {3} {4} or might be reserved in another {5}." msgstr "" -#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:268 +#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:266 msgid "Row #{0}: Serial No {1} is already selected." msgstr "" -#: erpnext/controllers/accounts_controller.py:572 +#: erpnext/controllers/accounts_controller.py:574 msgid "Row #{0}: Service End Date cannot be before Invoice Posting Date" msgstr "" -#: erpnext/controllers/accounts_controller.py:566 +#: erpnext/controllers/accounts_controller.py:568 msgid "Row #{0}: Service Start Date cannot be greater than Service End Date" msgstr "" -#: erpnext/controllers/accounts_controller.py:560 +#: erpnext/controllers/accounts_controller.py:562 msgid "Row #{0}: Service Start and End Date is required for deferred accounting" msgstr "" -#: erpnext/selling/doctype/sales_order/sales_order.py:432 +#: erpnext/selling/doctype/sales_order/sales_order.py:430 msgid "Row #{0}: Set Supplier for item {1}" msgstr "" @@ -45250,19 +45286,19 @@ msgstr "" msgid "Row #{0}: Status must be {1} for Invoice Discounting {2}" msgstr "" -#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:277 +#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:275 msgid "Row #{0}: Stock cannot be reserved for Item {1} against a disabled Batch {2}." msgstr "" -#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1395 +#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1393 msgid "Row #{0}: Stock cannot be reserved for a non-stock Item {1}" msgstr "" -#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1408 +#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1406 msgid "Row #{0}: Stock cannot be reserved in group warehouse {1}." msgstr "" -#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1422 +#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1420 msgid "Row #{0}: Stock is already reserved for the Item {1}." msgstr "" @@ -45270,20 +45306,20 @@ msgstr "" msgid "Row #{0}: Stock is reserved for item {1} in warehouse {2}." msgstr "" -#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:287 +#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:285 msgid "Row #{0}: Stock not available to reserve for Item {1} against Batch {2} in Warehouse {3}." msgstr "" -#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1135 -#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1436 +#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1133 +#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1434 msgid "Row #{0}: Stock not available to reserve for the Item {1} in Warehouse {2}." msgstr "" -#: erpnext/controllers/stock_controller.py:186 +#: erpnext/controllers/stock_controller.py:197 msgid "Row #{0}: The batch {1} has already expired." msgstr "" -#: erpnext/stock/doctype/item/item.py:514 +#: erpnext/stock/doctype/item/item.py:512 msgid "Row #{0}: The warehouse {1} is not a child warehouse of a group warehouse {2}" msgstr "" @@ -45323,39 +45359,39 @@ msgstr "" msgid "Row #{1}: Warehouse is mandatory for stock Item {0}" msgstr "" -#: erpnext/controllers/buying_controller.py:267 +#: erpnext/controllers/buying_controller.py:269 msgid "Row #{idx}: Cannot select Supplier Warehouse while suppling raw materials to subcontractor." msgstr "" -#: erpnext/controllers/buying_controller.py:414 +#: erpnext/controllers/buying_controller.py:468 msgid "Row #{idx}: Item rate has been updated as per valuation rate since its an internal stock transfer." msgstr "" -#: erpnext/controllers/buying_controller.py:889 +#: erpnext/controllers/buying_controller.py:943 msgid "Row #{idx}: Please enter a location for the asset item {item_code}." msgstr "" -#: erpnext/controllers/buying_controller.py:545 +#: erpnext/controllers/buying_controller.py:599 msgid "Row #{idx}: Received Qty must be equal to Accepted + Rejected Qty for Item {item_code}." msgstr "" -#: erpnext/controllers/buying_controller.py:558 +#: erpnext/controllers/buying_controller.py:612 msgid "Row #{idx}: {field_label} can not be negative for item {item_code}." msgstr "" -#: erpnext/controllers/buying_controller.py:504 +#: erpnext/controllers/buying_controller.py:558 msgid "Row #{idx}: {field_label} is mandatory." msgstr "" -#: erpnext/controllers/buying_controller.py:526 +#: erpnext/controllers/buying_controller.py:580 msgid "Row #{idx}: {field_label} is not allowed in Purchase Return." msgstr "" -#: erpnext/controllers/buying_controller.py:258 +#: erpnext/controllers/buying_controller.py:260 msgid "Row #{idx}: {from_warehouse_field} and {to_warehouse_field} cannot be same." msgstr "" -#: erpnext/controllers/buying_controller.py:1007 +#: erpnext/controllers/buying_controller.py:1061 msgid "Row #{idx}: {schedule_date} cannot be before {transaction_date}." msgstr "" @@ -45391,7 +45427,7 @@ msgstr "" msgid "Row #{}: Please use a different Finance Book." msgstr "" -#: erpnext/accounts/doctype/pos_invoice/pos_invoice.py:486 +#: erpnext/accounts/doctype/pos_invoice/pos_invoice.py:484 msgid "Row #{}: Serial No {} cannot be returned since it was not transacted in original invoice {}" msgstr "" @@ -45403,7 +45439,7 @@ msgstr "" msgid "Row #{}: The original Invoice {} of return invoice {} is not consolidated." msgstr "" -#: erpnext/accounts/doctype/pos_invoice/pos_invoice.py:459 +#: erpnext/accounts/doctype/pos_invoice/pos_invoice.py:457 msgid "Row #{}: You cannot add positive quantities in a return invoice. Please remove item {} to complete the return." msgstr "" @@ -45411,8 +45447,8 @@ msgstr "" msgid "Row #{}: item {} has been picked already." msgstr "" -#: erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.py:127 -#: erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.py:192 +#: erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.py:125 +#: erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.py:190 msgid "Row #{}: {}" msgstr "" @@ -45420,7 +45456,7 @@ msgstr "" msgid "Row #{}: {} {} does not exist." msgstr "" -#: erpnext/stock/doctype/item/item.py:1397 +#: erpnext/stock/doctype/item/item.py:1393 msgid "Row #{}: {} {} doesn't belong to Company {}. Please select valid {}." msgstr "" @@ -45452,7 +45488,7 @@ msgstr "" msgid "Row {0}# Item {1} not found in 'Raw Materials Supplied' table in {2} {3}" msgstr "" -#: erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.py:216 +#: erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.py:223 msgid "Row {0}: Accepted Qty and Rejected Qty can't be zero at the same time." msgstr "" @@ -45492,11 +45528,11 @@ msgstr "" msgid "Row {0}: Both Debit and Credit values cannot be zero" msgstr "" -#: erpnext/controllers/selling_controller.py:230 +#: erpnext/controllers/selling_controller.py:234 msgid "Row {0}: Conversion Factor is mandatory" msgstr "" -#: erpnext/controllers/accounts_controller.py:2998 +#: erpnext/controllers/accounts_controller.py:3083 msgid "Row {0}: Cost Center {1} does not belong to Company {2}" msgstr "" @@ -45516,11 +45552,11 @@ msgstr "" msgid "Row {0}: Debit entry can not be linked with a {1}" msgstr "" -#: erpnext/controllers/selling_controller.py:784 +#: erpnext/controllers/selling_controller.py:786 msgid "Row {0}: Delivery Warehouse ({1}) and Customer Warehouse ({2}) can not be same" msgstr "" -#: erpnext/controllers/accounts_controller.py:2532 +#: erpnext/controllers/accounts_controller.py:2617 msgid "Row {0}: Due Date in the Payment Terms table cannot be before Posting Date" msgstr "" @@ -45529,7 +45565,7 @@ msgid "Row {0}: Either Delivery Note Item or Packed Item reference is mandatory. msgstr "" #: erpnext/accounts/doctype/journal_entry/journal_entry.py:1010 -#: erpnext/controllers/taxes_and_totals.py:1215 +#: erpnext/controllers/taxes_and_totals.py:1203 msgid "Row {0}: Exchange Rate is mandatory" msgstr "" @@ -45562,7 +45598,7 @@ msgstr "" msgid "Row {0}: From Time and To Time of {1} is overlapping with {2}" msgstr "" -#: erpnext/controllers/stock_controller.py:1170 +#: erpnext/controllers/stock_controller.py:1181 msgid "Row {0}: From Warehouse is mandatory for internal transfers" msgstr "" @@ -45578,11 +45614,11 @@ msgstr "" msgid "Row {0}: Invalid reference {1}" msgstr "" -#: erpnext/controllers/taxes_and_totals.py:143 +#: erpnext/controllers/taxes_and_totals.py:140 msgid "Row {0}: Item Tax template updated as per validity and rate applied" msgstr "" -#: erpnext/controllers/selling_controller.py:549 +#: erpnext/controllers/selling_controller.py:551 msgid "Row {0}: Item rate has been updated as per valuation rate since its an internal stock transfer" msgstr "" @@ -45654,7 +45690,7 @@ msgstr "" msgid "Row {0}: Please set the correct code on Mode of Payment {1}" msgstr "" -#: erpnext/projects/doctype/timesheet_detail/timesheet_detail.py:102 +#: erpnext/projects/doctype/timesheet_detail/timesheet_detail.py:104 msgid "Row {0}: Project must be same as the one set in the Timesheet: {1}." msgstr "" @@ -45690,11 +45726,11 @@ msgstr "" msgid "Row {0}: Subcontracted Item is mandatory for the raw material {1}" msgstr "" -#: erpnext/controllers/stock_controller.py:1161 +#: erpnext/controllers/stock_controller.py:1172 msgid "Row {0}: Target Warehouse is mandatory for internal transfers" msgstr "" -#: erpnext/projects/doctype/timesheet_detail/timesheet_detail.py:113 +#: erpnext/projects/doctype/timesheet_detail/timesheet_detail.py:115 msgid "Row {0}: Task {1} does not belong to Project {2}" msgstr "" @@ -45702,7 +45738,7 @@ msgstr "" msgid "Row {0}: The item {1}, quantity must be positive number" msgstr "" -#: erpnext/controllers/accounts_controller.py:2975 +#: erpnext/controllers/accounts_controller.py:3060 msgid "Row {0}: The {3} Account {1} does not belong to the company {2}" msgstr "" @@ -45719,7 +45755,7 @@ msgstr "" msgid "Row {0}: Workstation or Workstation Type is mandatory for an operation {1}" msgstr "" -#: erpnext/controllers/accounts_controller.py:1014 +#: erpnext/controllers/accounts_controller.py:1099 msgid "Row {0}: user has not applied the rule {1} on the item {2}" msgstr "" @@ -45731,7 +45767,7 @@ msgstr "" msgid "Row {0}: {1} must be greater than 0" msgstr "" -#: erpnext/controllers/accounts_controller.py:709 +#: erpnext/controllers/accounts_controller.py:711 msgid "Row {0}: {1} {2} cannot be same as {3} (Party Account) {4}" msgstr "" @@ -45747,7 +45783,7 @@ msgstr "" msgid "Row {1}: Quantity ({0}) cannot be a fraction. To allow this, disable '{2}' in UOM {3}." msgstr "" -#: erpnext/controllers/buying_controller.py:871 +#: erpnext/controllers/buying_controller.py:925 msgid "Row {idx}: Asset Naming Series is mandatory for the auto creation of assets for item {item_code}." msgstr "" @@ -45773,7 +45809,7 @@ msgstr "" msgid "Rows with Same Account heads will be merged on Ledger" msgstr "" -#: erpnext/controllers/accounts_controller.py:2542 +#: erpnext/controllers/accounts_controller.py:2627 msgid "Rows with duplicate due dates in other rows were found: {0}" msgstr "" @@ -45781,7 +45817,7 @@ msgstr "" msgid "Rows: {0} have 'Payment Entry' as reference_type. This should not be set manually." msgstr "" -#: erpnext/controllers/accounts_controller.py:266 +#: erpnext/controllers/accounts_controller.py:268 msgid "Rows: {0} in {1} section are Invalid. Reference Name should point to a valid Payment Entry or Journal Entry." msgstr "" @@ -46102,27 +46138,27 @@ msgstr "" msgid "Sales Invoice Trends" msgstr "" -#: erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.py:169 +#: erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.py:167 msgid "Sales Invoice does not have Payments" msgstr "" -#: erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.py:165 +#: erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.py:163 msgid "Sales Invoice is already consolidated" msgstr "" -#: erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.py:171 +#: erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.py:169 msgid "Sales Invoice is not created using POS" msgstr "" -#: erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.py:177 +#: erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.py:175 msgid "Sales Invoice is not submitted" msgstr "" -#: erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.py:180 +#: erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.py:178 msgid "Sales Invoice isn't created by user {}" msgstr "" -#: erpnext/accounts/doctype/pos_invoice/pos_invoice.py:431 +#: erpnext/accounts/doctype/pos_invoice/pos_invoice.py:429 msgid "Sales Invoice mode is activated in POS. Please create Sales Invoice instead." msgstr "" @@ -46130,7 +46166,7 @@ msgstr "" msgid "Sales Invoice {0} has already been submitted" msgstr "" -#: erpnext/selling/doctype/sales_order/sales_order.py:517 +#: erpnext/selling/doctype/sales_order/sales_order.py:515 msgid "Sales Invoice {0} must be deleted before cancelling this Sales Order" msgstr "" @@ -46244,7 +46280,7 @@ msgstr "" #: erpnext/accounts/report/sales_register/sales_register.py:238 #: erpnext/buying/doctype/purchase_order_item/purchase_order_item.json #: erpnext/buying/doctype/supplier_quotation_item/supplier_quotation_item.json -#: erpnext/controllers/selling_controller.py:470 +#: erpnext/controllers/selling_controller.py:472 #: erpnext/crm/doctype/contract/contract.json #: erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.js:65 #: erpnext/maintenance/doctype/maintenance_schedule_item/maintenance_schedule_item.json @@ -46358,11 +46394,11 @@ msgstr "" msgid "Sales Order required for Item {0}" msgstr "" -#: erpnext/selling/doctype/sales_order/sales_order.py:293 +#: erpnext/selling/doctype/sales_order/sales_order.py:291 msgid "Sales Order {0} already exists against Customer's Purchase Order {1}. To allow multiple Sales Orders, Enable {2} in {3}" msgstr "" -#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:1265 +#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:1263 msgid "Sales Order {0} is not submitted" msgstr "" @@ -46370,7 +46406,7 @@ msgstr "" msgid "Sales Order {0} is not valid" msgstr "" -#: erpnext/controllers/selling_controller.py:451 +#: erpnext/controllers/selling_controller.py:453 #: erpnext/manufacturing/doctype/work_order/work_order.py:301 msgid "Sales Order {0} is {1}" msgstr "" @@ -46539,7 +46575,7 @@ msgstr "" msgid "Sales Person" msgstr "" -#: erpnext/controllers/selling_controller.py:212 +#: erpnext/controllers/selling_controller.py:216 msgid "Sales Person {0} is disabled." msgstr "" @@ -46793,7 +46829,7 @@ msgstr "" msgid "Same Item" msgstr "" -#: erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py:583 +#: erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py:584 msgid "Same item and warehouse combination already entered." msgstr "" @@ -47137,7 +47173,7 @@ msgstr "" msgid "Scrap Warehouse" msgstr "" -#: erpnext/assets/doctype/asset/depreciation.py:380 +#: erpnext/assets/doctype/asset/depreciation.py:378 msgid "Scrap date cannot be before purchase date" msgstr "" @@ -47206,7 +47242,7 @@ msgstr "" msgid "Secretary" msgstr "" -#: erpnext/accounts/report/financial_statements.py:646 +#: erpnext/accounts/report/financial_statements.py:642 msgid "Section" msgstr "" @@ -47500,7 +47536,7 @@ msgstr "" msgid "Select company name first." msgstr "" -#: erpnext/controllers/accounts_controller.py:2788 +#: erpnext/controllers/accounts_controller.py:2873 msgid "Select finance book for the item {0} at row {1}" msgstr "" @@ -47574,7 +47610,7 @@ msgstr "" msgid "Selected POS Opening Entry should be open." msgstr "" -#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:2365 +#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:2363 msgid "Selected Price List should have buying and selling fields checked." msgstr "" @@ -47811,7 +47847,7 @@ msgstr "" msgid "Serial / Batch Bundle" msgstr "" -#: erpnext/accounts/doctype/pos_invoice/pos_invoice.py:450 +#: erpnext/accounts/doctype/pos_invoice/pos_invoice.py:448 msgid "Serial / Batch Bundle Missing" msgstr "" @@ -47921,7 +47957,7 @@ msgstr "" msgid "Serial No Range" msgstr "" -#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:1895 +#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:1893 msgid "Serial No Reserved" msgstr "" @@ -47961,7 +47997,7 @@ msgstr "" msgid "Serial No and Batch Selector cannot be use when Use Serial / Batch Fields is enabled." msgstr "" -#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:860 +#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:858 msgid "Serial No is mandatory" msgstr "" @@ -47990,7 +48026,7 @@ msgstr "" msgid "Serial No {0} does not exist" msgstr "" -#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:2624 +#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:2622 msgid "Serial No {0} does not exists" msgstr "" @@ -47998,7 +48034,7 @@ msgstr "" msgid "Serial No {0} is already added" msgstr "" -#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:358 +#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:356 msgid "Serial No {0} is not present in the {1} {2}, hence you can't return it against the {1} {2}" msgstr "" @@ -48014,7 +48050,7 @@ msgstr "" msgid "Serial No {0} not found" msgstr "" -#: erpnext/selling/page/point_of_sale/pos_controller.js:856 +#: erpnext/selling/page/point_of_sale/pos_controller.js:855 msgid "Serial No: {0} has already been transacted into another POS Invoice." msgstr "" @@ -48035,11 +48071,11 @@ msgstr "" msgid "Serial Nos and Batches" msgstr "" -#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:1371 +#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:1369 msgid "Serial Nos are created successfully" msgstr "" -#: erpnext/stock/stock_ledger.py:2145 +#: erpnext/stock/stock_ledger.py:2148 msgid "Serial Nos are reserved in Stock Reservation Entries, you need to unreserve them before proceeding." msgstr "" @@ -48113,15 +48149,15 @@ msgstr "" msgid "Serial and Batch Bundle" msgstr "" -#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:1599 +#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:1597 msgid "Serial and Batch Bundle created" msgstr "" -#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:1665 +#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:1663 msgid "Serial and Batch Bundle updated" msgstr "" -#: erpnext/controllers/stock_controller.py:122 +#: erpnext/controllers/stock_controller.py:133 msgid "Serial and Batch Bundle {0} is already used in {1} {2}." msgstr "" @@ -48853,7 +48889,7 @@ msgstr "" msgid "Setup" msgstr "" -#: erpnext/public/js/setup_wizard.js:18 +#: erpnext/public/js/setup_wizard.js:25 msgid "Setup your organization" msgstr "" @@ -49074,7 +49110,7 @@ msgstr "" msgid "Shipping Address Template" msgstr "" -#: erpnext/controllers/accounts_controller.py:503 +#: erpnext/controllers/accounts_controller.py:505 msgid "Shipping Address does not belong to the {0}" msgstr "" @@ -49727,7 +49763,7 @@ msgstr "" msgid "Source Warehouse Address Link" msgstr "" -#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1069 +#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1067 msgid "Source Warehouse is mandatory for the Item {0}." msgstr "" @@ -49891,7 +49927,7 @@ msgstr "" msgid "Stale Days" msgstr "" -#: erpnext/accounts/doctype/accounts_settings/accounts_settings.py:109 +#: erpnext/accounts/doctype/accounts_settings/accounts_settings.py:112 msgid "Stale Days should start from 1." msgstr "" @@ -49910,7 +49946,7 @@ msgstr "" #: erpnext/setup/setup_wizard/operations/defaults_setup.py:70 #: erpnext/setup/setup_wizard/operations/install_fixtures.py:463 -#: erpnext/stock/doctype/item/item.py:248 +#: erpnext/stock/doctype/item/item.py:247 msgid "Standard Selling" msgstr "" @@ -50740,7 +50776,7 @@ msgstr "" #. Option for the 'Purpose' (Select) field in DocType 'Stock Reconciliation' #. Label of a Link in the Stock Workspace #: erpnext/setup/workspace/home/home.json -#: erpnext/stock/doctype/item/item.py:618 +#: erpnext/stock/doctype/item/item.py:616 #: erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.json #: erpnext/stock/workspace/stock/stock.json msgid "Stock Reconciliation" @@ -50751,7 +50787,7 @@ msgstr "" msgid "Stock Reconciliation Item" msgstr "" -#: erpnext/stock/doctype/item/item.py:618 +#: erpnext/stock/doctype/item/item.py:616 msgid "Stock Reconciliations" msgstr "" @@ -50786,15 +50822,15 @@ msgstr "" #: erpnext/stock/doctype/pick_list/pick_list.js:150 #: erpnext/stock/doctype/pick_list/pick_list.js:155 #: erpnext/stock/doctype/stock_entry/stock_entry_dashboard.py:25 -#: erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py:702 -#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:575 -#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1138 -#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1398 -#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1411 -#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1425 -#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1439 -#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1453 -#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1470 +#: erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py:703 +#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:573 +#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1136 +#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1396 +#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1409 +#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1423 +#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1437 +#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1451 +#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1468 #: erpnext/stock/doctype/stock_settings/stock_settings.json #: erpnext/stock/doctype/stock_settings/stock_settings.py:172 #: erpnext/stock/doctype/stock_settings/stock_settings.py:184 @@ -50803,13 +50839,13 @@ msgstr "" msgid "Stock Reservation" msgstr "" -#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1579 +#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1577 msgid "Stock Reservation Entries Cancelled" msgstr "" #: erpnext/manufacturing/doctype/production_plan/production_plan.py:2120 #: erpnext/manufacturing/doctype/work_order/work_order.py:1670 -#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1531 +#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1529 msgid "Stock Reservation Entries Created" msgstr "" @@ -50817,17 +50853,17 @@ msgstr "" #: erpnext/public/js/stock_reservation.js:308 #: erpnext/selling/doctype/sales_order/sales_order.js:438 #: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.json -#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:262 +#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:260 #: erpnext/stock/report/reserved_stock/reserved_stock.js:53 #: erpnext/stock/report/reserved_stock/reserved_stock.py:171 msgid "Stock Reservation Entry" msgstr "" -#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:438 +#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:436 msgid "Stock Reservation Entry cannot be updated as it has been delivered." msgstr "" -#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:432 +#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:430 msgid "Stock Reservation Entry created against a Pick List cannot be updated. If you need to make changes, we recommend canceling the existing entry and creating a new one." msgstr "" @@ -50835,7 +50871,7 @@ msgstr "" msgid "Stock Reservation Warehouse Mismatch" msgstr "" -#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:584 +#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:582 msgid "Stock Reservation can only be created against {0}." msgstr "" @@ -50870,7 +50906,7 @@ msgstr "" #. Label of a Link in the Stock Workspace #: erpnext/setup/doctype/company/company.json #: erpnext/setup/workspace/settings/settings.json -#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:576 +#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:574 #: erpnext/stock/doctype/stock_settings/stock_settings.json #: erpnext/stock/workspace/stock/stock.json msgid "Stock Settings" @@ -50928,6 +50964,8 @@ msgstr "" #. Label of the stock_uom (Link) field in DocType 'Stock Reservation Entry' #. Label of the stock_uom (Link) field in DocType 'Subcontracting Order Item' #. Label of the stock_uom (Link) field in DocType 'Subcontracting Receipt Item' +#. Label of the stock_uom (Link) field in DocType 'Subcontracting Receipt +#. Supplied Item' #: erpnext/accounts/doctype/pos_invoice_item/pos_invoice_item.json #: erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.json #: erpnext/accounts/doctype/sales_invoice_item/sales_invoice_item.json @@ -50966,6 +51004,7 @@ msgstr "" #: erpnext/stock/report/stock_ledger/stock_ledger.py:214 #: erpnext/subcontracting/doctype/subcontracting_order_item/subcontracting_order_item.json #: erpnext/subcontracting/doctype/subcontracting_receipt_item/subcontracting_receipt_item.json +#: erpnext/subcontracting/doctype/subcontracting_receipt_supplied_item/subcontracting_receipt_supplied_item.json msgid "Stock UOM" msgstr "" @@ -50986,12 +51025,9 @@ msgstr "" #. Supplied' #. Label of the stock_uom (Link) field in DocType 'Subcontracting Order #. Supplied Item' -#. Label of the stock_uom (Link) field in DocType 'Subcontracting Receipt -#. Supplied Item' #: erpnext/buying/doctype/purchase_order_item_supplied/purchase_order_item_supplied.json #: erpnext/buying/doctype/purchase_receipt_item_supplied/purchase_receipt_item_supplied.json #: erpnext/subcontracting/doctype/subcontracting_order_supplied_item/subcontracting_order_supplied_item.json -#: erpnext/subcontracting/doctype/subcontracting_receipt_supplied_item/subcontracting_receipt_supplied_item.json msgid "Stock Uom" msgstr "" @@ -51076,7 +51112,7 @@ msgstr "" msgid "Stock cannot be reserved in group warehouse {0}." msgstr "" -#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1343 +#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1341 msgid "Stock cannot be reserved in the group warehouse {0}." msgstr "" @@ -51084,23 +51120,23 @@ msgstr "" msgid "Stock cannot be updated against Purchase Receipt {0}" msgstr "" -#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:1140 +#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:1138 msgid "Stock cannot be updated against the following Delivery Notes: {0}" msgstr "" -#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:1167 +#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:1165 msgid "Stock cannot be updated because the invoice contains a drop shipping item. Please disable 'Update Stock' or remove the drop shipping item." msgstr "" -#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1036 +#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1034 msgid "Stock has been unreserved for work order {0}." msgstr "" -#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:233 +#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:231 msgid "Stock not available for Item {0} in Warehouse {1}." msgstr "" -#: erpnext/selling/page/point_of_sale/pos_controller.js:836 +#: erpnext/selling/page/point_of_sale/pos_controller.js:835 msgid "Stock quantity not enough for Item Code: {0} under warehouse {1}. Available quantity {2} {3}." msgstr "" @@ -51129,6 +51165,8 @@ msgstr "" msgid "Stone" msgstr "" +#. Option for the 'Action if Same Rate is Not Maintained Throughout Internal +#. Transaction' (Select) field in DocType 'Accounts Settings' #. Option for the 'Action if Annual Budget Exceeded on MR' (Select) field in #. DocType 'Budget' #. Option for the 'Action if Accumulated Monthly Budget Exceeded on MR' @@ -51153,6 +51191,7 @@ msgstr "" #. field in DocType 'Stock Settings' #. Option for the 'Action If Quality Inspection Is Rejected' (Select) field in #. DocType 'Stock Settings' +#: erpnext/accounts/doctype/accounts_settings/accounts_settings.json #: erpnext/accounts/doctype/budget/budget.json #: erpnext/buying/doctype/buying_settings/buying_settings.json #: erpnext/manufacturing/doctype/work_order/work_order.js:697 @@ -51487,7 +51526,7 @@ msgid "Submit" msgstr "" #: erpnext/buying/doctype/purchase_order/purchase_order.py:929 -#: erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.py:808 +#: erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.py:855 msgid "Submit Action Failed" msgstr "" @@ -51721,7 +51760,7 @@ msgstr "" msgid "Successfully Set Supplier" msgstr "" -#: erpnext/stock/doctype/item/item.py:342 +#: erpnext/stock/doctype/item/item.py:340 msgid "Successfully changed Stock UOM, please redefine conversion factors for new UOM." msgstr "" @@ -52078,7 +52117,7 @@ msgstr "" #: erpnext/accounts/doctype/process_statement_of_accounts/process_statement_of_accounts.html:59 #: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json #: erpnext/accounts/report/general_ledger/general_ledger.html:104 -#: erpnext/accounts/report/general_ledger/general_ledger.py:737 +#: erpnext/accounts/report/general_ledger/general_ledger.py:735 #: erpnext/accounts/report/tax_withholding_details/tax_withholding_details.py:212 msgid "Supplier Invoice No" msgstr "" @@ -52415,7 +52454,7 @@ msgstr "" msgid "Switch Between Payment Modes" msgstr "" -#: erpnext/accounts/doctype/accounts_settings/accounts_settings.py:154 +#: erpnext/accounts/doctype/accounts_settings/accounts_settings.py:157 msgid "Switch Invoice Mode Error" msgstr "" @@ -52607,7 +52646,7 @@ msgstr "" msgid "System will fetch all the entries if limit value is zero." msgstr "" -#: erpnext/controllers/accounts_controller.py:1978 +#: erpnext/controllers/accounts_controller.py:2063 msgid "System will not check over billing since amount for Item {0} in {1} is zero" msgstr "" @@ -52866,7 +52905,7 @@ msgstr "" msgid "Target Warehouse is required before Submit" msgstr "" -#: erpnext/controllers/selling_controller.py:790 +#: erpnext/controllers/selling_controller.py:792 msgid "Target Warehouse is set for some items but the customer is not an internal customer." msgstr "" @@ -53105,7 +53144,7 @@ msgstr "" msgid "Tax Category" msgstr "" -#: erpnext/controllers/buying_controller.py:202 +#: erpnext/controllers/buying_controller.py:204 msgid "Tax Category has been changed to \"Total\" because all the Items are non-stock items" msgstr "" @@ -53311,7 +53350,7 @@ msgstr "" #. Label of the taxable_amount (Currency) field in DocType 'Tax Withheld #. Vouchers' #: erpnext/accounts/doctype/tax_withheld_vouchers/tax_withheld_vouchers.json -#: erpnext/controllers/taxes_and_totals.py:1135 +#: erpnext/controllers/taxes_and_totals.py:1123 msgid "Taxable Amount" msgstr "" @@ -53450,7 +53489,7 @@ msgstr "" msgid "Taxes and Charges Deducted (Company Currency)" msgstr "" -#: erpnext/stock/doctype/item/item.py:355 +#: erpnext/stock/doctype/item/item.py:353 msgid "Taxes row #{0}: {1} cannot be smaller than {2}" msgstr "" @@ -53510,7 +53549,7 @@ msgstr "" msgid "Template Item" msgstr "" -#: erpnext/stock/get_item_details.py:318 +#: erpnext/stock/get_item_details.py:319 msgid "Template Item Selected" msgstr "" @@ -53840,7 +53879,7 @@ msgstr "" msgid "The BOM which will be replaced" msgstr "" -#: erpnext/stock/serial_batch_bundle.py:1306 +#: erpnext/stock/serial_batch_bundle.py:1302 msgid "The Batch {0} has negative quantity {1} in warehouse {2}. Please correct the quantity." msgstr "" @@ -53892,7 +53931,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:1892 +#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:1890 msgid "The Serial No {0} is reserved against the {1} {2} and cannot be used for any other transaction." msgstr "" @@ -53967,7 +54006,7 @@ msgstr "" msgid "The following Items, having Putaway Rules, could not be accomodated:" msgstr "" -#: erpnext/assets/doctype/asset/depreciation.py:340 +#: erpnext/assets/doctype/asset/depreciation.py:338 msgid "The following assets have failed to automatically post depreciation entries: {0}" msgstr "" @@ -53975,7 +54014,7 @@ msgstr "" msgid "The following batches are expired, please restock them:
{0}" msgstr "" -#: erpnext/stock/doctype/item/item.py:843 +#: erpnext/stock/doctype/item/item.py:841 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 "" @@ -54000,15 +54039,15 @@ msgstr "" msgid "The holiday on {0} is not between From Date and To Date" msgstr "" -#: erpnext/controllers/buying_controller.py:1074 +#: erpnext/controllers/buying_controller.py:1128 msgid "The item {item} is not marked as {type_of} item. You can enable it as {type_of} item from its Item master." msgstr "" -#: erpnext/stock/doctype/item/item.py:620 +#: erpnext/stock/doctype/item/item.py:618 msgid "The items {0} and {1} are present in the following {2} :" msgstr "" -#: erpnext/controllers/buying_controller.py:1067 +#: erpnext/controllers/buying_controller.py:1121 msgid "The items {items} are not marked as {type_of} item. You can enable them as {type_of} item from their Item masters." msgstr "" @@ -54098,7 +54137,7 @@ msgstr "" msgid "The selected BOMs are not for the same item" msgstr "" -#: erpnext/accounts/doctype/pos_invoice/pos_invoice.py:502 +#: erpnext/accounts/doctype/pos_invoice/pos_invoice.py:500 msgid "The selected change account {} doesn't belongs to Company {}." msgstr "" @@ -54110,8 +54149,8 @@ msgstr "" msgid "The seller and the buyer cannot be the same" msgstr "" -#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:143 -#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:155 +#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:141 +#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:153 msgid "The serial and batch bundle {0} not linked to {1} {2}" msgstr "" @@ -54135,7 +54174,7 @@ msgstr "" msgid "The stock for the item {0} in the {1} warehouse was negative on the {2}. You should create a positive entry {3} before the date {4} and time {5} to post the correct valuation rate. For more details, please read the documentation." msgstr "" -#: erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py:696 +#: erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py:697 msgid "The stock has been reserved for the following Items and Warehouses, un-reserve the same to {0} the Stock Reconciliation:

{1}" msgstr "" @@ -54148,11 +54187,11 @@ msgstr "" msgid "The task has been enqueued as a background job." msgstr "" -#: erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py:990 +#: erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py:995 msgid "The task has been enqueued as a background job. In case there is any issue on processing in background, the system will add a comment about the error on this Stock Reconciliation and revert to the Draft stage" msgstr "" -#: erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py:1001 +#: erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py:1006 msgid "The task has been enqueued as a background job. In case there is any issue on processing in background, the system will add a comment about the error on this Stock Reconciliation and revert to the Submitted stage" msgstr "" @@ -54349,7 +54388,7 @@ msgstr "" msgid "This covers all scorecards tied to this Setup" msgstr "" -#: erpnext/controllers/status_updater.py:386 +#: erpnext/controllers/status_updater.py:384 msgid "This document is over limit by {0} {1} for item {4}. Are you making another {3} against the same {2}?" msgstr "" @@ -54468,7 +54507,7 @@ msgstr "" msgid "This schedule was created when Asset {0} was repaired through Asset Repair {1}." msgstr "" -#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:1321 +#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:1319 msgid "This schedule was created when Asset {0} was restored due to Sales Invoice {1} cancellation." msgstr "" @@ -54476,15 +54515,15 @@ msgstr "" msgid "This schedule was created when Asset {0} was restored on Asset Capitalization {1}'s cancellation." msgstr "" -#: erpnext/assets/doctype/asset/depreciation.py:454 +#: erpnext/assets/doctype/asset/depreciation.py:452 msgid "This schedule was created when Asset {0} was restored." msgstr "" -#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:1317 +#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:1315 msgid "This schedule was created when Asset {0} was returned through Sales Invoice {1}." msgstr "" -#: erpnext/assets/doctype/asset/depreciation.py:413 +#: erpnext/assets/doctype/asset/depreciation.py:411 msgid "This schedule was created when Asset {0} was scrapped." msgstr "" @@ -54492,7 +54531,7 @@ msgstr "" msgid "This schedule was created when Asset {0} was {1} into new Asset {2}." msgstr "" -#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:1293 +#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:1291 msgid "This schedule was created when Asset {0} was {1} through Sales Invoice {2}." msgstr "" @@ -54536,7 +54575,7 @@ msgstr "" msgid "This will restrict user access to other employee records" msgstr "" -#: erpnext/controllers/selling_controller.py:791 +#: erpnext/controllers/selling_controller.py:793 msgid "This {} will be treated as material transfer." msgstr "" @@ -54751,7 +54790,7 @@ msgstr "" msgid "Timesheets" msgstr "" -#: erpnext/utilities/activation.py:124 +#: erpnext/utilities/activation.py:125 msgid "Timesheets help keep track of time, cost and billing for activities done by your team" msgstr "" @@ -54982,7 +55021,7 @@ msgstr "" msgid "To Date" msgstr "" -#: erpnext/controllers/accounts_controller.py:553 +#: erpnext/controllers/accounts_controller.py:555 #: erpnext/setup/doctype/holiday_list/holiday_list.py:112 msgid "To Date cannot be before From Date" msgstr "" @@ -55171,7 +55210,7 @@ msgstr "" msgid "To Time" msgstr "" -#: erpnext/projects/doctype/timesheet_detail/timesheet_detail.py:96 +#: erpnext/projects/doctype/timesheet_detail/timesheet_detail.py:98 msgid "To Time cannot be before from date" msgstr "" @@ -55203,11 +55242,11 @@ msgstr "" msgid "To add subcontracted Item's raw materials if include exploded items is disabled." msgstr "" -#: erpnext/controllers/status_updater.py:381 +#: erpnext/controllers/status_updater.py:379 msgid "To allow over billing, update \"Over Billing Allowance\" in Accounts Settings or the Item." msgstr "" -#: erpnext/controllers/status_updater.py:377 +#: erpnext/controllers/status_updater.py:375 msgid "To allow over receipt / delivery, update \"Over Receipt/Delivery Allowance\" in Stock Settings or the Item." msgstr "" @@ -55250,11 +55289,11 @@ msgid "To include sub-assembly costs and scrap items in Finished Goods on a work msgstr "" #: erpnext/accounts/doctype/payment_entry/payment_entry.py:2337 -#: erpnext/controllers/accounts_controller.py:3008 +#: erpnext/controllers/accounts_controller.py:3093 msgid "To include tax in row {0} in Item rate, taxes in rows {1} must also be included" msgstr "" -#: erpnext/stock/doctype/item/item.py:642 +#: erpnext/stock/doctype/item/item.py:640 msgid "To merge, following properties must be same for both items" msgstr "" @@ -55279,9 +55318,9 @@ msgstr "" msgid "To use a different finance book, please uncheck 'Include Default FB Assets'" msgstr "" -#: erpnext/accounts/report/financial_statements.py:600 -#: erpnext/accounts/report/general_ledger/general_ledger.py:306 -#: erpnext/accounts/report/trial_balance/trial_balance.py:296 +#: erpnext/accounts/report/financial_statements.py:596 +#: erpnext/accounts/report/general_ledger/general_ledger.py:304 +#: erpnext/accounts/report/trial_balance/trial_balance.py:292 msgid "To use a different finance book, please uncheck 'Include Default FB Entries'" msgstr "" @@ -55372,14 +55411,14 @@ msgstr "" #: erpnext/accounts/report/accounts_receivable/accounts_receivable.html:235 #: erpnext/accounts/report/accounts_receivable/accounts_receivable.html:273 #: erpnext/accounts/report/dimension_wise_accounts_balance_report/dimension_wise_accounts_balance_report.py:229 -#: erpnext/accounts/report/financial_statements.py:677 +#: erpnext/accounts/report/financial_statements.py:673 #: erpnext/accounts/report/general_ledger/general_ledger.html:132 -#: erpnext/accounts/report/general_ledger/general_ledger.py:380 +#: erpnext/accounts/report/general_ledger/general_ledger.py:378 #: erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.py:688 #: erpnext/accounts/report/profitability_analysis/profitability_analysis.py:93 #: erpnext/accounts/report/profitability_analysis/profitability_analysis.py:98 -#: erpnext/accounts/report/trial_balance/trial_balance.py:362 -#: erpnext/accounts/report/trial_balance/trial_balance.py:363 +#: erpnext/accounts/report/trial_balance/trial_balance.py:358 +#: erpnext/accounts/report/trial_balance/trial_balance.py:359 #: erpnext/buying/doctype/purchase_order/purchase_order.json #: erpnext/buying/doctype/supplier_quotation/supplier_quotation.json #: erpnext/crm/doctype/opportunity/opportunity.json @@ -55874,7 +55913,7 @@ msgstr "" msgid "Total Paid Amount" msgstr "" -#: erpnext/controllers/accounts_controller.py:2594 +#: erpnext/controllers/accounts_controller.py:2679 msgid "Total Payment Amount in Payment Schedule must be equal to Grand / Rounded Total" msgstr "" @@ -55886,7 +55925,7 @@ msgstr "" msgid "Total Payments" msgstr "" -#: erpnext/selling/doctype/sales_order/sales_order.py:642 +#: erpnext/selling/doctype/sales_order/sales_order.py:640 msgid "Total Picked Quantity {0} is more than ordered qty {1}. You can set the Over Picking Allowance in Stock Settings." msgstr "" @@ -56159,11 +56198,11 @@ msgstr "" msgid "Total Working Hours" msgstr "" -#: erpnext/controllers/accounts_controller.py:2141 +#: erpnext/controllers/accounts_controller.py:2226 msgid "Total advance ({0}) against Order {1} cannot be greater than the Grand Total ({2})" msgstr "" -#: erpnext/controllers/selling_controller.py:198 +#: erpnext/controllers/selling_controller.py:202 msgid "Total allocated percentage for sales team should be 100" msgstr "" @@ -56175,7 +56214,7 @@ msgstr "" msgid "Total hours: {0}" msgstr "" -#: erpnext/accounts/doctype/pos_invoice/pos_invoice.py:532 +#: erpnext/accounts/doctype/pos_invoice/pos_invoice.py:530 #: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:534 msgid "Total payments amount can't be greater than {}" msgstr "" @@ -56417,7 +56456,7 @@ msgstr "" msgid "Transactions against the Company already exist! Chart of Accounts can only be imported for a Company with no transactions." msgstr "" -#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:1103 +#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:1101 msgid "Transactions using Sales Invoice in POS are disabled." msgstr "" @@ -57052,7 +57091,7 @@ msgstr "" msgid "Unit of Measure (UOM)" msgstr "" -#: erpnext/stock/doctype/item/item.py:387 +#: erpnext/stock/doctype/item/item.py:385 msgid "Unit of Measure {0} has been entered more than once in Conversion Factor Table" msgstr "" @@ -57508,7 +57547,7 @@ msgstr "" msgid "Updated via 'Time Log' (In Minutes)" msgstr "" -#: erpnext/stock/doctype/item/item.py:1381 +#: erpnext/stock/doctype/item/item.py:1377 msgid "Updating Variants..." msgstr "" @@ -57607,7 +57646,7 @@ msgstr "" #. Label of the use_sales_invoice_in_pos (Check) field in DocType 'Accounts #. Settings' #: erpnext/accounts/doctype/accounts_settings/accounts_settings.json -#: erpnext/accounts/doctype/accounts_settings/accounts_settings.py:152 +#: erpnext/accounts/doctype/accounts_settings/accounts_settings.py:155 msgid "Use Sales Invoice" msgstr "" @@ -57721,7 +57760,7 @@ msgstr "" msgid "User Details" msgstr "" -#: erpnext/setup/install.py:159 +#: erpnext/setup/install.py:152 msgid "User Forum" msgstr "" @@ -57991,7 +58030,7 @@ msgstr "" msgid "Validity in Days" msgstr "" -#: erpnext/selling/doctype/quotation/quotation.py:368 +#: erpnext/selling/doctype/quotation/quotation.py:361 msgid "Validity period of this quotation has ended." msgstr "" @@ -58066,11 +58105,11 @@ msgstr "" msgid "Valuation Rate (In / Out)" msgstr "" -#: erpnext/stock/stock_ledger.py:1890 +#: erpnext/stock/stock_ledger.py:1893 msgid "Valuation Rate Missing" msgstr "" -#: erpnext/stock/stock_ledger.py:1868 +#: erpnext/stock/stock_ledger.py:1871 msgid "Valuation Rate for the Item {0}, is required to do accounting entries for {1} {2}." msgstr "" @@ -58078,7 +58117,7 @@ msgstr "" msgid "Valuation Rate is mandatory if Opening Stock entered" msgstr "" -#: erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py:748 +#: erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py:749 msgid "Valuation Rate required for Item {0} at row {1}" msgstr "" @@ -58088,7 +58127,7 @@ msgstr "" msgid "Valuation and Total" msgstr "" -#: erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py:967 +#: erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py:972 msgid "Valuation rate for customer provided items has been set to zero." msgstr "" @@ -58102,7 +58141,7 @@ msgid "Valuation rate for the item as per Sales Invoice (Only for Internal Trans msgstr "" #: erpnext/accounts/doctype/payment_entry/payment_entry.py:2361 -#: erpnext/controllers/accounts_controller.py:3032 +#: erpnext/controllers/accounts_controller.py:3117 msgid "Valuation type charges can not be marked as Inclusive" msgstr "" @@ -58258,7 +58297,7 @@ msgstr "" msgid "Variant" msgstr "" -#: erpnext/stock/doctype/item/item.py:858 +#: erpnext/stock/doctype/item/item.py:856 msgid "Variant Attribute Error" msgstr "" @@ -58277,7 +58316,7 @@ msgstr "" msgid "Variant Based On" msgstr "" -#: erpnext/stock/doctype/item/item.py:886 +#: erpnext/stock/doctype/item/item.py:884 msgid "Variant Based On cannot be changed" msgstr "" @@ -58295,7 +58334,7 @@ msgstr "" msgid "Variant Item" msgstr "" -#: erpnext/stock/doctype/item/item.py:856 +#: erpnext/stock/doctype/item/item.py:854 msgid "Variant Items" msgstr "" @@ -58449,7 +58488,7 @@ msgstr "" msgid "View BOM Update Log" msgstr "" -#: erpnext/public/js/setup_wizard.js:40 +#: erpnext/public/js/setup_wizard.js:47 msgid "View Chart of Accounts" msgstr "" @@ -58604,7 +58643,7 @@ msgstr "" #: erpnext/accounts/report/general_and_payment_ledger_comparison/general_and_payment_ledger_comparison.js:42 #: erpnext/accounts/report/general_and_payment_ledger_comparison/general_and_payment_ledger_comparison.py:209 #: erpnext/accounts/report/general_ledger/general_ledger.js:49 -#: erpnext/accounts/report/general_ledger/general_ledger.py:705 +#: erpnext/accounts/report/general_ledger/general_ledger.py:703 #: erpnext/accounts/report/invalid_ledger_entries/invalid_ledger_entries.js:41 #: erpnext/accounts/report/invalid_ledger_entries/invalid_ledger_entries.py:33 #: erpnext/accounts/report/payment_ledger/payment_ledger.js:65 @@ -58631,7 +58670,7 @@ msgstr "" msgid "Voucher No" msgstr "" -#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:1088 +#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:1086 msgid "Voucher No is mandatory" msgstr "" @@ -58643,7 +58682,7 @@ msgstr "" #. Label of the voucher_subtype (Small Text) field in DocType 'GL Entry' #: erpnext/accounts/doctype/gl_entry/gl_entry.json -#: erpnext/accounts/report/general_ledger/general_ledger.py:699 +#: erpnext/accounts/report/general_ledger/general_ledger.py:697 msgid "Voucher Subtype" msgstr "" @@ -58675,7 +58714,7 @@ msgstr "" #: erpnext/accounts/doctype/unreconcile_payment/unreconcile_payment.json #: erpnext/accounts/report/accounts_receivable/accounts_receivable.py:1099 #: erpnext/accounts/report/general_and_payment_ledger_comparison/general_and_payment_ledger_comparison.py:200 -#: erpnext/accounts/report/general_ledger/general_ledger.py:697 +#: erpnext/accounts/report/general_ledger/general_ledger.py:695 #: erpnext/accounts/report/invalid_ledger_entries/invalid_ledger_entries.py:31 #: erpnext/accounts/report/payment_ledger/payment_ledger.py:159 #: erpnext/accounts/report/purchase_register/purchase_register.py:158 @@ -58879,7 +58918,7 @@ msgstr "" #: erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.json #: erpnext/stock/doctype/stock_reconciliation_item/stock_reconciliation_item.json #: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.json -#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:260 +#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:258 #: erpnext/stock/doctype/warehouse/warehouse.json #: erpnext/stock/page/stock_balance/stock_balance.js:11 #: erpnext/stock/page/warehouse_capacity_summary/warehouse_capacity_summary.js:25 @@ -59011,7 +59050,7 @@ msgstr "" msgid "Warehouse and Reference" msgstr "" -#: erpnext/stock/doctype/warehouse/warehouse.py:96 +#: erpnext/stock/doctype/warehouse/warehouse.py:97 msgid "Warehouse can not be deleted as stock ledger entry exists for this warehouse." msgstr "" @@ -59023,11 +59062,11 @@ msgstr "" msgid "Warehouse is mandatory" msgstr "" -#: erpnext/stock/doctype/warehouse/warehouse.py:247 +#: erpnext/stock/doctype/warehouse/warehouse.py:249 msgid "Warehouse not found against the account {0}" msgstr "" -#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:1130 +#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:1128 #: erpnext/stock/doctype/delivery_note/delivery_note.py:414 msgid "Warehouse required for stock Item {0}" msgstr "" @@ -59042,7 +59081,7 @@ msgstr "" msgid "Warehouse wise Stock Value" msgstr "" -#: erpnext/stock/doctype/warehouse/warehouse.py:90 +#: erpnext/stock/doctype/warehouse/warehouse.py:91 msgid "Warehouse {0} can not be deleted as quantity exists for Item {1}" msgstr "" @@ -59058,11 +59097,11 @@ msgstr "" msgid "Warehouse {0} is not allowed for Sales Order {1}, it should be {2}" msgstr "" -#: erpnext/controllers/stock_controller.py:632 +#: erpnext/controllers/stock_controller.py:643 msgid "Warehouse {0} is not linked to any account, please mention the account in the warehouse record or set default inventory account in company {1}." msgstr "" -#: erpnext/stock/doctype/warehouse/warehouse.py:140 +#: erpnext/stock/doctype/warehouse/warehouse.py:141 msgid "Warehouse's Stock Value has already been booked in the following accounts:" msgstr "" @@ -59077,18 +59116,20 @@ msgstr "" msgid "Warehouses" msgstr "" -#: erpnext/stock/doctype/warehouse/warehouse.py:166 +#: erpnext/stock/doctype/warehouse/warehouse.py:167 msgid "Warehouses with child nodes cannot be converted to ledger" msgstr "" -#: erpnext/stock/doctype/warehouse/warehouse.py:176 +#: erpnext/stock/doctype/warehouse/warehouse.py:177 msgid "Warehouses with existing transaction can not be converted to group." msgstr "" -#: erpnext/stock/doctype/warehouse/warehouse.py:168 +#: erpnext/stock/doctype/warehouse/warehouse.py:169 msgid "Warehouses with existing transaction can not be converted to ledger." msgstr "" +#. Option for the 'Action if Same Rate is Not Maintained Throughout Internal +#. Transaction' (Select) field in DocType 'Accounts Settings' #. Option for the 'Action if Annual Budget Exceeded on MR' (Select) field in #. DocType 'Budget' #. Option for the 'Action if Accumulated Monthly Budget Exceeded on MR' @@ -59113,6 +59154,7 @@ msgstr "" #. field in DocType 'Stock Settings' #. Option for the 'Action If Quality Inspection Is Rejected' (Select) field in #. DocType 'Stock Settings' +#: erpnext/accounts/doctype/accounts_settings/accounts_settings.json #: erpnext/accounts/doctype/budget/budget.json #: erpnext/buying/doctype/buying_settings/buying_settings.json #: erpnext/selling/doctype/selling_settings/selling_settings.json @@ -59155,13 +59197,14 @@ msgid "Warn for new Request for Quotations" msgstr "" #: erpnext/accounts/doctype/payment_entry/payment_entry.py:744 -#: erpnext/controllers/accounts_controller.py:1981 +#: erpnext/controllers/accounts_controller.py:822 +#: erpnext/controllers/accounts_controller.py:2066 #: erpnext/stock/doctype/delivery_trip/delivery_trip.js:145 #: erpnext/utilities/transaction_base.py:123 msgid "Warning" msgstr "" -#: erpnext/projects/doctype/timesheet_detail/timesheet_detail.py:122 +#: erpnext/projects/doctype/timesheet_detail/timesheet_detail.py:124 msgid "Warning - Row {0}: Billing Hours are more than Actual Hours" msgstr "" @@ -59181,7 +59224,7 @@ msgstr "" msgid "Warning: Material Requested Qty is less than Minimum Order Qty" msgstr "" -#: erpnext/selling/doctype/sales_order/sales_order.py:286 +#: erpnext/selling/doctype/sales_order/sales_order.py:284 msgid "Warning: Sales Order {0} already exists against Customer's Purchase Order {1}" msgstr "" @@ -60127,7 +60170,7 @@ msgstr "" msgid "You are importing data for the code list:" msgstr "" -#: erpnext/controllers/accounts_controller.py:3614 +#: erpnext/controllers/accounts_controller.py:3699 msgid "You are not allowed to update as per the conditions set in {} Workflow." msgstr "" @@ -60192,7 +60235,7 @@ msgstr "" msgid "You can't make any changes to Job Card since Work Order is closed." msgstr "" -#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:186 +#: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.py:184 msgid "You can't process the serial number {0} as it has already been used in the SABB {1}. {2} if you want to inward same serial number multiple times then enabled 'Allow existing Serial No to be Manufactured/Received again' in the {3}" msgstr "" @@ -60208,7 +60251,7 @@ msgstr "" msgid "You cannot create a {0} within the closed Accounting Period {1}" msgstr "" -#: erpnext/accounts/general_ledger.py:175 +#: erpnext/accounts/general_ledger.py:176 msgid "You cannot create or cancel any accounting entries with in the closed Accounting Period {0}" msgstr "" @@ -60252,7 +60295,7 @@ msgstr "" msgid "You cannot {0} this document because another Period Closing Entry {1} exists after {2}" msgstr "" -#: erpnext/controllers/accounts_controller.py:3590 +#: erpnext/controllers/accounts_controller.py:3675 msgid "You do not have permissions to {} items in a {}." msgstr "" @@ -60280,11 +60323,11 @@ msgstr "" msgid "You have entered a duplicate Delivery Note on Row" msgstr "" -#: erpnext/stock/doctype/item/item.py:1057 +#: erpnext/stock/doctype/item/item.py:1053 msgid "You have to enable auto re-order in Stock Settings to maintain re-order levels." msgstr "" -#: erpnext/selling/page/point_of_sale/pos_controller.js:293 +#: erpnext/selling/page/point_of_sale/pos_controller.js:292 msgid "You have unsaved changes. Do you want to save the invoice?" msgstr "" @@ -60292,7 +60335,7 @@ msgstr "" msgid "You haven't created a {0} yet" msgstr "" -#: erpnext/selling/page/point_of_sale/pos_controller.js:748 +#: erpnext/selling/page/point_of_sale/pos_controller.js:747 msgid "You must select a customer before adding an item." msgstr "" @@ -60300,7 +60343,7 @@ msgstr "" msgid "You need to cancel POS Closing Entry {} to be able to cancel this document." msgstr "" -#: erpnext/controllers/accounts_controller.py:2983 +#: erpnext/controllers/accounts_controller.py:3068 msgid "You selected the account group {1} as {2} Account in row {0}. Please select a single account." msgstr "" @@ -60378,7 +60421,7 @@ msgstr "" msgid "`Allow Negative rates for Items`" msgstr "" -#: erpnext/stock/stock_ledger.py:1882 +#: erpnext/stock/stock_ledger.py:1885 msgid "after" msgstr "" @@ -60526,7 +60569,7 @@ msgstr "" msgid "material_request_item" msgstr "" -#: erpnext/controllers/selling_controller.py:159 +#: erpnext/controllers/selling_controller.py:163 msgid "must be between 0 and 100" msgstr "" @@ -60551,7 +60594,7 @@ msgstr "" msgid "on" msgstr "" -#: erpnext/controllers/accounts_controller.py:1292 +#: erpnext/controllers/accounts_controller.py:1379 msgid "or" msgstr "" @@ -60600,7 +60643,7 @@ msgstr "" msgid "per hour" msgstr "" -#: erpnext/stock/stock_ledger.py:1883 +#: erpnext/stock/stock_ledger.py:1886 msgid "performing either one below:" msgstr "" @@ -60629,7 +60672,7 @@ msgstr "" msgid "received from" msgstr "" -#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:1295 +#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:1293 msgid "returned" msgstr "" @@ -60664,7 +60707,7 @@ msgstr "" msgid "sandbox" msgstr "" -#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:1295 +#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:1293 msgid "sold" msgstr "" @@ -60672,8 +60715,8 @@ msgstr "" msgid "subscription is already cancelled." msgstr "" -#: erpnext/controllers/status_updater.py:389 -#: erpnext/controllers/status_updater.py:409 +#: erpnext/controllers/status_updater.py:387 +#: erpnext/controllers/status_updater.py:407 msgid "target_ref_field" msgstr "" @@ -60691,7 +60734,7 @@ msgstr "" msgid "to" msgstr "" -#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:2959 +#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:2957 msgid "to unallocate the amount of this Return Invoice before cancelling it." msgstr "" @@ -60722,12 +60765,12 @@ msgstr "" msgid "you must select Capital Work in Progress Account in accounts table" msgstr "" -#: erpnext/accounts/report/cash_flow/cash_flow.py:229 -#: erpnext/accounts/report/cash_flow/cash_flow.py:230 +#: erpnext/accounts/report/cash_flow/cash_flow.py:233 +#: erpnext/accounts/report/cash_flow/cash_flow.py:234 msgid "{0}" msgstr "" -#: erpnext/controllers/accounts_controller.py:1112 +#: erpnext/controllers/accounts_controller.py:1197 msgid "{0} '{1}' is disabled" msgstr "" @@ -60743,7 +60786,7 @@ msgstr "" msgid "{0} {1} has submitted Assets. Remove Item {2} from table to continue." msgstr "" -#: erpnext/controllers/accounts_controller.py:2196 +#: erpnext/controllers/accounts_controller.py:2281 msgid "{0} Account not found against Customer {1}." msgstr "" @@ -60775,7 +60818,7 @@ msgstr "" msgid "{0} Request for {1}" msgstr "" -#: erpnext/stock/doctype/item/item.py:326 +#: erpnext/stock/doctype/item/item.py:324 msgid "{0} Retain Sample is based on batch, please check Has Batch No to retain sample of item" msgstr "" @@ -60824,7 +60867,7 @@ msgstr "" msgid "{0} asset cannot be transferred" msgstr "" -#: erpnext/accounts/doctype/accounts_settings/accounts_settings.py:151 +#: erpnext/accounts/doctype/accounts_settings/accounts_settings.py:154 msgid "{0} can be enabled/disabled after all the POS Opening Entries are closed." msgstr "" @@ -60866,7 +60909,7 @@ msgid "{0} entered twice in Item Tax" msgstr "" #: erpnext/setup/doctype/item_group/item_group.py:48 -#: erpnext/stock/doctype/item/item.py:439 +#: erpnext/stock/doctype/item/item.py:437 msgid "{0} entered twice {1} in Item Taxes" msgstr "" @@ -60887,7 +60930,7 @@ msgstr "" msgid "{0} hours" msgstr "" -#: erpnext/controllers/accounts_controller.py:2537 +#: erpnext/controllers/accounts_controller.py:2622 msgid "{0} in row {1}" msgstr "" @@ -60895,8 +60938,8 @@ msgstr "" msgid "{0} is a mandatory Accounting Dimension.
Please set a value for {0} in Accounting Dimensions section." msgstr "" -#: erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.py:87 -#: erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.py:140 +#: erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.py:85 +#: erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.py:138 #: erpnext/accounts/doctype/pos_invoice_merge_log/pos_invoice_merge_log.py:62 msgid "{0} is added multiple times on rows: {1}" msgstr "" @@ -60931,7 +60974,7 @@ msgstr "" msgid "{0} is mandatory. Maybe Currency Exchange record is not created for {1} to {2}" msgstr "" -#: erpnext/controllers/accounts_controller.py:2940 +#: erpnext/controllers/accounts_controller.py:3025 msgid "{0} is mandatory. Maybe Currency Exchange record is not created for {1} to {2}." msgstr "" @@ -60994,7 +61037,7 @@ msgstr "" msgid "{0} must be negative in return document" msgstr "" -#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:2166 +#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:2164 msgid "{0} not allowed to transact with {1}. Please change the Company or add the Company in the 'Allowed To Transact With'-Section in the Customer record." msgstr "" @@ -61010,7 +61053,7 @@ msgstr "" msgid "{0} payment entries can not be filtered by {1}" msgstr "" -#: erpnext/controllers/stock_controller.py:1346 +#: erpnext/controllers/stock_controller.py:1355 msgid "{0} qty of Item {1} is being received into Warehouse {2} with capacity {3}." msgstr "" @@ -61018,7 +61061,7 @@ msgstr "" msgid "{0} to {1}" msgstr "" -#: erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py:686 +#: erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py:687 msgid "{0} units are reserved for Item {1} in Warehouse {2}, please un-reserve the same to {3} the Stock Reconciliation." msgstr "" @@ -61034,16 +61077,16 @@ msgstr "" msgid "{0} units of {1} are required in {2} with the inventory dimension: {3} ({4}) on {5} {6} for {7} to complete the transaction." msgstr "" -#: erpnext/stock/stock_ledger.py:1541 erpnext/stock/stock_ledger.py:2031 -#: erpnext/stock/stock_ledger.py:2045 +#: erpnext/stock/stock_ledger.py:1544 erpnext/stock/stock_ledger.py:2034 +#: erpnext/stock/stock_ledger.py:2048 msgid "{0} units of {1} needed in {2} on {3} {4} for {5} to complete this transaction." msgstr "" -#: erpnext/stock/stock_ledger.py:2132 erpnext/stock/stock_ledger.py:2178 +#: erpnext/stock/stock_ledger.py:2135 erpnext/stock/stock_ledger.py:2181 msgid "{0} units of {1} needed in {2} on {3} {4} to complete this transaction." msgstr "" -#: erpnext/stock/stock_ledger.py:1535 +#: erpnext/stock/stock_ledger.py:1538 msgid "{0} units of {1} needed in {2} to complete this transaction." msgstr "" @@ -61075,7 +61118,7 @@ msgstr "" msgid "{0} {1} Partially Reconciled" msgstr "" -#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:426 +#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:424 msgid "{0} {1} cannot be updated. If you need to make changes, we recommend canceling the existing entry and creating a new one." msgstr "" @@ -61102,7 +61145,7 @@ msgid "{0} {1} has already been partly paid. Please use the 'Get Outstanding Inv msgstr "" #: erpnext/buying/doctype/purchase_order/purchase_order.py:469 -#: erpnext/selling/doctype/sales_order/sales_order.py:526 +#: erpnext/selling/doctype/sales_order/sales_order.py:524 #: erpnext/stock/doctype/material_request/material_request.py:225 msgid "{0} {1} has been modified. Please refresh." msgstr "" @@ -61123,7 +61166,7 @@ msgstr "" msgid "{0} {1} is associated with {2}, but Party Account is {3}" msgstr "" -#: erpnext/controllers/selling_controller.py:470 +#: erpnext/controllers/selling_controller.py:472 #: erpnext/controllers/subcontracting_controller.py:954 msgid "{0} {1} is cancelled or closed" msgstr "" @@ -61140,11 +61183,11 @@ msgstr "" msgid "{0} {1} is closed" msgstr "" -#: erpnext/accounts/party.py:804 +#: erpnext/accounts/party.py:802 msgid "{0} {1} is disabled" msgstr "" -#: erpnext/accounts/party.py:810 +#: erpnext/accounts/party.py:808 msgid "{0} {1} is frozen" msgstr "" @@ -61152,7 +61195,7 @@ msgstr "" msgid "{0} {1} is fully billed" msgstr "" -#: erpnext/accounts/party.py:814 +#: erpnext/accounts/party.py:812 msgid "{0} {1} is not active" msgstr "" @@ -61212,7 +61255,7 @@ msgstr "" msgid "{0} {1}: Accounting Entry for {2} can only be made in currency: {3}" msgstr "" -#: erpnext/controllers/stock_controller.py:762 +#: erpnext/controllers/stock_controller.py:773 msgid "{0} {1}: Cost Center is mandatory for Item {2}" msgstr "" @@ -61266,7 +61309,7 @@ msgstr "" msgid "{0}, complete the operation {1} before the operation {2}." msgstr "" -#: erpnext/controllers/accounts_controller.py:470 +#: erpnext/controllers/accounts_controller.py:472 msgid "{0}: {1} does not belong to the Company: {2}" msgstr "" @@ -61278,23 +61321,23 @@ msgstr "" msgid "{0}: {1} must be less than {2}" msgstr "" -#: erpnext/controllers/buying_controller.py:848 +#: erpnext/controllers/buying_controller.py:902 msgid "{count} Assets created for {item_code}" msgstr "" -#: erpnext/controllers/buying_controller.py:746 +#: erpnext/controllers/buying_controller.py:800 msgid "{doctype} {name} is cancelled or closed." msgstr "" -#: erpnext/controllers/buying_controller.py:467 +#: erpnext/controllers/buying_controller.py:521 msgid "{field_label} is mandatory for sub-contracted {doctype}." msgstr "" -#: erpnext/controllers/stock_controller.py:1629 +#: erpnext/controllers/stock_controller.py:1636 msgid "{item_name}'s Sample Size ({sample_size}) cannot be greater than the Accepted Quantity ({accepted_quantity})" msgstr "" -#: erpnext/controllers/buying_controller.py:571 +#: erpnext/controllers/buying_controller.py:625 msgid "{ref_doctype} {ref_name} is {status}." msgstr "" @@ -61356,11 +61399,11 @@ msgstr "" msgid "{} To Bill" msgstr "" -#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:1949 +#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:1947 msgid "{} can't be cancelled since the Loyalty Points earned has been redeemed. First cancel the {} No {}" msgstr "" -#: erpnext/controllers/buying_controller.py:230 +#: erpnext/controllers/buying_controller.py:232 msgid "{} has submitted assets linked to it. You need to cancel the assets to create purchase return." msgstr "" From 765c7c2bcc3a2f2598d12a084ff7b72986946f58 Mon Sep 17 00:00:00 2001 From: Ankush Menat Date: Mon, 9 Jun 2025 10:10:02 +0530 Subject: [PATCH 18/20] refactor: rename get_settings -> get_single_value (#47961) --- erpnext/accounts/deferred_revenue.py | 2 +- erpnext/accounts/doctype/account/account.py | 2 +- .../bank_transaction/auto_match_party.py | 2 +- .../bank_transaction/bank_transaction.py | 2 +- .../doctype/journal_entry/journal_entry.py | 2 +- .../doctype/payment_entry/payment_entry.py | 6 ++--- .../payment_reconciliation.py | 4 ++-- .../pos_closing_entry/pos_closing_entry.py | 6 +++-- .../doctype/pos_invoice/pos_invoice.py | 4 +++- .../process_payment_reconciliation.py | 6 ++--- .../purchase_invoice/purchase_invoice.py | 2 +- .../doctype/sales_invoice/sales_invoice.py | 22 +++++++++-------- erpnext/accounts/general_ledger.py | 10 ++++---- erpnext/accounts/party.py | 8 ++++--- .../accounts_receivable.py | 5 ++-- .../accounts/report/financial_statements.py | 4 ++-- .../report/general_ledger/general_ledger.py | 6 ++--- .../tax_withholding_details.py | 2 +- .../tds_computation_summary.py | 2 +- .../report/trial_balance/trial_balance.py | 4 ++-- .../trial_balance_for_party.py | 2 +- erpnext/accounts/utils.py | 4 ++-- erpnext/assets/doctype/asset/depreciation.py | 6 ++--- .../deppreciation_schedule_controller.py | 2 +- .../depreciation_methods.py | 2 +- erpnext/controllers/accounts_controller.py | 24 +++++++++---------- erpnext/controllers/buying_controller.py | 6 ++--- erpnext/controllers/queries.py | 2 +- erpnext/controllers/selling_controller.py | 10 ++++---- erpnext/controllers/status_updater.py | 6 ++--- erpnext/controllers/stock_controller.py | 14 +++++------ .../controllers/subcontracting_controller.py | 2 +- erpnext/controllers/taxes_and_totals.py | 4 ++-- erpnext/projects/doctype/project/project.py | 2 +- erpnext/selling/doctype/customer/customer.py | 2 +- .../selling/doctype/quotation/quotation.py | 2 +- .../doctype/sales_order/sales_order.py | 24 ++++++++++--------- .../customer_credit_balance.py | 2 +- erpnext/startup/boot.py | 12 +++++----- erpnext/stock/doctype/batch/batch.py | 6 ++--- .../doctype/delivery_note/delivery_note.py | 6 ++--- erpnext/stock/doctype/item/item.py | 20 +++++++++------- .../stock/doctype/packed_item/packed_item.py | 4 ++-- erpnext/stock/doctype/pick_list/pick_list.py | 4 ++-- .../stock/doctype/price_list/price_list.py | 2 +- .../purchase_receipt/purchase_receipt.py | 8 +++---- .../serial_and_batch_bundle.py | 6 +++-- .../stock/doctype/stock_entry/stock_entry.py | 8 +++---- .../stock_ledger_entry/stock_ledger_entry.py | 2 +- .../stock_reservation_entry.py | 10 ++++---- erpnext/stock/get_item_details.py | 6 ++--- erpnext/stock/serial_batch_bundle.py | 16 ++++++++----- erpnext/stock/stock_balance.py | 2 +- erpnext/stock/utils.py | 2 +- erpnext/utilities/transaction_base.py | 2 +- 55 files changed, 177 insertions(+), 156 deletions(-) diff --git a/erpnext/accounts/deferred_revenue.py b/erpnext/accounts/deferred_revenue.py index 77607f12c9f..15b040669e8 100644 --- a/erpnext/accounts/deferred_revenue.py +++ b/erpnext/accounts/deferred_revenue.py @@ -317,7 +317,7 @@ def get_already_booked_amount(doc, item): def book_deferred_income_or_expense(doc, deferred_process, posting_date=None): enable_check = "enable_deferred_revenue" if doc.doctype == "Sales Invoice" else "enable_deferred_expense" - accounts_frozen_upto = frappe.get_settings("Accounts Settings", "acc_frozen_upto") + accounts_frozen_upto = frappe.get_single_value("Accounts Settings", "acc_frozen_upto") def _book_deferred_revenue_or_expense( item, diff --git a/erpnext/accounts/doctype/account/account.py b/erpnext/accounts/doctype/account/account.py index 53a1309d2c8..b9b4304f519 100644 --- a/erpnext/accounts/doctype/account/account.py +++ b/erpnext/accounts/doctype/account/account.py @@ -92,7 +92,7 @@ class Account(NestedSet): super().on_update() def onload(self): - frozen_accounts_modifier = frappe.get_settings("Accounts Settings", "frozen_accounts_modifier") + frozen_accounts_modifier = frappe.get_single_value("Accounts Settings", "frozen_accounts_modifier") if not frozen_accounts_modifier or frozen_accounts_modifier in frappe.get_roles(): self.set_onload("can_freeze_account", True) diff --git a/erpnext/accounts/doctype/bank_transaction/auto_match_party.py b/erpnext/accounts/doctype/bank_transaction/auto_match_party.py index e8ffe2d63ef..b6b24be368d 100644 --- a/erpnext/accounts/doctype/bank_transaction/auto_match_party.py +++ b/erpnext/accounts/doctype/bank_transaction/auto_match_party.py @@ -25,7 +25,7 @@ class AutoMatchParty: deposit=self.deposit, ).match() - fuzzy_matching_enabled = frappe.get_settings("Accounts Settings", "enable_fuzzy_matching") + fuzzy_matching_enabled = frappe.get_single_value("Accounts Settings", "enable_fuzzy_matching") if not result and fuzzy_matching_enabled: result = AutoMatchbyPartyNameDescription( bank_party_name=self.bank_party_name, description=self.description, deposit=self.deposit diff --git a/erpnext/accounts/doctype/bank_transaction/bank_transaction.py b/erpnext/accounts/doctype/bank_transaction/bank_transaction.py index a049aeb8720..deea543aa86 100644 --- a/erpnext/accounts/doctype/bank_transaction/bank_transaction.py +++ b/erpnext/accounts/doctype/bank_transaction/bank_transaction.py @@ -121,7 +121,7 @@ class BankTransaction(Document): self.allocate_payment_entries() self.set_status() - if frappe.get_settings("Accounts Settings", "enable_party_matching"): + if frappe.get_single_value("Accounts Settings", "enable_party_matching"): self.auto_set_party() def before_update_after_submit(self): diff --git a/erpnext/accounts/doctype/journal_entry/journal_entry.py b/erpnext/accounts/doctype/journal_entry/journal_entry.py index 4b33707478f..1f64ac08919 100644 --- a/erpnext/accounts/doctype/journal_entry/journal_entry.py +++ b/erpnext/accounts/doctype/journal_entry/journal_entry.py @@ -1171,7 +1171,7 @@ class JournalEntry(AccountsController): def make_gl_entries(self, cancel=0, adv_adj=0): from erpnext.accounts.general_ledger import make_gl_entries - merge_entries = frappe.get_settings("Accounts Settings", "merge_similar_account_heads") + merge_entries = frappe.get_single_value("Accounts Settings", "merge_similar_account_heads") gl_map = self.build_gl_map() if self.voucher_type in ("Deferred Revenue", "Deferred Expense"): diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry.py b/erpnext/accounts/doctype/payment_entry/payment_entry.py index 8719c05feb4..efa32a5b189 100644 --- a/erpnext/accounts/doctype/payment_entry/payment_entry.py +++ b/erpnext/accounts/doctype/payment_entry/payment_entry.py @@ -2969,7 +2969,7 @@ def get_payment_entry( created_from_payment_request=False, ): doc = frappe.get_doc(dt, dn) - over_billing_allowance = frappe.get_settings("Accounts Settings", "over_billing_allowance") + over_billing_allowance = frappe.get_single_value("Accounts Settings", "over_billing_allowance") if dt in ("Sales Order", "Purchase Order") and flt(doc.per_billed, 2) >= (100.0 + over_billing_allowance): frappe.throw(_("Can only make payment against unbilled {0}").format(_(dt))) @@ -3109,7 +3109,7 @@ def get_payment_entry( if party_account and bank: if discount_amount: base_total_discount_loss = 0 - if frappe.get_settings("Accounts Settings", "book_tax_discount_loss"): + if frappe.get_single_value("Accounts Settings", "book_tax_discount_loss"): base_total_discount_loss = split_early_payment_discount_loss(pe, doc, valid_discounts) set_pending_discount_loss( @@ -3463,7 +3463,7 @@ def set_pending_discount_loss(pe, doc, discount_amount, base_total_discount_loss # If tax loss booking is enabled, pending loss will be rounding loss. # Otherwise it will be the total discount loss. - book_tax_loss = frappe.get_settings("Accounts Settings", "book_tax_discount_loss") + book_tax_loss = frappe.get_single_value("Accounts Settings", "book_tax_discount_loss") account_type = "round_off_account" if book_tax_loss else "default_discount_account" pe.append( diff --git a/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.py b/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.py index 8632cbe666c..2719d11e050 100644 --- a/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.py +++ b/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.py @@ -407,7 +407,7 @@ class PaymentReconciliation(Document): @frappe.whitelist() def is_auto_process_enabled(self): - return frappe.get_settings("Accounts Settings", "auto_reconcile_payments") + return frappe.get_single_value("Accounts Settings", "auto_reconcile_payments") @frappe.whitelist() def calculate_difference_on_allocation_change(self, payment_entry, invoice, allocated_amount): @@ -532,7 +532,7 @@ class PaymentReconciliation(Document): @frappe.whitelist() def reconcile(self): - if frappe.get_settings("Accounts Settings", "auto_reconcile_payments"): + if frappe.get_single_value("Accounts Settings", "auto_reconcile_payments"): running_doc = is_any_doc_running( dict( company=self.company, diff --git a/erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.py b/erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.py index f44d40a7495..0d3724a4bb0 100644 --- a/erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.py +++ b/erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.py @@ -60,7 +60,9 @@ class POSClosingEntry(StatusUpdater): if frappe.db.get_value("POS Opening Entry", self.pos_opening_entry, "status") != "Open": frappe.throw(_("Selected POS Opening Entry should be open."), title=_("Invalid Opening Entry")) - self.is_pos_using_sales_invoice = frappe.get_settings("Accounts Settings", "use_sales_invoice_in_pos") + self.is_pos_using_sales_invoice = frappe.get_single_value( + "Accounts Settings", "use_sales_invoice_in_pos" + ) if self.is_pos_using_sales_invoice == 0: self.validate_duplicate_pos_invoices() @@ -299,7 +301,7 @@ def make_closing_entry_from_opening(opening_entry): closing_entry.net_total = 0 closing_entry.total_quantity = 0 - is_pos_using_sales_invoice = frappe.get_settings("Accounts Settings", "use_sales_invoice_in_pos") + is_pos_using_sales_invoice = frappe.get_single_value("Accounts Settings", "use_sales_invoice_in_pos") pos_invoices = ( get_pos_invoices( diff --git a/erpnext/accounts/doctype/pos_invoice/pos_invoice.py b/erpnext/accounts/doctype/pos_invoice/pos_invoice.py index 2245085d884..dfb06bc6c9a 100644 --- a/erpnext/accounts/doctype/pos_invoice/pos_invoice.py +++ b/erpnext/accounts/doctype/pos_invoice/pos_invoice.py @@ -424,7 +424,9 @@ class POSInvoice(SalesInvoice): ) def validate_is_pos_using_sales_invoice(self): - self.is_pos_using_sales_invoice = frappe.get_settings("Accounts Settings", "use_sales_invoice_in_pos") + self.is_pos_using_sales_invoice = frappe.get_single_value( + "Accounts Settings", "use_sales_invoice_in_pos" + ) if self.is_pos_using_sales_invoice and not self.is_return: frappe.throw(_("Sales Invoice mode is activated in POS. Please create Sales Invoice instead.")) diff --git a/erpnext/accounts/doctype/process_payment_reconciliation/process_payment_reconciliation.py b/erpnext/accounts/doctype/process_payment_reconciliation/process_payment_reconciliation.py index dc67f48c128..95c6308ec9b 100644 --- a/erpnext/accounts/doctype/process_payment_reconciliation/process_payment_reconciliation.py +++ b/erpnext/accounts/doctype/process_payment_reconciliation/process_payment_reconciliation.py @@ -142,7 +142,7 @@ def trigger_job_for_doc(docname: str | None = None): if not docname: return - if not frappe.get_settings("Accounts Settings", "auto_reconcile_payments"): + if not frappe.get_single_value("Accounts Settings", "auto_reconcile_payments"): frappe.throw( _("Auto Reconciliation of Payments has been disabled. Enable it through {0}").format( get_link_to_form("Accounts Settings", "Accounts Settings") @@ -190,7 +190,7 @@ def trigger_reconciliation_for_queued_docs(): Will be called from Cron Job Fetch queued docs and start reconciliation process for each one """ - if not frappe.get_settings("Accounts Settings", "auto_reconcile_payments"): + if not frappe.get_single_value("Accounts Settings", "auto_reconcile_payments"): frappe.msgprint( _("Auto Reconciliation of Payments has been disabled. Enable it through {0}").format( get_link_to_form("Accounts Settings", "Accounts Settings") @@ -210,7 +210,7 @@ def trigger_reconciliation_for_queued_docs(): docs_to_trigger = [] unique_filters = set() - queue_size = frappe.get_settings("Accounts Settings", "reconciliation_queue_size") or 5 + queue_size = frappe.get_single_value("Accounts Settings", "reconciliation_queue_size") or 5 fields = ["company", "party_type", "party", "receivable_payable_account", "default_advance_account"] diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py index 76585783afb..a9eb75b7260 100644 --- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py +++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py @@ -1729,7 +1729,7 @@ class PurchaseInvoice(BuyingController): frappe.throw(_("Supplier Invoice Date cannot be greater than Posting Date")) if self.bill_no: - if cint(frappe.get_settings("Accounts Settings", "check_supplier_invoice_uniqueness")): + if cint(frappe.get_single_value("Accounts Settings", "check_supplier_invoice_uniqueness")): fiscal_year = get_fiscal_year(self.posting_date, company=self.company, as_dict=True) pi = frappe.db.sql( diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py index 4e75d92306e..c4c8f8c7d4d 100644 --- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py +++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py @@ -495,7 +495,7 @@ class SalesInvoice(SellingController): self.update_time_sheet(self.name) - if frappe.get_settings("Selling Settings", "sales_update_frequency") == "Each Transaction": + if frappe.get_single_value("Selling Settings", "sales_update_frequency") == "Each Transaction": update_company_current_month_sales(self.company) self.update_project() update_linked_doc(self.doctype, self.name, self.inter_company_invoice_reference) @@ -611,7 +611,7 @@ class SalesInvoice(SellingController): if self.coupon_code: update_coupon_code_count(self.coupon_code, "cancelled") - if frappe.get_settings("Selling Settings", "sales_update_frequency") == "Each Transaction": + if frappe.get_single_value("Selling Settings", "sales_update_frequency") == "Each Transaction": update_company_current_month_sales(self.company) self.update_project() if not self.is_return and not self.is_consolidated and self.loyalty_program: @@ -1016,7 +1016,7 @@ class SalesInvoice(SellingController): ) if ( - cint(frappe.get_settings("Selling Settings", "maintain_same_sales_rate")) + cint(frappe.get_single_value("Selling Settings", "maintain_same_sales_rate")) and not self.is_return and not self.is_internal_customer ): @@ -1063,7 +1063,7 @@ class SalesInvoice(SellingController): "Delivery Note": ["dn_required", "update_stock"], } for key, value in prev_doc_field_map.items(): - if frappe.get_settings("Selling Settings", value[0]) == "Yes": + if frappe.get_single_value("Selling Settings", value[0]) == "Yes": if frappe.get_value("Customer", self.customer, value[0]): continue @@ -1096,7 +1096,9 @@ class SalesInvoice(SellingController): if self.is_created_using_pos and not self.pos_profile: frappe.throw(_("POS Profile is mandatory to mark this invoice as POS Transaction.")) - self.is_pos_using_sales_invoice = frappe.get_settings("Accounts Settings", "use_sales_invoice_in_pos") + self.is_pos_using_sales_invoice = frappe.get_single_value( + "Accounts Settings", "use_sales_invoice_in_pos" + ) if not self.is_pos_using_sales_invoice and not self.is_return: frappe.throw(_("Transactions using Sales Invoice in POS are disabled.")) @@ -1466,7 +1468,7 @@ class SalesInvoice(SellingController): def make_tax_gl_entries(self, gl_entries): enable_discount_accounting = cint( - frappe.get_settings("Selling Settings", "enable_discount_accounting") + frappe.get_single_value("Selling Settings", "enable_discount_accounting") ) for tax in self.get("taxes"): @@ -1516,7 +1518,7 @@ class SalesInvoice(SellingController): def make_item_gl_entries(self, gl_entries): # income account gl entries enable_discount_accounting = cint( - frappe.get_settings("Selling Settings", "enable_discount_accounting") + frappe.get_single_value("Selling Settings", "enable_discount_accounting") ) for item in self.get("items"): @@ -1591,7 +1593,7 @@ class SalesInvoice(SellingController): def enable_discount_accounting(self): if not hasattr(self, "_enable_discount_accounting"): self._enable_discount_accounting = cint( - frappe.get_settings("Selling Settings", "enable_discount_accounting") + frappe.get_single_value("Selling Settings", "enable_discount_accounting") ) return self._enable_discount_accounting @@ -1633,7 +1635,7 @@ class SalesInvoice(SellingController): def make_pos_gl_entries(self, gl_entries): if cint(self.is_pos): skip_change_gl_entries = not cint( - frappe.get_settings("Accounts Settings", "post_change_gl_entries") + frappe.get_single_value("Accounts Settings", "post_change_gl_entries") ) for payment_mode in self.payments: @@ -2918,7 +2920,7 @@ def check_if_return_invoice_linked_with_payment_entry(self): # If a Return invoice is linked with payment entry along with other invoices, # the cancellation of the Return causes allocated amount to be greater than paid - if not frappe.get_settings("Accounts Settings", "unlink_payment_on_cancellation_of_invoice"): + if not frappe.get_single_value("Accounts Settings", "unlink_payment_on_cancellation_of_invoice"): return payment_entries = [] diff --git a/erpnext/accounts/general_ledger.py b/erpnext/accounts/general_ledger.py index f2d0c6159f1..24685bfabe9 100644 --- a/erpnext/accounts/general_ledger.py +++ b/erpnext/accounts/general_ledger.py @@ -35,7 +35,7 @@ def make_gl_entries( ): if gl_map: if ( - frappe.get_settings("Accounts Settings", "use_new_budget_controller") + frappe.get_single_value("Accounts Settings", "use_new_budget_controller") and gl_map[0].voucher_type != "Period Closing Voucher" ): bud_val = BudgetValidation(gl_map=gl_map) @@ -743,9 +743,11 @@ def check_freezing_date(posting_date, adv_adj=False): Hence stop admin to bypass if accounts are freezed """ if not adv_adj: - acc_frozen_upto = frappe.get_settings("Accounts Settings", "acc_frozen_upto") + acc_frozen_upto = frappe.get_single_value("Accounts Settings", "acc_frozen_upto") if acc_frozen_upto: - frozen_accounts_modifier = frappe.get_settings("Accounts Settings", "frozen_accounts_modifier") + frozen_accounts_modifier = frappe.get_single_value( + "Accounts Settings", "frozen_accounts_modifier" + ) if getdate(posting_date) <= getdate(acc_frozen_upto) and ( frozen_accounts_modifier not in frappe.get_roles() or frappe.session.user == "Administrator" ): @@ -823,4 +825,4 @@ def validate_allowed_dimensions(gl_entry, dimension_filter_map): def is_immutable_ledger_enabled(): - return frappe.get_settings("Accounts Settings", "enable_immutable_ledger") + return frappe.get_single_value("Accounts Settings", "enable_immutable_ledger") diff --git a/erpnext/accounts/party.py b/erpnext/accounts/party.py index eff254c1cff..2feaaf7e8e1 100644 --- a/erpnext/accounts/party.py +++ b/erpnext/accounts/party.py @@ -689,7 +689,7 @@ def validate_due_date_with_template(posting_date, due_date, bill_date, template_ return if default_due_date != posting_date and getdate(due_date) > getdate(default_due_date): - if frappe.get_settings("Accounts Settings", "credit_controller") in frappe.get_roles(): + if frappe.get_single_value("Accounts Settings", "credit_controller") in frappe.get_roles(): party_type = "supplier" if doctype == "Purchase Invoice" else "customer" msgprint( @@ -703,7 +703,9 @@ def validate_due_date_with_template(posting_date, due_date, bill_date, template_ @frappe.whitelist() def get_address_tax_category(tax_category=None, billing_address=None, shipping_address=None): - addr_tax_category_from = frappe.get_settings("Accounts Settings", "determine_address_tax_category_from") + addr_tax_category_from = frappe.get_single_value( + "Accounts Settings", "determine_address_tax_category_from" + ) if addr_tax_category_from == "Shipping Address": if shipping_address: tax_category = frappe.db.get_value("Address", shipping_address, "tax_category") or tax_category @@ -801,7 +803,7 @@ def validate_party_frozen_disabled(party_type, party_name): if party.disabled: frappe.throw(_("{0} {1} is disabled").format(party_type, party_name), PartyDisabled) elif party.get("is_frozen"): - frozen_accounts_modifier = frappe.get_settings( + frozen_accounts_modifier = frappe.get_single_value( "Accounts Settings", "frozen_accounts_modifier" ) if frozen_accounts_modifier not in frappe.get_roles(): diff --git a/erpnext/accounts/report/accounts_receivable/accounts_receivable.py b/erpnext/accounts/report/accounts_receivable/accounts_receivable.py index a30c0b463af..412d0903e7a 100644 --- a/erpnext/accounts/report/accounts_receivable/accounts_receivable.py +++ b/erpnext/accounts/report/accounts_receivable/accounts_receivable.py @@ -57,7 +57,8 @@ class ReceivablePayableReport: self.ranges = [num.strip() for num in self.filters.range.split(",") if num.strip().isdigit()] self.range_numbers = [num for num in range(1, len(self.ranges) + 2)] self.ple_fetch_method = ( - frappe.get_settings("Accounts Settings", "receivable_payable_fetch_method") or "Buffered Cursor" + frappe.get_single_value("Accounts Settings", "receivable_payable_fetch_method") + or "Buffered Cursor" ) # Fail Safe def run(self, args): @@ -848,7 +849,7 @@ class ReceivablePayableReport: ) if self.filters.get("show_remarks"): - if remarks_length := frappe.get_settings( + if remarks_length := frappe.get_single_value( "Accounts Settings", "receivable_payable_remarks_length" ): query = query.select(Substring(ple.remarks, 1, remarks_length).as_("remarks")) diff --git a/erpnext/accounts/report/financial_statements.py b/erpnext/accounts/report/financial_statements.py index b64bd47b5d8..5b9685de3c6 100644 --- a/erpnext/accounts/report/financial_statements.py +++ b/erpnext/accounts/report/financial_statements.py @@ -435,7 +435,7 @@ def set_gl_entries_by_account( gl_entries = [] # For balance sheet - ignore_closing_balances = frappe.get_settings("Accounts Settings", "ignore_account_closing_balance") + ignore_closing_balances = frappe.get_single_value("Accounts Settings", "ignore_account_closing_balance") if not from_date and not ignore_closing_balances: last_period_closing_voucher = frappe.db.get_all( "Period Closing Voucher", @@ -517,7 +517,7 @@ def get_accounting_entries( .where(gl_entry.company == filters.company) ) - ignore_is_opening = frappe.get_settings("Accounts Settings", "ignore_is_opening_check_for_reporting") + ignore_is_opening = frappe.get_single_value("Accounts Settings", "ignore_is_opening_check_for_reporting") if doctype == "GL Entry": query = query.select(gl_entry.posting_date, gl_entry.is_opening, gl_entry.fiscal_year) diff --git a/erpnext/accounts/report/general_ledger/general_ledger.py b/erpnext/accounts/report/general_ledger/general_ledger.py index 20a92f3f626..71fa184b914 100644 --- a/erpnext/accounts/report/general_ledger/general_ledger.py +++ b/erpnext/accounts/report/general_ledger/general_ledger.py @@ -163,7 +163,7 @@ def get_gl_entries(filters, accounting_dimensions): credit_in_account_currency """ if filters.get("show_remarks"): - if remarks_length := frappe.get_settings("Accounts Settings", "general_ledger_remarks_length"): + if remarks_length := frappe.get_single_value("Accounts Settings", "general_ledger_remarks_length"): select_fields += f",substr(remarks, 1, {remarks_length}) as 'remarks'" else: select_fields += """,remarks""" @@ -218,7 +218,7 @@ def get_gl_entries(filters, accounting_dimensions): def get_conditions(filters): conditions = [] - ignore_is_opening = frappe.get_settings("Accounts Settings", "ignore_is_opening_check_for_reporting") + ignore_is_opening = frappe.get_single_value("Accounts Settings", "ignore_is_opening_check_for_reporting") if filters.get("account"): filters.account = get_accounts_with_children(filters.account) @@ -478,7 +478,7 @@ def get_accountwise_gle(filters, accounting_dimensions, gl_entries, gle_map): if filters.get("show_net_values_in_party_account"): account_type_map = get_account_type_map(filters.get("company")) - immutable_ledger = frappe.get_settings("Accounts Settings", "enable_immutable_ledger") + immutable_ledger = frappe.get_single_value("Accounts Settings", "enable_immutable_ledger") def update_value_in_dict(data, key, gle): data[key].debit += gle.debit diff --git a/erpnext/accounts/report/tax_withholding_details/tax_withholding_details.py b/erpnext/accounts/report/tax_withholding_details/tax_withholding_details.py index f51e4152e56..02dec9686c5 100644 --- a/erpnext/accounts/report/tax_withholding_details/tax_withholding_details.py +++ b/erpnext/accounts/report/tax_withholding_details/tax_withholding_details.py @@ -9,7 +9,7 @@ from frappe.utils import getdate def execute(filters=None): if filters.get("party_type") == "Customer": - party_naming_by = frappe.get_settings("Selling Settings", "cust_master_name") + party_naming_by = frappe.get_single_value("Selling Settings", "cust_master_name") else: party_naming_by = frappe.db.get_single_value("Buying Settings", "supp_master_name") diff --git a/erpnext/accounts/report/tds_computation_summary/tds_computation_summary.py b/erpnext/accounts/report/tds_computation_summary/tds_computation_summary.py index 6b49f12a524..2253b3631c1 100644 --- a/erpnext/accounts/report/tds_computation_summary/tds_computation_summary.py +++ b/erpnext/accounts/report/tds_computation_summary/tds_computation_summary.py @@ -10,7 +10,7 @@ from erpnext.accounts.utils import get_fiscal_year def execute(filters=None): if filters.get("party_type") == "Customer": - party_naming_by = frappe.get_settings("Selling Settings", "cust_master_name") + party_naming_by = frappe.get_single_value("Selling Settings", "cust_master_name") else: party_naming_by = frappe.db.get_single_value("Buying Settings", "supp_master_name") diff --git a/erpnext/accounts/report/trial_balance/trial_balance.py b/erpnext/accounts/report/trial_balance/trial_balance.py index b01f3315b3f..9524db3add6 100644 --- a/erpnext/accounts/report/trial_balance/trial_balance.py +++ b/erpnext/accounts/report/trial_balance/trial_balance.py @@ -89,7 +89,7 @@ def get_data(filters): ) company_currency = filters.presentation_currency or erpnext.get_company_currency(filters.company) - ignore_is_opening = frappe.get_settings("Accounts Settings", "ignore_is_opening_check_for_reporting") + ignore_is_opening = frappe.get_single_value("Accounts Settings", "ignore_is_opening_check_for_reporting") if not accounts: return None @@ -146,7 +146,7 @@ def get_rootwise_opening_balances(filters, report_type, ignore_is_opening): gle = [] last_period_closing_voucher = "" - ignore_closing_balances = frappe.get_settings("Accounts Settings", "ignore_account_closing_balance") + ignore_closing_balances = frappe.get_single_value("Accounts Settings", "ignore_account_closing_balance") if not ignore_closing_balances: last_period_closing_voucher = frappe.db.get_all( diff --git a/erpnext/accounts/report/trial_balance_for_party/trial_balance_for_party.py b/erpnext/accounts/report/trial_balance_for_party/trial_balance_for_party.py index d2587a78572..95484bb190b 100644 --- a/erpnext/accounts/report/trial_balance_for_party/trial_balance_for_party.py +++ b/erpnext/accounts/report/trial_balance_for_party/trial_balance_for_party.py @@ -256,7 +256,7 @@ def is_party_name_visible(filters): if filters.get("party_type") in ["Customer", "Supplier"]: if filters.get("party_type") == "Customer": - party_naming_by = frappe.get_settings("Selling Settings", "cust_master_name") + party_naming_by = frappe.get_single_value("Selling Settings", "cust_master_name") else: party_naming_by = frappe.db.get_single_value("Buying Settings", "supp_master_name") diff --git a/erpnext/accounts/utils.py b/erpnext/accounts/utils.py index efd36325a34..9fe24857672 100644 --- a/erpnext/accounts/utils.py +++ b/erpnext/accounts/utils.py @@ -886,7 +886,7 @@ def cancel_common_party_journal(self): if self.doctype not in ["Sales Invoice", "Purchase Invoice"]: return - if not frappe.get_settings("Accounts Settings", "enable_common_party_accounting"): + if not frappe.get_single_value("Accounts Settings", "enable_common_party_accounting"): return party_link = self.get_common_party_link() @@ -2312,7 +2312,7 @@ def run_ledger_health_checks(): def sync_auto_reconcile_config(auto_reconciliation_job_trigger: int = 15): - auto_reconciliation_job_trigger = auto_reconciliation_job_trigger or frappe.get_settings( + auto_reconciliation_job_trigger = auto_reconciliation_job_trigger or frappe.get_single_value( "Accounts Settings", "auto_reconciliation_job_trigger" ) method = "erpnext.accounts.doctype.process_payment_reconciliation.process_payment_reconciliation.trigger_reconciliation_for_queued_docs" diff --git a/erpnext/assets/doctype/asset/depreciation.py b/erpnext/assets/doctype/asset/depreciation.py index 92546235780..037dc070255 100644 --- a/erpnext/assets/doctype/asset/depreciation.py +++ b/erpnext/assets/doctype/asset/depreciation.py @@ -35,7 +35,7 @@ from erpnext.assets.doctype.asset_depreciation_schedule.asset_depreciation_sched def post_depreciation_entries(date=None): # Return if automatic booking of asset depreciation is disabled - if not cint(frappe.get_settings("Accounts Settings", "book_asset_depreciation_entry_automatically")): + if not cint(frappe.get_single_value("Accounts Settings", "book_asset_depreciation_entry_automatically")): return date = date or today() @@ -112,12 +112,12 @@ def make_depreciation_entry_on_disposal(asset_doc, disposal_date=None): def get_acc_frozen_upto(): - acc_frozen_upto = frappe.get_settings("Accounts Settings", "acc_frozen_upto") + acc_frozen_upto = frappe.get_single_value("Accounts Settings", "acc_frozen_upto") if not acc_frozen_upto: return - frozen_accounts_modifier = frappe.get_settings("Accounts Settings", "frozen_accounts_modifier") + frozen_accounts_modifier = frappe.get_single_value("Accounts Settings", "frozen_accounts_modifier") if frozen_accounts_modifier not in frappe.get_roles() or frappe.session.user == "Administrator": return getdate(acc_frozen_upto) diff --git a/erpnext/assets/doctype/asset_depreciation_schedule/deppreciation_schedule_controller.py b/erpnext/assets/doctype/asset_depreciation_schedule/deppreciation_schedule_controller.py index 278b44444d4..3e294bea362 100644 --- a/erpnext/assets/doctype/asset_depreciation_schedule/deppreciation_schedule_controller.py +++ b/erpnext/assets/doctype/asset_depreciation_schedule/deppreciation_schedule_controller.py @@ -251,7 +251,7 @@ class DepreciationScheduleController(StraightLineMethod, WDVMethod): return depr_booked_for_months def get_total_pending_days_or_years(self): - if cint(frappe.get_settings("Accounts Settings", "calculate_depr_using_total_days")): + if cint(frappe.get_single_value("Accounts Settings", "calculate_depr_using_total_days")): last_depr_date = self.get_last_booked_depreciation_date() if last_depr_date: self.total_pending_days = date_diff(self.final_schedule_date, last_depr_date) - 1 diff --git a/erpnext/assets/doctype/asset_depreciation_schedule/depreciation_methods.py b/erpnext/assets/doctype/asset_depreciation_schedule/depreciation_methods.py index f6535221671..f6dcb144c1e 100644 --- a/erpnext/assets/doctype/asset_depreciation_schedule/depreciation_methods.py +++ b/erpnext/assets/doctype/asset_depreciation_schedule/depreciation_methods.py @@ -38,7 +38,7 @@ class StraightLineMethod(Document): return daily_depr_amount * total_depreciable_days def get_daily_depr_amount(self): - if cint(frappe.get_settings("Accounts Settings", "calculate_depr_using_total_days")): + if cint(frappe.get_single_value("Accounts Settings", "calculate_depr_using_total_days")): return self.depreciable_value / self.total_pending_days else: yearly_depr_amount = self.depreciable_value / self.total_pending_years diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py index 7970b43c7f0..cd1bcf5f489 100644 --- a/erpnext/controllers/accounts_controller.py +++ b/erpnext/controllers/accounts_controller.py @@ -403,7 +403,7 @@ class AccountsController(TransactionBase): self.remove_serial_and_batch_bundle() # delete sl and gl entries on deletion of transaction - if frappe.get_settings("Accounts Settings", "delete_linked_ledger_entries"): + if frappe.get_single_value("Accounts Settings", "delete_linked_ledger_entries"): # delete linked exchange gain/loss journal delete_exchange_gain_loss_journal(self) @@ -744,7 +744,7 @@ class AccountsController(TransactionBase): frappe.throw(_(msg), title=_("Internal Transfer Reference Missing")) def validate_internal_transaction(self): - if not cint(frappe.get_settings("Accounts Settings", "maintain_same_internal_transaction_rate")): + if not cint(frappe.get_single_value("Accounts Settings", "maintain_same_internal_transaction_rate")): return doctypes_list = ["Sales Order", "Sales Invoice", "Purchase Order", "Purchase Invoice"] @@ -1141,7 +1141,7 @@ class AccountsController(TransactionBase): return True def set_taxes_and_charges(self): - if frappe.get_settings("Accounts Settings", "add_taxes_from_item_tax_template"): + if frappe.get_single_value("Accounts Settings", "add_taxes_from_item_tax_template"): if hasattr(self, "taxes_and_charges") and not self.get("taxes") and not self.get("is_pos"): if tax_master_doctype := self.meta.get_field("taxes_and_charges").options: self.append_taxes_from_master(tax_master_doctype) @@ -1154,7 +1154,7 @@ class AccountsController(TransactionBase): self.extend("taxes", get_taxes_and_charges(tax_master_doctype, self.get("taxes_and_charges"))) def append_taxes_from_item_tax_template(self): - if not frappe.get_settings("Accounts Settings", "add_taxes_from_item_tax_template"): + if not frappe.get_single_value("Accounts Settings", "add_taxes_from_item_tax_template"): return for row in self.items: @@ -1495,7 +1495,7 @@ class AccountsController(TransactionBase): return res def is_inclusive_tax(self): - is_inclusive = cint(frappe.get_settings("Accounts Settings", "show_inclusive_tax_in_print")) + is_inclusive = cint(frappe.get_single_value("Accounts Settings", "show_inclusive_tax_in_print")) if is_inclusive: is_inclusive = 0 @@ -1505,7 +1505,7 @@ class AccountsController(TransactionBase): return is_inclusive def should_show_taxes_as_table_in_print(self): - return cint(frappe.get_settings("Accounts Settings", "show_taxes_as_table_in_print")) + return cint(frappe.get_single_value("Accounts Settings", "show_taxes_as_table_in_print")) def validate_advance_entries(self): order_field = "sales_order" if self.doctype == "Sales Invoice" else "purchase_order" @@ -1882,11 +1882,11 @@ class AccountsController(TransactionBase): cancel_exchange_gain_loss_journal(self) cancel_common_party_journal(self) - if frappe.get_settings("Accounts Settings", "unlink_payment_on_cancellation_of_invoice"): + if frappe.get_single_value("Accounts Settings", "unlink_payment_on_cancellation_of_invoice"): unlink_ref_doc_from_payment_entries(self) elif self.doctype in ["Sales Order", "Purchase Order"]: - if frappe.get_settings("Accounts Settings", "unlink_advance_payment_on_cancelation_of_order"): + if frappe.get_single_value("Accounts Settings", "unlink_advance_payment_on_cancelation_of_order"): unlink_ref_doc_from_payment_entries(self) if self.doctype == "Sales Order": @@ -1962,7 +1962,7 @@ class AccountsController(TransactionBase): def make_discount_gl_entries(self, gl_entries): enable_discount_accounting = cint( - frappe.get_settings("Selling Settings", "enable_discount_accounting") + frappe.get_single_value("Selling Settings", "enable_discount_accounting") ) if enable_discount_accounting: @@ -2444,7 +2444,7 @@ class AccountsController(TransactionBase): grand_total = grand_total - flt(self.write_off_amount) po_or_so, doctype, fieldname = self.get_order_details() automatically_fetch_payment_terms = cint( - frappe.get_settings("Accounts Settings", "automatically_fetch_payment_terms") + frappe.get_single_value("Accounts Settings", "automatically_fetch_payment_terms") ) if self.get("total_advance"): @@ -2727,7 +2727,7 @@ class AccountsController(TransactionBase): if not is_invoice: return - if frappe.get_settings("Accounts Settings", "enable_common_party_accounting"): + if frappe.get_single_value("Accounts Settings", "enable_common_party_accounting"): party_link = self.get_common_party_link() if party_link and self.outstanding_amount: self.create_advance_and_reconcile(party_link) @@ -3513,7 +3513,7 @@ def set_child_tax_template_and_map(item, child_item, parent_doc): def add_taxes_from_tax_template(child_item, parent_doc, db_insert=True): - add_taxes_from_item_tax_template = frappe.get_settings( + add_taxes_from_item_tax_template = frappe.get_single_value( "Accounts Settings", "add_taxes_from_item_tax_template" ) diff --git a/erpnext/controllers/buying_controller.py b/erpnext/controllers/buying_controller.py index f8c96f3d466..830b6b32cff 100644 --- a/erpnext/controllers/buying_controller.py +++ b/erpnext/controllers/buying_controller.py @@ -75,7 +75,7 @@ class BuyingController(SubcontractingController): if self.docstatus == 1 and self.doctype in ["Purchase Receipt", "Purchase Invoice"]: self.set_onload( "allow_to_make_qc_after_submission", - frappe.get_settings( + frappe.get_single_value( "Stock Settings", "allow_to_make_quality_inspection_after_purchase_or_delivery" ), ) @@ -545,7 +545,7 @@ class BuyingController(SubcontractingController): item.bom = None def set_qty_as_per_stock_uom(self): - allow_to_edit_stock_qty = frappe.get_settings( + allow_to_edit_stock_qty = frappe.get_single_value( "Stock Settings", "allow_to_edit_stock_uom_qty_for_purchase" ) @@ -842,7 +842,7 @@ class BuyingController(SubcontractingController): self.update_fixed_asset(field, delete_asset=True) def validate_budget(self): - if frappe.get_settings("Accounts Settings", "use_new_budget_controller"): + if frappe.get_single_value("Accounts Settings", "use_new_budget_controller"): from erpnext.controllers.budget_controller import BudgetValidation val = BudgetValidation(doc=self) diff --git a/erpnext/controllers/queries.py b/erpnext/controllers/queries.py index 44eebf8981c..bb8477be560 100644 --- a/erpnext/controllers/queries.py +++ b/erpnext/controllers/queries.py @@ -948,7 +948,7 @@ def get_filtered_child_rows(doctype, txt, searchfield, start, page_len, filters) @frappe.whitelist() @frappe.validate_and_sanitize_search_inputs def get_item_uom_query(doctype, txt, searchfield, start, page_len, filters): - if frappe.get_settings("Stock Settings", "allow_uom_with_conversion_rate_defined_in_item"): + if frappe.get_single_value("Stock Settings", "allow_uom_with_conversion_rate_defined_in_item"): query_filters = {"parent": filters.get("item_code")} if txt: diff --git a/erpnext/controllers/selling_controller.py b/erpnext/controllers/selling_controller.py index 77e54c5747b..013953e9818 100644 --- a/erpnext/controllers/selling_controller.py +++ b/erpnext/controllers/selling_controller.py @@ -38,7 +38,7 @@ class SellingController(StockController): if self.docstatus == 1 and self.doctype in ["Delivery Note", "Sales Invoice"]: self.set_onload( "allow_to_make_qc_after_submission", - frappe.get_settings( + frappe.get_single_value( "Stock Settings", "allow_to_make_quality_inspection_after_purchase_or_delivery" ), ) @@ -224,7 +224,7 @@ class SellingController(StockController): frappe.throw(_("Maximum discount for Item {0} is {1}%").format(d.item_code, discount)) def set_qty_as_per_stock_uom(self): - allow_to_edit_stock_qty = frappe.get_settings( + allow_to_edit_stock_qty = frappe.get_single_value( "Stock Settings", "allow_to_edit_stock_uom_qty_for_sales" ) @@ -255,7 +255,7 @@ class SellingController(StockController): title=_("Invalid Selling Price"), ) - if self.get("is_return") or not frappe.get_settings("Selling Settings", "validate_selling_price"): + if self.get("is_return") or not frappe.get_single_value("Selling Settings", "validate_selling_price"): return is_internal_customer = self.get("is_internal_customer") @@ -715,7 +715,7 @@ class SellingController(StockController): def validate_for_duplicate_items(self): check_list, chk_dupl_itm = [], [] - if cint(frappe.get_settings("Selling Settings", "allow_multiple_items")): + if cint(frappe.get_single_value("Selling Settings", "allow_multiple_items")): return if self.doctype == "Sales Invoice" and self.is_consolidated: return @@ -958,7 +958,7 @@ def get_serial_and_batch_bundle(child, parent, delivery_note_child=None): if child.get("use_serial_batch_fields"): return - if not frappe.get_settings("Stock Settings", "auto_create_serial_and_batch_bundle_for_outward"): + if not frappe.get_single_value("Stock Settings", "auto_create_serial_and_batch_bundle_for_outward"): return item_details = frappe.db.get_value("Item", child.item_code, ["has_serial_no", "has_batch_no"], as_dict=1) diff --git a/erpnext/controllers/status_updater.py b/erpnext/controllers/status_updater.py index f98d61f221e..facfff7ded8 100644 --- a/erpnext/controllers/status_updater.py +++ b/erpnext/controllers/status_updater.py @@ -266,7 +266,7 @@ class StatusUpdater(Document): if hasattr(d, "qty") and d.qty > 0 and self.get("is_return"): frappe.throw(_("For an item {0}, quantity must be negative number").format(d.item_code)) - if not frappe.get_settings("Selling Settings", "allow_negative_rates_for_items"): + if not frappe.get_single_value("Selling Settings", "allow_negative_rates_for_items"): if hasattr(d, "item_code") and hasattr(d, "rate") and flt(d.rate) < 0: frappe.throw( _( @@ -336,10 +336,10 @@ class StatusUpdater(Document): qty_or_amount, ) - role_allowed_to_over_deliver_receive = frappe.get_settings( + role_allowed_to_over_deliver_receive = frappe.get_single_value( "Stock Settings", "role_allowed_to_over_deliver_receive" ) - role_allowed_to_over_bill = frappe.get_settings("Accounts Settings", "role_allowed_to_over_bill") + role_allowed_to_over_bill = frappe.get_single_value("Accounts Settings", "role_allowed_to_over_bill") role = role_allowed_to_over_deliver_receive if qty_or_amount == "qty" else role_allowed_to_over_bill overflow_percent = ( diff --git a/erpnext/controllers/stock_controller.py b/erpnext/controllers/stock_controller.py index e791a2ea329..8fbb832d3be 100644 --- a/erpnext/controllers/stock_controller.py +++ b/erpnext/controllers/stock_controller.py @@ -518,7 +518,7 @@ class StockController(AccountsController): ) def set_use_serial_batch_fields(self): - if frappe.get_settings("Stock Settings", "use_serial_batch_fields"): + if frappe.get_single_value("Stock Settings", "use_serial_batch_fields"): for row in self.items: row.use_serial_batch_fields = 1 @@ -1076,7 +1076,7 @@ class StockController(AccountsController): "Purchase Invoice", "Sales Invoice", "Delivery Note", - ] and frappe.get_settings( + ] and frappe.get_single_value( "Stock Settings", "allow_to_make_quality_inspection_after_purchase_or_delivery" ): return @@ -1092,7 +1092,7 @@ class StockController(AccountsController): def validate_qi_submission(self, row): """Check if QI is submitted on row level, during submission""" - action = frappe.get_settings("Stock Settings", "action_if_quality_inspection_is_not_submitted") + action = frappe.get_single_value("Stock Settings", "action_if_quality_inspection_is_not_submitted") qa_docstatus = frappe.db.get_value("Quality Inspection", row.quality_inspection, "docstatus") if qa_docstatus != 1: @@ -1107,7 +1107,7 @@ class StockController(AccountsController): def validate_qi_rejection(self, row): """Check if QI is rejected on row level, during submission""" - action = frappe.get_settings("Stock Settings", "action_if_quality_inspection_is_rejected") + action = frappe.get_single_value("Stock Settings", "action_if_quality_inspection_is_rejected") qa_status = frappe.db.get_value("Quality Inspection", row.quality_inspection, "status") if qa_status == "Rejected": @@ -1206,7 +1206,7 @@ class StockController(AccountsController): item_wise_received_qty = self.get_item_wise_inter_received_qty() precision = frappe.get_precision(self.doctype + " Item", "qty") - over_receipt_allowance = frappe.get_settings("Stock Settings", "over_delivery_receipt_allowance") + over_receipt_allowance = frappe.get_single_value("Stock Settings", "over_delivery_receipt_allowance") parent_doctype = { "Purchase Receipt": "Delivery Note", @@ -1379,7 +1379,7 @@ class StockController(AccountsController): force = True if force or future_sle_exists(args) or repost_required_for_queue(self): - item_based_reposting = frappe.get_settings("Stock Reposting Settings", "item_based_reposting") + item_based_reposting = frappe.get_single_value("Stock Reposting Settings", "item_based_reposting") if item_based_reposting: create_item_wise_repost_entries( voucher_type=self.doctype, @@ -1671,7 +1671,7 @@ def is_reposting_pending(): def future_sle_exists(args, sl_entries=None, allow_force_reposting=True): from erpnext.stock.utils import get_combine_datetime - if allow_force_reposting and frappe.get_settings( + if allow_force_reposting and frappe.get_single_value( "Stock Reposting Settings", "do_reposting_for_each_stock_transaction" ): return True diff --git a/erpnext/controllers/subcontracting_controller.py b/erpnext/controllers/subcontracting_controller.py index 81b803488b7..ada72c24ac5 100644 --- a/erpnext/controllers/subcontracting_controller.py +++ b/erpnext/controllers/subcontracting_controller.py @@ -590,7 +590,7 @@ class SubcontractingController(StockController): rm_obj.reference_name = item_row.name - use_serial_batch_fields = frappe.get_settings("Stock Settings", "use_serial_batch_fields") + use_serial_batch_fields = frappe.get_single_value("Stock Settings", "use_serial_batch_fields") if self.doctype == self.subcontract_data.order_doctype: rm_obj.required_qty = flt(qty, rm_obj.precision("required_qty")) diff --git a/erpnext/controllers/taxes_and_totals.py b/erpnext/controllers/taxes_and_totals.py index f63395c649b..28dad216907 100644 --- a/erpnext/controllers/taxes_and_totals.py +++ b/erpnext/controllers/taxes_and_totals.py @@ -28,7 +28,7 @@ class calculate_taxes_and_totals: def __init__(self, doc: Document): self.doc = doc frappe.flags.round_off_applicable_accounts = [] - frappe.flags.round_row_wise_tax = frappe.get_settings("Accounts Settings", "round_row_wise_tax") + frappe.flags.round_row_wise_tax = frappe.get_single_value("Accounts Settings", "round_row_wise_tax") if doc.get("round_off_applicable_accounts_for_tax_withholding"): frappe.flags.round_off_applicable_accounts.append( @@ -1168,7 +1168,7 @@ def get_rounded_tax_amount(itemised_tax, precision): @frappe.whitelist() def get_rounding_tax_settings(): - return frappe.get_settings("Accounts Settings", "round_row_wise_tax") + return frappe.get_single_value("Accounts Settings", "round_row_wise_tax") class init_landed_taxes_and_totals: diff --git a/erpnext/projects/doctype/project/project.py b/erpnext/projects/doctype/project/project.py index 64781e0f212..e5d5d02b897 100644 --- a/erpnext/projects/doctype/project/project.py +++ b/erpnext/projects/doctype/project/project.py @@ -680,7 +680,7 @@ def send_project_status_email_to_users(): def update_project_sales_billing(): - sales_update_frequency = frappe.get_settings("Selling Settings", "sales_update_frequency") + sales_update_frequency = frappe.get_single_value("Selling Settings", "sales_update_frequency") if sales_update_frequency == "Each Transaction": return elif sales_update_frequency == "Monthly" and frappe.utils.now_datetime().day != 1: diff --git a/erpnext/selling/doctype/customer/customer.py b/erpnext/selling/doctype/customer/customer.py index e5a02d55d5f..4fc2dac10e8 100644 --- a/erpnext/selling/doctype/customer/customer.py +++ b/erpnext/selling/doctype/customer/customer.py @@ -554,7 +554,7 @@ def check_credit_limit(customer, company, ignore_outstanding_sales_order=False, message += "

" # If not authorized person raise exception - credit_controller_role = frappe.get_settings("Accounts Settings", "credit_controller") + credit_controller_role = frappe.get_single_value("Accounts Settings", "credit_controller") if not credit_controller_role or credit_controller_role not in frappe.get_roles(): # form a list of emails for the credit controller users credit_controller_users = get_users_with_role(credit_controller_role or "Sales Master Manager") diff --git a/erpnext/selling/doctype/quotation/quotation.py b/erpnext/selling/doctype/quotation/quotation.py index 17a2ff07617..9529cffb364 100644 --- a/erpnext/selling/doctype/quotation/quotation.py +++ b/erpnext/selling/doctype/quotation/quotation.py @@ -167,7 +167,7 @@ class Quotation(SellingController): """ If permitted in settings and any item has 0 qty, the SO has unit price items. """ - if not frappe.get_settings("Selling Settings", "allow_zero_qty_in_quotation"): + if not frappe.get_single_value("Selling Settings", "allow_zero_qty_in_quotation"): return self.has_unit_price_items = any( diff --git a/erpnext/selling/doctype/sales_order/sales_order.py b/erpnext/selling/doctype/sales_order/sales_order.py index 77a28db827b..2117c7f9b6b 100755 --- a/erpnext/selling/doctype/sales_order/sales_order.py +++ b/erpnext/selling/doctype/sales_order/sales_order.py @@ -195,7 +195,7 @@ class SalesOrder(SellingController): def onload(self) -> None: super().onload() - if frappe.get_settings("Stock Settings", "enable_stock_reservation"): + if frappe.get_single_value("Stock Settings", "enable_stock_reservation"): if self.has_unreserved_stock(): self.set_onload("has_unreserved_stock", True) @@ -246,14 +246,14 @@ class SalesOrder(SellingController): self.enable_auto_reserve_stock() def enable_auto_reserve_stock(self): - if self.is_new() and frappe.get_settings("Stock Settings", "auto_reserve_stock"): + if self.is_new() and frappe.get_single_value("Stock Settings", "auto_reserve_stock"): self.reserve_stock = 1 def set_has_unit_price_items(self): """ If permitted in settings and any item has 0 qty, the SO has unit price items. """ - if not frappe.get_settings("Selling Settings", "allow_zero_qty_in_sales_order"): + if not frappe.get_single_value("Selling Settings", "allow_zero_qty_in_sales_order"): return self.has_unit_price_items = any( @@ -279,7 +279,9 @@ class SalesOrder(SellingController): (self.po_no, self.name, self.customer), ) if so and so[0][0]: - if cint(frappe.get_settings("Selling Settings", "allow_against_multiple_purchase_orders")): + if cint( + frappe.get_single_value("Selling Settings", "allow_against_multiple_purchase_orders") + ): frappe.msgprint( _( "Warning: Sales Order {0} already exists against Customer's Purchase Order {1}" @@ -403,7 +405,7 @@ class SalesOrder(SellingController): } ) - if cint(frappe.get_settings("Selling Settings", "maintain_same_sales_rate")): + if cint(frappe.get_single_value("Selling Settings", "maintain_same_sales_rate")): self.validate_rate_with_reference_doc([["Quotation", "prevdoc_docname", "quotation_item"]]) def update_enquiry_status(self, prevdoc, flag): @@ -481,7 +483,7 @@ class SalesOrder(SellingController): update_coupon_code_count(self.coupon_code, "cancelled") def update_project(self): - if frappe.get_settings("Selling Settings", "sales_update_frequency") != "Each Transaction": + if frappe.get_single_value("Selling Settings", "sales_update_frequency") != "Each Transaction": return if self.project: @@ -631,7 +633,7 @@ class SalesOrder(SellingController): if total_picked_qty and total_qty: per_picked = total_picked_qty / total_qty * 100 - pick_percentage = frappe.get_settings("Stock Settings", "over_picking_allowance") + pick_percentage = frappe.get_single_value("Stock Settings", "over_picking_allowance") if pick_percentage: total_qty += flt(total_qty) * (pick_percentage / 100) @@ -727,7 +729,7 @@ class SalesOrder(SellingController): def validate_reserved_stock(self): """Clean reserved stock flag for non-stock Item""" - enable_stock_reservation = frappe.get_settings("Stock Settings", "enable_stock_reservation") + enable_stock_reservation = frappe.get_single_value("Stock Settings", "enable_stock_reservation") for item in self.items: if item.reserve_stock and (not enable_stock_reservation or not cint(item.is_stock_item)): @@ -813,7 +815,7 @@ def get_list_context(context=None): @frappe.whitelist() def is_enable_cutoff_date_on_bulk_delivery_note_creation(): - return frappe.get_settings("Selling Settings", "enable_cutoff_date_on_bulk_delivery_note_creation") + return frappe.get_single_value("Selling Settings", "enable_cutoff_date_on_bulk_delivery_note_creation") @frappe.whitelist() @@ -1218,7 +1220,7 @@ def make_sales_invoice(source_name, target_doc=None, ignore_permissions=False): ) automatically_fetch_payment_terms = cint( - frappe.get_settings("Accounts Settings", "automatically_fetch_payment_terms") + frappe.get_single_value("Accounts Settings", "automatically_fetch_payment_terms") ) if automatically_fetch_payment_terms: doclist.set_payment_schedule() @@ -1859,4 +1861,4 @@ def get_work_order_items(sales_order, for_raw_material_request=0): @frappe.whitelist() def get_stock_reservation_status(): - return frappe.get_settings("Stock Settings", "enable_stock_reservation") + return frappe.get_single_value("Stock Settings", "enable_stock_reservation") diff --git a/erpnext/selling/report/customer_credit_balance/customer_credit_balance.py b/erpnext/selling/report/customer_credit_balance/customer_credit_balance.py index 24570391224..6813060d414 100644 --- a/erpnext/selling/report/customer_credit_balance/customer_credit_balance.py +++ b/erpnext/selling/report/customer_credit_balance/customer_credit_balance.py @@ -13,7 +13,7 @@ def execute(filters=None): if not filters: filters = {} # Check if customer id is according to naming series or customer name - customer_naming_type = frappe.get_settings("Selling Settings", "cust_master_name") + customer_naming_type = frappe.get_single_value("Selling Settings", "cust_master_name") columns = get_columns(customer_naming_type) data = [] diff --git a/erpnext/startup/boot.py b/erpnext/startup/boot.py index a312d0d5499..8dccac80b88 100644 --- a/erpnext/startup/boot.py +++ b/erpnext/startup/boot.py @@ -15,13 +15,13 @@ def boot_session(bootinfo): if frappe.session["user"] != "Guest": update_page_info(bootinfo) - bootinfo.sysdefaults.territory = frappe.get_settings("Selling Settings", "territory") - bootinfo.sysdefaults.customer_group = frappe.get_settings("Selling Settings", "customer_group") - bootinfo.sysdefaults.use_server_side_reactivity = frappe.get_settings( + bootinfo.sysdefaults.territory = frappe.get_single_value("Selling Settings", "territory") + bootinfo.sysdefaults.customer_group = frappe.get_single_value("Selling Settings", "customer_group") + bootinfo.sysdefaults.use_server_side_reactivity = frappe.get_single_value( "Selling Settings", "use_server_side_reactivity" ) - bootinfo.sysdefaults.allow_stale = cint(frappe.get_settings("Accounts Settings", "allow_stale")) - bootinfo.sysdefaults.over_billing_allowance = frappe.get_settings( + bootinfo.sysdefaults.allow_stale = cint(frappe.get_single_value("Accounts Settings", "allow_stale")) + bootinfo.sysdefaults.over_billing_allowance = frappe.get_single_value( "Accounts Settings", "over_billing_allowance" ) @@ -30,7 +30,7 @@ def boot_session(bootinfo): ) bootinfo.sysdefaults.allow_sales_order_creation_for_expired_quotation = cint( - frappe.get_settings("Selling Settings", "allow_sales_order_creation_for_expired_quotation") + frappe.get_single_value("Selling Settings", "allow_sales_order_creation_for_expired_quotation") ) # if no company, show a dialog box to create a new company diff --git a/erpnext/stock/doctype/batch/batch.py b/erpnext/stock/doctype/batch/batch.py index 1a0557a5a0a..52af15e158a 100644 --- a/erpnext/stock/doctype/batch/batch.py +++ b/erpnext/stock/doctype/batch/batch.py @@ -37,7 +37,7 @@ def batch_uses_naming_series(): Verify if the Batch is to be named using a naming series :return: bool """ - use_naming_series = cint(frappe.get_settings("Stock Settings", "use_naming_series")) + use_naming_series = cint(frappe.get_single_value("Stock Settings", "use_naming_series")) return bool(use_naming_series) @@ -49,7 +49,7 @@ def _get_batch_prefix(): is set to use naming series. :return: The naming series. """ - naming_series_prefix = frappe.get_settings("Stock Settings", "naming_series_prefix") + naming_series_prefix = frappe.get_single_value("Stock Settings", "naming_series_prefix") if not naming_series_prefix: naming_series_prefix = "BATCH-" @@ -160,7 +160,7 @@ class Batch(Document): from erpnext.stock.utils import get_valuation_method if self.is_new(): - if get_valuation_method(self.item) == "Moving Average" and frappe.get_settings( + if get_valuation_method(self.item) == "Moving Average" and frappe.get_single_value( "Stock Settings", "do_not_use_batchwise_valuation" ): self.use_batchwise_valuation = 0 diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.py b/erpnext/stock/doctype/delivery_note/delivery_note.py index 1a81d34fad1..0c390ce9085 100644 --- a/erpnext/stock/doctype/delivery_note/delivery_note.py +++ b/erpnext/stock/doctype/delivery_note/delivery_note.py @@ -247,7 +247,7 @@ class DeliveryNote(SellingController): def so_required(self): """check in manage account if sales order required or not""" - if frappe.get_settings("Selling Settings", "so_required") == "Yes": + if frappe.get_single_value("Selling Settings", "so_required") == "Yes": for d in self.get("items"): if not d.against_sales_order: frappe.throw(_("Sales Order required for Item {0}").format(d.item_code)) @@ -314,7 +314,7 @@ class DeliveryNote(SellingController): ) if ( - cint(frappe.get_settings("Selling Settings", "maintain_same_sales_rate")) + cint(frappe.get_single_value("Selling Settings", "maintain_same_sales_rate")) and not self.is_return and not self.is_internal_customer ): @@ -901,7 +901,7 @@ def make_sales_invoice(source_name, target_doc=None, args=None): ) automatically_fetch_payment_terms = cint( - frappe.get_settings("Accounts Settings", "automatically_fetch_payment_terms") + frappe.get_single_value("Accounts Settings", "automatically_fetch_payment_terms") ) if automatically_fetch_payment_terms and not doc.is_return: doc.set_payment_schedule() diff --git a/erpnext/stock/doctype/item/item.py b/erpnext/stock/doctype/item/item.py index a0decbd3a86..6f0d9664cac 100644 --- a/erpnext/stock/doctype/item/item.py +++ b/erpnext/stock/doctype/item/item.py @@ -227,7 +227,7 @@ class Item(Document): def validate_description(self): """Clean HTML description if set""" if ( - cint(frappe.get_settings("Stock Settings", "clean_description_html")) + cint(frappe.get_single_value("Stock Settings", "clean_description_html")) and self.description != self.item_name # perf: Avoid cleaning up a fallback ): self.description = clean_html(self.description) @@ -243,9 +243,9 @@ class Item(Document): def add_price(self, price_list=None): """Add a new price""" if not price_list: - price_list = frappe.get_settings("Selling Settings", "selling_price_list") or frappe.db.get_value( - "Price List", _("Standard Selling") - ) + price_list = frappe.get_single_value( + "Selling Settings", "selling_price_list" + ) or frappe.db.get_value("Price List", _("Standard Selling")) if price_list: item_price = frappe.get_doc( { @@ -274,7 +274,7 @@ class Item(Document): for default in self.item_defaults or [ frappe._dict({"company": frappe.defaults.get_defaults().company}) ]: - default_warehouse = default.default_warehouse or frappe.get_settings( + default_warehouse = default.default_warehouse or frappe.get_single_value( "Stock Settings", "default_warehouse" ) if default_warehouse: @@ -317,7 +317,7 @@ class Item(Document): ) def validate_retain_sample(self): - if self.retain_sample and not frappe.get_settings("Stock Settings", "sample_retention_warehouse"): + if self.retain_sample and not frappe.get_single_value("Stock Settings", "sample_retention_warehouse"): frappe.throw(_("Please select Sample Retention Warehouse in Stock Settings first")) if self.retain_sample and not self.has_batch_no: frappe.throw( @@ -662,7 +662,7 @@ class Item(Document): def recalculate_bin_qty(self, new_name): from erpnext.stock.stock_balance import repost_stock - existing_allow_negative_stock = frappe.get_settings("Stock Settings", "allow_negative_stock") + existing_allow_negative_stock = frappe.get_single_value("Stock Settings", "allow_negative_stock") frappe.db.set_single_value("Stock Settings", "allow_negative_stock", 1) repost_stock_for_warehouses = frappe.get_all( @@ -961,7 +961,9 @@ class Item(Document): return if not values.get("valuation_method") and self.get("valuation_method"): - values["valuation_method"] = frappe.get_settings("Stock Settings", "valuation_method") or "FIFO" + values["valuation_method"] = ( + frappe.get_single_value("Stock Settings", "valuation_method") or "FIFO" + ) changed_fields = [ field for field in restricted_fields if cstr(self.get(field)) != cstr(values.get(field)) @@ -1047,7 +1049,7 @@ class Item(Document): def validate_auto_reorder_enabled_in_stock_settings(self): if self.reorder_levels: - enabled = frappe.get_settings("Stock Settings", "auto_indent") + enabled = frappe.get_single_value("Stock Settings", "auto_indent") if not enabled: frappe.msgprint( msg=_("You have to enable auto re-order in Stock Settings to maintain re-order levels."), diff --git a/erpnext/stock/doctype/packed_item/packed_item.py b/erpnext/stock/doctype/packed_item/packed_item.py index b6702379590..23aa5bf6247 100644 --- a/erpnext/stock/doctype/packed_item/packed_item.py +++ b/erpnext/stock/doctype/packed_item/packed_item.py @@ -69,7 +69,7 @@ def make_packing_list(doc): return parent_items_price, reset = {}, False - set_price_from_children = frappe.get_settings("Selling Settings", "editable_bundle_item_rates") + set_price_from_children = frappe.get_single_value("Selling Settings", "editable_bundle_item_rates") stale_packed_items_table = get_indexed_packed_items_table(doc) @@ -234,7 +234,7 @@ def update_packed_item_stock_data(main_item_row, pi_row, packing_item, item_data bin = get_packed_item_bin_qty(packing_item.item_code, pi_row.warehouse) pi_row.actual_qty = flt(bin.get("actual_qty")) pi_row.projected_qty = flt(bin.get("projected_qty")) - pi_row.use_serial_batch_fields = frappe.get_settings("Stock Settings", "use_serial_batch_fields") + pi_row.use_serial_batch_fields = frappe.get_single_value("Stock Settings", "use_serial_batch_fields") def update_packed_item_price_data(pi_row, item_data, doc): diff --git a/erpnext/stock/doctype/pick_list/pick_list.py b/erpnext/stock/doctype/pick_list/pick_list.py index 38005a12d38..eb986eff6bf 100644 --- a/erpnext/stock/doctype/pick_list/pick_list.py +++ b/erpnext/stock/doctype/pick_list/pick_list.py @@ -440,7 +440,7 @@ class PickList(Document): def validate_picked_qty(self, data): over_delivery_receipt_allowance = 100 + flt( - frappe.get_settings("Stock Settings", "over_delivery_receipt_allowance") + frappe.get_single_value("Stock Settings", "over_delivery_receipt_allowance") ) for row in data: @@ -1102,7 +1102,7 @@ def get_available_item_locations_for_batched_item( { "item_code": item_code, "warehouse": from_warehouses, - "based_on": frappe.get_settings("Stock Settings", "pick_serial_and_batch_based_on"), + "based_on": frappe.get_single_value("Stock Settings", "pick_serial_and_batch_based_on"), } ) ) diff --git a/erpnext/stock/doctype/price_list/price_list.py b/erpnext/stock/doctype/price_list/price_list.py index f4772c33fff..9ee05a3f6c7 100644 --- a/erpnext/stock/doctype/price_list/price_list.py +++ b/erpnext/stock/doctype/price_list/price_list.py @@ -39,7 +39,7 @@ class PriceList(Document): def set_default_if_missing(self): if cint(self.selling): - if not frappe.get_settings("Selling Settings", "selling_price_list"): + if not frappe.get_single_value("Selling Settings", "selling_price_list"): frappe.set_value("Selling Settings", "Selling Settings", "selling_price_list", self.name) elif cint(self.buying): diff --git a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py index 9aea6eaa559..2a564d862c0 100644 --- a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py +++ b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py @@ -952,8 +952,8 @@ class PurchaseReceipt(BuyingController): def reserve_stock_for_sales_order(self): if ( self.is_return - or not frappe.get_settings("Stock Settings", "enable_stock_reservation") - or not frappe.get_settings("Stock Settings", "auto_reserve_stock_for_sales_order_on_purchase") + or not frappe.get_single_value("Stock Settings", "enable_stock_reservation") + or not frappe.get_single_value("Stock Settings", "auto_reserve_stock_for_sales_order_on_purchase") ): return @@ -988,7 +988,7 @@ class PurchaseReceipt(BuyingController): ) def reserve_stock_for_production_plan(self): - if self.is_return or not frappe.get_settings("Stock Settings", "enable_stock_reservation"): + if self.is_return or not frappe.get_single_value("Stock Settings", "enable_stock_reservation"): return production_plan_references = self.get_production_plan_references() @@ -1199,7 +1199,7 @@ 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_settings("Accounts Settings", "over_billing_allowance") + over_billing_allowance = frappe.get_single_value("Accounts Settings", "over_billing_allowance") total_amount, total_billed_amount = 0, 0 item_wise_returned_qty = get_item_wise_returned_qty(pr_doc) 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 5e671b2b38c..73d9efd7dc2 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 @@ -84,7 +84,9 @@ class SerialandBatchBundle(Document): # end: auto-generated types def autoname(self): - if frappe.get_settings("Stock Settings", "set_serial_and_batch_bundle_naming_based_on_naming_series"): + if frappe.get_single_value( + "Stock Settings", "set_serial_and_batch_bundle_naming_based_on_naming_series" + ): if not self.naming_series: frappe.throw(_("Naming Series is mandatory")) @@ -159,7 +161,7 @@ class SerialandBatchBundle(Document): if self.type_of_transaction == "Outward" or not self.has_serial_no: return - if frappe.get_settings("Stock Settings", "allow_existing_serial_no"): + if frappe.get_single_value("Stock Settings", "allow_existing_serial_no"): return if self.voucher_type not in ["Purchase Receipt", "Purchase Invoice", "Stock Entry"]: diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.py b/erpnext/stock/doctype/stock_entry/stock_entry.py index ed1596f570c..00c54601178 100644 --- a/erpnext/stock/doctype/stock_entry/stock_entry.py +++ b/erpnext/stock/doctype/stock_entry/stock_entry.py @@ -2457,7 +2457,7 @@ class StockEntry(StockController): if not qty: return - use_serial_batch_fields = frappe.get_settings("Stock Settings", "use_serial_batch_fields") + use_serial_batch_fields = frappe.get_single_value("Stock Settings", "use_serial_batch_fields") ste_item_details = { "from_warehouse": item.warehouse, @@ -2935,7 +2935,7 @@ def move_sample_to_retention_warehouse(company, items): if isinstance(items, str): items = json.loads(items) - retention_warehouse = frappe.get_settings("Stock Settings", "sample_retention_warehouse") + retention_warehouse = frappe.get_single_value("Stock Settings", "sample_retention_warehouse") stock_entry = frappe.new_doc("Stock Entry") stock_entry.company = company stock_entry.purpose = "Material Transfer" @@ -2986,7 +2986,7 @@ def make_stock_in_entry(source_name, target_doc=None): target.stock_entry_type = "Material Transfer" target.set_missing_values() - if not frappe.get_settings("Stock Settings", "use_serial_batch_fields"): + if not frappe.get_single_value("Stock Settings", "use_serial_batch_fields"): target.make_serial_and_batch_bundle_for_transfer() def update_item(source_doc, target_doc, source_parent): @@ -3215,7 +3215,7 @@ def validate_sample_quantity(item_code, sample_quantity, qty, batch_no=None): frappe.throw( _("Sample quantity {0} cannot be more than received quantity {1}").format(sample_quantity, qty) ) - retention_warehouse = frappe.get_settings("Stock Settings", "sample_retention_warehouse") + retention_warehouse = frappe.get_single_value("Stock Settings", "sample_retention_warehouse") retainted_qty = 0 if batch_no: retainted_qty = get_batch_qty(batch_no, retention_warehouse, item_code) diff --git a/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py b/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py index 5709af5bf5f..14aa83b1e50 100644 --- a/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py +++ b/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py @@ -299,7 +299,7 @@ class StockLedgerEntry(Document): is_group_warehouse(self.warehouse) def validate_with_last_transaction_posting_time(self): - authorized_role = frappe.get_settings( + authorized_role = frappe.get_single_value( "Stock Settings", "role_allowed_to_create_edit_back_dated_transactions" ) if authorized_role: diff --git a/erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py b/erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py index 07c02a0f86c..b9482e31385 100644 --- a/erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py +++ b/erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py @@ -162,7 +162,7 @@ class StockReservationEntry(Document): not self.from_voucher_type and (self.get("_action") == "submit") and (self.has_serial_no or self.has_batch_no) - and cint(frappe.get_settings("Stock Settings", "auto_reserve_serial_and_batch")) + and cint(frappe.get_single_value("Stock Settings", "auto_reserve_serial_and_batch")) ): from erpnext.stock.doctype.batch.batch import get_available_batches from erpnext.stock.doctype.serial_no.serial_no import get_serial_nos_for_outward @@ -176,7 +176,7 @@ class StockReservationEntry(Document): "warehouse": self.warehouse, "qty": abs(self.reserved_qty) or 0, "based_on": based_on - or frappe.get_settings("Stock Settings", "pick_serial_and_batch_based_on"), + or frappe.get_single_value("Stock Settings", "pick_serial_and_batch_based_on"), } ) @@ -219,7 +219,7 @@ class StockReservationEntry(Document): return if self.reservation_based_on == "Serial and Batch": - allow_partial_reservation = frappe.get_settings("Stock Settings", "allow_partial_reservation") + allow_partial_reservation = frappe.get_single_value("Stock Settings", "allow_partial_reservation") available_serial_nos = [] if self.has_serial_no: @@ -568,7 +568,7 @@ class StockReservationEntry(Document): def validate_stock_reservation_settings(voucher: object) -> None: """Raises an exception if `Stock Reservation` is not enabled or `Voucher Type` is not allowed.""" - if not frappe.get_settings("Stock Settings", "enable_stock_reservation"): + if not frappe.get_single_value("Stock Settings", "enable_stock_reservation"): msg = _("Please enable {0} in the {1}.").format( frappe.bold(_("Stock Reservation")), frappe.bold(_("Stock Settings")), @@ -1345,7 +1345,7 @@ def create_stock_reservation_entries_for_so_items( validate_stock_reservation_settings(sales_order) - allow_partial_reservation = frappe.get_settings("Stock Settings", "allow_partial_reservation") + allow_partial_reservation = frappe.get_single_value("Stock Settings", "allow_partial_reservation") items = [] if items_details: diff --git a/erpnext/stock/get_item_details.py b/erpnext/stock/get_item_details.py index a5168a5176e..00bf974175a 100644 --- a/erpnext/stock/get_item_details.py +++ b/erpnext/stock/get_item_details.py @@ -136,7 +136,7 @@ def get_item_details( out.update(data) if ( - frappe.get_settings("Stock Settings", "auto_create_serial_and_batch_bundle_for_outward") + frappe.get_single_value("Stock Settings", "auto_create_serial_and_batch_bundle_for_outward") and not ctx.get("serial_and_batch_bundle") and (ctx.get("use_serial_batch_fields") or ctx.get("doctype") == "POS Invoice") ): @@ -201,7 +201,7 @@ def update_stock(ctx, out, doc=None): { "item_code": ctx.item_code, "warehouse": ctx.warehouse, - "based_on": frappe.get_settings("Stock Settings", "pick_serial_and_batch_based_on"), + "based_on": frappe.get_single_value("Stock Settings", "pick_serial_and_batch_based_on"), } ) @@ -591,7 +591,7 @@ def get_item_warehouse_(ctx: ItemDetailsCtx, item, overwrite_warehouse, defaults warehouse = ctx.warehouse if not warehouse: - default_warehouse = frappe.get_settings("Stock Settings", "default_warehouse") + default_warehouse = frappe.get_single_value("Stock Settings", "default_warehouse") if frappe.db.get_value("Warehouse", default_warehouse, "company") == ctx.company: return default_warehouse diff --git a/erpnext/stock/serial_batch_bundle.py b/erpnext/stock/serial_batch_bundle.py index 778accad396..eaea590971d 100644 --- a/erpnext/stock/serial_batch_bundle.py +++ b/erpnext/stock/serial_batch_bundle.py @@ -151,12 +151,14 @@ class SerialBatchBundle: if ( self.item_details.has_batch_no and not self.item_details.batch_number_series - and not frappe.get_settings("Stock Settings", "naming_series_prefix") + and not frappe.get_single_value("Stock Settings", "naming_series_prefix") ): msg += f". If you want auto pick batch bundle, then kindly set Batch Number Series in Item {self.item_code}" elif self.sle.actual_qty < 0: - if not frappe.get_settings("Stock Settings", "auto_create_serial_and_batch_bundle_for_outward"): + if not frappe.get_single_value( + "Stock Settings", "auto_create_serial_and_batch_bundle_for_outward" + ): msg += ". If you want auto pick serial/batch bundle, then kindly enable 'Auto Create Serial and Batch Bundle' in Stock Settings." if msg: @@ -185,7 +187,7 @@ class SerialBatchBundle: if self.sle.actual_qty < 0 and self.is_material_transfer(): values_to_update["valuation_rate"] = flt(sn_doc.avg_rate) - if not frappe.get_settings( + if not frappe.get_single_value( "Stock Settings", "do_not_update_serial_batch_on_creation_of_auto_bundle" ): if sn_doc.has_serial_no: @@ -251,7 +253,9 @@ class SerialBatchBundle: and ( self.item_details.create_new_batch or ( - frappe.get_settings("Stock Settings", "auto_create_serial_and_batch_bundle_for_outward") + frappe.get_single_value( + "Stock Settings", "auto_create_serial_and_batch_bundle_for_outward" + ) and self.sle.actual_qty < 0 ) ) @@ -720,7 +724,7 @@ class BatchNoValuation(DeprecatedBatchNoValuation): self.batchwise_valuation_batches = [] self.non_batchwise_valuation_batches = [] - if get_valuation_method(self.sle.item_code) == "Moving Average" and frappe.get_settings( + if get_valuation_method(self.sle.item_code) == "Moving Average" and frappe.get_single_value( "Stock Settings", "do_not_use_batchwise_valuation" ): self.non_batchwise_valuation_batches = self.batches @@ -1025,7 +1029,7 @@ class SerialBatchCreation: "item_code": self.item_code, "warehouse": self.warehouse, "qty": abs(self.actual_qty) if self.actual_qty else 0, - "based_on": frappe.get_settings("Stock Settings", "pick_serial_and_batch_based_on"), + "based_on": frappe.get_single_value("Stock Settings", "pick_serial_and_batch_based_on"), } ) diff --git a/erpnext/stock/stock_balance.py b/erpnext/stock/stock_balance.py index 135b9097c12..e650fb607ba 100644 --- a/erpnext/stock/stock_balance.py +++ b/erpnext/stock/stock_balance.py @@ -15,7 +15,7 @@ def repost(only_actual=False, allow_negative_stock=False, allow_zero_rate=False, frappe.db.auto_commit_on_many_writes = 1 if allow_negative_stock: - existing_allow_negative_stock = frappe.get_settings("Stock Settings", "allow_negative_stock") + existing_allow_negative_stock = frappe.get_single_value("Stock Settings", "allow_negative_stock") frappe.db.set_single_value("Stock Settings", "allow_negative_stock", 1) item_warehouses = frappe.db.sql( diff --git a/erpnext/stock/utils.py b/erpnext/stock/utils.py index b85956a35fa..9d5d9f7c49b 100644 --- a/erpnext/stock/utils.py +++ b/erpnext/stock/utils.py @@ -252,7 +252,7 @@ def get_incoming_rate(args, raise_error_if_no_rate=True): "Item", args.get("item_code"), ["has_serial_no", "has_batch_no"], as_dict=1 ) - use_moving_avg_for_batch = frappe.get_settings("Stock Settings", "do_not_use_batchwise_valuation") + use_moving_avg_for_batch = frappe.get_single_value("Stock Settings", "do_not_use_batchwise_valuation") if isinstance(args, dict): args = frappe._dict(args) diff --git a/erpnext/utilities/transaction_base.py b/erpnext/utilities/transaction_base.py index 2384529c5ee..731e94723d5 100644 --- a/erpnext/utilities/transaction_base.py +++ b/erpnext/utilities/transaction_base.py @@ -354,7 +354,7 @@ class TransactionBase(StatusUpdater): self.set_rate_based_on_price_list(item_obj, item_details) def add_taxes_from_item_template(self, item_obj: object, item_details: dict) -> None: - if item_details.item_tax_rate and frappe.get_settings( + if item_details.item_tax_rate and frappe.get_single_value( "Accounts Settings", "add_taxes_from_item_tax_template" ): item_tax_template = frappe.json.loads(item_details.item_tax_rate) From d25021d4885a34b1dd72ed4642250bc55c716744 Mon Sep 17 00:00:00 2001 From: FATHIH MOHAMMED <99068504+FathihMohammed@users.noreply.github.com> Date: Sat, 17 May 2025 10:54:23 +0000 Subject: [PATCH 19/20] fix(report): include descendants when filtering by parent item group (cherry picked from commit d21bfa219d75779a005fa93d81708b2064bfdd0b) --- .../item_wise_sales_register/item_wise_sales_register.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.py b/erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.py index 6190f0b0db8..a88a36c642c 100644 --- a/erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.py +++ b/erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.py @@ -6,6 +6,7 @@ import frappe from frappe import _ from frappe.model.meta import get_field_precision from frappe.utils import cstr, flt +from frappe.utils.nestedset import get_descendants_of from frappe.utils.xlsxutils import handle_html from pypika import Order @@ -376,7 +377,12 @@ def apply_conditions(query, si, sii, filters, additional_conditions=None): query = query.where(sii.item_code == filters.get("item_code")) if filters.get("item_group"): - query = query.where(sii.item_group == filters.get("item_group")) + if frappe.db.get_value("Item Group", filters.get("item_group"), "is_group"): + item_groups = get_descendants_of("Item Group", filters.get("item_group")) + item_groups.append(filters.get("item_group")) + query = query.where(sii.item_group.isin(item_groups)) + else: + query = query.where(sii.item_group == filters.get("item_group")) if filters.get("income_account"): query = query.where( From e1ae650d45ad91f8dc9fe033d804ef503eac3657 Mon Sep 17 00:00:00 2001 From: Debin Robert <69695920+debinnn@users.noreply.github.com> Date: Tue, 20 May 2025 11:10:04 +0530 Subject: [PATCH 20/20] refactor: ensure end date is after start date on work order --- erpnext/manufacturing/doctype/work_order/work_order.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/erpnext/manufacturing/doctype/work_order/work_order.py b/erpnext/manufacturing/doctype/work_order/work_order.py index 969375c36bf..d8da681fba0 100644 --- a/erpnext/manufacturing/doctype/work_order/work_order.py +++ b/erpnext/manufacturing/doctype/work_order/work_order.py @@ -189,6 +189,7 @@ class WorkOrder(Document): self.reset_use_multi_level_bom() self.set_reserve_stock() self.validate_fg_warehouse_for_reservation() + self.validate_dates() if self.source_warehouse: self.set_warehouses() @@ -198,6 +199,11 @@ class WorkOrder(Document): self.set_required_items(reset_only_qty=len(self.get("required_items"))) self.enable_auto_reserve_stock() + def validate_dates(self): + if self.actual_start_date and self.actual_end_date: + if self.actual_end_date < self.actual_start_date: + 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: warehouses = frappe.get_all(