From 8da5752059588111dab107b4087d0b296ae79207 Mon Sep 17 00:00:00 2001 From: sokumon Date: Wed, 16 Apr 2025 11:03:22 +0530 Subject: [PATCH 01/41] fix: convert to text before setting value --- erpnext/buying/doctype/supplier/supplier.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/buying/doctype/supplier/supplier.js b/erpnext/buying/doctype/supplier/supplier.js index b74474be89e..c5f46e1207d 100644 --- a/erpnext/buying/doctype/supplier/supplier.js +++ b/erpnext/buying/doctype/supplier/supplier.js @@ -160,7 +160,7 @@ frappe.ui.form.on("Supplier", { address_dict: frm.doc.supplier_primary_address, }, callback: function (r) { - frm.set_value("primary_address", r.message); + frm.set_value("primary_address", frappe.utils.html2text(r.message)); }, }); } From b570d97b4d5ca4ea753cfe11d321fe9ffd1bc52c Mon Sep 17 00:00:00 2001 From: venkat102 Date: Thu, 24 Apr 2025 11:33:18 +0530 Subject: [PATCH 02/41] fix(payment request): get advance amount based on transaction currency --- .../accounts/doctype/payment_request/payment_request.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/erpnext/accounts/doctype/payment_request/payment_request.py b/erpnext/accounts/doctype/payment_request/payment_request.py index bd24c09ce57..e82cbdc8be1 100644 --- a/erpnext/accounts/doctype/payment_request/payment_request.py +++ b/erpnext/accounts/doctype/payment_request/payment_request.py @@ -672,7 +672,12 @@ def get_amount(ref_doc, payment_account=None): dt = ref_doc.doctype if dt in ["Sales Order", "Purchase Order"]: - grand_total = (flt(ref_doc.rounded_total) or flt(ref_doc.grand_total)) - ref_doc.advance_paid + advance_amount = flt(ref_doc.advance_paid) + if ref_doc.party_account_currency != ref_doc.currency: + advance_amount = flt(flt(ref_doc.advance_paid) / ref_doc.conversion_rate) + + grand_total = (flt(ref_doc.rounded_total) or flt(ref_doc.grand_total)) - advance_amount + elif dt in ["Sales Invoice", "Purchase Invoice"]: if ( dt == "Sales Invoice" From 88926eb2a7bb8e6814064236a133b3b3bbc9301b Mon Sep 17 00:00:00 2001 From: Mihir Kandoi Date: Thu, 24 Apr 2025 16:10:12 +0530 Subject: [PATCH 03/41] fix: price currency in supplier quotation comparison --- .../supplier_quotation_comparison.py | 24 +++++++------------ 1 file changed, 8 insertions(+), 16 deletions(-) diff --git a/erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.py b/erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.py index 085f30f84d9..ad181802c79 100644 --- a/erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.py +++ b/erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.py @@ -83,19 +83,11 @@ def prepare_data(supplier_quotation_data, filters): supplier_qty_price_map = {} group_by_field = "supplier_name" if filters.get("group_by") == "Group by Supplier" else "item_code" - company_currency = frappe.db.get_default("currency") float_precision = cint(frappe.db.get_default("float_precision")) or 2 for data in supplier_quotation_data: group = data.get(group_by_field) # get item or supplier value for this row - supplier_currency = frappe.db.get_value("Supplier", data.get("supplier_name"), "default_currency") - - if supplier_currency: - exchange_rate = get_exchange_rate(supplier_currency, company_currency) - else: - exchange_rate = 1 - row = { "item_code": "" if group_by_field == "item_code" @@ -103,7 +95,7 @@ def prepare_data(supplier_quotation_data, filters): "supplier_name": "" if group_by_field == "supplier_name" else data.get("supplier_name"), "quotation": data.get("parent"), "qty": data.get("qty"), - "price": flt(data.get("amount") * exchange_rate, float_precision), + "price": flt(data.get("amount"), float_precision), "uom": data.get("uom"), "price_list_currency": data.get("price_list_currency"), "currency": data.get("currency"), @@ -209,6 +201,13 @@ def get_columns(filters): columns = [ {"fieldname": "uom", "label": _("UOM"), "fieldtype": "Link", "options": "UOM", "width": 90}, {"fieldname": "qty", "label": _("Quantity"), "fieldtype": "Float", "width": 80}, + { + "fieldname": "stock_uom", + "label": _("Stock UOM"), + "fieldtype": "Link", + "options": "UOM", + "width": 90, + }, { "fieldname": "currency", "label": _("Currency"), @@ -223,13 +222,6 @@ def get_columns(filters): "options": "currency", "width": 110, }, - { - "fieldname": "stock_uom", - "label": _("Stock UOM"), - "fieldtype": "Link", - "options": "UOM", - "width": 90, - }, { "fieldname": "price_per_unit", "label": _("Price per Unit (Stock UOM)"), From 5fe247557ef65034e69879db57a6f3d875a2aa4a Mon Sep 17 00:00:00 2001 From: ljain112 Date: Thu, 24 Apr 2025 18:54:03 +0530 Subject: [PATCH 04/41] fix: compare total debit/credit with precision for Inter Company Journal Entry --- .../accounts/doctype/journal_entry/journal_entry.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/erpnext/accounts/doctype/journal_entry/journal_entry.py b/erpnext/accounts/doctype/journal_entry/journal_entry.py index 37a6d21da27..e26558b4317 100644 --- a/erpnext/accounts/doctype/journal_entry/journal_entry.py +++ b/erpnext/accounts/doctype/journal_entry/journal_entry.py @@ -253,11 +253,20 @@ class JournalEntry(AccountsController): def validate_inter_company_accounts(self): if self.voucher_type == "Inter Company Journal Entry" and self.inter_company_journal_entry_reference: - doc = frappe.get_doc("Journal Entry", self.inter_company_journal_entry_reference) + doc = frappe.db.get_value( + "Journal Entry", + self.inter_company_journal_entry_reference, + ["company", "total_debit", "total_credit"], + as_dict=True, + ) account_currency = frappe.get_cached_value("Company", self.company, "default_currency") previous_account_currency = frappe.get_cached_value("Company", doc.company, "default_currency") if account_currency == previous_account_currency: - if self.total_credit != doc.total_debit or self.total_debit != doc.total_credit: + credit_precision = self.precision("total_credit") + debit_precision = self.precision("total_debit") + if (flt(self.total_credit, credit_precision) != flt(doc.total_debit, debit_precision)) or ( + flt(self.total_debit, debit_precision) != flt(doc.total_credit, credit_precision) + ): frappe.throw(_("Total Credit/ Debit Amount should be same as linked Journal Entry")) def validate_depr_entry_voucher_type(self): From 3790c6c551dd03e9b9235a8732c526dd25a3e14a Mon Sep 17 00:00:00 2001 From: Mihir Kandoi Date: Fri, 25 Apr 2025 14:06:31 +0530 Subject: [PATCH 05/41] fix: add transaction_date in field_no_map when creating PO from SQ --- erpnext/buying/doctype/supplier_quotation/supplier_quotation.py | 1 + 1 file changed, 1 insertion(+) diff --git a/erpnext/buying/doctype/supplier_quotation/supplier_quotation.py b/erpnext/buying/doctype/supplier_quotation/supplier_quotation.py index 0829b27151f..84f9a1657c7 100644 --- a/erpnext/buying/doctype/supplier_quotation/supplier_quotation.py +++ b/erpnext/buying/doctype/supplier_quotation/supplier_quotation.py @@ -234,6 +234,7 @@ def make_purchase_order(source_name, target_doc=None): { "Supplier Quotation": { "doctype": "Purchase Order", + "field_no_map": ["transaction_date"], "validation": { "docstatus": ["=", 1], }, From c28596f69d7462ba366b8e2d58420221b59e2086 Mon Sep 17 00:00:00 2001 From: RitvikSardana Date: Fri, 25 Apr 2025 15:31:02 +0530 Subject: [PATCH 06/41] fix: dont pass ignore permissions param to whitelist methods --- erpnext/accounts/doctype/journal_entry/journal_entry.py | 6 ++---- erpnext/accounts/doctype/payment_entry/payment_entry.py | 8 +++----- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/erpnext/accounts/doctype/journal_entry/journal_entry.py b/erpnext/accounts/doctype/journal_entry/journal_entry.py index d55798c25fc..d8202cd08d2 100644 --- a/erpnext/accounts/doctype/journal_entry/journal_entry.py +++ b/erpnext/accounts/doctype/journal_entry/journal_entry.py @@ -1235,9 +1235,7 @@ class JournalEntry(AccountsController): @frappe.whitelist() -def get_default_bank_cash_account( - company, account_type=None, mode_of_payment=None, account=None, ignore_permissions=False -): +def get_default_bank_cash_account(company, account_type=None, mode_of_payment=None, account=None): from erpnext.accounts.doctype.sales_invoice.sales_invoice import get_bank_cash_account if mode_of_payment: @@ -1275,7 +1273,7 @@ def get_default_bank_cash_account( return frappe._dict( { "account": account, - "balance": get_balance_on(account, ignore_account_permission=ignore_permissions), + "balance": get_balance_on(account), "account_currency": account_details.account_currency, "account_type": account_details.account_type, } diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry.py b/erpnext/accounts/doctype/payment_entry/payment_entry.py index 402d4539142..91dd4bf0abb 100644 --- a/erpnext/accounts/doctype/payment_entry/payment_entry.py +++ b/erpnext/accounts/doctype/payment_entry/payment_entry.py @@ -2848,7 +2848,6 @@ def get_payment_entry( party_type=None, payment_type=None, reference_date=None, - ignore_permissions=False, created_from_payment_request=False, ): doc = frappe.get_doc(dt, dn) @@ -2870,14 +2869,14 @@ def get_payment_entry( ) # bank or cash - bank = get_bank_cash_account(doc, bank_account, ignore_permissions=ignore_permissions) + bank = get_bank_cash_account(doc, bank_account) # if default bank or cash account is not set in company master and party has default company bank account, fetch it if party_type in ["Customer", "Supplier"] and not bank: party_bank_account = get_party_bank_account(party_type, doc.get(scrub(party_type))) if party_bank_account: account = frappe.db.get_value("Bank Account", party_bank_account, "account") - bank = get_bank_cash_account(doc, account, ignore_permissions=ignore_permissions) + bank = get_bank_cash_account(doc, account) paid_amount, received_amount = set_paid_amount_and_received_amount( dt, party_account_currency, bank, outstanding_amount, payment_type, bank_amount, doc @@ -3183,13 +3182,12 @@ def update_accounting_dimensions(pe, doc): pe.set(dimension, doc.get(dimension)) -def get_bank_cash_account(doc, bank_account, ignore_permissions=False): +def get_bank_cash_account(doc, bank_account): bank = get_default_bank_cash_account( doc.company, "Bank", mode_of_payment=doc.get("mode_of_payment"), account=bank_account, - ignore_permissions=ignore_permissions, ) if not bank: From acd152978092d7fcb9a6b82cf47be7d46a4470d8 Mon Sep 17 00:00:00 2001 From: Mihir Kandoi Date: Mon, 28 Apr 2025 17:43:19 +0530 Subject: [PATCH 07/41] fix: test case --- .../doctype/supplier_quotation/test_supplier_quotation.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/erpnext/buying/doctype/supplier_quotation/test_supplier_quotation.py b/erpnext/buying/doctype/supplier_quotation/test_supplier_quotation.py index dad2cba4877..e170d4b8ec6 100644 --- a/erpnext/buying/doctype/supplier_quotation/test_supplier_quotation.py +++ b/erpnext/buying/doctype/supplier_quotation/test_supplier_quotation.py @@ -3,7 +3,9 @@ import frappe +import frappe.utils from frappe.tests import IntegrationTestCase, UnitTestCase +from frappe.utils import add_days, today from erpnext.controllers.accounts_controller import InvalidQtyError @@ -47,6 +49,6 @@ class TestPurchaseOrder(IntegrationTestCase): for doc in po.get("items"): if doc.get("item_code"): - doc.set("schedule_date", "2013-04-12") + doc.set("schedule_date", add_days(today(), 1)) po.insert() From 9e640341fd8410b6e2fe4bfddad8188ceb0134ab Mon Sep 17 00:00:00 2001 From: Mihir Kandoi Date: Mon, 28 Apr 2025 17:49:27 +0530 Subject: [PATCH 08/41] fix: remove unused import --- .../buying/doctype/supplier_quotation/test_supplier_quotation.py | 1 - 1 file changed, 1 deletion(-) diff --git a/erpnext/buying/doctype/supplier_quotation/test_supplier_quotation.py b/erpnext/buying/doctype/supplier_quotation/test_supplier_quotation.py index e170d4b8ec6..0e4f70b9dcb 100644 --- a/erpnext/buying/doctype/supplier_quotation/test_supplier_quotation.py +++ b/erpnext/buying/doctype/supplier_quotation/test_supplier_quotation.py @@ -3,7 +3,6 @@ import frappe -import frappe.utils from frappe.tests import IntegrationTestCase, UnitTestCase from frappe.utils import add_days, today From 3d36d0b1df46008d9cec73393968a77d06aafced Mon Sep 17 00:00:00 2001 From: rohitwaghchaure Date: Mon, 28 Apr 2025 18:16:52 +0530 Subject: [PATCH 09/41] fix: validation if no stock ledger entries against stock reco (#47292) --- .../doctype/stock_reconciliation/stock_reconciliation.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py index c3d0480e820..0c28afe07e4 100644 --- a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py +++ b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py @@ -726,6 +726,12 @@ class StockReconciliation(StockController): ) self.make_sl_entries(sl_entries, allow_negative_stock=allow_negative_stock) + elif self.docstatus == 1: + frappe.throw( + _( + "No stock ledger entries were created. Please set the quantity or valuation rate for the items properly and try again." + ) + ) def make_adjustment_entry(self, row, sl_entries): from erpnext.stock.stock_ledger import get_stock_value_difference From 0701a8cf5a1a410f1ce587e06258bbe8d08fa9c8 Mon Sep 17 00:00:00 2001 From: rohitwaghchaure Date: Mon, 28 Apr 2025 19:38:37 +0530 Subject: [PATCH 10/41] =?UTF-8?q?fix:=20QI=20reference=20not=20set=20if=20?= =?UTF-8?q?'Action=20If=20Quality=20Inspection=20Is=20Not=20Sub=E2=80=A6?= =?UTF-8?q?=20(#47294)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fix: qi reference not set if 'Action If Quality Inspection Is Not Submitted' is blank --- .../doctype/quality_inspection/quality_inspection.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/erpnext/stock/doctype/quality_inspection/quality_inspection.py b/erpnext/stock/doctype/quality_inspection/quality_inspection.py index 8aed2277de3..021b7b1cf17 100644 --- a/erpnext/stock/doctype/quality_inspection/quality_inspection.py +++ b/erpnext/stock/doctype/quality_inspection/quality_inspection.py @@ -203,10 +203,11 @@ class QualityInspection(Document): self.get_item_specification_details() def on_update(self): - if ( - frappe.db.get_single_value("Stock Settings", "action_if_quality_inspection_is_not_submitted") - == "Warn" - ): + action_if_qi_in_draft = frappe.db.get_single_value( + "Stock Settings", "action_if_quality_inspection_is_not_submitted" + ) + + if not action_if_qi_in_draft or action_if_qi_in_draft == "Warn": self.update_qc_reference() def on_submit(self): From bfc4ce1d5dd67a7b2a3b1d7c931077446bbdd036 Mon Sep 17 00:00:00 2001 From: Mihir Kandoi Date: Mon, 28 Apr 2025 21:09:12 +0530 Subject: [PATCH 11/41] fix: fix sub assembly qty calculation in production plan when bom level >= 1 --- erpnext/manufacturing/doctype/production_plan/production_plan.py | 1 + 1 file changed, 1 insertion(+) diff --git a/erpnext/manufacturing/doctype/production_plan/production_plan.py b/erpnext/manufacturing/doctype/production_plan/production_plan.py index 8ba9afe9fc6..39ea5a71440 100644 --- a/erpnext/manufacturing/doctype/production_plan/production_plan.py +++ b/erpnext/manufacturing/doctype/production_plan/production_plan.py @@ -1804,6 +1804,7 @@ def get_sub_assembly_items( continue else: stock_qty = stock_qty - _bin_dict.projected_qty + sub_assembly_items.append(d.item_code) elif warehouse: bin_details.setdefault(d.item_code, get_bin_details(d, company, for_warehouse=warehouse)) From ee10afc0747a15f7da623ab6e1c5dceb0364424a Mon Sep 17 00:00:00 2001 From: Mihir Kandoi Date: Mon, 28 Apr 2025 21:29:47 +0530 Subject: [PATCH 12/41] fix: logical error --- .../manufacturing/doctype/production_plan/production_plan.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/manufacturing/doctype/production_plan/production_plan.py b/erpnext/manufacturing/doctype/production_plan/production_plan.py index 39ea5a71440..bddf43a9dcc 100644 --- a/erpnext/manufacturing/doctype/production_plan/production_plan.py +++ b/erpnext/manufacturing/doctype/production_plan/production_plan.py @@ -1804,7 +1804,7 @@ def get_sub_assembly_items( continue else: stock_qty = stock_qty - _bin_dict.projected_qty - sub_assembly_items.append(d.item_code) + sub_assembly_items.append(d.item_code) elif warehouse: bin_details.setdefault(d.item_code, get_bin_details(d, company, for_warehouse=warehouse)) From ab7973231aa6879a0a1a0ee31fb1f65f053b7527 Mon Sep 17 00:00:00 2001 From: Mihir Kandoi Date: Mon, 28 Apr 2025 23:31:57 +0530 Subject: [PATCH 13/41] fix: add fetch from to item name in rfq item doctype --- .../request_for_quotation_item.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/erpnext/buying/doctype/request_for_quotation_item/request_for_quotation_item.json b/erpnext/buying/doctype/request_for_quotation_item/request_for_quotation_item.json index bb50e3d288c..f82528e06c6 100644 --- a/erpnext/buying/doctype/request_for_quotation_item/request_for_quotation_item.json +++ b/erpnext/buying/doctype/request_for_quotation_item/request_for_quotation_item.json @@ -63,6 +63,7 @@ "fieldtype": "Column Break" }, { + "fetch_from": "item_code.item_name", "fieldname": "item_name", "fieldtype": "Data", "in_global_search": 1, @@ -261,15 +262,16 @@ "index_web_pages_for_search": 1, "istable": 1, "links": [], - "modified": "2024-03-27 13:10:33.272106", + "modified": "2025-04-28 23:30:22.927989", "modified_by": "Administrator", "module": "Buying", "name": "Request for Quotation Item", "naming_rule": "Random", "owner": "Administrator", "permissions": [], + "row_format": "Dynamic", "sort_field": "creation", "sort_order": "DESC", "states": [], "track_changes": 1 -} \ No newline at end of file +} From bd727e069be72e3cb819670ced225998e0b6c704 Mon Sep 17 00:00:00 2001 From: Mihir Kandoi Date: Mon, 28 Apr 2025 23:51:51 +0530 Subject: [PATCH 14/41] fix: commas in rfq portal js --- erpnext/templates/includes/rfq.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/erpnext/templates/includes/rfq.js b/erpnext/templates/includes/rfq.js index 37beb5a584b..cc998a90030 100644 --- a/erpnext/templates/includes/rfq.js +++ b/erpnext/templates/includes/rfq.js @@ -31,8 +31,8 @@ rfq = class rfq { var me = this; $('.rfq-items').on("change", ".rfq-qty", function(){ me.idx = parseFloat($(this).attr('data-idx')); - me.qty = parseFloat($(this).val()) || 0; - me.rate = parseFloat($(repl('.rfq-rate[data-idx=%(idx)s]',{'idx': me.idx})).val()); + me.qty = parseFloat(flt($(this).val())) || 0; + me.rate = parseFloat(flt($(repl('.rfq-rate[data-idx=%(idx)s]',{'idx': me.idx})).val())); me.update_qty_rate(); $(this).val(format_number(me.qty, doc.number_format, 2)); }) @@ -42,8 +42,8 @@ rfq = class rfq { var me = this; $(".rfq-items").on("change", ".rfq-rate", function(){ me.idx = parseFloat($(this).attr('data-idx')); - me.rate = parseFloat($(this).val()) || 0; - me.qty = parseFloat($(repl('.rfq-qty[data-idx=%(idx)s]',{'idx': me.idx})).val()); + me.rate = parseFloat(flt($(this).val())) || 0; + me.qty = parseFloat(flt($(repl('.rfq-qty[data-idx=%(idx)s]',{'idx': me.idx})).val())); me.update_qty_rate(); $(this).val(format_number(me.rate, doc.number_format, 2)); }) From 9dee4ac891cac2b9121c3d459554b65c52cb4198 Mon Sep 17 00:00:00 2001 From: Khushi Rawat <142375893+khushi8112@users.noreply.github.com> Date: Tue, 29 Apr 2025 11:34:35 +0530 Subject: [PATCH 15/41] fix: prevent cancellation of last asset movement (#47291) * fix: prevent cancellation of last asset movement * test: movement cancellation * fix: allow cancellation of asset movement when cancelling asset --- .../doctype/asset_movement/asset_movement.py | 12 ++++++ .../asset_movement/test_asset_movement.py | 39 +++++++++++++++++++ 2 files changed, 51 insertions(+) diff --git a/erpnext/assets/doctype/asset_movement/asset_movement.py b/erpnext/assets/doctype/asset_movement/asset_movement.py index 29c8b3c39ef..5fa425d46e5 100644 --- a/erpnext/assets/doctype/asset_movement/asset_movement.py +++ b/erpnext/assets/doctype/asset_movement/asset_movement.py @@ -152,6 +152,9 @@ class AssetMovement(Document): """, args, ) + + self.validate_movement_cancellation(d, latest_movement_entry) + if latest_movement_entry: current_location = latest_movement_entry[0][0] current_employee = latest_movement_entry[0][1] @@ -179,3 +182,12 @@ class AssetMovement(Document): d.asset, _("Asset issued to Employee {0}").format(get_link_to_form("Employee", current_employee)), ) + + def validate_movement_cancellation(self, row, latest_movement_entry): + asset_doc = frappe.get_doc("Asset", row.asset) + if not latest_movement_entry and asset_doc.docstatus == 1: + frappe.throw( + _( + "Asset {0} has only one movement record. Please create another movement before deleting this one to maintain asset tracking." + ).format(row.asset) + ) diff --git a/erpnext/assets/doctype/asset_movement/test_asset_movement.py b/erpnext/assets/doctype/asset_movement/test_asset_movement.py index 6ecfa2b6a6f..184d749532a 100644 --- a/erpnext/assets/doctype/asset_movement/test_asset_movement.py +++ b/erpnext/assets/doctype/asset_movement/test_asset_movement.py @@ -147,6 +147,45 @@ class TestAssetMovement(IntegrationTestCase): movement1.cancel() self.assertEqual(frappe.db.get_value("Asset", asset.name, "location"), "Test Location") + def test_last_movement_cancellation_validation(self): + pr = make_purchase_receipt(item_code="Macbook Pro", qty=1, rate=100000.0, location="Test Location") + + asset_name = frappe.db.get_value("Asset", {"purchase_receipt": pr.name}, "name") + asset = frappe.get_doc("Asset", asset_name) + asset.calculate_depreciation = 1 + asset.available_for_use_date = "2020-06-06" + asset.purchase_date = "2020-06-06" + asset.append( + "finance_books", + { + "expected_value_after_useful_life": 10000, + "next_depreciation_date": "2020-12-31", + "depreciation_method": "Straight Line", + "total_number_of_depreciations": 3, + "frequency_of_depreciation": 10, + }, + ) + if asset.docstatus == 0: + asset.submit() + + AssetMovement = frappe.qb.DocType("Asset Movement") + AssetMovementItem = frappe.qb.DocType("Asset Movement Item") + + asset_movement = ( + frappe.qb.from_(AssetMovement) + .join(AssetMovementItem) + .on(AssetMovementItem.parent == AssetMovement.name) + .select(AssetMovement.name) + .where( + (AssetMovementItem.asset == asset.name) + & (AssetMovement.company == asset.company) + & (AssetMovement.docstatus == 1) + ) + ).run(as_dict=True) + + asset_movement_doc = frappe.get_doc("Asset Movement", asset_movement[0].name) + self.assertRaises(frappe.ValidationError, asset_movement_doc.cancel) + def create_asset_movement(**args): args = frappe._dict(args) From 47927b38a9aa185102a12688af4b1d784827f560 Mon Sep 17 00:00:00 2001 From: Mihir Kandoi Date: Tue, 29 Apr 2025 11:45:46 +0530 Subject: [PATCH 16/41] feat: change sabb qty automatically incase of internal transfer PR if sabb only has 1 batch (#47256) * feat: change sabb qty automatically incase of internal transfer PR if sabb only has 1 batch * fix: prevent creation of SABB on every save * perf: optimize code * fix: remove unnecessary conditon * refactor: change if to elif * fix: remove dn_item_qty and set to item.qty * test: added test --- erpnext/controllers/buying_controller.py | 22 ++++++++ erpnext/controllers/stock_controller.py | 10 +++- .../purchase_receipt/test_purchase_receipt.py | 55 +++++++++++++++++++ 3 files changed, 85 insertions(+), 2 deletions(-) diff --git a/erpnext/controllers/buying_controller.py b/erpnext/controllers/buying_controller.py index 6d75d8ff07c..602d6c955b3 100644 --- a/erpnext/controllers/buying_controller.py +++ b/erpnext/controllers/buying_controller.py @@ -98,7 +98,29 @@ class BuyingController(SubcontractingController): item.from_warehouse, type_of_transaction="Outward", do_not_submit=True, + qty=item.qty, ) + elif ( + not self.is_new() + and item.serial_and_batch_bundle + and next( + ( + old_item + for old_item in self.get_doc_before_save().items + if old_item.name == item.name and old_item.qty != item.qty + ), + None, + ) + and len( + sabe := frappe.get_all( + "Serial and Batch Entry", + filters={"parent": item.serial_and_batch_bundle, "serial_no": ["is", "not set"]}, + pluck="name", + ) + ) + == 1 + ): + frappe.set_value("Serial and Batch Entry", sabe[0], "qty", item.qty) def set_rate_for_standalone_debit_note(self): if self.get("is_return") and self.get("update_stock") and not self.return_against: diff --git a/erpnext/controllers/stock_controller.py b/erpnext/controllers/stock_controller.py index 052264d9320..76fd74d9234 100644 --- a/erpnext/controllers/stock_controller.py +++ b/erpnext/controllers/stock_controller.py @@ -811,7 +811,7 @@ class StockController(AccountsController): ) def make_package_for_transfer( - self, serial_and_batch_bundle, warehouse, type_of_transaction=None, do_not_submit=None + self, serial_and_batch_bundle, warehouse, type_of_transaction=None, do_not_submit=None, qty=0 ): return make_bundle_for_material_transfer( is_new=self.is_new(), @@ -822,6 +822,7 @@ class StockController(AccountsController): warehouse=warehouse, type_of_transaction=type_of_transaction, do_not_submit=do_not_submit, + qty=qty, ) def get_sl_entries(self, d, args): @@ -1818,15 +1819,20 @@ def make_bundle_for_material_transfer(**kwargs): kwargs.type_of_transaction = "Inward" bundle_doc = frappe.copy_doc(bundle_doc) + bundle_doc.docstatus = 0 bundle_doc.warehouse = kwargs.warehouse bundle_doc.type_of_transaction = kwargs.type_of_transaction bundle_doc.voucher_type = kwargs.voucher_type bundle_doc.voucher_no = "" if kwargs.is_new or kwargs.docstatus == 2 else kwargs.voucher_no bundle_doc.is_cancelled = 0 + qty = 0 + if len(bundle_doc.entries) == 1 and kwargs.qty < bundle_doc.total_qty and not bundle_doc.has_serial_no: + qty = kwargs.qty + for row in bundle_doc.entries: row.is_outward = 0 - row.qty = abs(row.qty) + row.qty = abs(qty or row.qty) row.stock_value_difference = abs(row.stock_value_difference) if kwargs.type_of_transaction == "Outward": row.qty *= -1 diff --git a/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py b/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py index 61d52b1ef36..5e0663ea89d 100644 --- a/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py +++ b/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py @@ -7,6 +7,8 @@ from frappe.utils import add_days, cint, cstr, flt, get_datetime, getdate, nowti from pypika import functions as fn import erpnext +import erpnext.controllers +import erpnext.controllers.status_updater from erpnext.accounts.doctype.account.test_account import get_inventory_account from erpnext.buying.doctype.supplier.test_supplier import create_supplier from erpnext.controllers.accounts_controller import InvalidQtyError @@ -4178,6 +4180,59 @@ class TestPurchaseReceipt(IntegrationTestCase): self.assertTrue(sles) + def test_internal_pr_qty_change_only_single_batch(self): + from erpnext.stock.doctype.delivery_note.delivery_note import make_inter_company_purchase_receipt + from erpnext.stock.doctype.delivery_note.test_delivery_note import create_delivery_note + + prepare_data_for_internal_transfer() + + def get_sabb_qty(sabb): + return frappe.get_value("Serial and Batch Bundle", sabb, "total_qty") + + item = make_item("Item with only Batch", {"has_batch_no": 1}) + item.create_new_batch = 1 + item.save() + + make_purchase_receipt( + item_code=item.item_code, + qty=10, + rate=100, + company="_Test Company with perpetual inventory", + warehouse="Stores - TCP1", + ) + + dn = create_delivery_note( + item_code=item.item_code, + qty=10, + rate=100, + company="_Test Company with perpetual inventory", + customer="_Test Internal Customer 2", + cost_center="Main - TCP1", + warehouse="Stores - TCP1", + target_warehouse="Work In Progress - TCP1", + ) + pr = make_inter_company_purchase_receipt(dn.name) + + pr.items[0].warehouse = "Stores - TCP1" + pr.items[0].qty = 8 + pr.save() + + # Test 1 - Check if SABB qty is changed on first save + self.assertEqual(abs(get_sabb_qty(pr.items[0].serial_and_batch_bundle)), 8) + + pr.items[0].qty = 6 + pr.items[0].received_qty = 6 + pr.save() + + # Test 2 - Check if SABB qty is changed when saved again + self.assertEqual(abs(get_sabb_qty(pr.items[0].serial_and_batch_bundle)), 6) + + pr.items[0].qty = 12 + pr.items[0].received_qty = 12 + + # Test 3 - OverAllowanceError should be thrown as qty is greater than qty in DN + self.assertRaises(erpnext.controllers.status_updater.OverAllowanceError, pr.submit) + def prepare_data_for_internal_transfer(): from erpnext.accounts.doctype.sales_invoice.test_sales_invoice import create_internal_supplier From 3bd149ec3a68343d6a5646327ada578f8ba2879f Mon Sep 17 00:00:00 2001 From: Frappe PR Bot Date: Tue, 29 Apr 2025 12:01:01 +0530 Subject: [PATCH 17/41] fix: Portuguese, Brazilian translations --- erpnext/locale/pt_BR.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/erpnext/locale/pt_BR.po b/erpnext/locale/pt_BR.po index ef5ac448116..b22334b3a02 100644 --- a/erpnext/locale/pt_BR.po +++ b/erpnext/locale/pt_BR.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: frappe\n" "Report-Msgid-Bugs-To: hello@frappe.io\n" "POT-Creation-Date: 2025-04-27 09:35+0000\n" -"PO-Revision-Date: 2025-04-28 06:21\n" +"PO-Revision-Date: 2025-04-29 06:31\n" "Last-Translator: hello@frappe.io\n" "Language-Team: Portuguese, Brazilian\n" "MIME-Version: 1.0\n" @@ -44133,7 +44133,7 @@ msgstr "Revisão e Ação" #: erpnext/quality_management/doctype/quality_procedure/quality_procedure.json #: erpnext/quality_management/doctype/quality_review/quality_review.json msgid "Reviews" -msgstr "" +msgstr "Rever" #. Label of the rgt (Int) field in DocType 'Account' #. Label of the rgt (Int) field in DocType 'Company' From d93b0af07c36a847dec8b8a64058fbcdd10951d9 Mon Sep 17 00:00:00 2001 From: Frappe PR Bot Date: Tue, 29 Apr 2025 12:01:05 +0530 Subject: [PATCH 18/41] fix: Persian translations --- erpnext/locale/fa.po | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/erpnext/locale/fa.po b/erpnext/locale/fa.po index d43812ffcd1..767c7a0d413 100644 --- a/erpnext/locale/fa.po +++ b/erpnext/locale/fa.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: frappe\n" "Report-Msgid-Bugs-To: hello@frappe.io\n" "POT-Creation-Date: 2025-04-27 09:35+0000\n" -"PO-Revision-Date: 2025-04-28 06:21\n" +"PO-Revision-Date: 2025-04-29 06:31\n" "Last-Translator: hello@frappe.io\n" "Language-Team: Persian\n" "MIME-Version: 1.0\n" @@ -12183,7 +12183,7 @@ msgstr "" #: erpnext/controllers/accounts_controller.py:2767 msgid "Conversion rate must be 1.00 if document currency is same as company currency" -msgstr "" +msgstr "اگر واحد پول سند با واحد پول شرکت یکسان باشد، نرخ تبدیل باید 1.00 باشد" #. Label of the clean_description_html (Check) field in DocType 'Stock #. Settings' @@ -24962,7 +24962,7 @@ msgstr "انبار نامعتبر" #: erpnext/accounts/doctype/bank_transaction/bank_transaction.py:355 msgid "Invalid amount in accounting entries of {} {} for Account {}: {}" -msgstr "" +msgstr "مبلغ نامعتبر در ثبت‌های حسابداری {} {} برای حساب {}: {}" #: erpnext/accounts/doctype/pricing_rule/pricing_rule.py:312 msgid "Invalid condition expression" @@ -26990,7 +26990,7 @@ msgstr "نرخ آیتم به صفر به‌روزرسانی شده است زیر #. Label of the finished_good (Link) field in DocType 'Job Card' #: erpnext/manufacturing/doctype/job_card/job_card.json msgid "Item to Manufacture" -msgstr "" +msgstr "آیتم برای تولید" #. Description of the 'Item' (Link) field in DocType 'BOM' #: erpnext/manufacturing/doctype/bom/bom.json @@ -27265,7 +27265,7 @@ msgstr "آیتم‌ها برای درخواست مواد خام" #: erpnext/stock/doctype/stock_entry/stock_entry.py:849 msgid "Items rate has been updated to zero as Allow Zero Valuation Rate is checked for the following items: {0}" -msgstr "نرخ آیتم‌ها به صفر به‌روزرسانی شده است زیرا نرخ ارزش گذاری مجاز صفر برای موارد زیر بررسی می‌شود: {0}" +msgstr "نرخ آیتم‌ها به صفر به‌روزرسانی شده است زیرا نرخ ارزش گذاری مجاز صفر برای آیتم‌های زیر بررسی می‌شود: {0}" #. Label of the items_to_be_repost (Code) field in DocType 'Repost Item #. Valuation' @@ -31799,7 +31799,7 @@ msgstr "بدون ملاحظات" #: erpnext/public/js/utils/unreconcile.js:147 msgid "No Selection" -msgstr "" +msgstr "بدون انتخاب" #: erpnext/controllers/sales_and_purchase_return.py:919 msgid "No Serial / Batches are available for return" @@ -37402,7 +37402,7 @@ msgstr "لطفاً انبار هدف را در کارت کار تنظیم کنی #: erpnext/manufacturing/doctype/job_card/job_card.py:1447 msgid "Please set the WIP Warehouse in the Job Card" -msgstr "" +msgstr "لطفاً انبار کار در حال انجام را در کارت کار تنظیم کنید" #: erpnext/accounts/doctype/gl_entry/gl_entry.py:174 msgid "Please set the cost center field in {0} or setup a default Cost Center for the Company." @@ -43848,7 +43848,7 @@ msgstr "محدود کردن" #. Item' #: erpnext/selling/doctype/party_specific_item/party_specific_item.json msgid "Restrict Items Based On" -msgstr "موارد را بر اساس محدود کنید" +msgstr "محدود کردن آیتم‌ها بر اساس" #. Label of the section_break_6 (Section Break) field in DocType 'Shipping #. Rule' @@ -44146,7 +44146,7 @@ msgstr "" #: erpnext/quality_management/doctype/quality_procedure/quality_procedure.json #: erpnext/quality_management/doctype/quality_review/quality_review.json msgid "Reviews" -msgstr "بررسی ها" +msgstr "" #. Label of the rgt (Int) field in DocType 'Account' #. Label of the rgt (Int) field in DocType 'Company' @@ -44916,11 +44916,11 @@ msgstr "ردیف #{idx}: {field_label} نمی‌تواند برای مورد {it #: erpnext/controllers/buying_controller.py:472 msgid "Row #{idx}: {field_label} is mandatory." -msgstr "" +msgstr "ردیف #{idx}: {field_label} اجباری است." #: erpnext/controllers/buying_controller.py:494 msgid "Row #{idx}: {field_label} is not allowed in Purchase Return." -msgstr "" +msgstr "ردیف #{idx}: {field_label} در مرجوعی خرید مجاز نیست." #: erpnext/controllers/buying_controller.py:227 msgid "Row #{idx}: {from_warehouse_field} and {to_warehouse_field} cannot be same." @@ -47034,7 +47034,7 @@ msgstr "یک تامین کننده انتخاب کنید" #: erpnext/stock/doctype/material_request/material_request.js:380 msgid "Select a Supplier from the Default Suppliers of the items below. On selection, a Purchase Order will be made against items belonging to the selected Supplier only." -msgstr "یک تامین کننده از تامین کنندگان پیش‌فرض موارد زیر انتخاب کنید. در صورت انتخاب، یک سفارش خرید فقط در برابر اقلام متعلق به تامین کننده منتخب انجام می‌شود." +msgstr "یک تامین کننده از تامین کنندگان پیش‌فرض آیتم‌های زیر انتخاب کنید. در صورت انتخاب، یک سفارش خرید فقط در برابر آیتم‌های متعلق به تامین کننده منتخب انجام می‌شود." #: erpnext/erpnext_integrations/doctype/plaid_settings/plaid_settings.js:161 msgid "Select a company" @@ -53544,7 +53544,7 @@ msgstr "" #: erpnext/stock/doctype/item/item.py:612 msgid "The items {0} and {1} are present in the following {2} :" -msgstr "موارد {0} و {1} در {2} زیر موجود هستند:" +msgstr "آیتم‌های {0} و {1} در {2} زیر موجود هستند:" #: erpnext/controllers/buying_controller.py:1024 msgid "The items {items} are not marked as {type_of} item. You can enable them as {type_of} item from their Item masters." From 7423e4187fd8bb43c1adda9ce4468c51d16df5b5 Mon Sep 17 00:00:00 2001 From: Diptanil Saha Date: Tue, 29 Apr 2025 12:13:12 +0530 Subject: [PATCH 19/41] fix: remove invalid email account creation (#47318) --- erpnext/setup/setup_wizard/operations/install_fixtures.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/erpnext/setup/setup_wizard/operations/install_fixtures.py b/erpnext/setup/setup_wizard/operations/install_fixtures.py index 84cf05f128e..7c62a425357 100644 --- a/erpnext/setup/setup_wizard/operations/install_fixtures.py +++ b/erpnext/setup/setup_wizard/operations/install_fixtures.py @@ -273,8 +273,6 @@ def install(country=None): {"doctype": "Issue Priority", "name": _("Low")}, {"doctype": "Issue Priority", "name": _("Medium")}, {"doctype": "Issue Priority", "name": _("High")}, - {"doctype": "Email Account", "email_id": "sales@example.com", "append_to": "Opportunity"}, - {"doctype": "Email Account", "email_id": "support@example.com", "append_to": "Issue"}, {"doctype": "Party Type", "party_type": "Customer", "account_type": "Receivable"}, {"doctype": "Party Type", "party_type": "Supplier", "account_type": "Payable"}, {"doctype": "Party Type", "party_type": "Employee", "account_type": "Payable"}, From 7499c25a3c7045e14ca0c4bd3985e7f408e3eead Mon Sep 17 00:00:00 2001 From: Mihir Kandoi Date: Tue, 29 Apr 2025 16:21:41 +0530 Subject: [PATCH 20/41] fix: validate if from and to time are present on submission of job card (#47325) --- erpnext/manufacturing/doctype/job_card/job_card.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/erpnext/manufacturing/doctype/job_card/job_card.py b/erpnext/manufacturing/doctype/job_card/job_card.py index bc8c2795b06..5efcbcc9fb5 100644 --- a/erpnext/manufacturing/doctype/job_card/job_card.py +++ b/erpnext/manufacturing/doctype/job_card/job_card.py @@ -740,6 +740,12 @@ class JobCard(Document): bold("Job Card"), get_link_to_form("Job Card", self.name) ) ) + else: + for row in self.time_logs: + if not row.from_time or not row.to_time: + frappe.throw( + _("Row #{0}: From Time and To Time fields are required").format(row.idx), + ) precision = self.precision("total_completed_qty") total_completed_qty = flt( From fc02a6510ee74191383107076c0b7fff3a1d0f91 Mon Sep 17 00:00:00 2001 From: Mihir Kandoi Date: Tue, 29 Apr 2025 16:24:51 +0530 Subject: [PATCH 21/41] fix: require email OR phone in shipment doctype not both (#47300) --- erpnext/stock/doctype/shipment/shipment.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/stock/doctype/shipment/shipment.js b/erpnext/stock/doctype/shipment/shipment.js index 8843d383531..7f1e1c8d729 100644 --- a/erpnext/stock/doctype/shipment/shipment.js +++ b/erpnext/stock/doctype/shipment/shipment.js @@ -162,7 +162,7 @@ frappe.ui.form.on("Shipment", { args: { contact: contact_name }, callback: function (r) { if (r.message) { - if (!(r.message.contact_email && (r.message.contact_phone || r.message.contact_mobile))) { + if (!(r.message.contact_email || r.message.contact_phone || r.message.contact_mobile)) { if (contact_type == "Delivery") { frm.set_value("delivery_contact_name", ""); frm.set_value("delivery_contact", ""); From b89bbe36d771aa97389f706a37cccc0fd656a373 Mon Sep 17 00:00:00 2001 From: Mihir Kandoi Date: Tue, 29 Apr 2025 16:25:45 +0530 Subject: [PATCH 22/41] feat: add stock uom read only field to stock reconciliation item doctype (#47299) --- .../stock_reconciliation_item.json | 15 +++++++++++++-- .../stock_reconciliation_item.py | 1 + 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/erpnext/stock/doctype/stock_reconciliation_item/stock_reconciliation_item.json b/erpnext/stock/doctype/stock_reconciliation_item/stock_reconciliation_item.json index 64108b44fc8..083a9340c09 100644 --- a/erpnext/stock/doctype/stock_reconciliation_item/stock_reconciliation_item.json +++ b/erpnext/stock/doctype/stock_reconciliation_item/stock_reconciliation_item.json @@ -14,6 +14,7 @@ "column_break_6", "warehouse", "qty", + "stock_uom", "valuation_rate", "amount", "allow_zero_valuation_rate", @@ -86,6 +87,16 @@ "in_list_view": 1, "label": "Quantity" }, + { + "columns": 2, + "fetch_from": "item_code.stock_uom", + "fieldname": "stock_uom", + "fieldtype": "Link", + "in_list_view": 1, + "label": "Stock UOM", + "options": "UOM", + "read_only": 1 + }, { "columns": 2, "fieldname": "valuation_rate", @@ -257,7 +268,7 @@ "grid_page_length": 50, "istable": 1, "links": [], - "modified": "2025-03-07 10:26:25.856337", + "modified": "2025-04-28 22:40:30.086415", "modified_by": "Administrator", "module": "Stock", "name": "Stock Reconciliation Item", @@ -269,4 +280,4 @@ "sort_order": "DESC", "states": [], "track_changes": 1 -} \ No newline at end of file +} diff --git a/erpnext/stock/doctype/stock_reconciliation_item/stock_reconciliation_item.py b/erpnext/stock/doctype/stock_reconciliation_item/stock_reconciliation_item.py index f2a9aeba8f4..aa0d8ee1b26 100644 --- a/erpnext/stock/doctype/stock_reconciliation_item/stock_reconciliation_item.py +++ b/erpnext/stock/doctype/stock_reconciliation_item/stock_reconciliation_item.py @@ -36,6 +36,7 @@ class StockReconciliationItem(Document): reconcile_all_serial_batch: DF.Check serial_and_batch_bundle: DF.Link | None serial_no: DF.LongText | None + stock_uom: DF.Link | None use_serial_batch_fields: DF.Check valuation_rate: DF.Currency warehouse: DF.Link From 05afad78fcac6fab1b3faa783428c464db7fb00d Mon Sep 17 00:00:00 2001 From: Khushi Rawat <142375893+khushi8112@users.noreply.github.com> Date: Tue, 29 Apr 2025 16:53:57 +0530 Subject: [PATCH 23/41] fix: allow selling asset at zero rate (#47326) --- erpnext/accounts/doctype/sales_invoice/sales_invoice.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py index d7ff5038aa7..45f79542555 100644 --- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py +++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py @@ -1421,7 +1421,7 @@ class SalesInvoice(SellingController): ) for item in self.get("items"): - if flt(item.base_net_amount, item.precision("base_net_amount")): + if flt(item.base_net_amount, item.precision("base_net_amount")) or item.is_fixed_asset: # Do not book income for transfer within same company if self.is_internal_transfer(): continue From 48e6fee6a1a4eee72229625c68ea1df08d7f72a8 Mon Sep 17 00:00:00 2001 From: Mihir Kandoi Date: Tue, 29 Apr 2025 18:19:45 +0530 Subject: [PATCH 24/41] fix: rfq error on item_code --- erpnext/utilities/transaction_base.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/erpnext/utilities/transaction_base.py b/erpnext/utilities/transaction_base.py index d6616bd7b9a..a3feecc36f7 100644 --- a/erpnext/utilities/transaction_base.py +++ b/erpnext/utilities/transaction_base.py @@ -296,6 +296,10 @@ class TransactionBase(StatusUpdater): item_details = self.fetch_item_details(item_obj) self.set_fetched_values(item_obj, item_details) + + if self.doctype == "Request for Quotation": + return + self.set_item_rate_and_discounts(item_obj, item_details) self.add_taxes_from_item_template(item_obj, item_details) self.add_free_item(item_obj, item_details) From ffdc4347e8a32a2bd88ad800b776b4dab97a8e04 Mon Sep 17 00:00:00 2001 From: rohitwaghchaure Date: Tue, 29 Apr 2025 22:59:22 +0530 Subject: [PATCH 25/41] fix: warning message before changing the valuation method (#47340) --- erpnext/stock/doctype/item/item.js | 29 +++++++++++++++++++++++++++++ erpnext/stock/doctype/item/item.py | 2 ++ 2 files changed, 31 insertions(+) diff --git a/erpnext/stock/doctype/item/item.js b/erpnext/stock/doctype/item/item.js index 675d49aab22..a764a006b0c 100644 --- a/erpnext/stock/doctype/item/item.js +++ b/erpnext/stock/doctype/item/item.js @@ -7,6 +7,35 @@ const SALES_DOCTYPES = ["Quotation", "Sales Order", "Delivery Note", "Sales Invo const PURCHASE_DOCTYPES = ["Purchase Order", "Purchase Receipt", "Purchase Invoice"]; frappe.ui.form.on("Item", { + valuation_method(frm) { + if (!frm.is_new() && frm.doc.valuation_method === "Moving Average") { + let stock_exists = frm.doc.__onload && frm.doc.__onload.stock_exists ? 1 : 0; + let current_valuation_method = frm.doc.__onload.current_valuation_method; + + if (stock_exists && current_valuation_method !== frm.doc.valuation_method) { + let msg = __( + "Changing the valuation method to Moving Average will affect new transactions. If backdated entries are added, earlier FIFO-based entries will be reposted, which may change closing balances." + ); + msg += "
"; + msg += __( + "Also you can't switch back to FIFO after setting the valuation method to Moving Average for this item." + ); + msg += "
"; + msg += __("Do you want to change valuation method?"); + + frappe.confirm( + msg, + () => { + frm.set_value("valuation_method", "Moving Average"); + }, + () => { + frm.set_value("valuation_method", current_valuation_method); + } + ); + } + } + }, + setup: function (frm) { frm.add_fetch("attribute", "numeric_values", "numeric_values"); frm.add_fetch("attribute", "from_range", "from_range"); diff --git a/erpnext/stock/doctype/item/item.py b/erpnext/stock/doctype/item/item.py index 25d2e5ec614..fe40f748646 100644 --- a/erpnext/stock/doctype/item/item.py +++ b/erpnext/stock/doctype/item/item.py @@ -33,6 +33,7 @@ from erpnext.controllers.item_variant import ( validate_item_variant_attributes, ) from erpnext.stock.doctype.item_default.item_default import ItemDefault +from erpnext.stock.utils import get_valuation_method class DuplicateReorderRows(frappe.ValidationError): @@ -153,6 +154,7 @@ class Item(Document): def onload(self): self.set_onload("stock_exists", self.stock_ledger_created()) self.set_onload("asset_naming_series", get_asset_naming_series()) + self.set_onload("current_valuation_method", get_valuation_method(self.name)) def autoname(self): if frappe.db.get_default("item_naming_by") == "Naming Series": From 88ebdffc9a4669320756bc46d5a7614f7237c9dd Mon Sep 17 00:00:00 2001 From: Frappe PR Bot Date: Wed, 30 Apr 2025 12:42:30 +0530 Subject: [PATCH 26/41] fix: Swedish translations --- erpnext/locale/sv.po | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/erpnext/locale/sv.po b/erpnext/locale/sv.po index 703fba17a44..d48da841eed 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-04-27 09:35+0000\n" -"PO-Revision-Date: 2025-04-28 06:21\n" +"PO-Revision-Date: 2025-04-30 07:12\n" "Last-Translator: hello@frappe.io\n" "Language-Team: Swedish\n" "MIME-Version: 1.0\n" @@ -12572,7 +12572,7 @@ msgstr "Resultat Enhet & Budget" #: erpnext/public/js/utils/sales_common.js:491 msgid "Cost Center for Item rows has been updated to {0}" -msgstr "Resultat Enhet för artikel rader har uppdaterats till {0}" +msgstr "Resultat Enhet för artikel rader är uppdaterad till {0}" #: erpnext/accounts/doctype/cost_center/cost_center.py:75 msgid "Cost Center is a part of Cost Center Allocation, hence cannot be converted to a group" @@ -14976,7 +14976,7 @@ msgstr "Dagar Sedan Senaste Order" #. Label of the days_until_due (Int) field in DocType 'Subscription' #: erpnext/accounts/doctype/subscription/subscription.json msgid "Days Until Due" -msgstr "Dagar till Förfallo datum" +msgstr "Dagar till Förfallodatum" #. Option for the 'Generate Invoice At' (Select) field in DocType #. 'Subscription' @@ -24999,7 +24999,7 @@ msgstr "Ogiltig Artikel Nummer" #: erpnext/utilities/transaction_base.py:34 msgid "Invalid Posting Time" -msgstr "Ogiltig Bokföring Tid" +msgstr "Ogiltig Tid" #: erpnext/accounts/doctype/party_link/party_link.py:30 msgid "Invalid Primary Role" @@ -35283,7 +35283,7 @@ msgstr "Betalning DocType" #: erpnext/accounts/doctype/sales_invoice/sales_invoice.json #: erpnext/accounts/report/payment_period_based_on_invoice_date/payment_period_based_on_invoice_date.py:110 msgid "Payment Due Date" -msgstr "Förfallodatum" +msgstr "Förfallo Datum" #. Label of the payment_entries (Table) field in DocType 'Bank Clearance' #. Label of the payment_entries (Table) field in DocType 'Bank Transaction' @@ -37826,7 +37826,7 @@ msgstr "Bokföring Datum kan inte vara i framtiden" #: erpnext/stock/doctype/stock_closing_balance/stock_closing_balance.json #: erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.json msgid "Posting Datetime" -msgstr "Bokföring Datum och Tid" +msgstr "Datum och Tid" #. Label of the posting_time (Time) field in DocType 'Dunning' #. Label of the posting_time (Time) field in DocType 'POS Closing Entry' @@ -37870,15 +37870,15 @@ msgstr "Bokföring Datum och Tid" #: erpnext/stock/report/stock_ledger_variance/stock_ledger_variance.py:41 #: erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.json msgid "Posting Time" -msgstr "Bokning Tid" +msgstr "Tid" #: erpnext/stock/doctype/stock_entry/stock_entry.py:1852 msgid "Posting date and posting time is mandatory" -msgstr "Bokföring Datum och Tid erfordras" +msgstr "Datum och Tid erfordras" #: erpnext/controllers/sales_and_purchase_return.py:54 msgid "Posting timestamp must be after {0}" -msgstr "Bokning tid måste vara efter {0}" +msgstr "Tidsstämpel måste vara efter {0}" #. Description of a DocType #: erpnext/crm/doctype/opportunity/opportunity.json From 553dd38c8d2516b311844bbbf0ff7ad088cdaa93 Mon Sep 17 00:00:00 2001 From: Frappe PR Bot Date: Wed, 30 Apr 2025 12:42:34 +0530 Subject: [PATCH 27/41] fix: Persian translations --- erpnext/locale/fa.po | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/erpnext/locale/fa.po b/erpnext/locale/fa.po index 767c7a0d413..b7f11735b16 100644 --- a/erpnext/locale/fa.po +++ b/erpnext/locale/fa.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: frappe\n" "Report-Msgid-Bugs-To: hello@frappe.io\n" "POT-Creation-Date: 2025-04-27 09:35+0000\n" -"PO-Revision-Date: 2025-04-29 06:31\n" +"PO-Revision-Date: 2025-04-30 07:12\n" "Last-Translator: hello@frappe.io\n" "Language-Team: Persian\n" "MIME-Version: 1.0\n" @@ -6585,7 +6585,7 @@ msgstr "مقدار موجود" #. Name of a report #: erpnext/stock/report/available_serial_no/available_serial_no.json msgid "Available Serial No" -msgstr "" +msgstr "شماره سریال موجود" #: erpnext/selling/report/customer_wise_item_price/customer_wise_item_price.py:38 msgid "Available Stock" @@ -9105,7 +9105,7 @@ msgstr "فقط در صورتی می‌توان ردیف را ارجاع داد #: erpnext/stock/doctype/stock_settings/stock_settings.py:137 msgid "Can't change the valuation method, as there are transactions against some items which do not have its own valuation method" -msgstr "نمی‌توان روش ارزش گذاری را تغییر داد، زیرا معاملاتی در برابر برخی اقلام وجود دارد که روش ارزش گذاری خاص خود را ندارند." +msgstr "نمی‌توان روش ارزش گذاری را تغییر داد، زیرا تراکنش‌هایی در برابر برخی آیتم‌ها وجود دارد که روش ارزش گذاری خاص خود را ندارند" #: erpnext/templates/pages/task_info.html:24 msgid "Cancel" @@ -11501,7 +11501,7 @@ msgstr "کنش را طوری پیکربندی کنید که تراکنش را م #: erpnext/buying/doctype/buying_settings/buying_settings.js:20 msgid "Configure the default Price List when creating a new Purchase transaction. Item prices will be fetched from this Price List." -msgstr "هنگام ایجاد تراکنش خرید جدید، فهرست قیمت پیش‌فرض را پیکربندی کنید. قیمت اقلام از این لیست قیمت دریافت می‌شود." +msgstr "هنگام ایجاد تراکنش خرید جدید، فهرست قیمت پیش‌فرض را پیکربندی کنید. قیمت آیتم از این لیست قیمت دریافت می‌شود." #. Label of the final_confirmation_date (Date) field in DocType 'Employee' #: erpnext/setup/doctype/employee/employee.json @@ -15570,7 +15570,7 @@ msgstr "تنظیمات پیش‌فرض برای تراکنش‌های مربوط #: erpnext/setup/doctype/company/company.js:168 msgid "Default tax templates for sales, purchase and items are created." -msgstr "الگوهای مالیاتی پیش‌فرض برای فروش، خرید و اقلام ایجاد می‌شود." +msgstr "الگوهای مالیاتی پیش‌فرض برای فروش، خرید و آیتم‌ها ایجاد می‌شود." #. Description of the 'Time Between Operations (Mins)' (Int) field in DocType #. 'Manufacturing Settings' @@ -17989,7 +17989,7 @@ msgstr "تکرار پروژه با تسک‌ها" #: erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.py:144 msgid "Duplicate Sales Invoices found" -msgstr "" +msgstr "فاکتورهای فروش تکراری پیدا شد" #: erpnext/stock/doctype/stock_closing_entry/stock_closing_entry.py:78 msgid "Duplicate Stock Closing Entry" @@ -21863,12 +21863,12 @@ msgstr "دریافت آیتم‌ها از رسید خرید" #. Label of the transfer_materials (Button) field in DocType 'Production Plan' #: erpnext/manufacturing/doctype/production_plan/production_plan.json msgid "Get Items for Purchase / Transfer" -msgstr "" +msgstr "دریافت آیتم‌ها برای خرید / انتقال" #. Label of the get_items_for_mr (Button) field in DocType 'Production Plan' #: erpnext/manufacturing/doctype/production_plan/production_plan.json msgid "Get Items for Purchase Only" -msgstr "" +msgstr "دریافت آیتم‌ها فقط برای خرید" #: erpnext/stock/doctype/material_request/material_request.js:310 #: erpnext/stock/doctype/stock_entry/stock_entry.js:656 @@ -23218,7 +23218,7 @@ msgstr "اگر آیتم گونه‌ای از یک آیتم دیگر باشد، #. DocType 'Production Plan' #: erpnext/manufacturing/doctype/production_plan/production_plan.json msgid "If items in stock, proceed with Material Transfer or Purchase." -msgstr "" +msgstr "اگر آیتم‌ها موجود هستند، مراحل انتقال مواد یا خرید را ادامه دهید." #. Description of the 'Role Allowed to Create/Edit Back-dated Transactions' #. (Link) field in DocType 'Stock Settings' @@ -24931,7 +24931,7 @@ msgstr "" #: erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.py:194 msgid "Invalid Sales Invoices" -msgstr "" +msgstr "فاکتورهای فروش نامعتبر" #: erpnext/assets/doctype/asset/asset.py:460 #: erpnext/assets/doctype/asset/asset.py:467 @@ -27275,7 +27275,7 @@ msgstr "مواردی که باید بازنشر شوند" #: erpnext/manufacturing/doctype/production_plan/production_plan.py:1560 msgid "Items to Manufacture are required to pull the Raw Materials associated with it." -msgstr "اقلام برای تولید برای کشیدن مواد خام مرتبط با آن مورد نیاز است." +msgstr "آیتم برای تولید برای دریافت مواد خام مرتبط با آن مورد نیاز است." #. Label of a Link in the Buying Workspace #: erpnext/buying/workspace/buying/buying.json @@ -40049,7 +40049,7 @@ msgstr "کالای رسید خرید" #. Name of a DocType #: erpnext/buying/doctype/purchase_receipt_item_supplied/purchase_receipt_item_supplied.json msgid "Purchase Receipt Item Supplied" -msgstr "اقلام رسید خرید تامین شد" +msgstr "آیتم رسید خرید تامین شد" #. Label of the purchase_receipt_items (Section Break) field in DocType 'Landed #. Cost Voucher' @@ -43189,7 +43189,7 @@ msgstr "ارسال مجدد دفتر پرداخت" #. Name of a DocType #: erpnext/accounts/doctype/repost_payment_ledger_items/repost_payment_ledger_items.json msgid "Repost Payment Ledger Items" -msgstr "ارسال مجدد اقلام دفتر پرداخت" +msgstr "ارسال مجدد آیتم‌های دفتر پرداخت" #. Label of the repost_status (Select) field in DocType 'Repost Payment Ledger' #: erpnext/accounts/doctype/repost_payment_ledger/repost_payment_ledger.json @@ -44900,7 +44900,7 @@ msgstr "ردیف #{idx}: هنگام تامین مواد خام به پیمانک #: erpnext/controllers/buying_controller.py:382 msgid "Row #{idx}: Item rate has been updated as per valuation rate since its an internal stock transfer." -msgstr "ردیف #{idx}: نرخ اقلام براساس نرخ ارزیابی به‌روزرسانی شده است، زیرا یک انتقال داخلی موجودی است." +msgstr "ردیف #{idx}: نرخ آیتم براساس نرخ ارزیابی به‌روزرسانی شده است، زیرا یک انتقال داخلی موجودی است." #: erpnext/controllers/buying_controller.py:846 msgid "Row #{idx}: Please enter a location for the asset item {item_code}." @@ -45659,7 +45659,7 @@ msgstr "پرداخت فاکتور فروش" #. Name of a DocType #: erpnext/accounts/doctype/sales_invoice_reference/sales_invoice_reference.json msgid "Sales Invoice Reference" -msgstr "" +msgstr "مرجع فاکتور فروش" #. Name of a DocType #: erpnext/accounts/doctype/sales_invoice_timesheet/sales_invoice_timesheet.json @@ -45670,7 +45670,7 @@ msgstr "جدول زمانی فاکتور فروش" #. Closing Entry' #: erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.json msgid "Sales Invoice Transactions" -msgstr "" +msgstr "تراکنش‌های فاکتور فروش" #. Name of a report #. Label of a Link in the Financial Reports Workspace @@ -45683,7 +45683,7 @@ msgstr "روند فاکتور فروش" #: erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.py:169 msgid "Sales Invoice does not have Payments" -msgstr "" +msgstr "فاکتور فروش، پرداخت ندارد" #: erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.py:165 msgid "Sales Invoice is already consolidated" @@ -45695,11 +45695,11 @@ msgstr "" #: erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.py:177 msgid "Sales Invoice is not submitted" -msgstr "" +msgstr "فاکتور فروش ارسال نشده است" #: erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.py:180 msgid "Sales Invoice isn't created by user {}" -msgstr "" +msgstr "فاکتور فروش توسط کاربر {} ایجاد نشده است" #: erpnext/accounts/doctype/pos_invoice/pos_invoice.py:429 msgid "Sales Invoice mode is activated in POS. Please create Sales Invoice instead." @@ -46616,7 +46616,7 @@ msgstr "برنامه ریزی" #: erpnext/utilities/doctype/rename_tool/rename_tool.js:31 msgid "Scheduling..." -msgstr "برنامه ریزی..." +msgstr "در حال زمان‌بندی..." #. Label of the school_univ (Small Text) field in DocType 'Employee Education' #: erpnext/setup/doctype/employee_education/employee_education.json @@ -46923,7 +46923,7 @@ msgstr "کالای تمام شده را انتخاب کنید" #: erpnext/selling/doctype/sales_order/sales_order.js:1161 #: erpnext/selling/doctype/sales_order/sales_order.js:1173 msgid "Select Items" -msgstr "موارد را انتخاب کنید" +msgstr "انتخاب آیتم‌ها" #: erpnext/selling/doctype/sales_order/sales_order.js:1047 msgid "Select Items based on Delivery Date" @@ -46931,7 +46931,7 @@ msgstr "آیتم‌ها را بر اساس تاریخ تحویل انتخاب ک #: erpnext/public/js/controllers/transaction.js:2403 msgid "Select Items for Quality Inspection" -msgstr "موارد را برای بازرسی کیفیت انتخاب کنید" +msgstr "انتخاب آیتم‌ها برای بازرسی کیفیت" #. Label of the select_items_to_manufacture_section (Section Break) field in #. DocType 'Production Plan' From 70bc86a4c6f790c5529fafe3a88203ee861f84ae Mon Sep 17 00:00:00 2001 From: Nihantra Patel Date: Wed, 30 Apr 2025 13:12:02 +0530 Subject: [PATCH 28/41] fix: party name in Ledger Summary --- .../customer_ledger_summary/customer_ledger_summary.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 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 f66093a4092..963fb3556a6 100644 --- a/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.py +++ b/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.py @@ -144,10 +144,10 @@ class PartyLedgerSummaryReport: if self.party_naming_by == "Naming Series": columns.append( { - "label": _(self.filters.party_type + "Name"), + "label": _(self.filters.party_type + " Name"), "fieldtype": "Data", "fieldname": "party_name", - "width": 110, + "width": 150, } ) @@ -252,12 +252,13 @@ class PartyLedgerSummaryReport: self.party_data = frappe._dict({}) for gle in self.gl_entries: party_details = self.party_details.get(gle.party) + party_name = party_details.get(f"{scrub(self.filters.party_type)}_name", "") self.party_data.setdefault( gle.party, frappe._dict( { **party_details, - "party_name": gle.party, + "party_name": party_name, "opening_balance": 0, "invoiced_amount": 0, "paid_amount": 0, From 4fc7a8b71d8a074a5ab4929c2320eceb6fc0d939 Mon Sep 17 00:00:00 2001 From: Mihir Kandoi Date: Wed, 30 Apr 2025 16:13:55 +0530 Subject: [PATCH 29/41] refactor: portal query in timesheet.py (#47336) * refactor: portal query in timesheet.py * fix: use criterion.any to fix query --- .../projects/doctype/timesheet/timesheet.py | 61 +++++++++++-------- 1 file changed, 36 insertions(+), 25 deletions(-) diff --git a/erpnext/projects/doctype/timesheet/timesheet.py b/erpnext/projects/doctype/timesheet/timesheet.py index 050891f27d0..4b4454cf2a8 100644 --- a/erpnext/projects/doctype/timesheet/timesheet.py +++ b/erpnext/projects/doctype/timesheet/timesheet.py @@ -500,7 +500,6 @@ def get_timesheets_list(doctype, txt, filters, limit_start, limit_page_length=20 user = frappe.session.user # find customer name from contact. customer = "" - timesheets = [] contact = frappe.db.exists("Contact", {"user": user}) if contact: @@ -509,31 +508,43 @@ def get_timesheets_list(doctype, txt, filters, limit_start, limit_page_length=20 customer = contact.get_link_for("Customer") if customer: - sales_invoices = [ - d.name for d in frappe.get_all("Sales Invoice", filters={"customer": customer}) - ] or [None] - projects = [d.name for d in frappe.get_all("Project", filters={"customer": customer})] - # Return timesheet related data to web portal. - timesheets = frappe.db.sql( - f""" - SELECT - ts.name, tsd.activity_type, ts.status, ts.total_billable_hours, - COALESCE(ts.sales_invoice, tsd.sales_invoice) AS sales_invoice, tsd.project - FROM `tabTimesheet` ts, `tabTimesheet Detail` tsd - WHERE tsd.parent = ts.name AND - ( - ts.sales_invoice IN %(sales_invoices)s OR - tsd.sales_invoice IN %(sales_invoices)s OR - tsd.project IN %(projects)s - ) - ORDER BY `end_date` ASC - LIMIT {limit_page_length} offset {limit_start} - """, - dict(sales_invoices=sales_invoices, projects=projects), - as_dict=True, - ) # nosec + sales_invoices = frappe.get_all("Sales Invoice", filters={"customer": customer}, pluck="name") + projects = frappe.get_all("Project", filters={"customer": customer}, pluck="name") - return timesheets + # Return timesheet related data to web portal. + table = frappe.qb.DocType("Timesheet") + child_table = frappe.qb.DocType("Timesheet Detail") + query = ( + frappe.qb.from_(table) + .join(child_table) + .on(table.name == child_table.parent) + .select( + table.name, + child_table.activity_type, + table.status, + table.total_billable_hours, + (table.sales_invoice | child_table.sales_invoice).as_("sales_invoice"), + child_table.project, + ) + .orderby(table.end_date) + .limit(limit_page_length) + .offset(limit_start) + ) + + conditions = [] + if sales_invoices: + conditions.extend( + [table.sales_invoice.isin(sales_invoices), child_table.sales_invoice.isin(sales_invoices)] + ) + if projects: + conditions.append(child_table.project.isin(projects)) + + if conditions: + query = query.where(frappe.qb.terms.Criterion.any(conditions)) + + return query.run(as_dict=True) + else: + return {} def get_list_context(context=None): From 13a84e7f82e8e0a2c4cfd1f2c150c1e4a72a3cf8 Mon Sep 17 00:00:00 2001 From: Diptanil Saha Date: Wed, 30 Apr 2025 16:45:53 +0530 Subject: [PATCH 30/41] fix: renaming group by fieldname and value in reports (#47352) * fix: renaming in general ledger report * fix: renaming in supplier quotation comparison report * fix: renaming group by to categorize by in process statement of accounts * fix: added patch * fix: patch update to all documents * chore: added patches to patch.txt * chore: removing patch from v14 --- .../process_statement_of_accounts.json | 23 +++++++------ .../process_statement_of_accounts.py | 4 +-- .../report/general_ledger/general_ledger.js | 24 ++++++------- .../report/general_ledger/general_ledger.py | 34 +++++++++---------- .../general_ledger/test_general_ledger.py | 10 +++--- .../supplier_quotation_comparison.js | 10 +++--- .../supplier_quotation_comparison.py | 6 ++-- erpnext/patches.txt | 1 + .../v15_0/rename_group_by_to_categorize_by.py | 20 +++++++++++ 9 files changed, 78 insertions(+), 54 deletions(-) create mode 100644 erpnext/patches/v15_0/rename_group_by_to_categorize_by.py diff --git a/erpnext/accounts/doctype/process_statement_of_accounts/process_statement_of_accounts.json b/erpnext/accounts/doctype/process_statement_of_accounts/process_statement_of_accounts.json index cea88c18992..5b4f75c25fe 100644 --- a/erpnext/accounts/doctype/process_statement_of_accounts/process_statement_of_accounts.json +++ b/erpnext/accounts/doctype/process_statement_of_accounts/process_statement_of_accounts.json @@ -12,7 +12,7 @@ "posting_date", "company", "account", - "group_by", + "categorize_by", "cost_center", "territory", "ignore_exchange_rate_revaluation_journals", @@ -174,14 +174,6 @@ "fieldtype": "Date", "label": "Start Date" }, - { - "default": "Group by Voucher (Consolidated)", - "depends_on": "eval:(doc.report == 'General Ledger');", - "fieldname": "group_by", - "fieldtype": "Select", - "label": "Group By", - "options": "\nGroup by Voucher\nGroup by Voucher (Consolidated)" - }, { "depends_on": "eval: (doc.report == 'General Ledger');", "fieldname": "currency", @@ -397,10 +389,18 @@ "fieldname": "show_remarks", "fieldtype": "Check", "label": "Show Remarks" + }, + { + "default": "Categorize by Voucher (Consolidated)", + "depends_on": "eval:(doc.report == 'General Ledger');", + "fieldname": "categorize_by", + "fieldtype": "Select", + "label": "Categorize By", + "options": "\nCategorize by Voucher\nCategorize by Voucher (Consolidated)" } ], "links": [], - "modified": "2024-12-11 12:11:13.543134", + "modified": "2025-04-30 14:43:23.643006", "modified_by": "Administrator", "module": "Accounts", "name": "Process Statement Of Accounts", @@ -432,8 +432,9 @@ "write": 1 } ], + "row_format": "Dynamic", "sort_field": "creation", "sort_order": "DESC", "states": [], "track_changes": 1 -} \ No newline at end of file +} diff --git a/erpnext/accounts/doctype/process_statement_of_accounts/process_statement_of_accounts.py b/erpnext/accounts/doctype/process_statement_of_accounts/process_statement_of_accounts.py index 48f400e1a46..1c4bb66357f 100644 --- a/erpnext/accounts/doctype/process_statement_of_accounts/process_statement_of_accounts.py +++ b/erpnext/accounts/doctype/process_statement_of_accounts/process_statement_of_accounts.py @@ -44,6 +44,7 @@ class ProcessStatementOfAccounts(Document): ageing_based_on: DF.Literal["Due Date", "Posting Date"] based_on_payment_terms: DF.Check body: DF.TextEditor | None + categorize_by: DF.Literal["", "Categorize by Voucher", "Categorize by Voucher (Consolidated)"] cc_to: DF.TableMultiSelect[ProcessStatementOfAccountsCC] collection_name: DF.DynamicLink | None company: DF.Link @@ -56,7 +57,6 @@ class ProcessStatementOfAccounts(Document): finance_book: DF.Link | None frequency: DF.Literal["Weekly", "Monthly", "Quarterly"] from_date: DF.Date | None - group_by: DF.Literal["", "Group by Voucher", "Group by Voucher (Consolidated)"] ignore_cr_dr_notes: DF.Check ignore_exchange_rate_revaluation_journals: DF.Check include_ageing: DF.Check @@ -204,7 +204,7 @@ def get_gl_filters(doc, entry, tax_id, presentation_currency): "party": [entry.customer], "party_name": [entry.customer_name] if entry.customer_name else None, "presentation_currency": presentation_currency, - "group_by": doc.group_by, + "categorize_by": doc.categorize_by, "currency": doc.currency, "project": [p.project_name for p in doc.project], "show_opening_entries": 0, diff --git a/erpnext/accounts/report/general_ledger/general_ledger.js b/erpnext/accounts/report/general_ledger/general_ledger.js index 6fa846910a6..4039ea27ebd 100644 --- a/erpnext/accounts/report/general_ledger/general_ledger.js +++ b/erpnext/accounts/report/general_ledger/general_ledger.js @@ -49,7 +49,7 @@ frappe.query_reports["General Ledger"] = { label: __("Voucher No"), fieldtype: "Data", on_change: function () { - frappe.query_report.set_filter_value("group_by", "Group by Voucher (Consolidated)"); + frappe.query_report.set_filter_value("categorize_by", "Categorize by Voucher (Consolidated)"); }, }, { @@ -112,29 +112,29 @@ frappe.query_reports["General Ledger"] = { hidden: 1, }, { - fieldname: "group_by", - label: __("Group by"), + fieldname: "categorize_by", + label: __("Categorize by"), fieldtype: "Select", options: [ "", { - label: __("Group by Voucher"), - value: "Group by Voucher", + label: __("Categorize by Voucher"), + value: "Categorize by Voucher", }, { - label: __("Group by Voucher (Consolidated)"), - value: "Group by Voucher (Consolidated)", + label: __("Categorize by Voucher (Consolidated)"), + value: "Categorize by Voucher (Consolidated)", }, { - label: __("Group by Account"), - value: "Group by Account", + label: __("Categorize by Account"), + value: "Categorize by Account", }, { - label: __("Group by Party"), - value: "Group by Party", + label: __("Categorize by Party"), + value: "Categorize by Party", }, ], - default: "Group by Voucher (Consolidated)", + default: "Categorize by Voucher (Consolidated)", }, { fieldname: "tax_id", diff --git a/erpnext/accounts/report/general_ledger/general_ledger.py b/erpnext/accounts/report/general_ledger/general_ledger.py index 6b569359f5b..373a974ef38 100644 --- a/erpnext/accounts/report/general_ledger/general_ledger.py +++ b/erpnext/accounts/report/general_ledger/general_ledger.py @@ -63,13 +63,13 @@ def validate_filters(filters, account_details): if not account_details.get(account): frappe.throw(_("Account {0} does not exists").format(account)) - if filters.get("account") and filters.get("group_by") == "Group by Account": + if filters.get("account") and filters.get("categorize_by") == "Categorize by Account": filters.account = frappe.parse_json(filters.get("account")) for account in filters.account: if account_details[account].is_group == 0: frappe.throw(_("Can not filter based on Child Account, if grouped by Account")) - if filters.get("voucher_no") and filters.get("group_by") in ["Group by Voucher"]: + if filters.get("voucher_no") and filters.get("categorize_by") in ["Categorize by Voucher"]: frappe.throw(_("Can not filter based on Voucher No, if grouped by Voucher")) if filters.from_date > filters.to_date: @@ -163,9 +163,9 @@ def get_gl_entries(filters, accounting_dimensions): if filters.get("include_dimensions"): order_by_statement = "order by posting_date, creation" - if filters.get("group_by") == "Group by Voucher": + if filters.get("categorize_by") == "Categorize by Voucher": order_by_statement = "order by posting_date, voucher_type, voucher_no" - if filters.get("group_by") == "Group by Account": + if filters.get("categorize_by") == "Categorize by Account": order_by_statement = "order by account, posting_date, creation" if filters.get("include_default_book_entries"): @@ -260,7 +260,7 @@ def get_conditions(filters): if filters.get("voucher_no_not_in"): conditions.append("voucher_no not in %(voucher_no_not_in)s") - if filters.get("group_by") == "Group by Party" and not filters.get("party_type"): + if filters.get("categorize_by") == "Categorize by Party" and not filters.get("party_type"): conditions.append("party_type in ('Customer', 'Supplier')") if filters.get("party_type"): @@ -272,7 +272,7 @@ def get_conditions(filters): if not ( filters.get("account") or filters.get("party") - or filters.get("group_by") in ["Group by Account", "Group by Party"] + or filters.get("categorize_by") in ["Categorize by Account", "Categorize by Party"] ): if not ignore_is_opening: conditions.append("(posting_date >=%(from_date)s or is_opening = 'Yes')") @@ -374,26 +374,26 @@ def get_data_with_opening_closing(filters, account_details, accounting_dimension # Opening for filtered account data.append(totals.opening) - if filters.get("group_by") != "Group by Voucher (Consolidated)": + if filters.get("categorize_by") != "Categorize by Voucher (Consolidated)": for _acc, acc_dict in gle_map.items(): # acc if acc_dict.entries: # opening data.append({"debit_in_transaction_currency": None, "credit_in_transaction_currency": None}) - if (not filters.get("group_by") and not filters.get("voucher_no")) or ( - filters.get("group_by") and filters.get("group_by") != "Group by Voucher" + if (not filters.get("categorize_by") and not filters.get("voucher_no")) or ( + filters.get("categorize_by") and filters.get("categorize_by") != "Categorize by Voucher" ): data.append(acc_dict.totals.opening) data += acc_dict.entries # totals - if filters.get("group_by") or not filters.voucher_no: + if filters.get("categorize_by") or not filters.voucher_no: data.append(acc_dict.totals.total) # closing - if (not filters.get("group_by") and not filters.get("voucher_no")) or ( - filters.get("group_by") and filters.get("group_by") != "Group by Voucher" + if (not filters.get("categorize_by") and not filters.get("voucher_no")) or ( + filters.get("categorize_by") and filters.get("categorize_by") != "Categorize by Voucher" ): data.append(acc_dict.totals.closing) @@ -430,9 +430,9 @@ def get_totals_dict(): def group_by_field(group_by): - if group_by == "Group by Party": + if group_by == "Categorize by Party": return "party" - elif group_by in ["Group by Voucher (Consolidated)", "Group by Account"]: + elif group_by in ["Categorize by Voucher (Consolidated)", "Categorize by Account"]: return "account" else: return "voucher_no" @@ -440,7 +440,7 @@ def group_by_field(group_by): def initialize_gle_map(gl_entries, filters, totals_dict): gle_map = OrderedDict() - group_by = group_by_field(filters.get("group_by")) + group_by = group_by_field(filters.get("categorize_by")) for gle in gl_entries: gle_map.setdefault(gle.get(group_by), _dict(totals=copy.deepcopy(totals_dict), entries=[])) @@ -450,8 +450,8 @@ def initialize_gle_map(gl_entries, filters, totals_dict): def get_accountwise_gle(filters, accounting_dimensions, gl_entries, gle_map, totals): entries = [] consolidated_gle = OrderedDict() - group_by = group_by_field(filters.get("group_by")) - group_by_voucher_consolidated = filters.get("group_by") == "Group by Voucher (Consolidated)" + group_by = group_by_field(filters.get("categorize_by")) + group_by_voucher_consolidated = filters.get("categorize_by") == "Categorize by Voucher (Consolidated)" if filters.get("show_net_values_in_party_account"): account_type_map = get_account_type_map(filters.get("company")) diff --git a/erpnext/accounts/report/general_ledger/test_general_ledger.py b/erpnext/accounts/report/general_ledger/test_general_ledger.py index 22cb13b439a..24280d4d620 100644 --- a/erpnext/accounts/report/general_ledger/test_general_ledger.py +++ b/erpnext/accounts/report/general_ledger/test_general_ledger.py @@ -155,7 +155,7 @@ class TestGeneralLedger(IntegrationTestCase): "from_date": today(), "to_date": today(), "account": [account.name], - "group_by": "Group by Voucher (Consolidated)", + "categorize_by": "Categorize by Voucher (Consolidated)", } ) ) @@ -246,7 +246,7 @@ class TestGeneralLedger(IntegrationTestCase): "from_date": today(), "to_date": today(), "account": [account.name], - "group_by": "Group by Voucher (Consolidated)", + "categorize_by": "Categorize by Voucher (Consolidated)", "ignore_err": True, } ) @@ -261,7 +261,7 @@ class TestGeneralLedger(IntegrationTestCase): "from_date": today(), "to_date": today(), "account": [account.name], - "group_by": "Group by Voucher (Consolidated)", + "categorize_by": "Categorize by Voucher (Consolidated)", "ignore_err": False, } ) @@ -308,7 +308,7 @@ class TestGeneralLedger(IntegrationTestCase): "from_date": si.posting_date, "to_date": si.posting_date, "account": [si.debit_to], - "group_by": "Group by Voucher (Consolidated)", + "categorize_by": "Categorize by Voucher (Consolidated)", "ignore_cr_dr_notes": False, } ) @@ -325,7 +325,7 @@ class TestGeneralLedger(IntegrationTestCase): "from_date": si.posting_date, "to_date": si.posting_date, "account": [si.debit_to], - "group_by": "Group by Voucher (Consolidated)", + "categorize_by": "Categorize by Voucher (Consolidated)", "ignore_cr_dr_notes": True, } ) diff --git a/erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.js b/erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.js index 2c0be8f70d7..0df7e0787a9 100644 --- a/erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.js +++ b/erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.js @@ -76,14 +76,14 @@ frappe.query_reports["Supplier Quotation Comparison"] = { }, }, { - fieldname: "group_by", - label: __("Group by"), + fieldname: "categorize_by", + label: __("Categorize by"), fieldtype: "Select", options: [ - { label: __("Group by Supplier"), value: "Group by Supplier" }, - { label: __("Group by Item"), value: "Group by Item" }, + { label: __("Categorize by Supplier"), value: "Categorize by Supplier" }, + { label: __("Categorize by Item"), value: "Categorize by Item" }, ], - default: __("Group by Supplier"), + default: __("Categorize by Supplier"), }, { fieldtype: "Check", diff --git a/erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.py b/erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.py index ad181802c79..3b445675e57 100644 --- a/erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.py +++ b/erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.py @@ -82,7 +82,9 @@ def prepare_data(supplier_quotation_data, filters): group_wise_map = defaultdict(list) supplier_qty_price_map = {} - group_by_field = "supplier_name" if filters.get("group_by") == "Group by Supplier" else "item_code" + group_by_field = ( + "supplier_name" if filters.get("categorize_by") == "Categorize by Supplier" else "item_code" + ) float_precision = cint(frappe.db.get_default("float_precision")) or 2 for data in supplier_quotation_data: @@ -266,7 +268,7 @@ def get_columns(filters): }, ] - if filters.get("group_by") == "Group by Item": + if filters.get("categorize_by") == "Categorize by Item": group_by_columns.reverse() columns[0:0] = group_by_columns # add positioned group by columns to the report diff --git a/erpnext/patches.txt b/erpnext/patches.txt index ba9e6b0ee54..90d04f52fae 100644 --- a/erpnext/patches.txt +++ b/erpnext/patches.txt @@ -408,3 +408,4 @@ erpnext.stock.doctype.stock_ledger_entry.patches.ensure_sle_indexes erpnext.patches.v15_0.update_query_report erpnext.patches.v15_0.set_purchase_receipt_row_item_to_capitalization_stock_item erpnext.patches.v15_0.update_payment_schedule_fields_in_invoices +erpnext.patches.v15_0.rename_group_by_to_categorize_by diff --git a/erpnext/patches/v15_0/rename_group_by_to_categorize_by.py b/erpnext/patches/v15_0/rename_group_by_to_categorize_by.py new file mode 100644 index 00000000000..1490ec572f4 --- /dev/null +++ b/erpnext/patches/v15_0/rename_group_by_to_categorize_by.py @@ -0,0 +1,20 @@ +import frappe +from frappe.model.utils.rename_field import rename_field + + +def execute(): + rename_field("Process Statement Of Accounts", "group_by", "categorize_by") + + frappe.db.sql( + """ + UPDATE + `tabProcess Statement Of Accounts` + SET + categorize_by = CASE + WHEN categorize_by = 'Group by Voucher (Consolidated)' THEN 'Categorize by Voucher (Consolidated)' + WHEN categorize_by = 'Group by Voucher' THEN 'Categorize by Voucher' + END + WHERE + categorize_by IN ('Group by Voucher (Consolidated)', 'Group by Voucher') + """ + ) From 97db9da10ea48ad36991b4b8ba03c39293f5227b Mon Sep 17 00:00:00 2001 From: rohitwaghchaure Date: Fri, 2 May 2025 15:23:15 +0530 Subject: [PATCH 31/41] fix: completed transactions showing in the list (#47374) --- erpnext/stock/doctype/stock_entry/stock_entry.js | 1 + 1 file changed, 1 insertion(+) diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.js b/erpnext/stock/doctype/stock_entry/stock_entry.js index 223789fc8a3..63597dd3e72 100644 --- a/erpnext/stock/doctype/stock_entry/stock_entry.js +++ b/erpnext/stock/doctype/stock_entry/stock_entry.js @@ -462,6 +462,7 @@ frappe.ui.form.on("Stock Entry", { docstatus: 1, purpose: "Material Transfer", add_to_transit: 1, + per_transferred: ["<", 100], }, }); }, From 37d74e387d68c64be36b381aa3267b3459e2b358 Mon Sep 17 00:00:00 2001 From: ruthra kumar Date: Fri, 2 May 2025 15:45:46 +0530 Subject: [PATCH 32/41] fix: broken test suite due to incorrect OR filter --- erpnext/setup/setup_wizard/operations/taxes_setup.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/erpnext/setup/setup_wizard/operations/taxes_setup.py b/erpnext/setup/setup_wizard/operations/taxes_setup.py index f8cd61d50ea..3cc405aa658 100644 --- a/erpnext/setup/setup_wizard/operations/taxes_setup.py +++ b/erpnext/setup/setup_wizard/operations/taxes_setup.py @@ -214,13 +214,12 @@ def get_or_create_account(company_name, account): default_root_type = "Liability" root_type = account.get("root_type", default_root_type) + or_filters = {"account_name": account.get("account_name")} + if account.get("account_number"): + or_filters.update({"account_number": account.get("account_number")}) + existing_accounts = frappe.get_all( - "Account", - filters={"company": company_name, "root_type": root_type}, - or_filters={ - "account_name": account.get("account_name"), - "account_number": account.get("account_number"), - }, + "Account", filters={"company": company_name, "root_type": root_type}, or_filters=or_filters ) if existing_accounts: From 1d862c111f9495157dc23d4974057631693e92a9 Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Fri, 2 May 2025 14:33:50 +0530 Subject: [PATCH 33/41] fix: not able to submit the stock entry --- erpnext/controllers/stock_controller.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/erpnext/controllers/stock_controller.py b/erpnext/controllers/stock_controller.py index 76fd74d9234..7c0dd464e61 100644 --- a/erpnext/controllers/stock_controller.py +++ b/erpnext/controllers/stock_controller.py @@ -1827,7 +1827,11 @@ def make_bundle_for_material_transfer(**kwargs): bundle_doc.is_cancelled = 0 qty = 0 - if len(bundle_doc.entries) == 1 and kwargs.qty < bundle_doc.total_qty and not bundle_doc.has_serial_no: + if ( + len(bundle_doc.entries) == 1 + and flt(kwargs.qty) < flt(bundle_doc.total_qty) + and not bundle_doc.has_serial_no + ): qty = kwargs.qty for row in bundle_doc.entries: From 5225d4c3181b919e16f521d38ef7318aebf3dd0b Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Fri, 2 May 2025 16:53:11 +0530 Subject: [PATCH 34/41] fix: serial batch from work order for fg --- .../manufacturing/doctype/work_order/work_order.py | 11 ++++++++--- .../stock_reservation_entry.py | 1 + 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/erpnext/manufacturing/doctype/work_order/work_order.py b/erpnext/manufacturing/doctype/work_order/work_order.py index 5bbda3a0986..26318b10634 100644 --- a/erpnext/manufacturing/doctype/work_order/work_order.py +++ b/erpnext/manufacturing/doctype/work_order/work_order.py @@ -1397,6 +1397,8 @@ class WorkOrder(Document): def set_reserved_qty_for_wip_and_fg(self, stock_entry): items = frappe._dict() + + stock_entry.reload() if stock_entry.purpose == "Manufacture" and self.sales_order: items = self.get_finished_goods_for_reservation(stock_entry) elif stock_entry.purpose == "Material Transfer for Manufacture": @@ -1439,7 +1441,10 @@ class WorkOrder(Document): items = frappe._dict() so_details = self.get_so_details() - qty = so_details.stock_qty - so_details.stock_reserved_qty + if not so_details: + return items + + qty = so_details.stock_qty - (so_details.stock_reserved_qty + so_details.delivered_qty) if not qty: return items @@ -1462,6 +1467,7 @@ class WorkOrder(Document): "from_voucher_no": stock_entry.name, "from_voucher_type": stock_entry.doctype, "from_voucher_detail_no": row.name, + "serial_and_batch_bundles": [row.serial_and_batch_bundle], } ) else: @@ -1476,9 +1482,8 @@ class WorkOrder(Document): "parent": self.sales_order, "item_code": self.production_item, "docstatus": 1, - "stock_reserved_qty": 0, }, - ["name", "stock_qty", "stock_reserved_qty"], + ["name", "stock_qty", "stock_reserved_qty", "delivered_qty"], as_dict=1, ) 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 56e48b84593..de1dc49aabf 100644 --- a/erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py +++ b/erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py @@ -1093,6 +1093,7 @@ class StockReservation: "Serial and Batch Entry", fields=["serial_no", "batch_no", "qty"], filters={"parent": ("in", serial_batch_bundles)}, + order_by="creation", ) for detail in bundle_details: From fb819c558ebaf24fff9e6457729800ebd71e4718 Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Fri, 2 May 2025 14:27:53 +0530 Subject: [PATCH 35/41] fix: validation for difference account --- .../stock/doctype/stock_entry/stock_entry.py | 22 ++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.py b/erpnext/stock/doctype/stock_entry/stock_entry.py index 081b988e78e..5c9308833d7 100644 --- a/erpnext/stock/doctype/stock_entry/stock_entry.py +++ b/erpnext/stock/doctype/stock_entry/stock_entry.py @@ -522,17 +522,29 @@ class StockEntry(StockController): ).format(frappe.bold(self.company)) ) - elif ( - self.is_opening == "Yes" - and frappe.db.get_value("Account", d.expense_account, "report_type") == "Profit and Loss" - ): + acc_details = frappe.get_cached_value( + "Account", + d.expense_account, + ["account_type", "report_type"], + as_dict=True, + ) + + if self.is_opening == "Yes" and acc_details.report_type == "Profit and Loss": frappe.throw( _( - "Difference Account must be a Asset/Liability type account, since this Stock Entry is an Opening Entry" + "Difference Account must be a Asset/Liability type account (Temporary Opening), since this Stock Entry is an Opening Entry" ), OpeningEntryAccountError, ) + if acc_details.account_type == "Stock": + frappe.throw( + _( + "At row {0}: the Difference Account must not be a Stock type account, please change the Account Type for the account {1} or select a different account" + ).format(d.idx, get_link_to_form("Account", d.expense_account)), + OpeningEntryAccountError, + ) + def validate_warehouse(self): """perform various (sometimes conditional) validations on warehouse""" From 1c322965b4931b139deca6281eed428a37b786fd Mon Sep 17 00:00:00 2001 From: Frappe PR Bot Date: Sun, 4 May 2025 16:00:29 +0530 Subject: [PATCH 36/41] chore: update POT file (#47393) --- erpnext/locale/main.pot | 1301 +++++++++++++++++++++------------------ 1 file changed, 687 insertions(+), 614 deletions(-) diff --git a/erpnext/locale/main.pot b/erpnext/locale/main.pot index 0e2d0dc1fa1..88c05857dee 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-04-27 09:35+0000\n" -"PO-Revision-Date: 2025-04-27 09:35+0000\n" +"POT-Creation-Date: 2025-05-04 09:35+0000\n" +"PO-Revision-Date: 2025-05-04 09:35+0000\n" "Last-Translator: hello@frappe.io\n" "Language-Team: hello@frappe.io\n" "MIME-Version: 1.0\n" @@ -47,6 +47,7 @@ msgstr "" msgid " Item" msgstr "" +#: erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.py:147 #: erpnext/accounts/report/tax_withholding_details/tax_withholding_details.py:186 #: erpnext/accounts/report/tds_computation_summary/tds_computation_summary.py:107 #: erpnext/selling/report/sales_analytics/sales_analytics.py:128 @@ -80,15 +81,15 @@ msgstr "" msgid " Summary" msgstr "" -#: erpnext/stock/doctype/item/item.py:233 +#: erpnext/stock/doctype/item/item.py:235 msgid "\"Customer Provided Item\" cannot be Purchase Item also" msgstr "" -#: erpnext/stock/doctype/item/item.py:235 +#: erpnext/stock/doctype/item/item.py:237 msgid "\"Customer Provided Item\" cannot have Valuation Rate" msgstr "" -#: erpnext/stock/doctype/item/item.py:311 +#: erpnext/stock/doctype/item/item.py:313 msgid "\"Is Fixed Asset\" cannot be unchecked, as Asset record exists against the item" msgstr "" @@ -234,7 +235,7 @@ msgstr "" msgid "'Default {0} Account' in Company {1}" msgstr "" -#: erpnext/accounts/doctype/journal_entry/journal_entry.py:1162 +#: erpnext/accounts/doctype/journal_entry/journal_entry.py:1171 msgid "'Entries' cannot be empty" msgstr "" @@ -248,7 +249,7 @@ msgstr "" msgid "'From Date' must be after 'To Date'" msgstr "" -#: erpnext/stock/doctype/item/item.py:396 +#: erpnext/stock/doctype/item/item.py:398 msgid "'Has Serial No' can not be 'Yes' for non-stock item" msgstr "" @@ -822,11 +823,11 @@ msgstr "" msgid "Your Shortcuts" msgstr "" -#: erpnext/accounts/doctype/payment_request/payment_request.py:983 +#: erpnext/accounts/doctype/payment_request/payment_request.py:988 msgid "Grand Total: {0}" msgstr "" -#: erpnext/accounts/doctype/payment_request/payment_request.py:984 +#: erpnext/accounts/doctype/payment_request/payment_request.py:989 msgid "Outstanding Amount: {0}" msgstr "" @@ -1110,7 +1111,7 @@ msgstr "" #. Label of the qty (Float) field in DocType 'Purchase Receipt Item' #. Label of the qty (Float) field in DocType 'Subcontracting Receipt Item' -#: erpnext/public/js/controllers/transaction.js:2360 +#: erpnext/public/js/controllers/transaction.js:2362 #: erpnext/stock/doctype/purchase_receipt_item/purchase_receipt_item.json #: erpnext/subcontracting/doctype/subcontracting_receipt_item/subcontracting_receipt_item.json msgid "Accepted Quantity" @@ -1143,7 +1144,7 @@ msgstr "" msgid "According to CEFACT/ICG/2010/IC013 or CEFACT/ICG/2010/IC010" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:766 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:778 msgid "According to the BOM {0}, the Item '{1}' is missing in the stock entry." msgstr "" @@ -1507,7 +1508,7 @@ msgstr "" msgid "Account: {0} is capital Work in progress and can not be updated by Journal Entry" msgstr "" -#: erpnext/accounts/doctype/journal_entry/journal_entry.py:279 +#: erpnext/accounts/doctype/journal_entry/journal_entry.py:288 msgid "Account: {0} can only be updated via Stock Transactions" msgstr "" @@ -1791,29 +1792,29 @@ msgstr "" msgid "Accounting Entry for Asset" msgstr "" -#: erpnext/stock/doctype/purchase_receipt/purchase_receipt.py:772 +#: erpnext/stock/doctype/purchase_receipt/purchase_receipt.py:774 msgid "Accounting Entry for Service" msgstr "" -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:996 -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:1017 -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:1035 -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:1056 -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:1077 -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:1101 -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:1208 -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:1444 -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:1466 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:998 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:1019 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:1037 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:1058 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:1079 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:1103 +#: 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/stock/doctype/purchase_receipt/purchase_receipt.py:865 -#: erpnext/stock/doctype/stock_entry/stock_entry.py:1564 -#: erpnext/stock/doctype/stock_entry/stock_entry.py:1578 +#: erpnext/stock/doctype/purchase_receipt/purchase_receipt.py:867 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1576 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1590 #: erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.py:561 msgid "Accounting Entry for Stock" msgstr "" -#: erpnext/stock/doctype/purchase_receipt/purchase_receipt.py:703 +#: erpnext/stock/doctype/purchase_receipt/purchase_receipt.py:705 msgid "Accounting Entry for {0}" msgstr "" @@ -2161,7 +2162,7 @@ msgstr "" msgid "Accounts User" msgstr "" -#: erpnext/accounts/doctype/journal_entry/journal_entry.py:1261 +#: erpnext/accounts/doctype/journal_entry/journal_entry.py:1270 msgid "Accounts table cannot be blank." msgstr "" @@ -2332,7 +2333,7 @@ msgstr "" #: erpnext/quality_management/doctype/quality_procedure/quality_procedure.json #: erpnext/selling/doctype/customer/customer.js:189 #: erpnext/selling/doctype/customer/customer.js:198 -#: erpnext/stock/doctype/item/item.js:489 erpnext/templates/pages/order.html:20 +#: erpnext/stock/doctype/item/item.js:518 erpnext/templates/pages/order.html:20 msgid "Actions" msgstr "" @@ -2607,14 +2608,14 @@ msgstr "" #: erpnext/public/js/bom_configurator/bom_configurator.bundle.js:235 #: erpnext/public/js/bom_configurator/bom_configurator.bundle.js:264 #: erpnext/public/js/bom_configurator/bom_configurator.bundle.js:399 -#: erpnext/public/js/utils/crm_activities.js:170 +#: erpnext/public/js/utils/crm_activities.js:172 #: erpnext/public/js/utils/serial_no_batch_selector.js:17 #: erpnext/public/js/utils/serial_no_batch_selector.js:191 #: erpnext/stock/dashboard/item_dashboard_list.html:61 msgid "Add" msgstr "" -#: erpnext/stock/doctype/item/item.js:485 +#: erpnext/stock/doctype/item/item.js:514 #: erpnext/stock/doctype/price_list/price_list.js:8 msgid "Add / Edit Prices" msgstr "" @@ -2786,7 +2787,7 @@ msgstr "" msgid "Add Weekly Holidays" msgstr "" -#: erpnext/public/js/utils/crm_activities.js:142 +#: erpnext/public/js/utils/crm_activities.js:144 msgid "Add a Note" msgstr "" @@ -3289,7 +3290,7 @@ msgstr "" msgid "Adjustment Against" msgstr "" -#: erpnext/stock/doctype/purchase_receipt/purchase_receipt.py:626 +#: erpnext/stock/doctype/purchase_receipt/purchase_receipt.py:628 msgid "Adjustment based on Purchase Invoice rate" msgstr "" @@ -3413,7 +3414,7 @@ msgstr "" msgid "Advance amount cannot be greater than {0} {1}" msgstr "" -#: erpnext/accounts/doctype/journal_entry/journal_entry.py:831 +#: erpnext/accounts/doctype/journal_entry/journal_entry.py:840 msgid "Advance paid against {0} {1} cannot be greater than Grand Total {2}" msgstr "" @@ -3539,7 +3540,7 @@ msgstr "" msgid "Against Income Account" msgstr "" -#: erpnext/accounts/doctype/journal_entry/journal_entry.py:693 +#: erpnext/accounts/doctype/journal_entry/journal_entry.py:702 #: erpnext/accounts/doctype/payment_entry/payment_entry.py:777 msgid "Against Journal Entry {0} does not have any unmatched {1} entry" msgstr "" @@ -3576,7 +3577,7 @@ msgstr "" msgid "Against Stock Entry" msgstr "" -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:326 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:328 msgid "Against Supplier Invoice {0}" msgstr "" @@ -3907,7 +3908,7 @@ msgstr "" msgid "All items are already requested" msgstr "" -#: erpnext/stock/doctype/purchase_receipt/purchase_receipt.py:1216 +#: erpnext/stock/doctype/purchase_receipt/purchase_receipt.py:1218 msgid "All items have already been Invoiced/Returned" msgstr "" @@ -3915,11 +3916,11 @@ msgstr "" msgid "All items have already been received" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:2519 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:2531 msgid "All items have already been transferred for this Work Order." msgstr "" -#: erpnext/public/js/controllers/transaction.js:2463 +#: erpnext/public/js/controllers/transaction.js:2465 msgid "All items in this document already have a linked Quality Inspection." msgstr "" @@ -4409,6 +4410,10 @@ msgstr "" msgid "Already set default in pos profile {0} for user {1}, kindly disabled default" msgstr "" +#: erpnext/stock/doctype/item/item.js:20 +msgid "Also you can't switch back to FIFO after setting the valuation method to Moving Average for this item." +msgstr "" + #: erpnext/manufacturing/doctype/bom/bom.js:200 #: erpnext/manufacturing/doctype/work_order/work_order.js:140 #: erpnext/manufacturing/doctype/work_order/work_order.js:155 @@ -4960,7 +4965,7 @@ msgstr "" msgid "An error has been appeared while reposting item valuation via {0}" msgstr "" -#: erpnext/public/js/controllers/buying.js:319 +#: erpnext/public/js/controllers/buying.js:331 #: erpnext/public/js/utils/sales_common.js:463 msgid "An error occurred during the update process" msgstr "" @@ -5020,7 +5025,7 @@ msgstr "" msgid "Another Cost Center Allocation record {0} applicable from {1}, hence this allocation will be applicable upto {2}" msgstr "" -#: erpnext/accounts/doctype/payment_request/payment_request.py:739 +#: erpnext/accounts/doctype/payment_request/payment_request.py:744 msgid "Another Payment Request is already processed" msgstr "" @@ -5468,7 +5473,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:982 +#: erpnext/stock/doctype/item/item.py:989 msgid "As there are existing submitted transactions against item {0}, you can not change the value of {1}." msgstr "" @@ -5614,7 +5619,7 @@ msgstr "" msgid "Asset Category Name" msgstr "" -#: erpnext/stock/doctype/item/item.py:302 +#: erpnext/stock/doctype/item/item.py:304 msgid "Asset Category is mandatory for Fixed Asset item" msgstr "" @@ -5903,7 +5908,7 @@ msgstr "" msgid "Asset deleted" msgstr "" -#: erpnext/assets/doctype/asset_movement/asset_movement.py:180 +#: erpnext/assets/doctype/asset_movement/asset_movement.py:183 msgid "Asset issued to Employee {0}" msgstr "" @@ -5911,7 +5916,7 @@ msgstr "" msgid "Asset out of order due to Asset Repair {0}" msgstr "" -#: erpnext/assets/doctype/asset_movement/asset_movement.py:165 +#: erpnext/assets/doctype/asset_movement/asset_movement.py:168 msgid "Asset received at Location {0} and issued to Employee {1}" msgstr "" @@ -5943,7 +5948,7 @@ msgstr "" msgid "Asset submitted" msgstr "" -#: erpnext/assets/doctype/asset_movement/asset_movement.py:173 +#: erpnext/assets/doctype/asset_movement/asset_movement.py:176 msgid "Asset transferred to Location {0}" msgstr "" @@ -5996,11 +6001,15 @@ msgstr "" msgid "Asset {0} has been updated. Please set the depreciation details if any and submit it." msgstr "" +#: erpnext/assets/doctype/asset_movement/asset_movement.py:190 +msgid "Asset {0} has only one movement record. Please create another movement before deleting this one to maintain asset tracking." +msgstr "" + #: erpnext/assets/doctype/asset/depreciation.py:438 msgid "Asset {0} must be submitted" msgstr "" -#: erpnext/controllers/buying_controller.py:816 +#: erpnext/controllers/buying_controller.py:840 msgid "Asset {assets_link} created for {item_code}" msgstr "" @@ -6030,11 +6039,11 @@ msgstr "" msgid "Assets" msgstr "" -#: erpnext/controllers/buying_controller.py:834 +#: erpnext/controllers/buying_controller.py:858 msgid "Assets not created for {item_code}. You will have to create asset manually." msgstr "" -#: erpnext/controllers/buying_controller.py:821 +#: erpnext/controllers/buying_controller.py:845 msgid "Assets {assets_link} created for {item_code}" msgstr "" @@ -6113,7 +6122,7 @@ msgstr "" msgid "At least one of the Selling or Buying must be selected" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:600 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:612 msgid "At least one warehouse is mandatory" msgstr "" @@ -6145,6 +6154,10 @@ msgstr "" msgid "At row {0}: set Parent Row No for item {1}" msgstr "" +#: erpnext/stock/doctype/stock_entry/stock_entry.py:542 +msgid "At row {0}: the Difference Account must not be a Stock type account, please change the Account Type for the account {1} or select a different account" +msgstr "" + #. Name of a UOM #: erpnext/setup/setup_wizard/data/uom_data.json msgid "Atmosphere" @@ -6207,7 +6220,7 @@ msgstr "" msgid "Attribute Value" msgstr "" -#: erpnext/stock/doctype/item/item.py:928 +#: erpnext/stock/doctype/item/item.py:930 msgid "Attribute table is mandatory" msgstr "" @@ -6215,11 +6228,11 @@ msgstr "" msgid "Attribute value: {0} must appear only once" msgstr "" -#: erpnext/stock/doctype/item/item.py:932 +#: erpnext/stock/doctype/item/item.py:934 msgid "Attribute {0} selected multiple times in Attributes Table" msgstr "" -#: erpnext/stock/doctype/item/item.py:860 +#: erpnext/stock/doctype/item/item.py:862 msgid "Attributes" msgstr "" @@ -6465,7 +6478,7 @@ msgstr "" msgid "Auto re-order" msgstr "" -#: erpnext/public/js/controllers/buying.js:317 +#: erpnext/public/js/controllers/buying.js:329 #: erpnext/public/js/utils/sales_common.js:458 msgid "Auto repeat document updated" msgstr "" @@ -6636,7 +6649,7 @@ msgstr "" msgid "Available for use date is required" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:733 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:745 msgid "Available quantity is {0}, you need {1}" msgstr "" @@ -6762,7 +6775,7 @@ msgstr "" #: erpnext/selling/doctype/sales_order/sales_order.js:980 #: erpnext/stock/doctype/material_request/material_request.js:315 #: erpnext/stock/doctype/purchase_receipt_item/purchase_receipt_item.json -#: erpnext/stock/doctype/stock_entry/stock_entry.js:630 +#: erpnext/stock/doctype/stock_entry/stock_entry.js:631 #: erpnext/stock/report/bom_search/bom_search.py:38 #: erpnext/subcontracting/doctype/subcontracting_order_item/subcontracting_order_item.json #: erpnext/subcontracting/doctype/subcontracting_receipt_item/subcontracting_receipt_item.json @@ -6992,7 +7005,7 @@ msgstr "" msgid "BOM Website Operation" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.js:1187 +#: erpnext/stock/doctype/stock_entry/stock_entry.js:1204 msgid "BOM and Manufacturing Quantity are required" msgstr "" @@ -7003,7 +7016,7 @@ msgid "BOM and Production" msgstr "" #: erpnext/stock/doctype/material_request/material_request.js:347 -#: erpnext/stock/doctype/stock_entry/stock_entry.js:682 +#: erpnext/stock/doctype/stock_entry/stock_entry.js:683 msgid "BOM does not contain any stock item" msgstr "" @@ -7240,7 +7253,7 @@ msgstr "" #: erpnext/accounts/report/cheques_and_deposits_incorrectly_cleared/cheques_and_deposits_incorrectly_cleared.js:16 #: erpnext/accounts/workspace/accounting/accounting.json #: erpnext/buying/doctype/supplier/supplier.js:108 -#: erpnext/setup/setup_wizard/operations/install_fixtures.py:514 +#: erpnext/setup/setup_wizard/operations/install_fixtures.py:512 msgid "Bank Account" msgstr "" @@ -7439,7 +7452,7 @@ msgstr "" msgid "Bank Transaction {0} updated" msgstr "" -#: erpnext/setup/setup_wizard/operations/install_fixtures.py:547 +#: erpnext/setup/setup_wizard/operations/install_fixtures.py:545 msgid "Bank account cannot be named as {0}" msgstr "" @@ -7503,11 +7516,11 @@ msgstr "" msgid "Barcode Type" msgstr "" -#: erpnext/stock/doctype/item/item.py:455 +#: erpnext/stock/doctype/item/item.py:457 msgid "Barcode {0} already used in Item {1}" msgstr "" -#: erpnext/stock/doctype/item/item.py:470 +#: erpnext/stock/doctype/item/item.py:472 msgid "Barcode {0} is not a valid {1} code" msgstr "" @@ -7762,7 +7775,7 @@ msgstr "" #: erpnext/manufacturing/doctype/job_card/job_card.json #: erpnext/manufacturing/report/cost_of_poor_quality_report/cost_of_poor_quality_report.js:89 #: erpnext/manufacturing/report/cost_of_poor_quality_report/cost_of_poor_quality_report.py:115 -#: erpnext/public/js/controllers/transaction.js:2386 +#: erpnext/public/js/controllers/transaction.js:2388 #: erpnext/public/js/utils/barcode_scanner.js:260 #: erpnext/public/js/utils/serial_no_batch_selector.js:438 #: erpnext/stock/doctype/delivery_note_item/delivery_note_item.json @@ -7874,12 +7887,12 @@ msgstr "" msgid "Batch {0} is not available in warehouse {1}" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:2682 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:2694 #: erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py:283 msgid "Batch {0} of Item {1} has expired." msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:2688 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:2700 msgid "Batch {0} of Item {1} is disabled." msgstr "" @@ -7946,7 +7959,7 @@ msgstr "" #: erpnext/manufacturing/doctype/bom/bom.py:1170 #: erpnext/manufacturing/workspace/manufacturing/manufacturing.json #: erpnext/stock/doctype/material_request/material_request.js:107 -#: erpnext/stock/doctype/stock_entry/stock_entry.js:612 +#: erpnext/stock/doctype/stock_entry/stock_entry.js:613 msgid "Bill of Materials" msgstr "" @@ -8149,7 +8162,7 @@ msgstr "" msgid "Billing Zipcode" msgstr "" -#: erpnext/accounts/party.py:583 +#: erpnext/accounts/party.py:602 msgid "Billing currency must be equal to either default company's currency or party account currency" msgstr "" @@ -9098,7 +9111,7 @@ msgstr "" msgid "Can be approved by {0}" msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.py:1917 +#: erpnext/manufacturing/doctype/work_order/work_order.py:1922 msgid "Can not close Work Order. Since {0} Job Cards are in Work In Progress state." msgstr "" @@ -9126,8 +9139,8 @@ msgstr "" msgid "Can not filter based on Voucher No, if grouped by Voucher" msgstr "" -#: erpnext/accounts/doctype/journal_entry/journal_entry.py:1321 -#: erpnext/accounts/doctype/payment_entry/payment_entry.py:2975 +#: erpnext/accounts/doctype/journal_entry/journal_entry.py:1328 +#: erpnext/accounts/doctype/payment_entry/payment_entry.py:2974 msgid "Can only make payment against unbilled {0}" msgstr "" @@ -9294,9 +9307,9 @@ msgstr "" msgid "Cannot Create Return" msgstr "" -#: erpnext/stock/doctype/item/item.py:623 -#: erpnext/stock/doctype/item/item.py:636 -#: erpnext/stock/doctype/item/item.py:650 +#: erpnext/stock/doctype/item/item.py:625 +#: erpnext/stock/doctype/item/item.py:638 +#: erpnext/stock/doctype/item/item.py:652 msgid "Cannot Merge" msgstr "" @@ -9316,11 +9329,11 @@ msgstr "" msgid "Cannot amend {0} {1}, please create a new one instead." msgstr "" -#: erpnext/accounts/doctype/journal_entry/journal_entry.py:293 +#: erpnext/accounts/doctype/journal_entry/journal_entry.py:302 msgid "Cannot apply TDS against multiple parties in one entry" msgstr "" -#: erpnext/stock/doctype/item/item.py:305 +#: erpnext/stock/doctype/item/item.py:307 msgid "Cannot be a fixed asset item as Stock Ledger is created." msgstr "" @@ -9336,7 +9349,7 @@ msgstr "" msgid "Cannot cancel the transaction. Reposting of item valuation on submission is not completed yet." msgstr "" -#: erpnext/controllers/buying_controller.py:924 +#: erpnext/controllers/buying_controller.py:948 msgid "Cannot cancel this document as it is linked with the submitted asset {asset_link}. Please cancel the asset to continue." msgstr "" @@ -9344,7 +9357,7 @@ msgstr "" msgid "Cannot cancel transaction for Completed Work Order." msgstr "" -#: erpnext/stock/doctype/item/item.py:880 +#: erpnext/stock/doctype/item/item.py:882 msgid "Cannot change Attributes after stock transaction. Make a new Item and transfer stock to the new Item" msgstr "" @@ -9360,7 +9373,7 @@ msgstr "" msgid "Cannot change Service Stop Date for item in row {0}" msgstr "" -#: erpnext/stock/doctype/item/item.py:871 +#: erpnext/stock/doctype/item/item.py:873 msgid "Cannot change Variant properties after stock transaction. You will have to make a new Item to do this." msgstr "" @@ -9388,7 +9401,7 @@ msgstr "" msgid "Cannot covert to Group because Account Type is selected." msgstr "" -#: erpnext/stock/doctype/purchase_receipt/purchase_receipt.py:944 +#: erpnext/stock/doctype/purchase_receipt/purchase_receipt.py:946 msgid "Cannot create Stock Reservation Entries for future dated Purchase Receipts." msgstr "" @@ -9498,7 +9511,7 @@ msgstr "" msgid "Cannot set authorization on basis of Discount for {0}" msgstr "" -#: erpnext/stock/doctype/item/item.py:714 +#: erpnext/stock/doctype/item/item.py:716 msgid "Cannot set multiple Item Defaults for a company." msgstr "" @@ -9683,7 +9696,7 @@ msgstr "" msgid "Cash In Hand" msgstr "" -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:316 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:318 msgid "Cash or Bank Account is mandatory for making payment entry" msgstr "" @@ -9721,6 +9734,48 @@ msgstr "" msgid "Catch All" msgstr "" +#. Label of the categorize_by (Select) field in DocType 'Process Statement Of +#. Accounts' +#: erpnext/accounts/doctype/process_statement_of_accounts/process_statement_of_accounts.json +msgid "Categorize By" +msgstr "" + +#: erpnext/accounts/report/general_ledger/general_ledger.js:116 +#: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.js:80 +msgid "Categorize by" +msgstr "" + +#: erpnext/accounts/report/general_ledger/general_ledger.js:129 +msgid "Categorize by Account" +msgstr "" + +#: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.js:84 +msgid "Categorize by Item" +msgstr "" + +#: erpnext/accounts/report/general_ledger/general_ledger.js:133 +msgid "Categorize by Party" +msgstr "" + +#: 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 "" + +#. 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 "" + +#. 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 "" + #. Label of the category (Link) field in DocType 'UOM Conversion Factor' #: erpnext/setup/doctype/uom_conversion_factor/uom_conversion_factor.json msgid "Category" @@ -9744,7 +9799,7 @@ msgstr "" msgid "Category-wise Asset Value" msgstr "" -#: erpnext/buying/doctype/purchase_order/purchase_order.py:314 +#: erpnext/buying/doctype/purchase_order/purchase_order.py:316 #: erpnext/buying/doctype/request_for_quotation/request_for_quotation.py:98 msgid "Caution" msgstr "" @@ -9872,10 +9927,14 @@ msgstr "" msgid "Changes in {0}" msgstr "" -#: erpnext/stock/doctype/item/item.js:280 +#: erpnext/stock/doctype/item/item.js:309 msgid "Changing Customer Group for the selected Customer is not allowed." msgstr "" +#: erpnext/stock/doctype/item/item.js:16 +msgid "Changing the valuation method to Moving Average will affect new transactions. If backdated entries are added, earlier FIFO-based entries will be reposted, which may change closing balances." +msgstr "" + #. Option for the 'Lead Type' (Select) field in DocType 'Lead' #: erpnext/crm/doctype/lead/lead.json #: erpnext/setup/setup_wizard/data/sales_partner_type.txt:1 @@ -10066,7 +10125,7 @@ msgstr "" #. Label of the reference_date (Date) field in DocType 'Payment Entry' #: erpnext/accounts/doctype/payment_entry/payment_entry.json -#: erpnext/public/js/controllers/transaction.js:2297 +#: erpnext/public/js/controllers/transaction.js:2299 msgid "Cheque/Reference Date" msgstr "" @@ -10114,7 +10173,7 @@ msgstr "" #. Label of the child_row_reference (Data) field in DocType 'Quality #. Inspection' -#: erpnext/public/js/controllers/transaction.js:2392 +#: erpnext/public/js/controllers/transaction.js:2394 #: erpnext/stock/doctype/quality_inspection/quality_inspection.json msgid "Child Row Reference" msgstr "" @@ -10337,7 +10396,7 @@ msgstr "" msgid "Closed Documents" msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.py:1842 +#: erpnext/manufacturing/doctype/work_order/work_order.py:1847 msgid "Closed Work Order can not be stopped or Re-opened" msgstr "" @@ -11168,13 +11227,7 @@ msgstr "" msgid "Company Not Linked" msgstr "" -#. Label of the company_shipping_address_section (Section Break) field in -#. DocType 'Purchase Invoice' -#. Label of the section_break_98 (Section Break) field in DocType 'Purchase -#. Receipt' #. Label of the shipping_address (Link) field in DocType 'Subcontracting Order' -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json -#: erpnext/stock/doctype/purchase_receipt/purchase_receipt.json #: erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.json msgid "Company Shipping Address" msgstr "" @@ -11193,7 +11246,7 @@ msgid "Company currencies of both the companies should match for Inter Company T msgstr "" #: erpnext/stock/doctype/material_request/material_request.js:341 -#: erpnext/stock/doctype/stock_entry/stock_entry.js:676 +#: erpnext/stock/doctype/stock_entry/stock_entry.js:677 msgid "Company field is required" msgstr "" @@ -11433,6 +11486,7 @@ msgid "Completed Quantity" msgstr "" #: erpnext/projects/report/project_summary/project_summary.py:136 +#: erpnext/public/js/templates/crm_activities.html:64 msgid "Completed Tasks" msgstr "" @@ -12040,7 +12094,7 @@ msgid "Content Type" msgstr "" #: erpnext/erpnext_integrations/doctype/plaid_settings/plaid_settings.js:162 -#: erpnext/public/js/controllers/transaction.js:2310 +#: erpnext/public/js/controllers/transaction.js:2312 #: erpnext/selling/doctype/quotation/quotation.js:348 msgid "Continue" msgstr "" @@ -12199,7 +12253,7 @@ msgstr "" msgid "Conversion Rate" msgstr "" -#: erpnext/stock/doctype/item/item.py:391 +#: erpnext/stock/doctype/item/item.py:393 msgid "Conversion factor for default Unit of Measure must be 1 in row {0}" msgstr "" @@ -12520,8 +12574,8 @@ msgstr "" msgid "Cost Center is a part of Cost Center Allocation, hence cannot be converted to a group" msgstr "" -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:1409 -#: erpnext/stock/doctype/purchase_receipt/purchase_receipt.py:831 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:1411 +#: erpnext/stock/doctype/purchase_receipt/purchase_receipt.py:833 msgid "Cost Center is required in row {0} in Taxes table for type {1}" msgstr "" @@ -12846,7 +12900,7 @@ msgstr "" #: erpnext/public/js/communication.js:19 erpnext/public/js/communication.js:31 #: erpnext/public/js/communication.js:41 #: erpnext/public/js/controllers/transaction.js:336 -#: erpnext/public/js/controllers/transaction.js:2433 +#: erpnext/public/js/controllers/transaction.js:2435 #: erpnext/selling/doctype/customer/customer.js:181 #: erpnext/selling/doctype/quotation/quotation.js:116 #: erpnext/selling/doctype/quotation/quotation.js:125 @@ -12876,11 +12930,11 @@ msgstr "" #: erpnext/stock/doctype/delivery_note/delivery_note.js:251 #: erpnext/stock/doctype/delivery_note/delivery_note.js:256 #: erpnext/stock/doctype/delivery_note/delivery_note.js:298 -#: erpnext/stock/doctype/item/item.js:138 -#: erpnext/stock/doctype/item/item.js:145 -#: erpnext/stock/doctype/item/item.js:153 -#: erpnext/stock/doctype/item/item.js:520 -#: erpnext/stock/doctype/item/item.js:777 +#: erpnext/stock/doctype/item/item.js:167 +#: erpnext/stock/doctype/item/item.js:174 +#: erpnext/stock/doctype/item/item.js:182 +#: erpnext/stock/doctype/item/item.js:549 +#: erpnext/stock/doctype/item/item.js:806 #: erpnext/stock/doctype/material_request/material_request.js:125 #: erpnext/stock/doctype/material_request/material_request.js:134 #: erpnext/stock/doctype/material_request/material_request.js:140 @@ -12907,7 +12961,7 @@ msgstr "" #: erpnext/stock/doctype/stock_entry/stock_entry.js:170 #: erpnext/stock/doctype/stock_entry/stock_entry.js:172 #: erpnext/stock/doctype/stock_entry/stock_entry.js:245 -#: erpnext/stock/doctype/stock_entry/stock_entry.js:1262 +#: erpnext/stock/doctype/stock_entry/stock_entry.js:1279 #: erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.js:227 #: erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.js:260 #: erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.js:273 @@ -13117,12 +13171,12 @@ msgstr "" msgid "Create Users" msgstr "" -#: erpnext/stock/doctype/item/item.js:773 +#: erpnext/stock/doctype/item/item.js:802 msgid "Create Variant" msgstr "" -#: erpnext/stock/doctype/item/item.js:585 -#: erpnext/stock/doctype/item/item.js:629 +#: erpnext/stock/doctype/item/item.js:614 +#: erpnext/stock/doctype/item/item.js:658 msgid "Create Variants" msgstr "" @@ -13136,8 +13190,8 @@ msgstr "" msgid "Create a new composite asset" msgstr "" -#: erpnext/stock/doctype/item/item.js:612 -#: erpnext/stock/doctype/item/item.js:766 +#: erpnext/stock/doctype/item/item.js:641 +#: erpnext/stock/doctype/item/item.js:795 msgid "Create a variant with the template image." msgstr "" @@ -13399,7 +13453,7 @@ msgstr "" #: erpnext/accounts/report/accounts_receivable/accounts_receivable.html:147 #: erpnext/accounts/report/accounts_receivable/accounts_receivable.py:1092 #: erpnext/controllers/sales_and_purchase_return.py:373 -#: erpnext/setup/setup_wizard/operations/install_fixtures.py:288 +#: erpnext/setup/setup_wizard/operations/install_fixtures.py:286 #: erpnext/stock/doctype/delivery_note/delivery_note.js:89 #: erpnext/stock/doctype/stock_entry/stock_entry.json msgid "Credit Note" @@ -13430,8 +13484,8 @@ msgstr "" #. Label of the credit_to (Link) field in DocType 'Purchase Invoice' #: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:366 -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:374 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:368 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:376 #: erpnext/controllers/accounts_controller.py:2183 msgid "Credit To" msgstr "" @@ -13640,7 +13694,7 @@ msgstr "" #: erpnext/buying/doctype/purchase_order/purchase_order.json #: erpnext/buying/doctype/supplier_quotation/supplier_quotation.json #: erpnext/buying/report/item_wise_purchase_history/item_wise_purchase_history.py:139 -#: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.py:214 +#: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.py:215 #: erpnext/crm/doctype/opportunity/opportunity.json #: erpnext/crm/doctype/prospect_opportunity/prospect_opportunity.json #: erpnext/manufacturing/doctype/bom/bom.json @@ -15009,7 +15063,7 @@ msgstr "" #: erpnext/accounts/report/accounts_receivable/accounts_receivable.html:147 #: erpnext/accounts/report/accounts_receivable/accounts_receivable.py:1095 #: erpnext/controllers/sales_and_purchase_return.py:377 -#: erpnext/setup/setup_wizard/operations/install_fixtures.py:289 +#: erpnext/setup/setup_wizard/operations/install_fixtures.py:287 #: erpnext/stock/doctype/purchase_receipt/purchase_receipt.js:61 msgid "Debit Note" msgstr "" @@ -15069,11 +15123,11 @@ msgstr "" msgid "Debit-Credit mismatch" msgstr "" -#: erpnext/accounts/party.py:590 +#: erpnext/accounts/party.py:609 msgid "Debtor/Creditor" msgstr "" -#: erpnext/accounts/party.py:593 +#: erpnext/accounts/party.py:612 msgid "Debtor/Creditor Advance" msgstr "" @@ -15193,11 +15247,11 @@ msgstr "" msgid "Default BOM" msgstr "" -#: erpnext/stock/doctype/item/item.py:416 +#: erpnext/stock/doctype/item/item.py:418 msgid "Default BOM ({0}) must be active for this item or its template" msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.py:1657 +#: erpnext/manufacturing/doctype/work_order/work_order.py:1662 msgid "Default BOM for {0} not found" msgstr "" @@ -15205,7 +15259,7 @@ msgstr "" msgid "Default BOM not found for FG Item {0}" msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.py:1654 +#: erpnext/manufacturing/doctype/work_order/work_order.py:1659 msgid "Default BOM not found for Item {0} and Project {1}" msgstr "" @@ -15536,15 +15590,15 @@ msgstr "" msgid "Default Unit of Measure" msgstr "" -#: erpnext/stock/doctype/item/item.py:1265 +#: erpnext/stock/doctype/item/item.py:1272 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:1248 +#: erpnext/stock/doctype/item/item.py:1255 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:906 +#: erpnext/stock/doctype/item/item.py:908 msgid "Default Unit of Measure for Variant '{0}' must be same as in Template '{1}'" msgstr "" @@ -16542,7 +16596,7 @@ msgstr "" #: erpnext/projects/doctype/task_type/task_type.json #: erpnext/projects/doctype/timesheet_detail/timesheet_detail.json #: erpnext/public/js/bank_reconciliation_tool/data_table_manager.js:55 -#: erpnext/public/js/controllers/transaction.js:2374 +#: erpnext/public/js/controllers/transaction.js:2376 #: erpnext/selling/doctype/installation_note_item/installation_note_item.json #: erpnext/selling/doctype/product_bundle/product_bundle.json #: erpnext/selling/doctype/product_bundle_item/product_bundle_item.json @@ -16723,11 +16777,11 @@ msgstr "" msgid "Difference Account" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:530 -msgid "Difference Account must be a Asset/Liability type account, since this Stock Entry is an Opening Entry" +#: 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 "" -#: erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py:906 +#: erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py:912 msgid "Difference Account must be a Asset/Liability type account, since this Stock Reconciliation is an Opening Entry" msgstr "" @@ -17208,7 +17262,7 @@ msgstr "" msgid "Discount must be less than 100" msgstr "" -#: erpnext/accounts/doctype/payment_entry/payment_entry.py:3449 +#: erpnext/accounts/doctype/payment_entry/payment_entry.py:3447 msgid "Discount of {} applied as per Payment Term" msgstr "" @@ -17284,15 +17338,29 @@ msgstr "" msgid "Dispatch" msgstr "" +#. Label of the dispatch_address_display (Text Editor) field in DocType +#. 'Purchase Invoice' #. Label of the dispatch_address (Text Editor) field in DocType 'Sales Invoice' +#. Label of the dispatch_address (Link) field in DocType 'Purchase Order' #. Label of the dispatch_address (Text Editor) field in DocType 'Sales Order' #. Label of the dispatch_address (Text Editor) field in DocType 'Delivery Note' +#. Label of the dispatch_address_display (Text Editor) field in DocType +#. 'Purchase Receipt' +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json #: erpnext/accounts/doctype/sales_invoice/sales_invoice.json +#: erpnext/buying/doctype/purchase_order/purchase_order.json #: erpnext/selling/doctype/sales_order/sales_order.json #: erpnext/stock/doctype/delivery_note/delivery_note.json +#: erpnext/stock/doctype/purchase_receipt/purchase_receipt.json msgid "Dispatch Address" msgstr "" +#. Label of the dispatch_address_display (Text Editor) field in DocType +#. 'Purchase Order' +#: erpnext/buying/doctype/purchase_order/purchase_order.json +msgid "Dispatch Address Details" +msgstr "" + #. Label of the dispatch_address_name (Link) field in DocType 'Sales Invoice' #. Label of the dispatch_address_name (Link) field in DocType 'Sales Order' #. Label of the dispatch_address_name (Link) field in DocType 'Delivery Note' @@ -17302,6 +17370,11 @@ msgstr "" msgid "Dispatch Address Name" msgstr "" +#. Label of the dispatch_address (Link) field in DocType 'Purchase Receipt' +#: erpnext/stock/doctype/purchase_receipt/purchase_receipt.json +msgid "Dispatch Address Template" +msgstr "" + #. Label of the section_break_9 (Section Break) field in DocType 'Delivery #. Stop' #: erpnext/stock/doctype/delivery_stop/delivery_stop.json @@ -17312,7 +17385,7 @@ msgstr "" #: erpnext/patches/v11_0/add_default_dispatch_notification_template.py:20 #: erpnext/patches/v11_0/add_default_dispatch_notification_template.py:28 #: erpnext/setup/setup_wizard/operations/defaults_setup.py:57 -#: erpnext/setup/setup_wizard/operations/install_fixtures.py:316 +#: erpnext/setup/setup_wizard/operations/install_fixtures.py:314 msgid "Dispatch Notification" msgstr "" @@ -17508,6 +17581,10 @@ msgstr "" msgid "Do you still want to enable negative inventory?" msgstr "" +#: erpnext/stock/doctype/item/item.js:24 +msgid "Do you want to change valuation method?" +msgstr "" + #: erpnext/stock/doctype/delivery_trip/delivery_trip.js:156 msgid "Do you want to notify all the customers by email?" msgstr "" @@ -17651,7 +17728,8 @@ msgstr "" #. Label of the done (Check) field in DocType 'Transaction Deletion Record #. Details' #: erpnext/accounts/doctype/transaction_deletion_record_details/transaction_deletion_record_details.json -#: erpnext/public/js/utils/crm_activities.js:212 +#: erpnext/public/js/templates/crm_activities.html:77 +#: erpnext/public/js/utils/crm_activities.js:214 msgid "Done" msgstr "" @@ -17925,11 +18003,11 @@ msgstr "" msgid "Due Date Based On" msgstr "" -#: erpnext/accounts/party.py:677 +#: erpnext/accounts/party.py:696 msgid "Due Date cannot be after {0}" msgstr "" -#: erpnext/accounts/party.py:652 +#: erpnext/accounts/party.py:671 msgid "Due Date cannot be before {0}" msgstr "" @@ -17989,7 +18067,7 @@ msgstr "" msgid "Dunning Type" msgstr "" -#: erpnext/stock/doctype/item/item.js:181 +#: erpnext/stock/doctype/item/item.js:210 #: erpnext/stock/doctype/putaway_rule/putaway_rule.py:55 msgid "Duplicate" msgstr "" @@ -18074,7 +18152,7 @@ msgstr "" #: erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py:94 #: erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts_with_account_number.py:133 -#: erpnext/setup/setup_wizard/operations/taxes_setup.py:257 +#: erpnext/setup/setup_wizard/operations/taxes_setup.py:256 msgid "Duties and Taxes" msgstr "" @@ -18175,7 +18253,7 @@ msgstr "" msgid "Edit Not Allowed" msgstr "" -#: erpnext/public/js/utils/crm_activities.js:184 +#: erpnext/public/js/utils/crm_activities.js:186 msgid "Edit Note" msgstr "" @@ -18631,7 +18709,7 @@ msgstr "" msgid "Ems(Pica)" msgstr "" -#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1294 +#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1295 msgid "Enable Allow Partial Reservation in the Stock Settings to reserve partial stock." msgstr "" @@ -18647,7 +18725,7 @@ msgstr "" msgid "Enable Auto Email" msgstr "" -#: erpnext/stock/doctype/item/item.py:1057 +#: erpnext/stock/doctype/item/item.py:1064 msgid "Enable Auto Re-Order" msgstr "" @@ -18974,7 +19052,7 @@ msgstr "" msgid "Enter amount to be redeemed." msgstr "" -#: erpnext/stock/doctype/item/item.js:935 +#: erpnext/stock/doctype/item/item.js:964 msgid "Enter an Item Code, the name will be auto-filled the same as Item Code on clicking inside the Item Name field." msgstr "" @@ -19021,7 +19099,7 @@ msgstr "" msgid "Enter the name of the bank or lending institution before submitting." msgstr "" -#: erpnext/stock/doctype/item/item.js:961 +#: erpnext/stock/doctype/item/item.js:990 msgid "Enter the opening stock units." msgstr "" @@ -19074,7 +19152,7 @@ msgstr "" #: erpnext/accounts/report/account_balance/account_balance.js:29 #: erpnext/accounts/report/account_balance/account_balance.js:45 #: erpnext/accounts/report/balance_sheet/balance_sheet.py:247 -#: erpnext/setup/setup_wizard/operations/install_fixtures.py:291 +#: erpnext/setup/setup_wizard/operations/install_fixtures.py:289 msgid "Equity" msgstr "" @@ -19098,7 +19176,7 @@ msgstr "" #: erpnext/accounts/doctype/ledger_merge/ledger_merge.json #: erpnext/accounts/doctype/payment_request/payment_request.py:443 #: erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.json -#: erpnext/manufacturing/doctype/job_card/job_card.py:869 +#: 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:294 msgid "Error" @@ -19224,7 +19302,7 @@ msgstr "" msgid "Example URL" msgstr "" -#: erpnext/stock/doctype/item/item.py:988 +#: erpnext/stock/doctype/item/item.py:995 msgid "Example of a linked document: {0}" msgstr "" @@ -19254,7 +19332,7 @@ msgstr "" msgid "Excess Materials Consumed" msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.py:963 +#: erpnext/manufacturing/doctype/job_card/job_card.py:969 msgid "Excess Transfer" msgstr "" @@ -19386,7 +19464,7 @@ msgstr "" msgid "Excise Entry" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.js:1255 +#: erpnext/stock/doctype/stock_entry/stock_entry.js:1272 msgid "Excise Invoice" msgstr "" @@ -19567,7 +19645,7 @@ msgstr "" #: erpnext/accounts/doctype/cashier_closing/cashier_closing.json #: erpnext/accounts/doctype/ledger_merge/ledger_merge.json #: erpnext/accounts/doctype/process_deferred_accounting/process_deferred_accounting.json -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:593 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:595 #: erpnext/accounts/report/account_balance/account_balance.js:28 #: erpnext/accounts/report/deferred_revenue_and_expense/deferred_revenue_and_expense.js:89 #: erpnext/accounts/report/profit_and_loss_statement/profit_and_loss_statement.py:180 @@ -19632,13 +19710,13 @@ msgstr "" msgid "Expense Head" msgstr "" -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:487 -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:511 -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:531 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:489 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:513 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:533 msgid "Expense Head Changed" msgstr "" -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:589 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:591 msgid "Expense account is mandatory for item {0}" msgstr "" @@ -19758,7 +19836,7 @@ msgstr "" msgid "Export Import Log" msgstr "" -#: erpnext/setup/setup_wizard/operations/install_fixtures.py:286 +#: erpnext/setup/setup_wizard/operations/install_fixtures.py:284 msgid "External" msgstr "" @@ -20016,7 +20094,7 @@ msgid "Fetch Value From" msgstr "" #: erpnext/stock/doctype/material_request/material_request.js:333 -#: erpnext/stock/doctype/stock_entry/stock_entry.js:653 +#: erpnext/stock/doctype/stock_entry/stock_entry.js:654 msgid "Fetch exploded BOM (including sub-assemblies)" msgstr "" @@ -20035,7 +20113,7 @@ msgid "Fetching Error" msgstr "" #: erpnext/accounts/doctype/dunning/dunning.js:135 -#: erpnext/public/js/controllers/transaction.js:1247 +#: erpnext/public/js/controllers/transaction.js:1251 msgid "Fetching exchange rates ..." msgstr "" @@ -20423,7 +20501,7 @@ msgstr "" msgid "Finished Goods based Operating Cost" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:1328 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1340 msgid "Finished Item {0} does not match with Work Order {1}" msgstr "" @@ -20573,7 +20651,7 @@ msgstr "" msgid "Fixed Asset Defaults" msgstr "" -#: erpnext/stock/doctype/item/item.py:299 +#: erpnext/stock/doctype/item/item.py:301 msgid "Fixed Asset Item must be a non-stock item." msgstr "" @@ -20708,7 +20786,7 @@ msgstr "" msgid "For Item" msgstr "" -#: erpnext/controllers/stock_controller.py:1196 +#: erpnext/controllers/stock_controller.py:1207 msgid "For Item {0} cannot be received more than {1} qty against the {2} {3}" msgstr "" @@ -20739,7 +20817,7 @@ msgstr "" msgid "For Production" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:617 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:629 msgid "For Quantity (Manufactured Qty) is mandatory" msgstr "" @@ -20799,15 +20877,19 @@ msgstr "" msgid "For individual supplier" msgstr "" +#: erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.py:283 +msgid "For item {0}, only {1} asset have been created or linked to {2}. Please create or link {3} more asset with the respective document." +msgstr "" + #: erpnext/controllers/status_updater.py:272 msgid "For item {0}, rate must be a positive number. To Allow negative rates, enable {1} in {2}" msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.py:1987 +#: erpnext/manufacturing/doctype/work_order/work_order.py:1992 msgid "For operation {0}: Quantity ({1}) can not be greater than pending quantity({2})" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:1366 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1378 msgid "For quantity {0} should not be greater than allowed quantity {1}" msgstr "" @@ -20834,11 +20916,11 @@ msgstr "" msgid "For the convenience of customers, these codes can be used in print formats like Invoices and Delivery Notes" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:757 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:769 msgid "For the item {0}, the quantity should be {1} according to the BOM {2}." msgstr "" -#: erpnext/public/js/controllers/transaction.js:1084 +#: erpnext/public/js/controllers/transaction.js:1088 msgctxt "Clear payment terms template and/or payment schedule when due date is changed" msgid "For the new {0} to take effect, would you like to clear the current {1}?" msgstr "" @@ -21876,7 +21958,7 @@ msgstr "" #: erpnext/maintenance/doctype/maintenance_visit/maintenance_visit.js:119 #: erpnext/maintenance/doctype/maintenance_visit/maintenance_visit.js:142 #: erpnext/manufacturing/doctype/production_plan/production_plan.json -#: erpnext/public/js/controllers/buying.js:289 +#: erpnext/public/js/controllers/buying.js:295 #: erpnext/selling/doctype/quotation/quotation.js:158 #: erpnext/selling/doctype/sales_order/sales_order.js:163 #: erpnext/selling/doctype/sales_order/sales_order.js:779 @@ -21888,8 +21970,8 @@ msgstr "" #: erpnext/stock/doctype/stock_entry/stock_entry.js:317 #: erpnext/stock/doctype/stock_entry/stock_entry.js:364 #: erpnext/stock/doctype/stock_entry/stock_entry.js:393 -#: erpnext/stock/doctype/stock_entry/stock_entry.js:468 -#: erpnext/stock/doctype/stock_entry/stock_entry.js:616 +#: erpnext/stock/doctype/stock_entry/stock_entry.js:469 +#: erpnext/stock/doctype/stock_entry/stock_entry.js:617 #: erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.js:121 msgid "Get Items From" msgstr "" @@ -21911,8 +21993,8 @@ msgid "Get Items for Purchase Only" msgstr "" #: erpnext/stock/doctype/material_request/material_request.js:310 -#: erpnext/stock/doctype/stock_entry/stock_entry.js:656 -#: erpnext/stock/doctype/stock_entry/stock_entry.js:669 +#: erpnext/stock/doctype/stock_entry/stock_entry.js:657 +#: erpnext/stock/doctype/stock_entry/stock_entry.js:670 msgid "Get Items from BOM" msgstr "" @@ -21926,7 +22008,7 @@ msgstr "" msgid "Get Items from Open Material Requests" msgstr "" -#: erpnext/public/js/controllers/buying.js:531 +#: erpnext/public/js/controllers/buying.js:543 msgid "Get Items from Product Bundle" msgstr "" @@ -22100,7 +22182,7 @@ msgstr "" msgid "Goods Transferred" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:1777 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1789 msgid "Goods are already received against the outward entry {0}" msgstr "" @@ -22388,9 +22470,6 @@ msgstr "" msgid "Group" msgstr "" -#. Label of the group_by (Select) field in DocType 'Process Statement Of -#. Accounts' -#: erpnext/accounts/doctype/process_statement_of_accounts/process_statement_of_accounts.json #: erpnext/accounts/report/asset_depreciations_and_balances/asset_depreciations_and_balances.js:30 #: erpnext/accounts/report/gross_profit/gross_profit.js:36 #: erpnext/accounts/report/item_wise_purchase_register/item_wise_purchase_register.js:52 @@ -22425,25 +22504,14 @@ msgstr "" msgid "Group Warehouses cannot be used in transactions. Please change the value of {0}" msgstr "" -#: erpnext/accounts/report/general_ledger/general_ledger.js:116 #: erpnext/accounts/report/pos_register/pos_register.js:56 -#: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.js:80 msgid "Group by" msgstr "" -#: erpnext/accounts/report/general_ledger/general_ledger.js:129 -msgid "Group by Account" -msgstr "" - -#: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.js:84 -msgid "Group by Item" -msgstr "" - #: erpnext/buying/report/requested_items_to_order_and_receive/requested_items_to_order_and_receive.js:61 msgid "Group by Material Request" msgstr "" -#: erpnext/accounts/report/general_ledger/general_ledger.js:133 #: erpnext/accounts/report/payment_ledger/payment_ledger.js:83 msgid "Group by Party" msgstr "" @@ -22456,27 +22524,11 @@ msgstr "" msgid "Group by Sales Order" msgstr "" -#: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.js:83 -#: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.js:86 -msgid "Group by Supplier" -msgstr "" - -#. Option for the 'Group By' (Select) field in DocType 'Process Statement Of -#. Accounts' -#: erpnext/accounts/doctype/process_statement_of_accounts/process_statement_of_accounts.json #: erpnext/accounts/report/accounts_payable/accounts_payable.js:141 #: erpnext/accounts/report/accounts_receivable/accounts_receivable.js:173 -#: erpnext/accounts/report/general_ledger/general_ledger.js:121 msgid "Group by Voucher" msgstr "" -#. Option for the 'Group 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 "Group by Voucher (Consolidated)" -msgstr "" - #: erpnext/stock/utils.py:436 msgid "Group node warehouse is not allowed to select for transactions" msgstr "" @@ -23063,7 +23115,7 @@ msgid "Identification of the package for the delivery (for print)" msgstr "" #: erpnext/setup/setup_wizard/data/sales_stage.txt:5 -#: erpnext/setup/setup_wizard/operations/install_fixtures.py:417 +#: erpnext/setup/setup_wizard/operations/install_fixtures.py:415 msgid "Identifying Decision Makers" msgstr "" @@ -23375,7 +23427,7 @@ msgstr "" msgid "If yes, then this warehouse will be used to store rejected materials" msgstr "" -#: erpnext/stock/doctype/item/item.js:947 +#: erpnext/stock/doctype/item/item.js:976 msgid "If you are maintaining stock of this Item in your Inventory, ERPNext will make a stock ledger entry for each transaction of this item." msgstr "" @@ -23982,7 +24034,7 @@ msgstr "" msgid "In the case of multi-tier program, Customers will be auto assigned to the concerned tier as per their spent" msgstr "" -#: erpnext/stock/doctype/item/item.js:980 +#: erpnext/stock/doctype/item/item.js:1009 msgid "In this section, you can define Company-wide transaction-related defaults for this Item. Eg. Default Warehouse, Default Price List, Supplier, etc." msgstr "" @@ -24289,11 +24341,11 @@ msgstr "" msgid "Incorrect Batch Consumed" msgstr "" -#: erpnext/stock/doctype/item/item.py:512 +#: erpnext/stock/doctype/item/item.py:514 msgid "Incorrect Check in (group) Warehouse for Reorder" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:762 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:774 msgid "Incorrect Component Quantity" msgstr "" @@ -24499,13 +24551,13 @@ msgstr "" msgid "Inspected By" msgstr "" -#: erpnext/controllers/stock_controller.py:1088 +#: erpnext/controllers/stock_controller.py:1099 msgid "Inspection Rejected" msgstr "" #. Label of the inspection_required (Check) field in DocType 'Stock Entry' -#: erpnext/controllers/stock_controller.py:1058 -#: erpnext/controllers/stock_controller.py:1060 +#: erpnext/controllers/stock_controller.py:1069 +#: erpnext/controllers/stock_controller.py:1071 #: erpnext/stock/doctype/stock_entry/stock_entry.json msgid "Inspection Required" msgstr "" @@ -24522,7 +24574,7 @@ msgstr "" msgid "Inspection Required before Purchase" msgstr "" -#: erpnext/controllers/stock_controller.py:1073 +#: erpnext/controllers/stock_controller.py:1084 msgid "Inspection Submission" msgstr "" @@ -24609,7 +24661,7 @@ msgstr "" #: erpnext/stock/doctype/pick_list/pick_list.py:111 #: 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:737 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:749 #: erpnext/stock/serial_batch_bundle.py:986 erpnext/stock/stock_ledger.py:1553 #: erpnext/stock/stock_ledger.py:2026 msgid "Insufficient Stock" @@ -24729,7 +24781,7 @@ msgstr "" msgid "Interest" msgstr "" -#: erpnext/accounts/doctype/payment_entry/payment_entry.py:3087 +#: erpnext/accounts/doctype/payment_entry/payment_entry.py:3086 msgid "Interest and/or dunning fee" msgstr "" @@ -24739,7 +24791,7 @@ msgstr "" msgid "Interested" msgstr "" -#: erpnext/setup/setup_wizard/operations/install_fixtures.py:285 +#: erpnext/setup/setup_wizard/operations/install_fixtures.py:283 msgid "Internal" msgstr "" @@ -24801,7 +24853,7 @@ msgstr "" msgid "Internal Work History" msgstr "" -#: erpnext/controllers/stock_controller.py:1155 +#: erpnext/controllers/stock_controller.py:1166 msgid "Internal transfers can only be done in company's default currency" msgstr "" @@ -24825,8 +24877,8 @@ msgstr "" msgid "Invalid" msgstr "" -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:367 -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:375 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:369 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:377 #: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:942 #: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:952 #: erpnext/assets/doctype/asset_category/asset_category.py:70 @@ -24837,7 +24889,7 @@ msgid "Invalid Account" msgstr "" #: erpnext/accounts/doctype/payment_entry/payment_entry.py:400 -#: erpnext/accounts/doctype/payment_request/payment_request.py:860 +#: erpnext/accounts/doctype/payment_request/payment_request.py:865 msgid "Invalid Allocated Amount" msgstr "" @@ -24857,7 +24909,7 @@ msgstr "" msgid "Invalid Barcode. There is no Item attached to this barcode." msgstr "" -#: erpnext/public/js/controllers/transaction.js:2629 +#: erpnext/public/js/controllers/transaction.js:2631 msgid "Invalid Blanket Order for the selected Customer and Item" msgstr "" @@ -24895,8 +24947,8 @@ msgstr "" msgid "Invalid Document Type" msgstr "" -#: erpnext/stock/doctype/quality_inspection/quality_inspection.py:342 -#: erpnext/stock/doctype/quality_inspection/quality_inspection.py:347 +#: erpnext/stock/doctype/quality_inspection/quality_inspection.py:343 +#: erpnext/stock/doctype/quality_inspection/quality_inspection.py:348 msgid "Invalid Formula" msgstr "" @@ -24913,7 +24965,7 @@ msgstr "" msgid "Invalid Item" msgstr "" -#: erpnext/stock/doctype/item/item.py:1403 +#: erpnext/stock/doctype/item/item.py:1410 msgid "Invalid Item Defaults" msgstr "" @@ -24935,7 +24987,7 @@ msgstr "" msgid "Invalid Parent Account" msgstr "" -#: erpnext/public/js/controllers/buying.js:360 +#: erpnext/public/js/controllers/buying.js:372 msgid "Invalid Part Number" msgstr "" @@ -24985,7 +25037,7 @@ msgstr "" msgid "Invalid Selling Price" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:1405 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1417 msgid "Invalid Serial and Batch Bundle" msgstr "" @@ -25014,7 +25066,7 @@ msgstr "" msgid "Invalid lost reason {0}, please create a new lost reason" msgstr "" -#: erpnext/stock/doctype/item/item.py:406 +#: erpnext/stock/doctype/item/item.py:408 msgid "Invalid naming series (. missing) for {0}" msgstr "" @@ -25891,11 +25943,11 @@ 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:563 +#: erpnext/stock/doctype/item/item.py:565 msgid "It can take upto few hours for accurate stock values to be visible after merging items." msgstr "" -#: erpnext/public/js/controllers/transaction.js:2073 +#: erpnext/public/js/controllers/transaction.js:2075 msgid "It is needed to fetch Item Details." msgstr "" @@ -25943,7 +25995,7 @@ msgstr "" #: erpnext/buying/report/procurement_tracker/procurement_tracker.py:60 #: erpnext/buying/report/requested_items_to_order_and_receive/requested_items_to_order_and_receive.js:49 #: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.js:33 -#: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.py:202 +#: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.py:196 #: erpnext/buying/workspace/buying/buying.json #: erpnext/controllers/taxes_and_totals.py:1125 #: erpnext/manufacturing/doctype/blanket_order/blanket_order.json @@ -26223,7 +26275,7 @@ msgstr "" #: erpnext/manufacturing/report/quality_inspection_summary/quality_inspection_summary.py:86 #: erpnext/manufacturing/report/work_order_stock_report/work_order_stock_report.py:119 #: erpnext/projects/doctype/timesheet/timesheet.js:213 -#: erpnext/public/js/controllers/transaction.js:2348 +#: erpnext/public/js/controllers/transaction.js:2350 #: erpnext/public/js/stock_reservation.js:99 #: erpnext/public/js/stock_reservation.js:292 erpnext/public/js/utils.js:499 #: erpnext/public/js/utils.js:655 @@ -26298,7 +26350,7 @@ msgstr "" msgid "Item Code cannot be changed for Serial No." msgstr "" -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:442 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:444 msgid "Item Code required at Row No {0}" msgstr "" @@ -26662,7 +26714,7 @@ msgstr "" #: erpnext/manufacturing/report/production_planning_report/production_planning_report.py:359 #: erpnext/manufacturing/report/quality_inspection_summary/quality_inspection_summary.py:92 #: erpnext/manufacturing/report/work_order_consumed_materials/work_order_consumed_materials.py:134 -#: erpnext/public/js/controllers/transaction.js:2354 +#: erpnext/public/js/controllers/transaction.js:2356 #: erpnext/public/js/utils.js:745 #: erpnext/selling/doctype/quotation_item/quotation_item.json #: erpnext/selling/doctype/sales_order_item/sales_order_item.json @@ -26919,17 +26971,17 @@ msgstr "" #. Name of a DocType #. Label of a Link in the Stock Workspace -#: erpnext/stock/doctype/item/item.js:117 +#: erpnext/stock/doctype/item/item.js:146 #: erpnext/stock/doctype/item_variant_settings/item_variant_settings.json #: erpnext/stock/workspace/stock/stock.json msgid "Item Variant Settings" msgstr "" -#: erpnext/stock/doctype/item/item.js:796 +#: erpnext/stock/doctype/item/item.js:825 msgid "Item Variant {0} already exists with same attributes" msgstr "" -#: erpnext/stock/doctype/item/item.py:779 +#: erpnext/stock/doctype/item/item.py:781 msgid "Item Variants updated" msgstr "" @@ -26991,11 +27043,11 @@ msgstr "" msgid "Item and Warranty Details" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:2661 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:2673 msgid "Item for row {0} does not match Material Request" msgstr "" -#: erpnext/stock/doctype/item/item.py:793 +#: erpnext/stock/doctype/item/item.py:795 msgid "Item has variants." msgstr "" @@ -27025,7 +27077,7 @@ msgstr "" msgid "Item qty can not be updated as raw materials are already processed." msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:853 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:865 msgid "Item rate has been updated to zero as Allow Zero Valuation Rate is checked for item {0}" msgstr "" @@ -27047,7 +27099,7 @@ msgstr "" msgid "Item valuation reposting in progress. Report might show incorrect item valuation." msgstr "" -#: erpnext/stock/doctype/item/item.py:950 +#: erpnext/stock/doctype/item/item.py:952 msgid "Item variant {0} exists with same attributes" msgstr "" @@ -27060,7 +27112,7 @@ msgid "Item {0} cannot be ordered more than {1} against Blanket Order {2}." msgstr "" #: erpnext/assets/doctype/asset/asset.py:268 -#: erpnext/stock/doctype/item/item.py:628 +#: erpnext/stock/doctype/item/item.py:630 #: erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py:167 msgid "Item {0} does not exist" msgstr "" @@ -27089,7 +27141,7 @@ msgstr "" msgid "Item {0} has no Serial No. Only serialized items can have delivery based on Serial No" msgstr "" -#: erpnext/stock/doctype/item/item.py:1119 +#: erpnext/stock/doctype/item/item.py:1126 msgid "Item {0} has reached its end of life on {1}" msgstr "" @@ -27101,11 +27153,11 @@ msgstr "" msgid "Item {0} is already reserved/delivered against Sales Order {1}." msgstr "" -#: erpnext/stock/doctype/item/item.py:1139 +#: erpnext/stock/doctype/item/item.py:1146 msgid "Item {0} is cancelled" msgstr "" -#: erpnext/stock/doctype/item/item.py:1123 +#: erpnext/stock/doctype/item/item.py:1130 msgid "Item {0} is disabled" msgstr "" @@ -27113,7 +27165,7 @@ msgstr "" msgid "Item {0} is not a serialized Item" msgstr "" -#: erpnext/stock/doctype/item/item.py:1131 +#: erpnext/stock/doctype/item/item.py:1138 msgid "Item {0} is not a stock Item" msgstr "" @@ -27121,7 +27173,7 @@ msgstr "" msgid "Item {0} is not a subcontracted item" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:1689 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1701 msgid "Item {0} is not active or end of life has been reached" msgstr "" @@ -27141,7 +27193,7 @@ msgstr "" msgid "Item {0} must be a non-stock item" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:1145 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1157 msgid "Item {0} not found in 'Raw Materials Supplied' table in {1} {2}" msgstr "" @@ -27149,7 +27201,7 @@ msgstr "" msgid "Item {0} not found." msgstr "" -#: erpnext/buying/doctype/purchase_order/purchase_order.py:341 +#: erpnext/buying/doctype/purchase_order/purchase_order.py:343 msgid "Item {0}: Ordered qty {1} cannot be less than minimum order qty {2} (defined in Item)." msgstr "" @@ -27157,7 +27209,7 @@ msgstr "" msgid "Item {0}: {1} qty produced. " msgstr "" -#: erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py:1337 +#: erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py:1343 msgid "Item {} does not exist." msgstr "" @@ -27305,7 +27357,7 @@ msgstr "" msgid "Items for Raw Material Request" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:849 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:861 msgid "Items rate has been updated to zero as Allow Zero Valuation Rate is checked for the following items: {0}" msgstr "" @@ -27377,7 +27429,7 @@ msgstr "" #: erpnext/buying/doctype/purchase_order_item/purchase_order_item.json #: erpnext/manufacturing/doctype/bom/bom.json #: erpnext/manufacturing/doctype/job_card/job_card.json -#: erpnext/manufacturing/doctype/job_card/job_card.py:862 +#: erpnext/manufacturing/doctype/job_card/job_card.py:868 #: erpnext/manufacturing/doctype/operation/operation.json #: erpnext/manufacturing/doctype/work_order/work_order.js:354 #: erpnext/manufacturing/doctype/work_order/work_order.json @@ -27438,7 +27490,7 @@ msgstr "" msgid "Job Card and Capacity Planning" msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.py:1275 +#: erpnext/manufacturing/doctype/job_card/job_card.py:1281 msgid "Job Card {0} has been completed" msgstr "" @@ -27507,7 +27559,7 @@ msgstr "" msgid "Job Worker Warehouse" msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.py:2038 +#: erpnext/manufacturing/doctype/work_order/work_order.py:2043 msgid "Job card {0} created" msgstr "" @@ -27593,7 +27645,7 @@ msgstr "" msgid "Journal Entry Type" msgstr "" -#: erpnext/accounts/doctype/journal_entry/journal_entry.py:531 +#: erpnext/accounts/doctype/journal_entry/journal_entry.py:540 msgid "Journal Entry for Asset scrapping cannot be cancelled. Please restore the Asset." msgstr "" @@ -27602,11 +27654,11 @@ msgstr "" msgid "Journal Entry for Scrap" msgstr "" -#: erpnext/accounts/doctype/journal_entry/journal_entry.py:268 +#: erpnext/accounts/doctype/journal_entry/journal_entry.py:277 msgid "Journal Entry type should be set as Depreciation Entry for asset depreciation" msgstr "" -#: erpnext/accounts/doctype/journal_entry/journal_entry.py:681 +#: erpnext/accounts/doctype/journal_entry/journal_entry.py:690 msgid "Journal Entry {0} does not have account {1} or already matched against other voucher" msgstr "" @@ -27736,11 +27788,11 @@ msgstr "" msgid "Kilowatt-Hour" msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.py:864 +#: erpnext/manufacturing/doctype/job_card/job_card.py:870 msgid "Kindly cancel the Manufacturing Entries first against the work order {0}." msgstr "" -#: erpnext/public/js/utils/party.js:264 +#: erpnext/public/js/utils/party.js:268 msgid "Kindly select the company first" msgstr "" @@ -28007,7 +28059,7 @@ msgstr "" msgid "Lead Time" msgstr "" -#: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.py:264 +#: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.py:258 msgid "Lead Time (Days)" msgstr "" @@ -28403,7 +28455,7 @@ msgstr "" msgid "Linked Location" msgstr "" -#: erpnext/stock/doctype/item/item.py:992 +#: erpnext/stock/doctype/item/item.py:999 msgid "Linked with submitted documents" msgstr "" @@ -28633,8 +28685,8 @@ msgstr "" msgid "Lower Deduction Certificate" msgstr "" -#: erpnext/setup/setup_wizard/operations/install_fixtures.py:294 -#: erpnext/setup/setup_wizard/operations/install_fixtures.py:402 +#: erpnext/setup/setup_wizard/operations/install_fixtures.py:292 +#: erpnext/setup/setup_wizard/operations/install_fixtures.py:400 msgid "Lower Income" msgstr "" @@ -28810,7 +28862,7 @@ msgstr "" #: erpnext/manufacturing/doctype/workstation/workstation.json #: erpnext/selling/doctype/quotation/quotation.json #: erpnext/selling/doctype/sales_order/sales_order.json -#: erpnext/setup/setup_wizard/operations/install_fixtures.py:284 +#: erpnext/setup/setup_wizard/operations/install_fixtures.py:282 #: erpnext/stock/doctype/serial_and_batch_bundle/serial_and_batch_bundle.json #: erpnext/support/workspace/support/support.json msgid "Maintenance" @@ -29084,11 +29136,11 @@ msgstr "" msgid "Make project from a template." msgstr "" -#: erpnext/stock/doctype/item/item.js:591 +#: erpnext/stock/doctype/item/item.js:620 msgid "Make {0} Variant" msgstr "" -#: erpnext/stock/doctype/item/item.js:593 +#: erpnext/stock/doctype/item/item.js:622 msgid "Make {0} Variants" msgstr "" @@ -29143,8 +29195,8 @@ msgstr "" #: erpnext/manufacturing/doctype/bom/bom.py:261 #: erpnext/manufacturing/doctype/bom_update_log/bom_update_log.py:71 #: erpnext/public/js/controllers/accounts.js:249 -#: erpnext/public/js/controllers/transaction.js:2751 -#: erpnext/public/js/utils/party.js:317 +#: erpnext/public/js/controllers/transaction.js:2753 +#: erpnext/public/js/utils/party.js:321 #: erpnext/stock/doctype/delivery_note/delivery_note.js:164 #: erpnext/stock/doctype/inventory_dimension/inventory_dimension.json #: erpnext/stock/doctype/purchase_receipt/purchase_receipt.js:138 @@ -29183,11 +29235,11 @@ msgstr "" msgid "Mandatory Missing" msgstr "" -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:625 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:627 msgid "Mandatory Purchase Order" msgstr "" -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:646 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:648 msgid "Mandatory Purchase Receipt" msgstr "" @@ -29261,8 +29313,8 @@ msgstr "" #: erpnext/stock/doctype/material_request_item/material_request_item.json #: erpnext/stock/doctype/purchase_receipt_item/purchase_receipt_item.json #: erpnext/stock/doctype/stock_entry/stock_entry.json -#: erpnext/stock/doctype/stock_entry/stock_entry.py:930 -#: erpnext/stock/doctype/stock_entry/stock_entry.py:946 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:942 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:958 #: erpnext/stock/doctype/stock_entry_type/stock_entry_type.json #: erpnext/subcontracting/doctype/subcontracting_order_item/subcontracting_order_item.json #: erpnext/subcontracting/doctype/subcontracting_receipt_item/subcontracting_receipt_item.json @@ -29340,7 +29392,7 @@ msgstr "" msgid "Manufacturer Part Number" msgstr "" -#: erpnext/public/js/controllers/buying.js:359 +#: erpnext/public/js/controllers/buying.js:371 msgid "Manufacturer Part Number {0} is invalid" msgstr "" @@ -29395,7 +29447,7 @@ msgstr "" msgid "Manufacturing Manager" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:1904 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1916 msgid "Manufacturing Quantity is mandatory" msgstr "" @@ -29533,7 +29585,7 @@ msgid "Marital Status" msgstr "" #: erpnext/public/js/templates/crm_activities.html:39 -#: erpnext/public/js/templates/crm_activities.html:82 +#: erpnext/public/js/templates/crm_activities.html:123 msgid "Mark As Closed" msgstr "" @@ -29603,12 +29655,12 @@ msgstr "" #. Option for the 'Purpose' (Select) field in DocType 'Stock Entry Type' #: erpnext/setup/setup_wizard/operations/install_fixtures.py:121 #: erpnext/stock/doctype/stock_entry/stock_entry.json -#: erpnext/stock/doctype/stock_entry/stock_entry.py:931 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:943 #: erpnext/stock/doctype/stock_entry_type/stock_entry_type.json msgid "Material Consumption for Manufacture" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.js:505 +#: erpnext/stock/doctype/stock_entry/stock_entry.js:506 msgid "Material Consumption is not set in Manufacturing Settings." msgstr "" @@ -29981,11 +30033,11 @@ msgstr "" msgid "Maximum Payment Amount" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:3199 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:3211 msgid "Maximum Samples - {0} can be retained for Batch {1} and Item {2}." msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:3190 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:3202 msgid "Maximum Samples - {0} have already been retained for Batch {1} and Item {2} in Batch {3}." msgstr "" @@ -30234,8 +30286,8 @@ msgstr "" msgid "Microsecond" msgstr "" -#: erpnext/setup/setup_wizard/operations/install_fixtures.py:295 -#: erpnext/setup/setup_wizard/operations/install_fixtures.py:403 +#: erpnext/setup/setup_wizard/operations/install_fixtures.py:293 +#: erpnext/setup/setup_wizard/operations/install_fixtures.py:401 msgid "Middle Income" msgstr "" @@ -30467,19 +30519,19 @@ msgstr "" msgid "Miscellaneous Expenses" msgstr "" -#: erpnext/controllers/buying_controller.py:516 +#: erpnext/controllers/buying_controller.py:540 msgid "Mismatch" msgstr "" -#: erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py:1338 +#: erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py:1344 msgid "Missing" msgstr "" #: erpnext/accounts/doctype/pos_opening_entry/pos_opening_entry.py:69 #: erpnext/accounts/doctype/pos_profile/pos_profile.py:180 -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:585 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:587 #: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:2167 -#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:2725 +#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:2728 #: erpnext/assets/doctype/asset_category/asset_category.py:117 msgid "Missing Account" msgstr "" @@ -30501,15 +30553,15 @@ msgstr "" msgid "Missing Finance Book" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:1344 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1356 msgid "Missing Finished Good" msgstr "" -#: erpnext/stock/doctype/quality_inspection/quality_inspection.py:327 +#: erpnext/stock/doctype/quality_inspection/quality_inspection.py:328 msgid "Missing Formula" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:769 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:781 msgid "Missing Item" msgstr "" @@ -30994,7 +31046,7 @@ msgstr "" msgid "Multiple Tier Program" msgstr "" -#: erpnext/stock/doctype/item/item.js:141 +#: erpnext/stock/doctype/item/item.js:170 msgid "Multiple Variants" msgstr "" @@ -31006,7 +31058,7 @@ msgstr "" msgid "Multiple fiscal years exist for the date {0}. Please set company in Fiscal Year" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:1351 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1363 msgid "Multiple items cannot be marked as finished item" msgstr "" @@ -31018,7 +31070,7 @@ msgstr "" #: erpnext/manufacturing/doctype/work_order/work_order.py:1083 #: erpnext/setup/doctype/uom/uom.json #: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:137 -#: erpnext/utilities/transaction_base.py:553 +#: erpnext/utilities/transaction_base.py:557 msgid "Must be Whole Number" msgstr "" @@ -31051,7 +31103,6 @@ msgstr "" #: erpnext/accounts/doctype/finance_book/finance_book.json #: erpnext/accounts/doctype/payment_entry_reference/payment_entry_reference.json #: erpnext/accounts/doctype/payment_order_reference/payment_order_reference.json -#: erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.py:147 #: erpnext/accounts/report/deferred_revenue_and_expense/deferred_revenue_and_expense.py:359 #: erpnext/bulk_transaction/doctype/bulk_transaction_log_detail/bulk_transaction_log_detail.json #: erpnext/crm/doctype/appointment/appointment.json @@ -31189,7 +31240,7 @@ msgid "Natural Gas" msgstr "" #: erpnext/setup/setup_wizard/data/sales_stage.txt:3 -#: erpnext/setup/setup_wizard/operations/install_fixtures.py:415 +#: erpnext/setup/setup_wizard/operations/install_fixtures.py:413 msgid "Needs Analysis" msgstr "" @@ -31206,7 +31257,7 @@ msgid "Negative Valuation Rate is not allowed" msgstr "" #: erpnext/setup/setup_wizard/data/sales_stage.txt:8 -#: erpnext/setup/setup_wizard/operations/install_fixtures.py:420 +#: erpnext/setup/setup_wizard/operations/install_fixtures.py:418 msgid "Negotiation/Review" msgstr "" @@ -31560,7 +31611,7 @@ msgid "New Employee" msgstr "" #: erpnext/public/js/templates/crm_activities.html:14 -#: erpnext/public/js/utils/crm_activities.js:85 +#: erpnext/public/js/utils/crm_activities.js:87 msgid "New Event" msgstr "" @@ -31626,7 +31677,7 @@ msgid "New Serial No cannot have Warehouse. Warehouse must be set by Stock Entry msgstr "" #: erpnext/public/js/templates/crm_activities.html:8 -#: erpnext/public/js/utils/crm_activities.js:67 +#: erpnext/public/js/utils/crm_activities.js:69 msgid "New Task" msgstr "" @@ -31739,8 +31790,8 @@ msgstr "" #: erpnext/accounts/doctype/payment_entry/payment_entry.json #: erpnext/accounts/doctype/pos_invoice/pos_invoice.json #: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:622 -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:643 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:624 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:645 #: erpnext/accounts/doctype/sales_invoice/sales_invoice.json #: erpnext/buying/doctype/buying_settings/buying_settings.json #: erpnext/projects/doctype/project/project.json @@ -31819,10 +31870,10 @@ msgstr "" msgid "No POS Profile found. Please create a New POS Profile first" msgstr "" -#: erpnext/accounts/doctype/journal_entry/journal_entry.py:1507 -#: erpnext/accounts/doctype/journal_entry/journal_entry.py:1567 -#: erpnext/accounts/doctype/journal_entry/journal_entry.py:1581 -#: erpnext/stock/doctype/item/item.py:1364 +#: erpnext/accounts/doctype/journal_entry/journal_entry.py:1514 +#: erpnext/accounts/doctype/journal_entry/journal_entry.py:1574 +#: erpnext/accounts/doctype/journal_entry/journal_entry.py:1588 +#: erpnext/stock/doctype/item/item.py:1371 msgid "No Permission" msgstr "" @@ -31835,7 +31886,7 @@ msgstr "" msgid "No Records for these settings." msgstr "" -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:331 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:333 #: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:1030 msgid "No Remarks" msgstr "" @@ -31880,7 +31931,7 @@ msgstr "" msgid "No Work Orders were created" msgstr "" -#: erpnext/stock/doctype/purchase_receipt/purchase_receipt.py:761 +#: erpnext/stock/doctype/purchase_receipt/purchase_receipt.py:763 #: erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.py:689 msgid "No accounting entries for the following warehouses" msgstr "" @@ -32011,7 +32062,7 @@ msgstr "" msgid "No open POS Opening Entry found for POS Profile {0}." msgstr "" -#: erpnext/public/js/templates/crm_activities.html:104 +#: erpnext/public/js/templates/crm_activities.html:145 msgid "No open event" msgstr "" @@ -32031,7 +32082,7 @@ msgstr "" msgid "No outstanding {0} found for the {1} {2} which qualify the filters you have specified." msgstr "" -#: erpnext/public/js/controllers/buying.js:463 +#: erpnext/public/js/controllers/buying.js:475 msgid "No pending Material Requests found to link for the given items." msgstr "" @@ -32069,6 +32120,10 @@ msgstr "" msgid "No reserved stock to unreserve." msgstr "" +#: erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py:731 +msgid "No stock ledger entries were created. Please set the quantity or valuation rate for the items properly and try again." +msgstr "" + #. Description of the 'Stock Frozen Up To' (Date) field in DocType 'Stock #. Settings' #: erpnext/stock/doctype/stock_settings/stock_settings.json @@ -32143,7 +32198,7 @@ msgstr "" #: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:551 #: erpnext/assets/doctype/asset/asset.js:616 #: erpnext/assets/doctype/asset/asset.js:631 -#: erpnext/controllers/buying_controller.py:202 +#: erpnext/controllers/buying_controller.py:225 #: erpnext/selling/doctype/product_bundle/product_bundle.py:72 #: erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py:80 msgid "Not Allowed" @@ -32177,7 +32232,7 @@ msgstr "" msgid "Not Initiated" msgstr "" -#: erpnext/buying/doctype/purchase_order/purchase_order.py:785 +#: erpnext/buying/doctype/purchase_order/purchase_order.py:787 #: erpnext/templates/pages/material_request_info.py:21 #: erpnext/templates/pages/order.py:37 erpnext/templates/pages/rfq.py:46 msgid "Not Permitted" @@ -32242,10 +32297,10 @@ msgstr "" msgid "Not in stock" msgstr "" -#: erpnext/buying/doctype/purchase_order/purchase_order.py:706 -#: erpnext/manufacturing/doctype/work_order/work_order.py:1679 -#: erpnext/manufacturing/doctype/work_order/work_order.py:1837 -#: erpnext/manufacturing/doctype/work_order/work_order.py:1904 +#: erpnext/buying/doctype/purchase_order/purchase_order.py:708 +#: erpnext/manufacturing/doctype/work_order/work_order.py:1684 +#: erpnext/manufacturing/doctype/work_order/work_order.py:1842 +#: erpnext/manufacturing/doctype/work_order/work_order.py:1909 #: erpnext/selling/doctype/sales_order/sales_order.py:808 #: erpnext/selling/doctype/sales_order/sales_order.py:1611 msgid "Not permitted" @@ -32260,14 +32315,14 @@ msgstr "" #: erpnext/manufacturing/doctype/production_plan/production_plan.py:1002 #: erpnext/manufacturing/doctype/production_plan/production_plan.py:1708 #: erpnext/projects/doctype/timesheet/timesheet.json -#: erpnext/public/js/controllers/buying.js:464 +#: erpnext/public/js/controllers/buying.js:476 #: erpnext/selling/doctype/customer/customer.py:127 #: erpnext/selling/doctype/sales_order/sales_order.js:1155 -#: erpnext/stock/doctype/item/item.js:497 -#: erpnext/stock/doctype/item/item.py:565 +#: erpnext/stock/doctype/item/item.js:526 +#: erpnext/stock/doctype/item/item.py:567 #: erpnext/stock/doctype/item_price/item_price.json -#: erpnext/stock/doctype/stock_entry/stock_entry.py:1352 -#: erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py:924 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1364 +#: erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py:930 #: erpnext/templates/pages/timelog_info.html:43 msgid "Note" msgstr "" @@ -32276,7 +32331,7 @@ msgstr "" msgid "Note: Automatic log deletion only applies to logs of type Update Cost" msgstr "" -#: erpnext/accounts/party.py:672 +#: erpnext/accounts/party.py:691 msgid "Note: Due Date exceeds allowed customer credit days by {0} day(s)" msgstr "" @@ -32298,11 +32353,11 @@ msgstr "" msgid "Note: This Cost Center is a Group. Cannot make accounting entries against groups." msgstr "" -#: erpnext/stock/doctype/item/item.py:619 +#: erpnext/stock/doctype/item/item.py:621 msgid "Note: To merge the items, create a separate Stock Reconciliation for the old item {0}" msgstr "" -#: erpnext/accounts/doctype/journal_entry/journal_entry.py:985 +#: erpnext/accounts/doctype/journal_entry/journal_entry.py:994 msgid "Note: {0}" msgstr "" @@ -32752,7 +32807,7 @@ msgstr "" msgid "Only leaf nodes are allowed in transaction" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:945 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:957 msgid "Only one {0} entry can be created against the Work Order {1}" msgstr "" @@ -32847,11 +32902,12 @@ msgstr "" msgid "Open Contact" msgstr "" -#: erpnext/public/js/templates/crm_activities.html:76 +#: erpnext/public/js/templates/crm_activities.html:117 +#: erpnext/public/js/templates/crm_activities.html:164 msgid "Open Event" msgstr "" -#: erpnext/public/js/templates/crm_activities.html:63 +#: erpnext/public/js/templates/crm_activities.html:104 msgid "Open Events" msgstr "" @@ -32900,6 +32956,7 @@ msgid "Open Sales Orders" msgstr "" #: erpnext/public/js/templates/crm_activities.html:33 +#: erpnext/public/js/templates/crm_activities.html:92 msgid "Open Task" msgstr "" @@ -33030,7 +33087,7 @@ msgstr "" msgid "Opening Invoice Item" msgstr "" -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:1623 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:1625 #: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:1754 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 "" @@ -33067,7 +33124,7 @@ msgstr "" #. Label of the opening_stock (Float) field in DocType 'Item' #. Option for the 'Purpose' (Select) field in DocType 'Stock Reconciliation' -#: erpnext/stock/doctype/item/item.json erpnext/stock/doctype/item/item.py:294 +#: erpnext/stock/doctype/item/item.json erpnext/stock/doctype/item/item.py:296 #: erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.json msgid "Opening Stock" msgstr "" @@ -33231,7 +33288,7 @@ msgstr "" msgid "Operation {0} added multiple times in the work order {1}" msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.py:1077 +#: erpnext/manufacturing/doctype/job_card/job_card.py:1083 msgid "Operation {0} does not belong to the work order {1}" msgstr "" @@ -33611,7 +33668,7 @@ msgstr "" #: erpnext/crm/doctype/lead/lead.json #: erpnext/manufacturing/doctype/downtime_entry/downtime_entry.json #: erpnext/setup/doctype/email_digest/email_digest.json -#: erpnext/setup/setup_wizard/operations/install_fixtures.py:287 +#: erpnext/setup/setup_wizard/operations/install_fixtures.py:285 msgid "Other" msgstr "" @@ -33840,7 +33897,7 @@ msgstr "" msgid "Over Picking Allowance" msgstr "" -#: erpnext/controllers/stock_controller.py:1323 +#: erpnext/controllers/stock_controller.py:1334 msgid "Over Receipt" msgstr "" @@ -34254,7 +34311,7 @@ msgstr "" msgid "Packed Items" msgstr "" -#: erpnext/controllers/stock_controller.py:1159 +#: erpnext/controllers/stock_controller.py:1170 msgid "Packed Items cannot be transferred internally" msgstr "" @@ -34424,7 +34481,7 @@ msgstr "" msgid "Paid To Account Type" msgstr "" -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:321 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:323 #: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:1076 msgid "Paid amount + Write Off Amount can not be greater than Grand Total" msgstr "" @@ -34651,7 +34708,7 @@ msgstr "" msgid "Partial Payment in POS Transactions are not allowed." msgstr "" -#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1297 +#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1298 msgid "Partial Stock Reservation" msgstr "" @@ -35008,7 +35065,7 @@ msgstr "" msgid "Party Type" msgstr "" -#: erpnext/accounts/party.py:801 +#: erpnext/accounts/party.py:820 msgid "Party Type and Party can only be set for Receivable / Payable account

{0}" msgstr "" @@ -35066,6 +35123,10 @@ msgstr "" msgid "Past Due Date" msgstr "" +#: erpnext/public/js/templates/crm_activities.html:152 +msgid "Past Events" +msgstr "" + #. Label of the path (Data) field in DocType 'Supplier Scorecard Scoring #. Variable' #. Label of the path (Data) field in DocType 'Supplier Scorecard Variable' @@ -35684,7 +35745,7 @@ msgstr "" msgid "Payment Unlink Error" msgstr "" -#: erpnext/accounts/doctype/journal_entry/journal_entry.py:853 +#: erpnext/accounts/doctype/journal_entry/journal_entry.py:862 msgid "Payment against {0} {1} cannot be greater than Outstanding Amount {2}" msgstr "" @@ -35959,7 +36020,7 @@ msgid "Percentage you are allowed to transfer more against the quantity ordered. msgstr "" #: erpnext/setup/setup_wizard/data/sales_stage.txt:6 -#: erpnext/setup/setup_wizard/operations/install_fixtures.py:418 +#: erpnext/setup/setup_wizard/operations/install_fixtures.py:416 msgid "Perception Analysis" msgstr "" @@ -36557,7 +36618,7 @@ msgstr "" msgid "Please add {1} role to user {0}." msgstr "" -#: erpnext/controllers/stock_controller.py:1334 +#: erpnext/controllers/stock_controller.py:1345 msgid "Please adjust the qty or edit {0} to proceed." msgstr "" @@ -36565,7 +36626,7 @@ msgstr "" msgid "Please attach CSV file" msgstr "" -#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:2862 +#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:2865 msgid "Please cancel and amend the Payment Entry" msgstr "" @@ -36578,7 +36639,7 @@ msgstr "" msgid "Please cancel related transaction." msgstr "" -#: erpnext/accounts/doctype/journal_entry/journal_entry.py:927 +#: erpnext/accounts/doctype/journal_entry/journal_entry.py:936 msgid "Please check Multi Currency option to allow accounts with other currency" msgstr "" @@ -36651,7 +36712,7 @@ msgstr "" msgid "Please create purchase receipt or purchase invoice for the item {0}" msgstr "" -#: erpnext/stock/doctype/item/item.py:647 +#: erpnext/stock/doctype/item/item.py:649 msgid "Please delete Product Bundle {0}, before merging {1} into {2}" msgstr "" @@ -36693,11 +36754,11 @@ msgstr "" msgid "Please enable {} in {} to allow same item in multiple rows" msgstr "" -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:364 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:366 msgid "Please ensure that the {0} account is a Balance Sheet account. You can change the parent account to a Balance Sheet account or select a different account." msgstr "" -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:372 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:374 msgid "Please ensure that the {0} account {1} is a Payable account. You can change the account type to Payable or select a different account." msgstr "" @@ -36722,7 +36783,7 @@ msgstr "" msgid "Please enter Approving Role or Approving User" msgstr "" -#: erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py:891 +#: erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py:897 msgid "Please enter Cost Center" msgstr "" @@ -36734,7 +36795,7 @@ msgstr "" msgid "Please enter Employee Id of this sales person" msgstr "" -#: erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py:900 +#: erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py:906 msgid "Please enter Expense Account" msgstr "" @@ -36743,7 +36804,7 @@ msgstr "" msgid "Please enter Item Code to get Batch Number" msgstr "" -#: erpnext/public/js/controllers/transaction.js:2501 +#: erpnext/public/js/controllers/transaction.js:2503 msgid "Please enter Item Code to get batch no" msgstr "" @@ -36775,7 +36836,7 @@ msgstr "" msgid "Please enter Receipt Document" msgstr "" -#: erpnext/accounts/doctype/journal_entry/journal_entry.py:991 +#: erpnext/accounts/doctype/journal_entry/journal_entry.py:1000 msgid "Please enter Reference date" msgstr "" @@ -36799,7 +36860,7 @@ msgstr "" msgid "Please enter Warehouse and Date" msgstr "" -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:650 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:652 #: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:1137 msgid "Please enter Write Off Account" msgstr "" @@ -36848,7 +36909,7 @@ msgstr "" msgid "Please enter the phone number first" msgstr "" -#: erpnext/controllers/buying_controller.py:972 +#: erpnext/controllers/buying_controller.py:996 msgid "Please enter the {schedule_date}." msgstr "" @@ -36864,7 +36925,7 @@ msgstr "" msgid "Please enter {0}" msgstr "" -#: erpnext/public/js/utils/party.js:317 +#: erpnext/public/js/utils/party.js:321 msgid "Please enter {0} first" msgstr "" @@ -36908,7 +36969,7 @@ msgstr "" msgid "Please make sure you really want to delete all the transactions for this company. Your master data will remain as it is. This action cannot be undone." msgstr "" -#: erpnext/stock/doctype/item/item.js:496 +#: erpnext/stock/doctype/item/item.js:525 msgid "Please mention 'Weight UOM' along with Weight." msgstr "" @@ -36963,7 +37024,7 @@ msgstr "" msgid "Please select BOM for Item in Row {0}" msgstr "" -#: erpnext/controllers/buying_controller.py:443 +#: erpnext/controllers/buying_controller.py:467 msgid "Please select BOM in BOM field for Item {item_code}." msgstr "" @@ -37045,7 +37106,7 @@ msgstr "" msgid "Please select Qty against item {0}" msgstr "" -#: erpnext/stock/doctype/item/item.py:318 +#: erpnext/stock/doctype/item/item.py:320 msgid "Please select Sample Retention Warehouse in Stock Settings first" msgstr "" @@ -37057,7 +37118,7 @@ msgstr "" msgid "Please select Start Date and End Date for Item {0}" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:1266 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1278 msgid "Please select Subcontracting Order instead of Purchase Order {0}" msgstr "" @@ -37069,7 +37130,7 @@ msgstr "" msgid "Please select a BOM" msgstr "" -#: erpnext/accounts/party.py:409 +#: erpnext/accounts/party.py:428 msgid "Please select a Company" msgstr "" @@ -37077,7 +37138,7 @@ msgstr "" #: erpnext/manufacturing/doctype/bom/bom.js:599 #: erpnext/manufacturing/doctype/bom/bom.py:261 #: erpnext/public/js/controllers/accounts.js:249 -#: erpnext/public/js/controllers/transaction.js:2751 +#: erpnext/public/js/controllers/transaction.js:2753 msgid "Please select a Company first." msgstr "" @@ -37101,7 +37162,7 @@ msgstr "" msgid "Please select a Warehouse" msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.py:1381 +#: erpnext/manufacturing/doctype/job_card/job_card.py:1387 msgid "Please select a Work Order first." msgstr "" @@ -37154,7 +37215,7 @@ msgstr "" msgid "Please select an item code before setting the warehouse." msgstr "" -#: erpnext/accounts/doctype/journal_entry/journal_entry.py:1641 +#: erpnext/accounts/doctype/journal_entry/journal_entry.py:1648 msgid "Please select correct account" msgstr "" @@ -37296,7 +37357,7 @@ msgstr "" msgid "Please set Fiscal Code for the public administration '%s'" msgstr "" -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:582 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:584 msgid "Please set Fixed Asset Account in {} against {}." msgstr "" @@ -37350,7 +37411,7 @@ msgstr "" msgid "Please set a default Holiday List for Employee {0} or Company {1}" msgstr "" -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:1092 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:1094 msgid "Please set account in Warehouse {0}" msgstr "" @@ -37381,13 +37442,13 @@ msgstr "" #: erpnext/accounts/doctype/pos_opening_entry/pos_opening_entry.py:66 #: erpnext/accounts/doctype/pos_profile/pos_profile.py:177 -#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:2722 +#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:2725 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:179 -#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:2724 +#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:2727 msgid "Please set default Cash or Bank account in Mode of Payments {}" msgstr "" @@ -37424,7 +37485,7 @@ msgstr "" msgid "Please set one of the following:" msgstr "" -#: erpnext/public/js/controllers/transaction.js:2203 +#: erpnext/public/js/controllers/transaction.js:2205 msgid "Please set recurring after saving" msgstr "" @@ -37440,11 +37501,11 @@ msgstr "" msgid "Please set the Item Code first" msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.py:1443 +#: erpnext/manufacturing/doctype/job_card/job_card.py:1449 msgid "Please set the Target Warehouse in the Job Card" msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.py:1447 +#: erpnext/manufacturing/doctype/job_card/job_card.py:1453 msgid "Please set the WIP Warehouse in the Job Card" msgstr "" @@ -37495,7 +37556,7 @@ msgstr "" msgid "Please share this email with your support team so that they can find and fix the issue." msgstr "" -#: erpnext/public/js/controllers/transaction.js:2071 +#: erpnext/public/js/controllers/transaction.js:2073 msgid "Please specify" msgstr "" @@ -37757,7 +37818,7 @@ msgstr "" msgid "Posting Date Inheritance for Exchange Gain / Loss" msgstr "" -#: erpnext/stock/doctype/purchase_receipt/purchase_receipt.py:251 +#: erpnext/stock/doctype/purchase_receipt/purchase_receipt.py:253 #: erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.py:126 msgid "Posting Date cannot be future date" msgstr "" @@ -37815,7 +37876,7 @@ msgstr "" msgid "Posting Time" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:1852 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1864 msgid "Posting date and posting time is mandatory" msgstr "" @@ -37880,7 +37941,7 @@ msgstr "" msgid "Pre Sales" msgstr "" -#: erpnext/setup/setup_wizard/operations/install_fixtures.py:292 +#: erpnext/setup/setup_wizard/operations/install_fixtures.py:290 msgid "Preference" msgstr "" @@ -37992,11 +38053,11 @@ msgstr "" #. Option for the 'Price or Product Discount' (Select) field in DocType #. 'Pricing Rule' #: erpnext/accounts/doctype/pricing_rule/pricing_rule.json -#: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.py:221 +#: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.py:222 msgid "Price" msgstr "" -#: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.py:242 +#: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.py:236 msgid "Price ({0})" msgstr "" @@ -38204,7 +38265,7 @@ msgstr "" msgid "Price Not UOM Dependent" msgstr "" -#: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.py:249 +#: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.py:243 msgid "Price Per Unit ({0})" msgstr "" @@ -38226,7 +38287,7 @@ msgstr "" msgid "Price or product discount slabs are required" msgstr "" -#: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.py:235 +#: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.py:229 msgid "Price per Unit (Stock UOM)" msgstr "" @@ -38901,8 +38962,8 @@ msgstr "" #: erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.json #: erpnext/buying/doctype/purchase_order_item/purchase_order_item.json #: erpnext/buying/workspace/buying/buying.json -#: erpnext/public/js/controllers/buying.js:287 -#: erpnext/public/js/controllers/buying.js:535 +#: erpnext/public/js/controllers/buying.js:293 +#: erpnext/public/js/controllers/buying.js:547 #: erpnext/selling/doctype/product_bundle/product_bundle.json #: erpnext/selling/workspace/selling/selling.json #: erpnext/stock/doctype/purchase_receipt_item/purchase_receipt_item.json @@ -39552,7 +39613,7 @@ msgid "Proposal Writing" msgstr "" #: erpnext/setup/setup_wizard/data/sales_stage.txt:7 -#: erpnext/setup/setup_wizard/operations/install_fixtures.py:419 +#: erpnext/setup/setup_wizard/operations/install_fixtures.py:417 msgid "Proposal/Price Quote" msgstr "" @@ -39589,7 +39650,7 @@ msgid "Prospect {0} already exists" msgstr "" #: erpnext/setup/setup_wizard/data/sales_stage.txt:1 -#: erpnext/setup/setup_wizard/operations/install_fixtures.py:413 +#: erpnext/setup/setup_wizard/operations/install_fixtures.py:411 msgid "Prospecting" msgstr "" @@ -39807,12 +39868,12 @@ msgstr "" msgid "Purchase Invoice cannot be made against an existing asset {0}" msgstr "" -#: erpnext/stock/doctype/purchase_receipt/purchase_receipt.py:428 -#: erpnext/stock/doctype/purchase_receipt/purchase_receipt.py:442 +#: erpnext/stock/doctype/purchase_receipt/purchase_receipt.py:430 +#: erpnext/stock/doctype/purchase_receipt/purchase_receipt.py:444 msgid "Purchase Invoice {0} is already submitted" msgstr "" -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:2008 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:2010 msgid "Purchase Invoices" msgstr "" @@ -39879,7 +39940,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:710 +#: erpnext/controllers/buying_controller.py:734 #: 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 @@ -39965,11 +40026,11 @@ msgstr "" msgid "Purchase Order Pricing Rule" msgstr "" -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:621 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:623 msgid "Purchase Order Required" msgstr "" -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:616 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:618 msgid "Purchase Order Required for item {}" msgstr "" @@ -39985,15 +40046,15 @@ msgstr "" msgid "Purchase Order already created for all Sales Order items" msgstr "" -#: erpnext/stock/doctype/purchase_receipt/purchase_receipt.py:317 +#: erpnext/stock/doctype/purchase_receipt/purchase_receipt.py:319 msgid "Purchase Order number required for Item {0}" msgstr "" -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:659 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:661 msgid "Purchase Order {0} is not submitted" msgstr "" -#: erpnext/buying/doctype/purchase_order/purchase_order.py:872 +#: erpnext/buying/doctype/purchase_order/purchase_order.py:874 msgid "Purchase Orders" msgstr "" @@ -40003,7 +40064,7 @@ msgstr "" msgid "Purchase Orders Items Overdue" msgstr "" -#: erpnext/buying/doctype/purchase_order/purchase_order.py:302 +#: erpnext/buying/doctype/purchase_order/purchase_order.py:304 msgid "Purchase Orders are not allowed for {0} due to a scorecard standing of {1}." msgstr "" @@ -40107,11 +40168,11 @@ msgstr "" msgid "Purchase Receipt No" msgstr "" -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:642 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:644 msgid "Purchase Receipt Required" msgstr "" -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:637 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:639 msgid "Purchase Receipt Required for item {}" msgstr "" @@ -40132,7 +40193,7 @@ msgstr "" msgid "Purchase Receipt {0} created." msgstr "" -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:666 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:668 msgid "Purchase Receipt {0} is not submitted" msgstr "" @@ -40571,7 +40632,7 @@ msgid "Qty to Fetch" msgstr "" #: erpnext/manufacturing/doctype/job_card/job_card.js:225 -#: erpnext/manufacturing/doctype/job_card/job_card.py:751 +#: erpnext/manufacturing/doctype/job_card/job_card.py:757 msgid "Qty to Manufacture" msgstr "" @@ -40594,7 +40655,7 @@ msgstr "" #: erpnext/crm/doctype/lead/lead.json #: erpnext/setup/doctype/employee_education/employee_education.json #: erpnext/setup/setup_wizard/data/sales_stage.txt:2 -#: erpnext/setup/setup_wizard/operations/install_fixtures.py:414 +#: erpnext/setup/setup_wizard/operations/install_fixtures.py:412 msgid "Qualification" msgstr "" @@ -40895,7 +40956,7 @@ msgstr "" #: erpnext/buying/report/item_wise_purchase_history/item_wise_purchase_history.py:52 #: erpnext/buying/report/procurement_tracker/procurement_tracker.py:66 #: erpnext/buying/report/purchase_analytics/purchase_analytics.js:28 -#: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.py:211 +#: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.py:205 #: erpnext/manufacturing/doctype/blanket_order_item/blanket_order_item.json #: erpnext/manufacturing/doctype/bom/bom.js:396 #: erpnext/manufacturing/doctype/bom/bom.json @@ -40903,7 +40964,7 @@ msgstr "" #: erpnext/manufacturing/doctype/bom_creator/bom_creator.json #: erpnext/manufacturing/doctype/plant_floor/plant_floor.js:194 #: erpnext/manufacturing/doctype/plant_floor/plant_floor.js:218 -#: erpnext/public/js/controllers/buying.js:542 +#: erpnext/public/js/controllers/buying.js:554 #: erpnext/public/js/stock_analytics.js:50 #: erpnext/public/js/utils/serial_no_batch_selector.js:485 #: erpnext/selling/doctype/quotation_item/quotation_item.json @@ -40918,7 +40979,7 @@ msgstr "" #: erpnext/stock/doctype/material_request_item/material_request_item.json #: erpnext/stock/doctype/packing_slip_item/packing_slip_item.json #: erpnext/stock/doctype/pick_list_item/pick_list_item.json -#: erpnext/stock/doctype/stock_entry/stock_entry.js:649 +#: erpnext/stock/doctype/stock_entry/stock_entry.js:650 #: erpnext/stock/doctype/stock_entry_detail/stock_entry_detail.json #: erpnext/stock/doctype/stock_reconciliation_item/stock_reconciliation_item.json #: erpnext/stock/report/batch_item_expiry_status/batch_item_expiry_status.py:36 @@ -41017,7 +41078,7 @@ msgstr "" msgid "Quantity cannot be greater than {0} for Item {1}" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:1334 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1346 msgid "Quantity in row {0} ({1}) must be same as manufactured quantity {2}" msgstr "" @@ -41058,7 +41119,7 @@ msgstr "" msgid "Quantity to Manufacture" msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.py:1980 +#: erpnext/manufacturing/doctype/work_order/work_order.py:1985 msgid "Quantity to Manufacture can not be zero for the operation {0}" msgstr "" @@ -42439,7 +42500,7 @@ msgstr "" msgid "Reference" msgstr "" -#: erpnext/accounts/doctype/journal_entry/journal_entry.py:989 +#: erpnext/accounts/doctype/journal_entry/journal_entry.py:998 msgid "Reference #{0} dated {1}" msgstr "" @@ -42450,7 +42511,7 @@ msgstr "" msgid "Reference Date" msgstr "" -#: erpnext/public/js/controllers/transaction.js:2309 +#: erpnext/public/js/controllers/transaction.js:2311 msgid "Reference Date for Early Payment Discount" msgstr "" @@ -42577,7 +42638,7 @@ msgstr "" msgid "Reference No" msgstr "" -#: erpnext/accounts/doctype/journal_entry/journal_entry.py:603 +#: erpnext/accounts/doctype/journal_entry/journal_entry.py:612 msgid "Reference No & Reference Date is required for {0}" msgstr "" @@ -42585,7 +42646,7 @@ msgstr "" msgid "Reference No and Reference Date is mandatory for Bank transaction" msgstr "" -#: erpnext/accounts/doctype/journal_entry/journal_entry.py:608 +#: erpnext/accounts/doctype/journal_entry/journal_entry.py:617 msgid "Reference No is mandatory if you entered Reference Date" msgstr "" @@ -42859,7 +42920,7 @@ msgstr "" msgid "Release Date" msgstr "" -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:312 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:314 msgid "Release date must be in the future" msgstr "" @@ -43363,7 +43424,7 @@ msgstr "" #: erpnext/buying/doctype/supplier_quotation/supplier_quotation.js:66 #: erpnext/buying/doctype/supplier_quotation_item/supplier_quotation_item.json #: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.js:70 -#: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.py:270 +#: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.py:264 #: erpnext/buying/workspace/buying/buying.json #: erpnext/stock/doctype/material_request/material_request.js:168 msgid "Request for Quotation" @@ -43678,7 +43739,7 @@ msgstr "" msgid "Reserved Stock for Batch" msgstr "" -#: erpnext/controllers/buying_controller.py:452 +#: erpnext/controllers/buying_controller.py:476 msgid "Reserved Warehouse is mandatory for the Item {item_code} in Raw Materials supplied." msgstr "" @@ -43965,7 +44026,7 @@ msgstr "" msgid "Retention Stock Entry" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.js:523 +#: erpnext/stock/doctype/stock_entry/stock_entry.js:524 msgid "Retention Stock Entry already created or Sample Quantity not provided" msgstr "" @@ -44522,15 +44583,15 @@ msgstr "" msgid "Row #{0} (Payment Table): Amount must be positive" msgstr "" -#: erpnext/stock/doctype/item/item.py:493 +#: erpnext/stock/doctype/item/item.py:495 msgid "Row #{0}: A reorder entry already exists for warehouse {1} with reorder type {2}." msgstr "" -#: erpnext/stock/doctype/quality_inspection/quality_inspection.py:346 +#: erpnext/stock/doctype/quality_inspection/quality_inspection.py:347 msgid "Row #{0}: Acceptance Criteria Formula is incorrect." msgstr "" -#: erpnext/stock/doctype/quality_inspection/quality_inspection.py:326 +#: erpnext/stock/doctype/quality_inspection/quality_inspection.py:327 msgid "Row #{0}: Acceptance Criteria Formula is required." msgstr "" @@ -44568,7 +44629,7 @@ msgstr "" msgid "Row #{0}: Asset {1} cannot be submitted, it is already {2}" msgstr "" -#: erpnext/buying/doctype/purchase_order/purchase_order.py:350 +#: erpnext/buying/doctype/purchase_order/purchase_order.py:352 msgid "Row #{0}: BOM is not specified for subcontracting item {0}" msgstr "" @@ -44604,7 +44665,7 @@ msgstr "" msgid "Row #{0}: Cannot set Rate if amount is greater than billed amount for Item {1}." msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.py:958 +#: erpnext/manufacturing/doctype/job_card/job_card.py:964 msgid "Row #{0}: Cannot transfer more than Required Qty {1} for Item {2} against Job Card {3}" msgstr "" @@ -44644,7 +44705,7 @@ msgstr "" msgid "Row #{0}: Dates overlapping with other row" msgstr "" -#: erpnext/buying/doctype/purchase_order/purchase_order.py:374 +#: erpnext/buying/doctype/purchase_order/purchase_order.py:376 msgid "Row #{0}: Default BOM not found for FG Item {1}" msgstr "" @@ -44660,15 +44721,15 @@ msgstr "" msgid "Row #{0}: Expense Account not set for the Item {1}. {2}" msgstr "" -#: erpnext/buying/doctype/purchase_order/purchase_order.py:379 +#: erpnext/buying/doctype/purchase_order/purchase_order.py:381 msgid "Row #{0}: Finished Good Item Qty can not be zero" msgstr "" -#: erpnext/buying/doctype/purchase_order/purchase_order.py:361 +#: erpnext/buying/doctype/purchase_order/purchase_order.py:363 msgid "Row #{0}: Finished Good Item is not specified for service item {1}" msgstr "" -#: erpnext/buying/doctype/purchase_order/purchase_order.py:368 +#: erpnext/buying/doctype/purchase_order/purchase_order.py:370 msgid "Row #{0}: Finished Good Item {1} must be a sub-contracted item" msgstr "" @@ -44684,11 +44745,11 @@ msgstr "" msgid "Row #{0}: For {1} Clearance date {2} cannot be before Cheque Date {3}" msgstr "" -#: erpnext/accounts/doctype/journal_entry/journal_entry.py:651 +#: erpnext/accounts/doctype/journal_entry/journal_entry.py:660 msgid "Row #{0}: For {1}, you can select reference document only if account gets credited" msgstr "" -#: erpnext/accounts/doctype/journal_entry/journal_entry.py:661 +#: erpnext/accounts/doctype/journal_entry/journal_entry.py:670 msgid "Row #{0}: For {1}, you can select reference document only if account gets debited" msgstr "" @@ -44696,6 +44757,10 @@ msgstr "" msgid "Row #{0}: From Date cannot be before To Date" msgstr "" +#: erpnext/manufacturing/doctype/job_card/job_card.py:747 +msgid "Row #{0}: From Time and To Time fields are required" +msgstr "" + #: erpnext/public/js/utils/barcode_scanner.js:394 msgid "Row #{0}: Item added" msgstr "" @@ -44704,7 +44769,7 @@ msgstr "" msgid "Row #{0}: Item {1} does not exist" msgstr "" -#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1201 +#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1202 msgid "Row #{0}: Item {1} has been picked, please reserve stock from the Pick List." msgstr "" @@ -44728,11 +44793,11 @@ msgstr "" msgid "Row #{0}: Not allowed to change Supplier as Purchase Order already exists" msgstr "" -#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1284 +#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1285 msgid "Row #{0}: Only {1} available to reserve for the Item {2}" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:649 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:661 msgid "Row #{0}: Operation {1} is not completed for {2} qty of finished goods in Work Order {3}. Please update operation status via Job Card {4}." msgstr "" @@ -44752,7 +44817,7 @@ msgstr "" msgid "Row #{0}: Please select the Sub Assembly Warehouse" msgstr "" -#: erpnext/stock/doctype/item/item.py:500 +#: erpnext/stock/doctype/item/item.py:502 msgid "Row #{0}: Please set reorder quantity" msgstr "" @@ -44773,15 +44838,15 @@ msgstr "" 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:1054 +#: erpnext/controllers/stock_controller.py:1065 msgid "Row #{0}: Quality Inspection is required for Item {1}" msgstr "" -#: erpnext/controllers/stock_controller.py:1069 +#: erpnext/controllers/stock_controller.py:1080 msgid "Row #{0}: Quality Inspection {1} is not submitted for the item: {2}" msgstr "" -#: erpnext/controllers/stock_controller.py:1084 +#: erpnext/controllers/stock_controller.py:1095 msgid "Row #{0}: Quality Inspection {1} was rejected for item {2}" msgstr "" @@ -44790,7 +44855,7 @@ msgstr "" msgid "Row #{0}: Quantity for Item {1} cannot be zero." msgstr "" -#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1269 +#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1270 msgid "Row #{0}: Quantity to reserve for the Item {1} should be greater than 0." msgstr "" @@ -44863,11 +44928,11 @@ msgstr "" msgid "Row #{0}: Start Time must be before End Time" msgstr "" -#: erpnext/stock/doctype/quality_inspection/quality_inspection.py:230 +#: erpnext/stock/doctype/quality_inspection/quality_inspection.py:231 msgid "Row #{0}: Status is mandatory" msgstr "" -#: erpnext/accounts/doctype/journal_entry/journal_entry.py:414 +#: erpnext/accounts/doctype/journal_entry/journal_entry.py:423 msgid "Row #{0}: Status must be {1} for Invoice Discounting {2}" msgstr "" @@ -44875,15 +44940,15 @@ msgstr "" 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:1214 +#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1215 msgid "Row #{0}: Stock cannot be reserved for a non-stock Item {1}" msgstr "" -#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1227 +#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1228 msgid "Row #{0}: Stock cannot be reserved in group warehouse {1}." msgstr "" -#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1241 +#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1242 msgid "Row #{0}: Stock is already reserved for the Item {1}." msgstr "" @@ -44895,8 +44960,8 @@ msgstr "" 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:1111 -#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1255 +#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1112 +#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1256 msgid "Row #{0}: Stock not available to reserve for the Item {1} in Warehouse {2}." msgstr "" @@ -44904,7 +44969,7 @@ msgstr "" msgid "Row #{0}: The batch {1} has already expired." msgstr "" -#: erpnext/stock/doctype/item/item.py:509 +#: erpnext/stock/doctype/item/item.py:511 msgid "Row #{0}: The warehouse {1} is not a child warehouse of a group warehouse {2}" msgstr "" @@ -44920,11 +44985,11 @@ msgstr "" msgid "Row #{0}: You must select an Asset for Item {1}." msgstr "" -#: erpnext/public/js/controllers/buying.js:230 +#: erpnext/public/js/controllers/buying.js:236 msgid "Row #{0}: {1} can not be negative for item {2}" msgstr "" -#: erpnext/stock/doctype/quality_inspection/quality_inspection.py:339 +#: erpnext/stock/doctype/quality_inspection/quality_inspection.py:340 msgid "Row #{0}: {1} is not a valid reading field. Please refer to the field description." msgstr "" @@ -44940,39 +45005,39 @@ msgstr "" msgid "Row #{1}: Warehouse is mandatory for stock Item {0}" msgstr "" -#: erpnext/controllers/buying_controller.py:236 +#: erpnext/controllers/buying_controller.py:259 msgid "Row #{idx}: Cannot select Supplier Warehouse while suppling raw materials to subcontractor." msgstr "" -#: erpnext/controllers/buying_controller.py:382 +#: erpnext/controllers/buying_controller.py:406 msgid "Row #{idx}: Item rate has been updated as per valuation rate since its an internal stock transfer." msgstr "" -#: erpnext/controllers/buying_controller.py:846 +#: erpnext/controllers/buying_controller.py:870 msgid "Row #{idx}: Please enter a location for the asset item {item_code}." msgstr "" -#: erpnext/controllers/buying_controller.py:513 +#: erpnext/controllers/buying_controller.py:537 msgid "Row #{idx}: Received Qty must be equal to Accepted + Rejected Qty for Item {item_code}." msgstr "" -#: erpnext/controllers/buying_controller.py:526 +#: erpnext/controllers/buying_controller.py:550 msgid "Row #{idx}: {field_label} can not be negative for item {item_code}." msgstr "" -#: erpnext/controllers/buying_controller.py:472 +#: erpnext/controllers/buying_controller.py:496 msgid "Row #{idx}: {field_label} is mandatory." msgstr "" -#: erpnext/controllers/buying_controller.py:494 +#: erpnext/controllers/buying_controller.py:518 msgid "Row #{idx}: {field_label} is not allowed in Purchase Return." msgstr "" -#: erpnext/controllers/buying_controller.py:227 +#: erpnext/controllers/buying_controller.py:250 msgid "Row #{idx}: {from_warehouse_field} and {to_warehouse_field} cannot be same." msgstr "" -#: erpnext/controllers/buying_controller.py:964 +#: erpnext/controllers/buying_controller.py:988 msgid "Row #{idx}: {schedule_date} cannot be before {transaction_date}." msgstr "" @@ -45037,11 +45102,11 @@ msgstr "" msgid "Row #{}: {} {} does not exist." msgstr "" -#: erpnext/stock/doctype/item/item.py:1396 +#: erpnext/stock/doctype/item/item.py:1403 msgid "Row #{}: {} {} doesn't belong to Company {}. Please select valid {}." msgstr "" -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:431 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:433 msgid "Row No {0}: Warehouse is required. Please set a Default Warehouse for Item {1} and Company {2}" msgstr "" @@ -45061,11 +45126,11 @@ msgstr "" msgid "Row {0} picked quantity is less than the required quantity, additional {1} {2} required." msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:1197 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1209 msgid "Row {0}# Item {1} cannot be transferred more than {2} against {3} {4}" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:1221 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1233 msgid "Row {0}# Item {1} not found in 'Raw Materials Supplied' table in {2} {3}" msgstr "" @@ -45073,7 +45138,7 @@ msgstr "" msgid "Row {0}: Accepted Qty and Rejected Qty can't be zero at the same time." msgstr "" -#: erpnext/accounts/doctype/journal_entry/journal_entry.py:566 +#: erpnext/accounts/doctype/journal_entry/journal_entry.py:575 msgid "Row {0}: Account {1} and Party Type {2} have different account types" msgstr "" @@ -45081,11 +45146,11 @@ msgstr "" msgid "Row {0}: Activity Type is mandatory." msgstr "" -#: erpnext/accounts/doctype/journal_entry/journal_entry.py:632 +#: erpnext/accounts/doctype/journal_entry/journal_entry.py:641 msgid "Row {0}: Advance against Customer must be credit" msgstr "" -#: erpnext/accounts/doctype/journal_entry/journal_entry.py:634 +#: erpnext/accounts/doctype/journal_entry/journal_entry.py:643 msgid "Row {0}: Advance against Supplier must be debit" msgstr "" @@ -45097,7 +45162,7 @@ msgstr "" msgid "Row {0}: Allocated amount {1} must be less than or equal to remaining payment amount {2}" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:925 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:937 msgid "Row {0}: As {1} is enabled, raw materials cannot be added to {2} entry. Use {3} entry to consume raw materials." msgstr "" @@ -45105,7 +45170,7 @@ msgstr "" msgid "Row {0}: Bill of Materials not found for the Item {1}" msgstr "" -#: erpnext/accounts/doctype/journal_entry/journal_entry.py:885 +#: erpnext/accounts/doctype/journal_entry/journal_entry.py:894 msgid "Row {0}: Both Debit and Credit values cannot be zero" msgstr "" @@ -45121,7 +45186,7 @@ msgstr "" msgid "Row {0}: Cost center is required for an item {1}" msgstr "" -#: erpnext/accounts/doctype/journal_entry/journal_entry.py:731 +#: erpnext/accounts/doctype/journal_entry/journal_entry.py:740 msgid "Row {0}: Credit entry can not be linked with a {1}" msgstr "" @@ -45129,7 +45194,7 @@ msgstr "" msgid "Row {0}: Currency of the BOM #{1} should be equal to the selected currency {2}" msgstr "" -#: erpnext/accounts/doctype/journal_entry/journal_entry.py:726 +#: erpnext/accounts/doctype/journal_entry/journal_entry.py:735 msgid "Row {0}: Debit entry can not be linked with a {1}" msgstr "" @@ -45149,7 +45214,7 @@ msgstr "" msgid "Row {0}: Either Delivery Note Item or Packed Item reference is mandatory." msgstr "" -#: erpnext/accounts/doctype/journal_entry/journal_entry.py:976 +#: erpnext/accounts/doctype/journal_entry/journal_entry.py:985 #: erpnext/controllers/taxes_and_totals.py:1205 msgid "Row {0}: Exchange Rate is mandatory" msgstr "" @@ -45158,15 +45223,15 @@ msgstr "" msgid "Row {0}: Expected Value After Useful Life must be less than Gross Purchase Amount" msgstr "" -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:522 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:524 msgid "Row {0}: Expense Head changed to {1} as no Purchase Receipt is created against Item {2}." msgstr "" -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:479 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:481 msgid "Row {0}: Expense Head changed to {1} because account {2} is not linked to warehouse {3} or it is not the default inventory account" msgstr "" -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:504 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:506 msgid "Row {0}: Expense Head changed to {1} because expense is booked against this account in Purchase Receipt {2}" msgstr "" @@ -45183,7 +45248,7 @@ msgstr "" msgid "Row {0}: From Time and To Time of {1} is overlapping with {2}" msgstr "" -#: erpnext/controllers/stock_controller.py:1150 +#: erpnext/controllers/stock_controller.py:1161 msgid "Row {0}: From Warehouse is mandatory for internal transfers" msgstr "" @@ -45195,7 +45260,7 @@ msgstr "" msgid "Row {0}: Hours value must be greater than zero." msgstr "" -#: erpnext/accounts/doctype/journal_entry/journal_entry.py:751 +#: erpnext/accounts/doctype/journal_entry/journal_entry.py:760 msgid "Row {0}: Invalid reference {1}" msgstr "" @@ -45227,11 +45292,11 @@ msgstr "" msgid "Row {0}: Packing Slip is already created for Item {1}." msgstr "" -#: erpnext/accounts/doctype/journal_entry/journal_entry.py:777 +#: erpnext/accounts/doctype/journal_entry/journal_entry.py:786 msgid "Row {0}: Party / Account does not match with {1} / {2} in {3} {4}" msgstr "" -#: erpnext/accounts/doctype/journal_entry/journal_entry.py:557 +#: erpnext/accounts/doctype/journal_entry/journal_entry.py:566 msgid "Row {0}: Party Type and Party is required for Receivable / Payable account {1}" msgstr "" @@ -45239,11 +45304,11 @@ msgstr "" msgid "Row {0}: Payment Term is mandatory" msgstr "" -#: erpnext/accounts/doctype/journal_entry/journal_entry.py:625 +#: erpnext/accounts/doctype/journal_entry/journal_entry.py:634 msgid "Row {0}: Payment against Sales/Purchase Order should always be marked as advance" msgstr "" -#: erpnext/accounts/doctype/journal_entry/journal_entry.py:618 +#: erpnext/accounts/doctype/journal_entry/journal_entry.py:627 msgid "Row {0}: Please check 'Is Advance' against Account {1} if this is an advance entry." msgstr "" @@ -45299,7 +45364,7 @@ msgstr "" msgid "Row {0}: Quantity cannot be negative." msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:723 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:735 msgid "Row {0}: Quantity not available for {4} in warehouse {1} at posting time of the entry ({2} {3})" msgstr "" @@ -45307,11 +45372,11 @@ msgstr "" msgid "Row {0}: Shift cannot be changed since the depreciation has already been processed" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:1234 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1246 msgid "Row {0}: Subcontracted Item is mandatory for the raw material {1}" msgstr "" -#: erpnext/controllers/stock_controller.py:1141 +#: erpnext/controllers/stock_controller.py:1152 msgid "Row {0}: Target Warehouse is mandatory for internal transfers" msgstr "" @@ -45360,7 +45425,7 @@ msgstr "" msgid "Row {0}: {1} {2} cannot be same as {3} (Party Account) {4}" msgstr "" -#: erpnext/accounts/doctype/journal_entry/journal_entry.py:791 +#: erpnext/accounts/doctype/journal_entry/journal_entry.py:800 msgid "Row {0}: {1} {2} does not match with {3}" msgstr "" @@ -45368,11 +45433,11 @@ msgstr "" msgid "Row {0}: {2} Item {1} does not exist in {2} {3}" msgstr "" -#: erpnext/utilities/transaction_base.py:548 +#: erpnext/utilities/transaction_base.py:552 msgid "Row {1}: Quantity ({0}) cannot be a fraction. To allow this, disable '{2}' in UOM {3}." msgstr "" -#: erpnext/controllers/buying_controller.py:828 +#: erpnext/controllers/buying_controller.py:852 msgid "Row {idx}: Asset Naming Series is mandatory for the auto creation of assets for item {item_code}." msgstr "" @@ -45574,7 +45639,7 @@ msgstr "" #: erpnext/setup/doctype/company/company.py:523 #: erpnext/setup/doctype/company/company_dashboard.py:9 #: erpnext/setup/doctype/sales_person/sales_person_dashboard.py:12 -#: erpnext/setup/setup_wizard/operations/install_fixtures.py:282 +#: erpnext/setup/setup_wizard/operations/install_fixtures.py:280 #: erpnext/stock/doctype/item/item.json msgid "Sales" msgstr "" @@ -46445,12 +46510,12 @@ msgstr "" #. Label of the sample_size (Float) field in DocType 'Quality Inspection' #: erpnext/manufacturing/report/quality_inspection_summary/quality_inspection_summary.py:93 -#: erpnext/public/js/controllers/transaction.js:2367 +#: erpnext/public/js/controllers/transaction.js:2369 #: erpnext/stock/doctype/quality_inspection/quality_inspection.json msgid "Sample Size" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:3181 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:3193 msgid "Sample quantity {0} cannot be more than received quantity {1}" msgstr "" @@ -46882,7 +46947,7 @@ msgstr "" msgid "Select Alternative Items for Sales Order" msgstr "" -#: erpnext/stock/doctype/item/item.js:607 +#: erpnext/stock/doctype/item/item.js:636 msgid "Select Attribute Values" msgstr "" @@ -46954,6 +47019,11 @@ msgstr "" msgid "Select Dimension" msgstr "" +#. Label of the dispatch_address (Link) field in DocType 'Purchase Invoice' +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json +msgid "Select Dispatch Address " +msgstr "" + #. Label of the select_doctype (Select) field in DocType 'Rename Tool' #: erpnext/utilities/doctype/rename_tool/rename_tool.json msgid "Select DocType" @@ -46976,7 +47046,7 @@ msgstr "" msgid "Select Items based on Delivery Date" msgstr "" -#: erpnext/public/js/controllers/transaction.js:2403 +#: erpnext/public/js/controllers/transaction.js:2405 msgid "Select Items for Quality Inspection" msgstr "" @@ -47087,7 +47157,7 @@ msgstr "" msgid "Select a company" msgstr "" -#: erpnext/stock/doctype/item/item.js:942 +#: erpnext/stock/doctype/item/item.js:971 msgid "Select an Item Group." msgstr "" @@ -47103,11 +47173,11 @@ msgstr "" msgid "Select an item from each set to be used in the Sales Order." msgstr "" -#: erpnext/stock/doctype/item/item.js:620 +#: erpnext/stock/doctype/item/item.js:649 msgid "Select at least one value from each of the attributes." msgstr "" -#: erpnext/public/js/utils/party.js:352 +#: erpnext/public/js/utils/party.js:356 msgid "Select company first" msgstr "" @@ -47489,7 +47559,7 @@ msgstr "" #: erpnext/manufacturing/doctype/job_card/job_card.json #: erpnext/manufacturing/report/cost_of_poor_quality_report/cost_of_poor_quality_report.js:74 #: erpnext/manufacturing/report/cost_of_poor_quality_report/cost_of_poor_quality_report.py:114 -#: erpnext/public/js/controllers/transaction.js:2380 +#: erpnext/public/js/controllers/transaction.js:2382 #: erpnext/public/js/utils/serial_no_batch_selector.js:421 #: erpnext/selling/doctype/installation_note_item/installation_note_item.json #: erpnext/stock/doctype/delivery_note_item/delivery_note_item.json @@ -48089,12 +48159,12 @@ msgid "Service Stop Date" msgstr "" #: erpnext/accounts/deferred_revenue.py:44 -#: erpnext/public/js/controllers/transaction.js:1423 +#: erpnext/public/js/controllers/transaction.js:1420 msgid "Service Stop Date cannot be after Service End Date" msgstr "" #: erpnext/accounts/deferred_revenue.py:41 -#: erpnext/public/js/controllers/transaction.js:1420 +#: erpnext/public/js/controllers/transaction.js:1417 msgid "Service Stop Date cannot be before Service Start Date" msgstr "" @@ -48608,6 +48678,8 @@ msgstr "" #. Label of the shipping_address (Text Editor) field in DocType 'POS Invoice' #. Label of the shipping_address_display (Text Editor) field in DocType #. 'Purchase Invoice' +#. Label of the company_shipping_address_section (Section Break) field in +#. DocType 'Purchase Invoice' #. Label of the shipping_address (Text Editor) field in DocType 'Sales Invoice' #. Label of the shipping_address_section (Section Break) field in DocType #. 'Sales Invoice' @@ -48630,6 +48702,8 @@ msgstr "" #. 'Delivery Note' #. Label of the shipping_address_display (Text Editor) field in DocType #. 'Purchase Receipt' +#. Label of the section_break_98 (Section Break) field in DocType 'Purchase +#. Receipt' #. Label of the shipping_address_display (Text Editor) field in DocType #. 'Subcontracting Receipt' #: erpnext/accounts/doctype/accounts_settings/accounts_settings.json @@ -48975,7 +49049,7 @@ msgstr "" msgid "Show Variant Attributes" msgstr "" -#: erpnext/stock/doctype/item/item.js:109 +#: erpnext/stock/doctype/item/item.js:138 msgid "Show Variants" msgstr "" @@ -49114,7 +49188,7 @@ msgstr "" msgid "Single Transaction Threshold" msgstr "" -#: erpnext/stock/doctype/item/item.js:134 +#: erpnext/stock/doctype/item/item.js:163 msgid "Single Variant" msgstr "" @@ -49323,7 +49397,7 @@ msgstr "" #: erpnext/manufacturing/report/work_order_stock_report/work_order_stock_report.py:126 #: erpnext/stock/dashboard/item_dashboard.js:224 #: erpnext/stock/doctype/material_request_item/material_request_item.json -#: erpnext/stock/doctype/stock_entry/stock_entry.js:640 +#: erpnext/stock/doctype/stock_entry/stock_entry.js:641 #: erpnext/stock/doctype/stock_entry_detail/stock_entry_detail.json msgid "Source Warehouse" msgstr "" @@ -49347,7 +49421,7 @@ msgstr "" msgid "Source and Target Location cannot be same" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:597 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:609 msgid "Source and target warehouse cannot be same for row {0}" msgstr "" @@ -49360,8 +49434,8 @@ msgstr "" msgid "Source of Funds (Liabilities)" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:574 -#: erpnext/stock/doctype/stock_entry/stock_entry.py:591 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:586 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:603 msgid "Source warehouse is mandatory for row {0}" msgstr "" @@ -49508,7 +49582,7 @@ msgid "Stale Days should start from 1." msgstr "" #: erpnext/setup/setup_wizard/operations/defaults_setup.py:69 -#: erpnext/setup/setup_wizard/operations/install_fixtures.py:457 +#: erpnext/setup/setup_wizard/operations/install_fixtures.py:455 msgid "Standard Buying" msgstr "" @@ -49521,8 +49595,8 @@ msgid "Standard Rated Expenses" msgstr "" #: erpnext/setup/setup_wizard/operations/defaults_setup.py:69 -#: erpnext/setup/setup_wizard/operations/install_fixtures.py:465 -#: erpnext/stock/doctype/item/item.py:243 +#: erpnext/setup/setup_wizard/operations/install_fixtures.py:463 +#: erpnext/stock/doctype/item/item.py:245 msgid "Standard Selling" msgstr "" @@ -49994,7 +50068,7 @@ msgstr "" msgid "Status must be one of {0}" msgstr "" -#: erpnext/stock/doctype/quality_inspection/quality_inspection.py:296 +#: erpnext/stock/doctype/quality_inspection/quality_inspection.py:297 msgid "Status set to rejected as there are one or more rejected readings." msgstr "" @@ -50022,8 +50096,8 @@ msgstr "" #: erpnext/accounts/doctype/account/account.json #: erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py:50 #: erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts_with_account_number.py:73 -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:1328 -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:1362 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:1330 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:1364 #: erpnext/accounts/report/account_balance/account_balance.js:58 msgid "Stock Adjustment" msgstr "" @@ -50065,7 +50139,7 @@ msgstr "" #. Label of a Link in the Stock Workspace #. Label of a shortcut in the Stock Workspace #: erpnext/selling/doctype/quotation_item/quotation_item.json -#: erpnext/stock/doctype/item/item.js:61 +#: erpnext/stock/doctype/item/item.js:90 #: erpnext/stock/doctype/warehouse/warehouse.js:61 #: erpnext/stock/report/stock_balance/stock_balance.json #: erpnext/stock/report/warehouse_wise_stock_balance/warehouse_wise_stock_balance.py:107 @@ -50131,7 +50205,7 @@ msgstr "" msgid "Stock Details" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:691 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:703 msgid "Stock Entries already created for Work Order {0}: {1}" msgstr "" @@ -50184,11 +50258,11 @@ msgstr "" msgid "Stock Entry {0} created" msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.py:1307 +#: erpnext/manufacturing/doctype/job_card/job_card.py:1313 msgid "Stock Entry {0} has created" msgstr "" -#: erpnext/accounts/doctype/journal_entry/journal_entry.py:1248 +#: erpnext/accounts/doctype/journal_entry/journal_entry.py:1257 msgid "Stock Entry {0} is not submitted" msgstr "" @@ -50219,7 +50293,7 @@ msgstr "" #. Label of a shortcut in the Stock Workspace #: erpnext/public/js/controllers/stock_controller.js:66 #: erpnext/public/js/utils/ledger_preview.js:37 -#: erpnext/stock/doctype/item/item.js:71 +#: erpnext/stock/doctype/item/item.js:100 #: erpnext/stock/doctype/item/item_dashboard.py:8 #: erpnext/stock/report/stock_ledger/stock_ledger.json #: erpnext/stock/workspace/stock/stock.json @@ -50255,7 +50329,7 @@ msgid "Stock Ledger Variance" msgstr "" #: erpnext/stock/doctype/batch/batch.js:68 -#: erpnext/stock/doctype/item/item.js:470 +#: erpnext/stock/doctype/item/item.js:499 msgid "Stock Levels" msgstr "" @@ -50321,7 +50395,7 @@ msgstr "" #. Name of a report #. Label of a Link in the Stock Workspace -#: erpnext/stock/doctype/item/item.js:81 +#: erpnext/stock/doctype/item/item.js:110 #: erpnext/stock/report/stock_projected_qty/stock_projected_qty.json #: erpnext/stock/workspace/stock/stock.json msgid "Stock Projected Qty" @@ -50363,7 +50437,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:610 +#: erpnext/stock/doctype/item/item.py:612 #: erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.json #: erpnext/stock/workspace/stock/stock.json msgid "Stock Reconciliation" @@ -50374,7 +50448,7 @@ msgstr "" msgid "Stock Reconciliation Item" msgstr "" -#: erpnext/stock/doctype/item/item.py:610 +#: erpnext/stock/doctype/item/item.py:612 msgid "Stock Reconciliations" msgstr "" @@ -50405,13 +50479,13 @@ msgstr "" #: erpnext/stock/doctype/stock_entry/stock_entry_dashboard.py:25 #: erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py:664 #: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:567 -#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1114 -#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1217 -#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1230 -#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1244 -#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1258 -#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1272 -#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1289 +#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1115 +#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1218 +#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1231 +#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1245 +#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1259 +#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1273 +#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1290 #: erpnext/stock/doctype/stock_settings/stock_settings.json #: erpnext/stock/doctype/stock_settings/stock_settings.py:171 #: erpnext/stock/doctype/stock_settings/stock_settings.py:183 @@ -50420,12 +50494,12 @@ msgstr "" msgid "Stock Reservation" msgstr "" -#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1398 +#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1399 msgid "Stock Reservation Entries Cancelled" msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.py:1535 -#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1350 +#: erpnext/manufacturing/doctype/work_order/work_order.py:1540 +#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1351 msgid "Stock Reservation Entries Created" msgstr "" @@ -50534,6 +50608,7 @@ msgstr "" #. Label of the stock_uom (Link) field in DocType 'Stock Closing Balance' #. Label of the stock_uom (Link) field in DocType 'Stock Entry Detail' #. Label of the stock_uom (Link) field in DocType 'Stock Ledger Entry' +#. Label of the stock_uom (Link) field in DocType 'Stock Reconciliation Item' #. 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' @@ -50547,7 +50622,7 @@ msgstr "" #: erpnext/buying/doctype/request_for_quotation_item/request_for_quotation_item.json #: erpnext/buying/doctype/supplier_quotation_item/supplier_quotation_item.json #: erpnext/buying/report/requested_items_to_order_and_receive/requested_items_to_order_and_receive.py:213 -#: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.py:228 +#: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.py:208 #: erpnext/manufacturing/doctype/bom_creator_item/bom_creator_item.json #: erpnext/manufacturing/doctype/bom_explosion_item/bom_explosion_item.json #: erpnext/manufacturing/doctype/bom_item/bom_item.json @@ -50567,6 +50642,7 @@ msgstr "" #: erpnext/stock/doctype/stock_closing_balance/stock_closing_balance.json #: erpnext/stock/doctype/stock_entry_detail/stock_entry_detail.json #: 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/report/available_serial_no/available_serial_no.py:154 #: erpnext/stock/report/batch_item_expiry_status/batch_item_expiry_status.py:35 @@ -50685,11 +50761,11 @@ msgstr "" msgid "Stock cannot be reserved in group warehouse {0}." msgstr "" -#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1162 +#: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:1163 msgid "Stock cannot be reserved in the group warehouse {0}." msgstr "" -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:724 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:726 msgid "Stock cannot be updated against Purchase Receipt {0}" msgstr "" @@ -50790,8 +50866,8 @@ msgstr "" #: erpnext/setup/doctype/company/company.py:287 #: erpnext/setup/setup_wizard/operations/defaults_setup.py:33 -#: erpnext/setup/setup_wizard/operations/install_fixtures.py:504 -#: erpnext/stock/doctype/item/item.py:280 +#: erpnext/setup/setup_wizard/operations/install_fixtures.py:502 +#: erpnext/stock/doctype/item/item.py:282 msgid "Stores" msgstr "" @@ -51007,7 +51083,7 @@ msgstr "" msgid "Subcontracting Order Supplied Item" msgstr "" -#: erpnext/buying/doctype/purchase_order/purchase_order.py:908 +#: erpnext/buying/doctype/purchase_order/purchase_order.py:910 msgid "Subcontracting Order {0} created." msgstr "" @@ -51088,7 +51164,7 @@ msgstr "" msgid "Submit" msgstr "" -#: erpnext/buying/doctype/purchase_order/purchase_order.py:904 +#: erpnext/buying/doctype/purchase_order/purchase_order.py:906 #: erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.py:808 msgid "Submit Action Failed" msgstr "" @@ -51323,7 +51399,7 @@ msgstr "" msgid "Successfully Set Supplier" msgstr "" -#: erpnext/stock/doctype/item/item.py:337 +#: erpnext/stock/doctype/item/item.py:339 msgid "Successfully changed Stock UOM, please redefine conversion factors for new UOM." msgstr "" @@ -51533,7 +51609,7 @@ msgstr "" #: erpnext/buying/report/subcontracted_raw_materials_to_be_transferred/subcontracted_raw_materials_to_be_transferred.js:15 #: erpnext/buying/report/subcontracted_raw_materials_to_be_transferred/subcontracted_raw_materials_to_be_transferred.py:30 #: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.js:51 -#: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.py:195 +#: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.py:189 #: erpnext/buying/workspace/buying/buying.json #: erpnext/crm/doctype/contract/contract.json #: erpnext/manufacturing/doctype/blanket_order/blanket_order.json @@ -51676,7 +51752,7 @@ msgstr "" msgid "Supplier Invoice Date" msgstr "" -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:1727 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:1729 msgid "Supplier Invoice Date cannot be greater than Posting Date" msgstr "" @@ -51691,7 +51767,7 @@ msgstr "" msgid "Supplier Invoice No" msgstr "" -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:1754 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:1756 msgid "Supplier Invoice No exists in Purchase Invoice {0}" msgstr "" @@ -51802,7 +51878,7 @@ msgstr "" #: erpnext/buying/doctype/supplier_quotation/supplier_quotation.json #: erpnext/buying/doctype/supplier_quotation/supplier_quotation.py:214 #: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.js:60 -#: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.py:256 +#: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.py:250 #: erpnext/buying/workspace/buying/buying.json #: erpnext/crm/doctype/opportunity/opportunity.js:81 #: erpnext/selling/doctype/quotation/quotation.json @@ -51952,7 +52028,7 @@ msgstr "" #. Name of a Workspace #: erpnext/selling/doctype/customer/customer_dashboard.py:23 #: erpnext/setup/doctype/company/company_dashboard.py:24 -#: erpnext/setup/setup_wizard/operations/install_fixtures.py:283 +#: erpnext/setup/setup_wizard/operations/install_fixtures.py:281 #: erpnext/support/workspace/support/support.json msgid "Support" msgstr "" @@ -52222,7 +52298,7 @@ msgstr "" msgid "TDS Computation Summary" msgstr "" -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:1511 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:1513 msgid "TDS Deducted" msgstr "" @@ -52429,7 +52505,7 @@ msgstr "" #: erpnext/stock/dashboard/item_dashboard.js:231 #: erpnext/stock/doctype/delivery_note_item/delivery_note_item.json #: erpnext/stock/doctype/material_request_item/material_request_item.json -#: erpnext/stock/doctype/stock_entry/stock_entry.js:646 +#: erpnext/stock/doctype/stock_entry/stock_entry.js:647 #: erpnext/stock/doctype/stock_entry_detail/stock_entry_detail.json msgid "Target Warehouse" msgstr "" @@ -52457,8 +52533,8 @@ msgstr "" msgid "Target Warehouse is set for some items but the customer is not an internal customer." msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:580 -#: erpnext/stock/doctype/stock_entry/stock_entry.py:587 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:592 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:599 msgid "Target warehouse is mandatory for row {0}" msgstr "" @@ -52618,7 +52694,7 @@ msgstr "" #: erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts.py:23 #: erpnext/accounts/doctype/account/chart_of_accounts/verified/standard_chart_of_accounts_with_account_number.py:35 -#: erpnext/setup/setup_wizard/operations/taxes_setup.py:257 +#: erpnext/setup/setup_wizard/operations/taxes_setup.py:256 msgid "Tax Assets" msgstr "" @@ -52692,7 +52768,7 @@ msgstr "" msgid "Tax Category" msgstr "" -#: erpnext/controllers/buying_controller.py:171 +#: erpnext/controllers/buying_controller.py:194 msgid "Tax Category has been changed to \"Total\" because all the Items are non-stock items" msgstr "" @@ -53037,7 +53113,7 @@ msgstr "" msgid "Taxes and Charges Deducted (Company Currency)" msgstr "" -#: erpnext/stock/doctype/item/item.py:350 +#: erpnext/stock/doctype/item/item.py:352 msgid "Taxes row #{0}: {1} cannot be smaller than {2}" msgstr "" @@ -53455,7 +53531,7 @@ msgstr "" msgid "The Loyalty Program isn't valid for the selected company" msgstr "" -#: erpnext/accounts/doctype/payment_request/payment_request.py:956 +#: erpnext/accounts/doctype/payment_request/payment_request.py:961 msgid "The Payment Request {0} is already paid, cannot process payment twice" msgstr "" @@ -53467,7 +53543,7 @@ msgstr "" 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 "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:2069 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:2081 msgid "The Process Loss Qty has reset as per job cards Process Loss Qty" msgstr "" @@ -53483,7 +53559,7 @@ msgstr "" msgid "The Serial No {0} is reserved against the {1} {2} and cannot be used for any other transaction." msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:1402 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1414 msgid "The Serial and Batch Bundle {0} is not valid for this transaction. The 'Type of Transaction' should be 'Outward' instead of 'Inward' in Serial and Batch Bundle {0}" msgstr "" @@ -53491,7 +53567,7 @@ msgstr "" msgid "The Stock Entry of type 'Manufacture' is known as backflush. Raw materials being consumed to manufacture finished goods is known as backflushing.

When creating Manufacture Entry, raw-material items are backflushed based on BOM of production item. If you want raw-material items to be backflushed based on Material Transfer entry made against that Work Order instead, then you can set it under this field." msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:1798 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1810 msgid "The Work Order is mandatory for Disassembly Order" msgstr "" @@ -53501,7 +53577,7 @@ msgstr "" msgid "The account head under Liability or Equity, in which Profit/Loss will be booked" msgstr "" -#: erpnext/accounts/doctype/payment_request/payment_request.py:857 +#: erpnext/accounts/doctype/payment_request/payment_request.py:862 msgid "The allocated amount is greater than the outstanding amount of Payment Request {0}" msgstr "" @@ -53562,7 +53638,7 @@ msgstr "" msgid "The following batches are expired, please restock them:
{0}" msgstr "" -#: erpnext/stock/doctype/item/item.py:847 +#: erpnext/stock/doctype/item/item.py:849 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 "" @@ -53587,15 +53663,15 @@ msgstr "" msgid "The holiday on {0} is not between From Date and To Date" msgstr "" -#: erpnext/controllers/buying_controller.py:1031 +#: erpnext/controllers/buying_controller.py:1055 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:612 +#: erpnext/stock/doctype/item/item.py:614 msgid "The items {0} and {1} are present in the following {2} :" msgstr "" -#: erpnext/controllers/buying_controller.py:1024 +#: erpnext/controllers/buying_controller.py:1048 msgid "The items {items} are not marked as {type_of} item. You can enable them as {type_of} item from their Item masters." msgstr "" @@ -53735,11 +53811,11 @@ msgstr "" msgid "The task has been enqueued as a background job." msgstr "" -#: erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py:946 +#: erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py:952 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:957 +#: erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py:963 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 "" @@ -53785,7 +53861,7 @@ msgstr "" msgid "The warehouse where your Items will be transferred when you begin production. Group Warehouse can also be selected as a Work in Progress warehouse." msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.py:754 +#: erpnext/manufacturing/doctype/job_card/job_card.py:760 msgid "The {0} ({1}) must be equal to {2} ({3})" msgstr "" @@ -53793,7 +53869,7 @@ msgstr "" msgid "The {0} {1} created successfully" msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.py:860 +#: erpnext/manufacturing/doctype/job_card/job_card.py:866 msgid "The {0} {1} is used to calculate the valuation cost for the finished good {2}." msgstr "" @@ -53821,11 +53897,7 @@ msgstr "" msgid "There are no slots available on this date" msgstr "" -#: erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.py:280 -msgid "There are only {0} asset created or linked to {1}. Please create or link {2} Assets with respective document." -msgstr "" - -#: erpnext/stock/doctype/item/item.js:966 +#: erpnext/stock/doctype/item/item.js:995 msgid "There are two options to maintain valuation of stock. FIFO (first in - first out) and Moving Average. To understand this topic in detail please visit Item Valuation, FIFO and Moving Average." msgstr "" @@ -53837,7 +53909,7 @@ msgstr "" msgid "There can be multiple tiered collection factor based on the total spent. But the conversion factor for redemption will always be same for all the tier." msgstr "" -#: erpnext/accounts/party.py:561 +#: erpnext/accounts/party.py:580 msgid "There can only be 1 Account per Company in {0} {1}" msgstr "" @@ -53857,7 +53929,7 @@ msgstr "" msgid "There is no batch found against the {0}: {1}" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:1343 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1355 msgid "There must be atleast 1 Finished Good in this Stock Entry" msgstr "" @@ -53896,11 +53968,11 @@ msgstr "" msgid "This Account has '0' balance in either Base Currency or Account Currency" msgstr "" -#: erpnext/stock/doctype/item/item.js:102 +#: erpnext/stock/doctype/item/item.js:131 msgid "This Item is a Template and cannot be used in transactions. Item attributes will be copied over into the variants unless 'No Copy' is set" msgstr "" -#: erpnext/stock/doctype/item/item.js:161 +#: erpnext/stock/doctype/item/item.js:190 msgid "This Item is a Variant of {0} (Template)." msgstr "" @@ -53908,7 +53980,7 @@ msgstr "" msgid "This Month's Summary" msgstr "" -#: erpnext/buying/doctype/purchase_order/purchase_order.py:917 +#: erpnext/buying/doctype/purchase_order/purchase_order.py:919 msgid "This PO has been fully subcontracted." msgstr "" @@ -54023,7 +54095,7 @@ msgstr "" msgid "This is considered dangerous from accounting point of view." msgstr "" -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:528 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:530 msgid "This is done to handle accounting for cases when Purchase Receipt is created after Purchase Invoice" msgstr "" @@ -54031,7 +54103,7 @@ msgstr "" msgid "This is enabled by default. If you want to plan materials for sub-assemblies of the Item you're manufacturing leave this enabled. If you plan and manufacture the sub-assemblies separately, you can disable this checkbox." msgstr "" -#: erpnext/stock/doctype/item/item.js:954 +#: erpnext/stock/doctype/item/item.js:983 msgid "This is for raw material Items that'll be used to create finished goods. If the Item is an additional service like 'washing' that'll be used in the BOM, keep this unchecked." msgstr "" @@ -54337,7 +54409,7 @@ msgstr "" #. Label of the timesheet_sb (Section Break) field in DocType 'Projects #. Settings' #: erpnext/projects/doctype/projects_settings/projects_settings.json -#: erpnext/projects/doctype/timesheet/timesheet.py:544 +#: erpnext/projects/doctype/timesheet/timesheet.py:555 #: erpnext/templates/pages/projects.html:60 msgid "Timesheets" msgstr "" @@ -54845,7 +54917,7 @@ msgstr "" 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:634 +#: erpnext/stock/doctype/item/item.py:636 msgid "To merge, following properties must be same for both items" msgstr "" @@ -54857,11 +54929,11 @@ msgstr "" msgid "To still proceed with editing this Attribute Value, enable {0} in Item Variant Settings." msgstr "" -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:618 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:620 msgid "To submit the invoice without purchase order please set {0} as {1} in {2}" msgstr "" -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:639 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:641 msgid "To submit the invoice without purchase receipt please set {0} as {1} in {2}" msgstr "" @@ -55197,7 +55269,7 @@ msgstr "" #. Label of the total_completed_qty (Float) field in DocType 'Job Card' #: erpnext/manufacturing/doctype/job_card/job_card.json -#: erpnext/manufacturing/doctype/job_card/job_card.py:750 +#: erpnext/manufacturing/doctype/job_card/job_card.py:756 #: erpnext/manufacturing/report/job_card_summary/job_card_summary.py:174 msgid "Total Completed Qty" msgstr "" @@ -55245,7 +55317,7 @@ msgstr "" msgid "Total Credit" msgstr "" -#: erpnext/accounts/doctype/journal_entry/journal_entry.py:261 +#: erpnext/accounts/doctype/journal_entry/journal_entry.py:270 msgid "Total Credit/ Debit Amount should be same as linked Journal Entry" msgstr "" @@ -55254,7 +55326,7 @@ msgstr "" msgid "Total Debit" msgstr "" -#: erpnext/accounts/doctype/journal_entry/journal_entry.py:891 +#: erpnext/accounts/doctype/journal_entry/journal_entry.py:900 msgid "Total Debit must be equal to Total Credit. The difference is {0}" msgstr "" @@ -56404,7 +56476,7 @@ msgstr "" #: erpnext/buying/doctype/supplier_quotation_item/supplier_quotation_item.json #: erpnext/buying/report/item_wise_purchase_history/item_wise_purchase_history.py:58 #: erpnext/buying/report/requested_items_to_order_and_receive/requested_items_to_order_and_receive.py:207 -#: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.py:210 +#: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.py:204 #: erpnext/crm/doctype/opportunity_item/opportunity_item.json #: erpnext/manufacturing/doctype/bom_creator/bom_creator.json #: erpnext/manufacturing/doctype/bom_creator_item/bom_creator_item.json @@ -56507,7 +56579,7 @@ msgstr "" msgid "UOM Name" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:3103 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:3115 msgid "UOM conversion factor required for UOM: {0} in Item: {1}" msgstr "" @@ -56641,7 +56713,7 @@ msgstr "" msgid "Unit of Measure (UOM)" msgstr "" -#: erpnext/stock/doctype/item/item.py:382 +#: erpnext/stock/doctype/item/item.py:384 msgid "Unit of Measure {0} has been entered more than once in Conversion Factor Table" msgstr "" @@ -57079,7 +57151,7 @@ msgstr "" msgid "Updated via 'Time Log' (In Minutes)" msgstr "" -#: erpnext/stock/doctype/item/item.py:1380 +#: erpnext/stock/doctype/item/item.py:1387 msgid "Updating Variants..." msgstr "" @@ -57107,8 +57179,8 @@ msgstr "" msgid "Upon submission of the Sales Order, Work Order, or Production Plan, the system will automatically reserve the stock." msgstr "" -#: erpnext/setup/setup_wizard/operations/install_fixtures.py:296 -#: erpnext/setup/setup_wizard/operations/install_fixtures.py:404 +#: erpnext/setup/setup_wizard/operations/install_fixtures.py:294 +#: erpnext/setup/setup_wizard/operations/install_fixtures.py:402 msgid "Upper Income" msgstr "" @@ -57451,7 +57523,7 @@ msgstr "" #. Label of the valid_till (Date) field in DocType 'Supplier Quotation' #. Label of the valid_till (Date) field in DocType 'Quotation' #: erpnext/buying/doctype/supplier_quotation/supplier_quotation.json -#: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.py:261 +#: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.py:255 #: erpnext/selling/doctype/quotation/quotation.json #: erpnext/templates/pages/order.html:59 msgid "Valid Till" @@ -57639,7 +57711,7 @@ msgstr "" msgid "Valuation Rate for the Item {0}, is required to do accounting entries for {1} {2}." msgstr "" -#: erpnext/stock/doctype/item/item.py:264 +#: erpnext/stock/doctype/item/item.py:266 msgid "Valuation Rate is mandatory if Opening Stock entered" msgstr "" @@ -57653,7 +57725,7 @@ msgstr "" msgid "Valuation and Total" msgstr "" -#: erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py:923 +#: erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py:929 msgid "Valuation rate for customer provided items has been set to zero." msgstr "" @@ -57740,7 +57812,7 @@ msgid "Value Or Qty" msgstr "" #: erpnext/setup/setup_wizard/data/sales_stage.txt:4 -#: erpnext/setup/setup_wizard/operations/install_fixtures.py:416 +#: erpnext/setup/setup_wizard/operations/install_fixtures.py:414 msgid "Value Proposition" msgstr "" @@ -57814,13 +57886,13 @@ msgstr "" msgid "Variance ({})" msgstr "" -#: erpnext/stock/doctype/item/item.js:149 +#: erpnext/stock/doctype/item/item.js:178 #: erpnext/stock/doctype/item/item_list.js:22 #: erpnext/stock/report/item_variant_details/item_variant_details.py:74 msgid "Variant" msgstr "" -#: erpnext/stock/doctype/item/item.py:862 +#: erpnext/stock/doctype/item/item.py:864 msgid "Variant Attribute Error" msgstr "" @@ -57839,11 +57911,11 @@ msgstr "" msgid "Variant Based On" msgstr "" -#: erpnext/stock/doctype/item/item.py:890 +#: erpnext/stock/doctype/item/item.py:892 msgid "Variant Based On cannot be changed" msgstr "" -#: erpnext/stock/doctype/item/item.js:125 +#: erpnext/stock/doctype/item/item.js:154 msgid "Variant Details Report" msgstr "" @@ -57857,7 +57929,7 @@ msgstr "" msgid "Variant Item" msgstr "" -#: erpnext/stock/doctype/item/item.py:860 +#: erpnext/stock/doctype/item/item.py:862 msgid "Variant Items" msgstr "" @@ -57868,7 +57940,7 @@ msgstr "" msgid "Variant Of" msgstr "" -#: erpnext/stock/doctype/item/item.js:644 +#: erpnext/stock/doctype/item/item.js:673 msgid "Variant creation has been queued." msgstr "" @@ -57994,10 +58066,11 @@ msgstr "" #: erpnext/setup/doctype/company/company.js:120 #: erpnext/setup/doctype/company/company.js:132 #: erpnext/stock/doctype/delivery_trip/delivery_trip.js:84 -#: erpnext/stock/doctype/item/item.js:68 erpnext/stock/doctype/item/item.js:78 -#: erpnext/stock/doctype/item/item.js:88 erpnext/stock/doctype/item/item.js:113 -#: erpnext/stock/doctype/item/item.js:121 -#: erpnext/stock/doctype/item/item.js:129 +#: erpnext/stock/doctype/item/item.js:97 erpnext/stock/doctype/item/item.js:107 +#: erpnext/stock/doctype/item/item.js:117 +#: erpnext/stock/doctype/item/item.js:142 +#: erpnext/stock/doctype/item/item.js:150 +#: erpnext/stock/doctype/item/item.js:158 #: erpnext/stock/doctype/purchase_receipt/purchase_receipt.js:228 #: erpnext/stock/doctype/purchase_receipt/purchase_receipt.js:239 #: erpnext/stock/doctype/stock_entry/stock_entry.js:295 @@ -58728,7 +58801,7 @@ msgstr "" msgid "Warning!" msgstr "" -#: erpnext/accounts/doctype/journal_entry/journal_entry.py:1254 +#: erpnext/accounts/doctype/journal_entry/journal_entry.py:1263 msgid "Warning: Another {0} # {1} exists against stock entry {2}" msgstr "" @@ -59080,7 +59153,7 @@ msgstr "" msgid "When a parent warehouse is chosen, the system conducts stock checks against the associated child warehouses" msgstr "" -#: erpnext/stock/doctype/item/item.js:973 +#: erpnext/stock/doctype/item/item.js:1002 msgid "When creating an Item, entering a value for this field will automatically create an Item Price at the backend." msgstr "" @@ -59269,8 +59342,8 @@ msgstr "" msgid "Work Order cannot be raised against a Item Template" msgstr "" -#: erpnext/manufacturing/doctype/work_order/work_order.py:1846 -#: erpnext/manufacturing/doctype/work_order/work_order.py:1924 +#: erpnext/manufacturing/doctype/work_order/work_order.py:1851 +#: erpnext/manufacturing/doctype/work_order/work_order.py:1929 msgid "Work Order has been {0}" msgstr "" @@ -59278,7 +59351,7 @@ msgstr "" msgid "Work Order not created" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:641 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:653 msgid "Work Order {0}: Job Card not found for the operation {1}" msgstr "" @@ -59718,7 +59791,7 @@ msgstr "" msgid "You can change the parent account to a Balance Sheet account or select a different account." msgstr "" -#: erpnext/accounts/doctype/journal_entry/journal_entry.py:667 +#: erpnext/accounts/doctype/journal_entry/journal_entry.py:676 msgid "You can not enter current voucher in 'Against Journal Entry' column" msgstr "" @@ -59743,7 +59816,7 @@ msgstr "" msgid "You can set it as a machine name or operation type. For example, stiching machine 12" msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.py:1160 +#: erpnext/manufacturing/doctype/job_card/job_card.py:1166 msgid "You can't make any changes to Job Card since Work Order is closed." msgstr "" @@ -59771,7 +59844,7 @@ msgstr "" msgid "You cannot create/amend any accounting entries till this date." msgstr "" -#: erpnext/accounts/doctype/journal_entry/journal_entry.py:900 +#: erpnext/accounts/doctype/journal_entry/journal_entry.py:909 msgid "You cannot credit and debit same account at the same time" msgstr "" @@ -59835,7 +59908,7 @@ msgstr "" msgid "You have entered a duplicate Delivery Note on Row" msgstr "" -#: erpnext/stock/doctype/item/item.py:1056 +#: erpnext/stock/doctype/item/item.py:1063 msgid "You have to enable auto re-order in Stock Settings to maintain re-order levels." msgstr "" @@ -59883,7 +59956,7 @@ msgid "Your email has been verified and your appointment has been scheduled" msgstr "" #: erpnext/patches/v11_0/add_default_dispatch_notification_template.py:22 -#: erpnext/setup/setup_wizard/operations/install_fixtures.py:318 +#: erpnext/setup/setup_wizard/operations/install_fixtures.py:316 msgid "Your order is out for delivery!" msgstr "" @@ -59973,7 +60046,7 @@ msgstr "" msgid "cannot be greater than 100" msgstr "" -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:328 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:330 #: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:1027 msgid "dated {0}" msgstr "" @@ -60238,7 +60311,7 @@ msgstr "" msgid "to" msgstr "" -#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:2864 +#: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:2867 msgid "to unallocate the amount of this Return Invoice before cancelling it." msgstr "" @@ -60280,7 +60353,7 @@ msgstr "" msgid "{0} ({1}) cannot be greater than planned quantity ({2}) in Work Order {3}" msgstr "" -#: erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.py:288 +#: erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.py:294 msgid "{0} {1} has submitted Assets. Remove Item {2} from table to continue." msgstr "" @@ -60316,7 +60389,7 @@ msgstr "" msgid "{0} Request for {1}" msgstr "" -#: erpnext/stock/doctype/item/item.py:321 +#: erpnext/stock/doctype/item/item.py:323 msgid "{0} Retain Sample is based on batch, please check Has Batch No to retain sample of item" msgstr "" @@ -60328,23 +60401,23 @@ msgstr "" msgid "{0} account is not of type {1}" msgstr "" -#: erpnext/stock/doctype/purchase_receipt/purchase_receipt.py:493 +#: erpnext/stock/doctype/purchase_receipt/purchase_receipt.py:495 msgid "{0} account not found while submitting purchase receipt" msgstr "" -#: erpnext/accounts/doctype/journal_entry/journal_entry.py:1020 +#: erpnext/accounts/doctype/journal_entry/journal_entry.py:1029 msgid "{0} against Bill {1} dated {2}" msgstr "" -#: erpnext/accounts/doctype/journal_entry/journal_entry.py:1029 +#: erpnext/accounts/doctype/journal_entry/journal_entry.py:1038 msgid "{0} against Purchase Order {1}" msgstr "" -#: erpnext/accounts/doctype/journal_entry/journal_entry.py:996 +#: erpnext/accounts/doctype/journal_entry/journal_entry.py:1005 msgid "{0} against Sales Invoice {1}" msgstr "" -#: erpnext/accounts/doctype/journal_entry/journal_entry.py:1003 +#: erpnext/accounts/doctype/journal_entry/journal_entry.py:1012 msgid "{0} against Sales Order {1}" msgstr "" @@ -60390,7 +60463,7 @@ msgstr "" msgid "{0} currency must be same as company's default currency. Please select another account." msgstr "" -#: erpnext/buying/doctype/purchase_order/purchase_order.py:311 +#: erpnext/buying/doctype/purchase_order/purchase_order.py:313 msgid "{0} currently has a {1} Supplier Scorecard standing, and Purchase Orders to this supplier should be issued with caution." msgstr "" @@ -60407,7 +60480,7 @@ msgid "{0} entered twice in Item Tax" msgstr "" #: erpnext/setup/doctype/item_group/item_group.py:48 -#: erpnext/stock/doctype/item/item.py:434 +#: erpnext/stock/doctype/item/item.py:436 msgid "{0} entered twice {1} in Item Taxes" msgstr "" @@ -60512,7 +60585,7 @@ msgstr "" msgid "{0} is not the default supplier for any items." msgstr "" -#: erpnext/accounts/doctype/payment_entry/payment_entry.py:3049 +#: erpnext/accounts/doctype/payment_entry/payment_entry.py:3048 msgid "{0} is on hold till {1}" msgstr "" @@ -60555,7 +60628,7 @@ msgstr "" msgid "{0} payment entries can not be filtered by {1}" msgstr "" -#: erpnext/controllers/stock_controller.py:1326 +#: erpnext/controllers/stock_controller.py:1337 msgid "{0} qty of Item {1} is being received into Warehouse {2} with capacity {3}." msgstr "" @@ -60600,7 +60673,7 @@ msgstr "" msgid "{0} valid serial nos for Item {1}" msgstr "" -#: erpnext/stock/doctype/item/item.js:649 +#: erpnext/stock/doctype/item/item.js:678 msgid "{0} variants created." msgstr "" @@ -60608,7 +60681,7 @@ msgstr "" msgid "{0} will be given as discount." msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.py:869 +#: erpnext/manufacturing/doctype/job_card/job_card.py:875 msgid "{0} {1}" msgstr "" @@ -60634,7 +60707,7 @@ msgstr "" msgid "{0} {1} does not exist" msgstr "" -#: erpnext/accounts/party.py:541 +#: erpnext/accounts/party.py:560 msgid "{0} {1} has accounting entries in currency {2} for company {3}. Please select a receivable or payable account with currency {2}." msgstr "" @@ -60646,7 +60719,7 @@ msgstr "" msgid "{0} {1} has already been partly paid. Please use the 'Get Outstanding Invoice' or the 'Get Outstanding Orders' button to get the latest outstanding amounts." msgstr "" -#: erpnext/buying/doctype/purchase_order/purchase_order.py:451 +#: erpnext/buying/doctype/purchase_order/purchase_order.py:453 #: erpnext/selling/doctype/sales_order/sales_order.py:510 #: erpnext/stock/doctype/material_request/material_request.py:225 msgid "{0} {1} has been modified. Please refresh." @@ -60681,23 +60754,23 @@ msgstr "" msgid "{0} {1} is cancelled so the action cannot be completed" msgstr "" -#: erpnext/accounts/doctype/journal_entry/journal_entry.py:815 +#: erpnext/accounts/doctype/journal_entry/journal_entry.py:824 msgid "{0} {1} is closed" msgstr "" -#: erpnext/accounts/party.py:780 +#: erpnext/accounts/party.py:799 msgid "{0} {1} is disabled" msgstr "" -#: erpnext/accounts/party.py:786 +#: erpnext/accounts/party.py:805 msgid "{0} {1} is frozen" msgstr "" -#: erpnext/accounts/doctype/journal_entry/journal_entry.py:812 +#: erpnext/accounts/doctype/journal_entry/journal_entry.py:821 msgid "{0} {1} is fully billed" msgstr "" -#: erpnext/accounts/party.py:790 +#: erpnext/accounts/party.py:809 msgid "{0} {1} is not active" msgstr "" @@ -60709,8 +60782,8 @@ msgstr "" msgid "{0} {1} is not in any active Fiscal Year" msgstr "" -#: erpnext/accounts/doctype/journal_entry/journal_entry.py:809 -#: erpnext/accounts/doctype/journal_entry/journal_entry.py:848 +#: erpnext/accounts/doctype/journal_entry/journal_entry.py:818 +#: erpnext/accounts/doctype/journal_entry/journal_entry.py:857 msgid "{0} {1} is not submitted" msgstr "" @@ -60806,8 +60879,8 @@ msgstr "" msgid "{0}'s {1} cannot be after {2}'s Expected End Date." msgstr "" -#: erpnext/manufacturing/doctype/job_card/job_card.py:1134 -#: erpnext/manufacturing/doctype/job_card/job_card.py:1142 +#: erpnext/manufacturing/doctype/job_card/job_card.py:1140 +#: erpnext/manufacturing/doctype/job_card/job_card.py:1148 msgid "{0}, complete the operation {1} before the operation {2}." msgstr "" @@ -60815,7 +60888,7 @@ msgstr "" msgid "{0}: {1} does not belong to the Company: {2}" msgstr "" -#: erpnext/accounts/party.py:79 +#: erpnext/accounts/party.py:80 msgid "{0}: {1} does not exists" msgstr "" @@ -60823,23 +60896,23 @@ msgstr "" msgid "{0}: {1} must be less than {2}" msgstr "" -#: erpnext/controllers/buying_controller.py:805 +#: erpnext/controllers/buying_controller.py:829 msgid "{count} Assets created for {item_code}" msgstr "" -#: erpnext/controllers/buying_controller.py:709 +#: erpnext/controllers/buying_controller.py:733 msgid "{doctype} {name} is cancelled or closed." msgstr "" -#: erpnext/controllers/buying_controller.py:435 +#: erpnext/controllers/buying_controller.py:459 msgid "{field_label} is mandatory for sub-contracted {doctype}." msgstr "" -#: erpnext/controllers/stock_controller.py:1609 +#: erpnext/controllers/stock_controller.py:1620 msgid "{item_name}'s Sample Size ({sample_size}) cannot be greater than the Accepted Quantity ({accepted_quantity})" msgstr "" -#: erpnext/controllers/buying_controller.py:539 +#: erpnext/controllers/buying_controller.py:563 msgid "{ref_doctype} {ref_name} is {status}." msgstr "" @@ -60905,7 +60978,7 @@ msgstr "" msgid "{} can't be cancelled since the Loyalty Points earned has been redeemed. First cancel the {} No {}" msgstr "" -#: erpnext/controllers/buying_controller.py:199 +#: erpnext/controllers/buying_controller.py:222 msgid "{} has submitted assets linked to it. You need to cancel the assets to create purchase return." msgstr "" From 08903459c2fa09b6d60ab8c08b7cc8b5680c070f Mon Sep 17 00:00:00 2001 From: ruthra kumar Date: Sun, 27 Apr 2025 11:12:55 +0530 Subject: [PATCH 37/41] refactor: use unbuffered cursor for fetching --- .../accounts_receivable.py | 43 ++++++++++--------- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/erpnext/accounts/report/accounts_receivable/accounts_receivable.py b/erpnext/accounts/report/accounts_receivable/accounts_receivable.py index 973b7eede66..09554c334b0 100644 --- a/erpnext/accounts/report/accounts_receivable/accounts_receivable.py +++ b/erpnext/accounts/report/accounts_receivable/accounts_receivable.py @@ -90,10 +90,7 @@ class ReceivablePayableReport: self.skip_total_row = 1 def get_data(self): - self.get_ple_entries() self.get_sales_invoices_or_customers_based_on_sales_person() - self.voucher_balance = OrderedDict() - self.init_voucher_balance() # invoiced, paid, credit_note, outstanding # Build delivery note map against all sales invoices self.build_delivery_note_map() @@ -110,7 +107,15 @@ class ReceivablePayableReport: # Get Exchange Rate Revaluations self.get_exchange_rate_revaluations() + self.prepare_ple_query() self.data = [] + self.voucher_balance = OrderedDict() + self.ple_entries = [] + + with frappe.db.unbuffered_cursor(): + for ple in frappe.db.sql(self.ple_query.get_sql(), as_dict=True, as_iterator=True): + self.init_voucher_balance(ple) # invoiced, paid, credit_note, outstanding + self.ple_entries.append(ple) for ple in self.ple_entries: self.update_voucher_balance(ple) @@ -136,26 +141,22 @@ class ReceivablePayableReport: outstanding_in_account_currency=0.0, ) - def init_voucher_balance(self): - # build all keys, since we want to exclude vouchers beyond the report date - for ple in self.ple_entries: - # get the balance object for voucher_type + def init_voucher_balance(self, ple): + if self.filters.get("ignore_accounts"): + key = (ple.voucher_type, ple.voucher_no, ple.party) + else: + key = (ple.account, ple.voucher_type, ple.voucher_no, ple.party) - if self.filters.get("ignore_accounts"): - key = (ple.voucher_type, ple.voucher_no, ple.party) - else: - key = (ple.account, ple.voucher_type, ple.voucher_no, ple.party) + if key not in self.voucher_balance: + self.voucher_balance[key] = self.build_voucher_dict(ple) - if key not in self.voucher_balance: - self.voucher_balance[key] = self.build_voucher_dict(ple) + if ple.voucher_type == ple.against_voucher_type and ple.voucher_no == ple.against_voucher_no: + self.voucher_balance[key].cost_center = ple.cost_center - if ple.voucher_type == ple.against_voucher_type and ple.voucher_no == ple.against_voucher_no: - self.voucher_balance[key].cost_center = ple.cost_center + self.get_invoices(ple) - self.get_invoices(ple) - - if self.filters.get("group_by_party"): - self.init_subtotal_row(ple.party) + if self.filters.get("group_by_party"): + self.init_subtotal_row(ple.party) if self.filters.get("group_by_party") and not self.filters.get("in_party_currency"): self.init_subtotal_row("Total") @@ -778,7 +779,7 @@ class ReceivablePayableReport: ) row["range" + str(index + 1)] = row.outstanding - def get_ple_entries(self): + def prepare_ple_query(self): # get all the GL entries filtered by the given filters self.prepare_conditions() @@ -831,7 +832,7 @@ class ReceivablePayableReport: else: query = query.orderby(self.ple.posting_date, self.ple.party) - self.ple_entries = query.run(as_dict=True) + self.ple_query = query def get_sales_invoices_or_customers_based_on_sales_person(self): if self.filters.get("sales_person"): From 66fd639b523c8ad21526c611fd37b0559cb7ba79 Mon Sep 17 00:00:00 2001 From: ruthra kumar Date: Mon, 5 May 2025 12:29:58 +0530 Subject: [PATCH 38/41] refactor: configurable fetch method for AR / AP report --- .../accounts_settings/accounts_settings.json | 24 +++++++++++++++++-- .../accounts_settings/accounts_settings.py | 1 + 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/erpnext/accounts/doctype/accounts_settings/accounts_settings.json b/erpnext/accounts/doctype/accounts_settings/accounts_settings.json index 285a14b40a6..ae4adfa8a67 100644 --- a/erpnext/accounts/doctype/accounts_settings/accounts_settings.json +++ b/erpnext/accounts/doctype/accounts_settings/accounts_settings.json @@ -79,9 +79,12 @@ "reports_tab", "remarks_section", "general_ledger_remarks_length", - "ignore_is_opening_check_for_reporting", "column_break_lvjk", "receivable_payable_remarks_length", + "accounts_receivable_payable_tuning_section", + "receivable_payable_fetch_method", + "legacy_section", + "ignore_is_opening_check_for_reporting", "payment_request_settings", "create_pr_in_draft_status" ], @@ -545,6 +548,23 @@ "fieldname": "use_sales_invoice_in_pos", "fieldtype": "Check", "label": "Use Sales Invoice" + }, + { + "default": "Buffered Cursor", + "fieldname": "receivable_payable_fetch_method", + "fieldtype": "Select", + "label": "Data Fetch Method", + "options": "Buffered Cursor\nUnBuffered Cursor" + }, + { + "fieldname": "accounts_receivable_payable_tuning_section", + "fieldtype": "Section Break", + "label": "Accounts Receivable / Payable Tuning" + }, + { + "fieldname": "legacy_section", + "fieldtype": "Section Break", + "label": "Legacy Fields" } ], "grid_page_length": 50, @@ -553,7 +573,7 @@ "index_web_pages_for_search": 1, "issingle": 1, "links": [], - "modified": "2025-03-30 20:47:17.954736", + "modified": "2025-05-05 12:29:38.302027", "modified_by": "Administrator", "module": "Accounts", "name": "Accounts Settings", diff --git a/erpnext/accounts/doctype/accounts_settings/accounts_settings.py b/erpnext/accounts/doctype/accounts_settings/accounts_settings.py index 997ba49ed26..bbf1c2ef060 100644 --- a/erpnext/accounts/doctype/accounts_settings/accounts_settings.py +++ b/erpnext/accounts/doctype/accounts_settings/accounts_settings.py @@ -54,6 +54,7 @@ class AccountsSettings(Document): merge_similar_account_heads: DF.Check over_billing_allowance: DF.Currency post_change_gl_entries: DF.Check + receivable_payable_fetch_method: DF.Literal["Buffered Cursor", "UnBuffered Cursor"] receivable_payable_remarks_length: DF.Int reconciliation_queue_size: DF.Int role_allowed_to_over_bill: DF.Link | None From a20951e1cd4807e91e495794f27d9babd408b493 Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Mon, 5 May 2025 13:53:06 +0530 Subject: [PATCH 39/41] fix: reserved serial nos validation --- .../serial_and_batch_bundle.py | 33 +++++++++++++++++++ erpnext/stock/stock_ledger.py | 23 ------------- 2 files changed, 33 insertions(+), 23 deletions(-) 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 20c4b277a67..11f9ee932ee 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 @@ -231,6 +231,9 @@ class SerialandBatchBundle(Document): "warehouse": self.warehouse, "check_serial_nos": True, "serial_nos": serial_nos, + "sabb_voucher_type": self.voucher_type, + "sabb_voucher_no": self.voucher_no, + "sabb_voucher_detail_no": self.voucher_detail_no, } if self.voucher_type == "POS Invoice": kwargs["ignore_voucher_nos"] = [self.voucher_no] @@ -1874,9 +1877,16 @@ def get_reserved_serial_nos(kwargs) -> list: ignore_serial_nos.extend(get_reserved_serial_nos_for_pos(kwargs)) reserved_entries = get_reserved_serial_nos_for_sre(kwargs) + if not reserved_entries: + return ignore_serial_nos + + reserved_voucher_details = get_reserved_voucher_details(kwargs) serial_nos = [] for entry in reserved_entries: + if entry.voucher_no in reserved_voucher_details: + continue + if kwargs.get("serial_nos") and entry.serial_no in kwargs.get("serial_nos"): frappe.throw( _( @@ -1893,6 +1903,29 @@ def get_reserved_serial_nos(kwargs) -> list: return ignore_serial_nos +def get_reserved_voucher_details(kwargs): + reserved_voucher_details = [] + + value = { + "Delivery Note": ["Delivery Note Item", "against_sales_order"], + }.get(kwargs.get("voucher_type")) + + if not value or not kwargs.get("sabb_voucher_no"): + return reserved_voucher_details + + reserved_voucher_details = frappe.get_all( + value[0], + pluck=value[1], + filters={ + "name": kwargs.get("sabb_voucher_detail_no"), + "parent": kwargs.get("sabb_voucher_no"), + "docstatus": 1, + }, + ) + + return reserved_voucher_details + + def get_reserved_serial_nos_for_pos(kwargs): from erpnext.controllers.sales_and_purchase_return import get_returned_serial_nos from erpnext.stock.doctype.serial_no.serial_no import get_serial_nos diff --git a/erpnext/stock/stock_ledger.py b/erpnext/stock/stock_ledger.py index 0d8d61470d6..ab83b54ce51 100644 --- a/erpnext/stock/stock_ledger.py +++ b/erpnext/stock/stock_ledger.py @@ -2109,29 +2109,6 @@ def get_future_sle_with_negative_batch_qty(sle_args): def validate_reserved_stock(kwargs): - if kwargs.serial_no: - serial_nos = kwargs.serial_no.split("\n") - validate_reserved_serial_nos(kwargs.item_code, kwargs.warehouse, serial_nos) - - elif kwargs.batch_no: - validate_reserved_batch_nos(kwargs.item_code, kwargs.warehouse, [kwargs.batch_no]) - - elif kwargs.serial_and_batch_bundle: - sbb_entries = frappe.db.get_all( - "Serial and Batch Entry", - { - "parenttype": "Serial and Batch Bundle", - "parent": kwargs.serial_and_batch_bundle, - "docstatus": 1, - }, - ["batch_no", "serial_no"], - ) - - if serial_nos := [entry.serial_no for entry in sbb_entries if entry.serial_no]: - validate_reserved_serial_nos(kwargs.item_code, kwargs.warehouse, serial_nos) - elif batch_nos := [entry.batch_no for entry in sbb_entries if entry.batch_no]: - validate_reserved_batch_nos(kwargs.item_code, kwargs.warehouse, batch_nos) - # Qty based validation for non-serial-batch items OR SRE with Reservation Based On Qty. precision = cint(frappe.db.get_default("float_precision")) or 2 balance_qty = get_stock_balance(kwargs.item_code, kwargs.warehouse) From b5bb6f3508953822f0e076184f729b08368153a7 Mon Sep 17 00:00:00 2001 From: ruthra kumar Date: Mon, 5 May 2025 13:46:15 +0530 Subject: [PATCH 40/41] refactor: use fetch method based on configuration --- .../accounts_receivable.py | 29 +++++++++++++++++-- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/erpnext/accounts/report/accounts_receivable/accounts_receivable.py b/erpnext/accounts/report/accounts_receivable/accounts_receivable.py index 09554c334b0..6423e8f87ed 100644 --- a/erpnext/accounts/report/accounts_receivable/accounts_receivable.py +++ b/erpnext/accounts/report/accounts_receivable/accounts_receivable.py @@ -54,6 +54,9 @@ class ReceivablePayableReport: self.filters.range = "30, 60, 90, 120" 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" + ) def run(self, args): self.filters.update(args) @@ -110,17 +113,37 @@ class ReceivablePayableReport: self.prepare_ple_query() self.data = [] self.voucher_balance = OrderedDict() - self.ple_entries = [] + if self.ple_fetch_method == "Buffered Cursor": + self.fetch_ple_in_buffered_cursor() + elif self.ple_fetch_method == "UnBuffered Cursor": + self.fetch_ple_in_unbuffered_cursor() + + self.build_data() + + def fetch_ple_in_buffered_cursor(self): + self.ple_entries = frappe.db.sql(self.ple_query.get_sql(), as_dict=True) + + for ple in self.ple_entries: + self.init_voucher_balance(ple) # invoiced, paid, credit_note, outstanding + + # This is unavoidable. Initialization and allocation cannot happen in same loop + for ple in self.ple_entries: + self.update_voucher_balance(ple) + + delattr(self, "ple_entries") + + def fetch_ple_in_unbuffered_cursor(self): + self.ple_entries = [] with frappe.db.unbuffered_cursor(): for ple in frappe.db.sql(self.ple_query.get_sql(), as_dict=True, as_iterator=True): self.init_voucher_balance(ple) # invoiced, paid, credit_note, outstanding self.ple_entries.append(ple) + # This is unavoidable. Initialization and allocation cannot happen in same loop for ple in self.ple_entries: self.update_voucher_balance(ple) - - self.build_data() + delattr(self, "ple_entries") def build_voucher_dict(self, ple): return frappe._dict( From ca1e81e1b57036860071e1c148712affbd28fa5e Mon Sep 17 00:00:00 2001 From: ruthra kumar Date: Mon, 5 May 2025 13:58:08 +0530 Subject: [PATCH 41/41] refactor: set default for fetch methods --- .../report/accounts_receivable/accounts_receivable.py | 7 ++++--- erpnext/patches.txt | 1 + 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/erpnext/accounts/report/accounts_receivable/accounts_receivable.py b/erpnext/accounts/report/accounts_receivable/accounts_receivable.py index 6423e8f87ed..5a850f06b98 100644 --- a/erpnext/accounts/report/accounts_receivable/accounts_receivable.py +++ b/erpnext/accounts/report/accounts_receivable/accounts_receivable.py @@ -54,9 +54,10 @@ class ReceivablePayableReport: self.filters.range = "30, 60, 90, 120" 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" - ) + self.ple_fetch_method = ( + frappe.db.get_single_value("Accounts Settings", "receivable_payable_fetch_method") + or "Buffered Cursor" + ) # Fail Safe def run(self, args): self.filters.update(args) diff --git a/erpnext/patches.txt b/erpnext/patches.txt index 90d04f52fae..56e1d54d081 100644 --- a/erpnext/patches.txt +++ b/erpnext/patches.txt @@ -409,3 +409,4 @@ erpnext.patches.v15_0.update_query_report erpnext.patches.v15_0.set_purchase_receipt_row_item_to_capitalization_stock_item erpnext.patches.v15_0.update_payment_schedule_fields_in_invoices erpnext.patches.v15_0.rename_group_by_to_categorize_by +execute:frappe.db.set_single_value("Accounts Settings", "receivable_payable_fetch_method", "Buffered Cursor")