From 8b9b83a9df7b67bebd24ba38d89001fe0a4e43c0 Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Mon, 4 May 2026 20:55:21 +0530 Subject: [PATCH 01/19] fix: decimal issue (cherry picked from commit 542eb6aca4ef7aac174927352364703e0da94721) --- erpnext/stock/report/stock_ageing/stock_ageing.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/erpnext/stock/report/stock_ageing/stock_ageing.py b/erpnext/stock/report/stock_ageing/stock_ageing.py index 9b230b8b094..0eb4943499e 100644 --- a/erpnext/stock/report/stock_ageing/stock_ageing.py +++ b/erpnext/stock/report/stock_ageing/stock_ageing.py @@ -11,6 +11,7 @@ from frappe.query_builder.functions import Count from frappe.utils import cint, date_diff, flt, get_datetime from erpnext.stock.doctype.serial_no.serial_no import get_serial_nos +from erpnext.stock.valuation import round_off_if_near_zero Filters = frappe._dict @@ -117,10 +118,14 @@ def get_range_age(filters: Filters, fifo_queue: list, to_date: str, item_dict: d i *= 2 range_values[i] = flt(range_values[i] + qty, precision) range_values[i + 1] = flt(range_values[i + 1] + stock_value, precision) + if range_values[i] == 0.0 and round_off_if_near_zero(range_values[i + 1], 2) == 0: + range_values[i + 1] = 0.0 break else: range_values[-2] = flt(range_values[-2] + qty, precision) range_values[-1] = flt(range_values[-1] + stock_value, precision) + if range_values[-2] == 0.0 and round_off_if_near_zero(range_values[-1], 2) == 0: + range_values[-1] = 0.0 return range_values From 379ebbe8c4c8b6b28ae6242c85e3050820882c65 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Wed, 6 May 2026 05:55:26 +0000 Subject: [PATCH 02/19] fix: incorrect validation thrown for drop shipped PI (backport #54751) (#54753) * fix: incorrect validation thrown for drop shipped PI (#54751) (cherry picked from commit 907a809f3f4b1ff43bd61e36ff6bd469a9a84e1d) # Conflicts: # erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.json * chore: resolve conflicts --------- Co-authored-by: Mihir Kandoi --- .../purchase_invoice_item.json | 12 +++++++++++- .../purchase_invoice_item.py | 1 + erpnext/controllers/accounts_controller.py | 1 + erpnext/public/js/controllers/buying.js | 19 ++++++++++++------- erpnext/public/js/controllers/transaction.js | 2 +- erpnext/public/js/queries.js | 10 +++++++--- 6 files changed, 33 insertions(+), 12 deletions(-) diff --git a/erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.json b/erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.json index 7399e987fa7..0dbbd793606 100644 --- a/erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.json +++ b/erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.json @@ -110,6 +110,7 @@ "sales_invoice_item", "material_request", "material_request_item", + "delivered_by_supplier", "item_weight_details", "weight_per_unit", "total_weight", @@ -1001,13 +1002,22 @@ "label": "Tax Withholding Category", "options": "Tax Withholding Category", "print_hide": 1 + }, + { + "default": "0", + "fieldname": "delivered_by_supplier", + "fieldtype": "Check", + "hidden": 1, + "label": "Delivered by Supplier", + "print_hide": 1, + "read_only": 1 } ], "grid_page_length": 50, "idx": 1, "istable": 1, "links": [], - "modified": "2026-04-07 15:40:45.687554", + "modified": "2026-05-06 08:08:40.782395", "modified_by": "Administrator", "module": "Accounts", "name": "Purchase Invoice Item", diff --git a/erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.py b/erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.py index 0256e6fbd23..d204ef5d779 100644 --- a/erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.py +++ b/erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.py @@ -31,6 +31,7 @@ class PurchaseInvoiceItem(Document): conversion_factor: DF.Float cost_center: DF.Link | None deferred_expense_account: DF.Link | None + delivered_by_supplier: DF.Check description: DF.TextEditor | None discount_amount: DF.Currency discount_percentage: DF.Percent diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py index 6a2794dd9ab..95867aac1a9 100644 --- a/erpnext/controllers/accounts_controller.py +++ b/erpnext/controllers/accounts_controller.py @@ -327,6 +327,7 @@ class AccountsController(TransactionBase): # Determine if drop ship applies is_drop_ship = self.doctype in { "Purchase Order", + "Purchase Invoice", "Sales Order", "Sales Invoice", } and self.is_drop_ship(self.items) diff --git a/erpnext/public/js/controllers/buying.js b/erpnext/public/js/controllers/buying.js index 394dcbca4f6..a82756e9570 100644 --- a/erpnext/public/js/controllers/buying.js +++ b/erpnext/public/js/controllers/buying.js @@ -25,15 +25,15 @@ erpnext.buying = { }; }); - const project_filters = { + const get_project_filters = () => ({ query: "erpnext.controllers.queries.get_project_name", filters: { - company: doc.company, + company: this.frm.doc.company, }, - }; + }); - this.frm.set_query("project", (_) => project_filters); - this.frm.set_query("project", "items", (_, __, ___) => project_filters); + this.frm.set_query("project", get_project_filters); + this.frm.set_query("project", "items", get_project_filters); if ( this.frm.doc.__islocal && @@ -178,9 +178,14 @@ erpnext.buying = { callback: (r) => { if (!r.message) return; - this.frm.set_value("billing_address", r.message.primary_address || ""); + if (!this.frm.doc.billing_address) { + this.frm.set_value("billing_address", r.message.primary_address || ""); + } - if (frappe.meta.has_field(this.frm.doc.doctype, "shipping_address")) { + if ( + frappe.meta.has_field(this.frm.doc.doctype, "shipping_address") && + !this.frm.doc.shipping_address + ) { this.frm.set_value("shipping_address", r.message.shipping_address || ""); } }, diff --git a/erpnext/public/js/controllers/transaction.js b/erpnext/public/js/controllers/transaction.js index 6fcf80cb61e..3999c45065f 100644 --- a/erpnext/public/js/controllers/transaction.js +++ b/erpnext/public/js/controllers/transaction.js @@ -1292,7 +1292,7 @@ erpnext.TransactionController = class TransactionController extends erpnext.taxe ["Purchase Order", "Purchase Receipt", "Purchase Invoice"].includes(this.frm.doctype) && !this.frm.doc.shipping_address ) { - let is_drop_ship = me.frm.doc.items.some((item) => item.delivered_by_supplier); + const is_drop_ship = me.frm.doc.items.some((item) => item.delivered_by_supplier); if (!is_drop_ship) { erpnext.utils.get_shipping_address(this.frm, function () { diff --git a/erpnext/public/js/queries.js b/erpnext/public/js/queries.js index 63651ec8759..8b174da244f 100644 --- a/erpnext/public/js/queries.js +++ b/erpnext/public/js/queries.js @@ -106,15 +106,19 @@ $.extend(erpnext.queries, { }); } + let filters = { link_doctype: "Company", link_name: doc.company || "" }; + const is_drop_ship = doc.items.some((item) => item.delivered_by_supplier); + if (is_drop_ship) filters = {}; + return { query: "frappe.contacts.doctype.address.address.address_query", - filters: { link_doctype: "Company", link_name: doc.company }, + filters: filters, }; }, dispatch_address_query: function (doc) { - var filters = { link_doctype: "Company", link_name: doc.company || "" }; - var is_drop_ship = doc.items.some((item) => item.delivered_by_supplier); + let filters = { link_doctype: "Company", link_name: doc.company || "" }; + const is_drop_ship = doc.items.some((item) => item.delivered_by_supplier); if (is_drop_ship) filters = {}; return { query: "frappe.contacts.doctype.address.address.address_query", From 66ae590adc2bd4aa7d0b690bb74deeffb062b157 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Wed, 6 May 2026 16:06:03 +0530 Subject: [PATCH 03/19] fix: incorrect serial nos picked during disassemble (backport #54757) (#54760) fix: incorrect serial nos picked during disassemble (cherry picked from commit 25f7fa548d73019dbb59c5932cc84180204a8545) Co-authored-by: Rohit Waghchaure --- erpnext/stock/doctype/stock_entry/stock_entry.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.py b/erpnext/stock/doctype/stock_entry/stock_entry.py index 8a2f2206875..b06c0013e9d 100644 --- a/erpnext/stock/doctype/stock_entry/stock_entry.py +++ b/erpnext/stock/doctype/stock_entry/stock_entry.py @@ -383,6 +383,9 @@ class StockEntry(StockController, SubcontractingInwardController): def _set_serial_batch_for_disassembly_from_available_materials(self): available_materials = get_available_materials(self.work_order, self) for row in self.items: + if row.serial_no or row.batch_no or row.serial_and_batch_bundle: + continue + warehouse = row.s_warehouse or row.t_warehouse materials = available_materials.get((row.item_code, warehouse)) if not materials: From cf0d9dfbfddbc9f9192a58759783770210d6ab14 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Thu, 7 May 2026 10:31:19 +0000 Subject: [PATCH 04/19] fix(stock): apply filters for rejected warehouse in pick list (backport #54733) (#54776) fix(stock): apply filters for rejected warehouse in pick list (#54733) (cherry picked from commit 0fc96e8f7d2819511d2fc276fe0129d213156ba1) Co-authored-by: Pandiyan P --- erpnext/stock/doctype/pick_list/pick_list.js | 33 +++++++++++--------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/erpnext/stock/doctype/pick_list/pick_list.js b/erpnext/stock/doctype/pick_list/pick_list.js index d1386c183e3..750466a4a40 100644 --- a/erpnext/stock/doctype/pick_list/pick_list.js +++ b/erpnext/stock/doctype/pick_list/pick_list.js @@ -9,6 +9,22 @@ frappe.ui.form.on("Pick List", { }, 500); }, + set_warehouse_query: function (frm, fieldname, parentfield = null) { + const query = () => { + let filters = { company: frm.doc.company }; + + frm.doc.consider_rejected_warehouses ? null : (filters.is_rejected_warehouse = 0); + + return { filters }; + }; + + if (parentfield) { + frm.set_query(fieldname, parentfield, query); + } else { + frm.set_query(fieldname, query); + } + }, + setup: (frm) => { frm.ignore_doctypes_on_cancel_all = ["Serial and Batch Bundle"]; @@ -21,21 +37,8 @@ frappe.ui.form.on("Pick List", { "Stock Entry": "Stock Entry", }; - frm.set_query("warehouse", "locations", () => { - return { - filters: { - company: frm.doc.company, - }, - }; - }); - - frm.set_query("parent_warehouse", () => { - return { - filters: { - company: frm.doc.company, - }, - }; - }); + frm.events.set_warehouse_query(frm, "warehouse", "locations"); + frm.events.set_warehouse_query(frm, "parent_warehouse"); frm.set_query("work_order", () => { return { From 4fbaea17f847802ab4a2553ad3043ea7c73a39af Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Thu, 7 May 2026 16:04:20 +0530 Subject: [PATCH 05/19] fix: fetch get_item_tax_template while update items (backport #53708) (#54767) * fix: fetch get_item_tax_template while update items (cherry picked from commit 03c9d16ca64d1961a67b65e067e5d4ef2c8a66ca) * fix: resolve item tax template from item group in update items (cherry picked from commit 97e7916b6605b685c77ffdf3e8c616ff7b4e634c) * fix: resolve item tax template from item group in update items (cherry picked from commit ad22256b2d8c35462ac46fdbcbb698ee4a522ba1) --------- Co-authored-by: ervishnucs --- erpnext/controllers/accounts_controller.py | 8 +++++++- erpnext/stock/get_item_details.py | 18 +++++++++++++----- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py index 95867aac1a9..4f931bb0724 100644 --- a/erpnext/controllers/accounts_controller.py +++ b/erpnext/controllers/accounts_controller.py @@ -71,6 +71,7 @@ from erpnext.stock.get_item_details import ( NOT_APPLICABLE_TAX, ItemDetailsCtx, _get_item_tax_template, + _get_item_tax_template_from_item_group, get_conversion_factor, get_item_details, get_item_tax_map, @@ -3673,7 +3674,12 @@ def set_child_tax_template_and_map(item, child_item, parent_doc): } ) - child_item.item_tax_template = _get_item_tax_template(ctx, item.taxes) + item_tax_template = _get_item_tax_template(ctx, item.taxes) + + if not item_tax_template: + item_tax_template = _get_item_tax_template_from_item_group(ctx, item.item_group) + + child_item.item_tax_template = item_tax_template child_item.item_tax_rate = get_item_tax_map( doc=parent_doc, tax_template=child_item.item_tax_template, diff --git a/erpnext/stock/get_item_details.py b/erpnext/stock/get_item_details.py index bed23665401..abf392478c2 100644 --- a/erpnext/stock/get_item_details.py +++ b/erpnext/stock/get_item_details.py @@ -726,11 +726,7 @@ def get_item_tax_template(ctx, item=None, out: ItemDetails | None = None): item_tax_template = _get_item_tax_template(ctx, item.taxes, out) if not item_tax_template: - item_group = item.item_group - while item_group and not item_tax_template: - item_group_doc = frappe.get_cached_doc("Item Group", item_group) - item_tax_template = _get_item_tax_template(ctx, item_group_doc.taxes, out) - item_group = item_group_doc.parent_item_group + item_tax_template = _get_item_tax_template_from_item_group(ctx, item.item_group, out) if out and ctx.get("child_doctype") and item_tax_template: out.update(get_fetch_values(ctx.get("child_doctype"), "item_tax_template", item_tax_template)) @@ -738,6 +734,18 @@ def get_item_tax_template(ctx, item=None, out: ItemDetails | None = None): return item_tax_template +def _get_item_tax_template_from_item_group(ctx, item_group, out=None): + from frappe.utils.nestedset import get_ancestors_of + + ancestors = get_ancestors_of("Item Group", item_group) + for group in [item_group, *ancestors]: + group_doc = frappe.get_cached_doc("Item Group", group) + item_tax_template = _get_item_tax_template(ctx, group_doc.taxes, out) + if item_tax_template: + return item_tax_template + return None + + @erpnext.normalize_ctx_input(ItemDetailsCtx) def _get_item_tax_template( ctx: ItemDetailsCtx, taxes, out: ItemDetails | None = None, for_validate=False From 338d1904c1c6990a8ad68517cffdef5f4b69fd92 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 8 May 2026 12:35:22 +0000 Subject: [PATCH 06/19] fix(stock): ignore reserved qty for stock levels in batch (backport #54790) (#54797) fix(stock): ignore reserved qty for stock levels in batch (#54790) (cherry picked from commit 0b6a372a524ce1dd38a8969a3fa75a74a2f8bd10) Co-authored-by: Pandiyan P --- erpnext/stock/doctype/batch/batch.js | 1 + 1 file changed, 1 insertion(+) diff --git a/erpnext/stock/doctype/batch/batch.js b/erpnext/stock/doctype/batch/batch.js index d0b444129ce..da2a083252b 100644 --- a/erpnext/stock/doctype/batch/batch.js +++ b/erpnext/stock/doctype/batch/batch.js @@ -70,6 +70,7 @@ frappe.ui.form.on("Batch", { item_code: frm.doc.item, for_stock_levels: for_stock_levels, consider_negative_batches: 1, + ignore_reserved_stock: 1, }, callback: (r) => { if (!r.message || r.message.length === 0) { From d3bc629f684525eb51fde92767d7f70d574d6ef3 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 8 May 2026 12:42:02 +0000 Subject: [PATCH 07/19] fix(stock): priorities pick list parent warehouse (backport #54788) (#54793) fix(stock): priorities pick list parent warehouse (#54788) (cherry picked from commit 4e850f31d52c4bb6c7b9c0f556fe2d1ad12a5018) Co-authored-by: Sudharsanan Ashok <135326972+Sudharsanan11@users.noreply.github.com> --- erpnext/stock/doctype/pick_list/pick_list.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/erpnext/stock/doctype/pick_list/pick_list.py b/erpnext/stock/doctype/pick_list/pick_list.py index 7c31ec7a672..ad26b73c119 100644 --- a/erpnext/stock/doctype/pick_list/pick_list.py +++ b/erpnext/stock/doctype/pick_list/pick_list.py @@ -522,9 +522,11 @@ class PickList(TransactionBase): picked_items_details = self.get_picked_items_details(items) self.item_location_map = frappe._dict() - from_warehouses = [self.parent_warehouse] if self.parent_warehouse else [] + from_warehouses = [] + if self.parent_warehouse: + from_warehouses = [self.parent_warehouse] - if self.work_order: + elif self.work_order: root_warehouse = frappe.db.get_value( "Warehouse", {"company": self.company, "parent_warehouse": ["IS", "NOT SET"], "is_group": 1} ) From f36bdaadae92d0bffe870f190efe005c39ac187e Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 8 May 2026 12:55:38 +0000 Subject: [PATCH 08/19] fix(crm): handle empty _assign in appointment auto assignment (backport #54782) (#54795) fix(crm): handle empty _assign in appointment auto assignment (#54782) (cherry picked from commit a4a389bd4193f8122fc896c46119abb7a504b794) Co-authored-by: Sakthivel Murugan S <129778327+ssakthivelmurugan@users.noreply.github.com> --- erpnext/crm/doctype/appointment/appointment.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/erpnext/crm/doctype/appointment/appointment.py b/erpnext/crm/doctype/appointment/appointment.py index 9a213aea5fc..0f7c52688a3 100644 --- a/erpnext/crm/doctype/appointment/appointment.py +++ b/erpnext/crm/doctype/appointment/appointment.py @@ -235,10 +235,13 @@ def _get_agents_sorted_by_asc_workload(date): return agent_list appointment_counter = Counter(agent_list) for appointment in appointments: - assigned_to = frappe.parse_json(appointment._assign) - if not assigned_to: + assign_data = appointment._assign + if isinstance(assign_data, str): + assign_data = assign_data.strip() + if not assign_data: continue - if (assigned_to[0] in agent_list) and getdate(appointment.scheduled_time) == date: + assigned_to = frappe.parse_json(assign_data) + if assigned_to and (assigned_to[0] in agent_list) and getdate(appointment.scheduled_time) == date: appointment_counter[assigned_to[0]] += 1 sorted_agent_list = appointment_counter.most_common() sorted_agent_list.reverse() From f64f871d451666ab77fe2b65a0ef85a997135282 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Sat, 9 May 2026 02:01:42 +0000 Subject: [PATCH 09/19] feat: partial delivery in dropshipping (backport #54787) (#54800) * feat: partial delivery in dropshipping (#54787) (cherry picked from commit db7436039609a9e76cd0f9117750723be596b240) # Conflicts: # erpnext/buying/doctype/purchase_order/purchase_order.py # erpnext/buying/doctype/purchase_order_item/purchase_order_item.json * chore: resolve conflicts * chore: resolve conflicts --------- Co-authored-by: Mihir Kandoi --- .../doctype/purchase_order/purchase_order.js | 149 +++++++++++++++++- .../doctype/purchase_order/purchase_order.py | 16 +- .../purchase_order_item.json | 4 +- erpnext/controllers/accounts_controller.py | 4 +- .../doctype/sales_order/sales_order.py | 2 +- 5 files changed, 160 insertions(+), 15 deletions(-) diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.js b/erpnext/buying/doctype/purchase_order/purchase_order.js index a6b0db94638..bb6e261c22d 100644 --- a/erpnext/buying/doctype/purchase_order/purchase_order.js +++ b/erpnext/buying/doctype/purchase_order/purchase_order.js @@ -354,9 +354,9 @@ erpnext.buying.PurchaseOrderController = class PurchaseOrderController extends ( } } - if (is_drop_ship && doc.status != "Delivered") { + if (is_drop_ship && !["Completed", "Delivered"].includes(doc.status)) { this.frm.add_custom_button( - __("Delivered"), + __("Deliver (Dropship)"), this.delivered_by_supplier.bind(this), __("Status") ); @@ -374,7 +374,12 @@ erpnext.buying.PurchaseOrderController = class PurchaseOrderController extends ( } if (doc.status != "Closed") { if (doc.status != "On Hold") { - if (flt(doc.per_received) < 100 && allow_receipt) { + if ( + doc.items + .filter((item) => !item.delivered_by_supplier) + .some((item) => item.received_qty < item.qty) && + allow_receipt + ) { this.frm.add_custom_button( __("Purchase Receipt"), () => { @@ -730,7 +735,143 @@ erpnext.buying.PurchaseOrderController = class PurchaseOrderController extends ( } delivered_by_supplier() { - this.frm.cscript.update_status("Deliver", "Delivered"); + const data = this.frm.doc.items + .filter((item) => item.delivered_by_supplier == 1) + .map((item) => { + return { + __checked: item.qty > item.received_qty, + name: item.name, + item_code: item.item_code, + item_name: item.item_name, + qty: item.qty, + uom: item.uom, + delivered_qty: item.received_qty || 0, + qty_change: item.qty - item.received_qty, + }; + }); + const dialog = new frappe.ui.Dialog({ + title: __("Set Dropship Items Delivered Quantity"), + size: "extra-large", + fields: [ + { + fieldname: "items", + fieldtype: "Table", + data: data, + cannot_add_rows: true, + cannot_delete_rows: true, + fields: [ + { + fieldname: "name", + fieldtype: "Data", + read_only: true, + hidden: 1, + }, + { + fieldname: "item_code", + fieldtype: "Link", + options: "Item", + label: __("Item Code"), + in_list_view: 1, + read_only: true, + }, + { + fieldname: "item_name", + fieldtype: "Data", + label: __("Item Name"), + in_list_view: 1, + read_only: true, + }, + { + fieldname: "qty", + fieldtype: "Float", + label: __("Quantity"), + in_list_view: 1, + read_only: true, + }, + { + fieldname: "uom", + fieldtype: "Data", + label: __("UOM"), + in_list_view: 1, + read_only: true, + }, + { + fieldname: "delivered_qty", + fieldtype: "Float", + label: __("Delivered Qty"), + read_only: true, + in_list_view: 1, + }, + { + fieldname: "qty_change", + fieldtype: "Float", + label: __("Qty Change"), + in_list_view: 1, + reqd: 1, + }, + ], + }, + ], + primary_action: (values) => { + const data = values.items.filter((item) => item.__checked); + if (!data.length) { + frappe.throw(__("Please select at least one item to update delivered quantity.")); + } + + data.forEach((item) => { + if (!item.qty_change) { + frappe.throw( + __( + "Item {0} has no changes in delivered quantity. Please unselect the row if you do not wish to update its quantity.", + [item.item_code.bold()] + ) + ); + } + if (item.qty_change < 0 && Math.abs(item.qty_change) > item.delivered_qty) { + frappe.throw( + __("Delivered Qty cannot be reduced by more than {0} for item {1}", [ + item.delivered_qty, + item.item_code.bold(), + ]) + ); + } + if (item.qty_change > 0 && item.delivered_qty + item.qty_change > item.qty) { + frappe.throw( + __("Delivered Qty cannot be increased by more than {0} for item {1}", [ + item.qty - item.delivered_qty, + item.item_code.bold(), + ]) + ); + } + }); + + data.forEach((item) => { + frappe.model.set_value( + "Purchase Order Item", + item.name, + "received_qty", + item.delivered_qty + item.qty_change + ); + }); + + const frm = this.frm; + frm.dirty(); + frm.save("Update", () => { + frappe.call({ + doc: frm.doc, + method: "update_receiving_percentage", + callback: function (r) { + if (!r.exc) { + dialog.hide(); + frappe.toast(__("Quantities updated successfully.")); + frm.reload_doc(); + } + }, + }); + }); + }, + }); + dialog.show(); } items_on_form_rendered() { diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.py b/erpnext/buying/doctype/purchase_order/purchase_order.py index 48ed761829e..140eef0ba38 100644 --- a/erpnext/buying/doctype/purchase_order/purchase_order.py +++ b/erpnext/buying/doctype/purchase_order/purchase_order.py @@ -218,7 +218,6 @@ class PurchaseOrder(BuyingController): self.create_raw_materials_supplied() self.validate_fg_item_for_subcontracting() - self.set_received_qty_for_drop_ship_items() if not self.advance_payment_status: self.advance_payment_status = "Not Initiated" @@ -493,6 +492,8 @@ class PurchaseOrder(BuyingController): if self.has_drop_ship_item(): self.update_delivered_qty_in_sales_order() + self.set_received_qty_to_zero_for_drop_ship_items() + self.update_receiving_percentage() self.update_reserved_qty_for_subcontract() self.check_on_hold_or_closed_status() @@ -566,6 +567,11 @@ class PurchaseOrder(BuyingController): so.set_status(update=True) so.notify_update() + def set_received_qty_to_zero_for_drop_ship_items(self): + for item in self.items: + if item.delivered_by_supplier: + item.db_set("received_qty", 0) + def has_drop_ship_item(self): return any(d.delivered_by_supplier for d in self.items) @@ -575,11 +581,6 @@ class PurchaseOrder(BuyingController): def is_against_pp(self): return any(d.production_plan for d in self.items if d.production_plan) - def set_received_qty_for_drop_ship_items(self): - for item in self.items: - if item.delivered_by_supplier == 1: - item.received_qty = item.qty - def update_reserved_qty_for_subcontract(self): if self.is_old_subcontracting_flow: for d in self.supplied_items: @@ -587,12 +588,13 @@ class PurchaseOrder(BuyingController): stock_bin = get_bin(d.rm_item_code, d.reserve_warehouse) stock_bin.update_reserved_qty_for_sub_contracting(subcontract_doctype="Purchase Order") + @frappe.whitelist() def update_receiving_percentage(self): total_qty, received_qty = 0.0, 0.0 for item in self.items: received_qty += min(item.received_qty, item.qty) total_qty += item.qty - if total_qty: + if total_qty and received_qty: self.db_set("per_received", flt(received_qty / total_qty) * 100, update_modified=False) else: self.db_set("per_received", 0, update_modified=False) diff --git a/erpnext/buying/doctype/purchase_order_item/purchase_order_item.json b/erpnext/buying/doctype/purchase_order_item/purchase_order_item.json index 2337d6a9fb6..7770b3b572d 100644 --- a/erpnext/buying/doctype/purchase_order_item/purchase_order_item.json +++ b/erpnext/buying/doctype/purchase_order_item/purchase_order_item.json @@ -622,11 +622,13 @@ "width": "100px" }, { + "allow_on_submit": 1, "depends_on": "received_qty", "fieldname": "received_qty", "fieldtype": "Float", "label": "Received Qty", "no_copy": 1, + "non_negative": 1, "oldfieldname": "received_qty", "oldfieldtype": "Currency", "print_hide": 1, @@ -950,7 +952,7 @@ "index_web_pages_for_search": 1, "istable": 1, "links": [], - "modified": "2025-11-30 16:51:57.761673", + "modified": "2026-05-08 20:40:10.683023", "modified_by": "Administrator", "module": "Buying", "name": "Purchase Order Item", diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py index 4f931bb0724..580813b91d3 100644 --- a/erpnext/controllers/accounts_controller.py +++ b/erpnext/controllers/accounts_controller.py @@ -3908,8 +3908,8 @@ def update_child_qty_rate(parent_doctype, trans_items, parent_doctype_name, chil ) qty_limits = { - "Sales Order": ("delivered_qty", _("Cannot set quantity less than delivered quantity")), - "Purchase Order": ("received_qty", _("Cannot set quantity less than received quantity")), + "Sales Order": ("delivered_qty", _("Cannot set quantity less than delivered quantity.")), + "Purchase Order": ("received_qty", _("Cannot set quantity less than received quantity.")), } if parent_doctype in qty_limits: diff --git a/erpnext/selling/doctype/sales_order/sales_order.py b/erpnext/selling/doctype/sales_order/sales_order.py index 5b6fe11f4fb..4b38369d048 100755 --- a/erpnext/selling/doctype/sales_order/sales_order.py +++ b/erpnext/selling/doctype/sales_order/sales_order.py @@ -1628,7 +1628,7 @@ def make_purchase_order(source_name, selected_items=None, target_doc=None): if default_payment_terms: target.payment_terms_template = default_payment_terms - if any(item.delivered_by_supplier == 1 for item in source.items): + if any(item.delivered_by_supplier for item in target.items): if source.shipping_address_name: target.shipping_address = source.shipping_address_name target.shipping_address_display = source.shipping_address From 1fcd2837e8a34a99d1c3bf549ad533176db8f377 Mon Sep 17 00:00:00 2001 From: MochaMind Date: Sun, 10 May 2026 17:26:48 +0530 Subject: [PATCH 10/19] chore: update POT file (#54814) --- erpnext/locale/main.pot | 848 +++++++++++++++++++++------------------- 1 file changed, 440 insertions(+), 408 deletions(-) diff --git a/erpnext/locale/main.pot b/erpnext/locale/main.pot index 1d5c58068a1..d1c1858cd23 100644 --- a/erpnext/locale/main.pot +++ b/erpnext/locale/main.pot @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: ERPNext VERSION\n" "Report-Msgid-Bugs-To: hello@frappe.io\n" -"POT-Creation-Date: 2026-05-03 09:55+0000\n" -"PO-Revision-Date: 2026-05-03 09:55+0000\n" +"POT-Creation-Date: 2026-05-10 10:00+0000\n" +"PO-Revision-Date: 2026-05-10 10:00+0000\n" "Last-Translator: hello@frappe.io\n" "Language-Team: hello@frappe.io\n" "MIME-Version: 1.0\n" @@ -267,7 +267,7 @@ msgstr "" msgid "% of materials delivered against this Sales Order" msgstr "" -#: erpnext/controllers/accounts_controller.py:2384 +#: erpnext/controllers/accounts_controller.py:2386 msgid "'Account' in the Accounting section of Customer {0}" msgstr "" @@ -283,7 +283,7 @@ msgstr "" msgid "'Days Since Last Order' must be greater than or equal to zero" msgstr "" -#: erpnext/controllers/accounts_controller.py:2389 +#: erpnext/controllers/accounts_controller.py:2391 msgid "'Default {0} Account' in Company {1}" msgstr "" @@ -768,7 +768,7 @@ msgstr "" msgid "
  • Clearance date must be after cheque date for row(s): {0}
  • " msgstr "" -#: erpnext/controllers/accounts_controller.py:2267 +#: erpnext/controllers/accounts_controller.py:2269 msgid "
  • Item {0} in row(s) {1} billed more than {2}
  • " msgstr "" @@ -785,7 +785,7 @@ msgstr "" msgid "
  • {}
  • " msgstr "" -#: erpnext/controllers/accounts_controller.py:2264 +#: erpnext/controllers/accounts_controller.py:2266 msgid "

    Cannot overbill for the following Items:

    " msgstr "" @@ -830,7 +830,7 @@ msgstr "" msgid "

    Price List Rate has not been set as editable in Selling Settings. In this scenario, setting Update Price List Based On to Price List Rate will prevent auto-updation of Item Price.

    Are you sure you want to continue?" msgstr "" -#: erpnext/controllers/accounts_controller.py:2276 +#: erpnext/controllers/accounts_controller.py:2278 msgid "

    To allow over-billing, please set allowance in Accounts Settings.

    " msgstr "" @@ -1216,7 +1216,7 @@ msgstr "" msgid "According to CEFACT/ICG/2010/IC013 or CEFACT/ICG/2010/IC010" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:1080 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1083 msgid "According to the BOM {0}, the Item '{1}' is missing in the stock entry." msgstr "" @@ -1335,7 +1335,7 @@ msgid "Account Manager" msgstr "" #: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:1008 -#: erpnext/controllers/accounts_controller.py:2393 +#: erpnext/controllers/accounts_controller.py:2395 msgid "Account Missing" msgstr "" @@ -1532,7 +1532,7 @@ msgstr "" msgid "Account {0} is frozen" msgstr "" -#: erpnext/controllers/accounts_controller.py:1468 +#: erpnext/controllers/accounts_controller.py:1470 msgid "Account {0} is invalid. Account Currency must be {1}" msgstr "" @@ -1568,7 +1568,7 @@ msgstr "" msgid "Account: {0} is not permitted under Payment Entry" msgstr "" -#: erpnext/controllers/accounts_controller.py:3282 +#: erpnext/controllers/accounts_controller.py:3284 msgid "Account: {0} with currency: {1} can not be selected" msgstr "" @@ -1853,8 +1853,8 @@ msgstr "" msgid "Accounting Entry for Asset" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:2056 -#: erpnext/stock/doctype/stock_entry/stock_entry.py:2076 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:2059 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:2079 msgid "Accounting Entry for LCV in Stock Entry {0}" msgstr "" @@ -1878,8 +1878,8 @@ msgstr "" #: erpnext/controllers/stock_controller.py:732 #: erpnext/controllers/stock_controller.py:749 #: erpnext/stock/doctype/purchase_receipt/purchase_receipt.py:947 -#: erpnext/stock/doctype/stock_entry/stock_entry.py:2001 -#: erpnext/stock/doctype/stock_entry/stock_entry.py:2015 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:2004 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:2018 #: erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.py:777 msgid "Accounting Entry for Stock" msgstr "" @@ -1888,7 +1888,7 @@ msgstr "" msgid "Accounting Entry for {0}" msgstr "" -#: erpnext/controllers/accounts_controller.py:2434 +#: erpnext/controllers/accounts_controller.py:2436 msgid "Accounting Entry for {0}: {1} can only be made in currency: {2}" msgstr "" @@ -2704,8 +2704,8 @@ msgstr "" msgid "Add details" msgstr "" -#: erpnext/stock/doctype/pick_list/pick_list.js:86 -#: erpnext/stock/doctype/pick_list/pick_list.py:932 +#: erpnext/stock/doctype/pick_list/pick_list.js:89 +#: erpnext/stock/doctype/pick_list/pick_list.py:934 msgid "Add items in the Item Locations table" msgstr "" @@ -3178,7 +3178,7 @@ msgstr "" msgid "Adjust Qty" msgstr "" -#: erpnext/accounts/doctype/sales_invoice/sales_invoice.js:1158 +#: erpnext/accounts/doctype/sales_invoice/sales_invoice.js:1160 msgid "Adjustment Against" msgstr "" @@ -3259,7 +3259,7 @@ msgstr "" #: erpnext/accounts/doctype/pos_invoice/pos_invoice.json #: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json #: erpnext/accounts/doctype/sales_invoice/sales_invoice.json -#: erpnext/controllers/accounts_controller.py:285 +#: erpnext/controllers/accounts_controller.py:286 #: erpnext/setup/doctype/company/company.json msgid "Advance Payments" msgstr "" @@ -3521,7 +3521,7 @@ msgstr "" msgid "Age (Days)" msgstr "" -#: erpnext/stock/report/stock_ageing/stock_ageing.py:221 +#: erpnext/stock/report/stock_ageing/stock_ageing.py:226 msgid "Age ({0})" msgstr "" @@ -3786,7 +3786,7 @@ msgstr "" msgid "All items have already been received" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:3337 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:3340 msgid "All items have already been transferred for this Work Order." msgstr "" @@ -4343,7 +4343,7 @@ msgstr "" msgid "Allows users to submit Supplier Quotations with zero quantity. Useful when rates are fixed but the quantities are not. Eg. Rate Contracts." msgstr "" -#: erpnext/stock/doctype/pick_list/pick_list.py:1081 +#: erpnext/stock/doctype/pick_list/pick_list.py:1083 msgid "Already Picked" msgstr "" @@ -4767,7 +4767,7 @@ msgstr "" msgid "An error has been appeared while reposting item valuation via {0}" msgstr "" -#: erpnext/public/js/controllers/buying.js:382 +#: erpnext/public/js/controllers/buying.js:387 #: erpnext/public/js/utils/sales_common.js:489 msgid "An error occurred during the update process" msgstr "" @@ -5925,11 +5925,11 @@ msgstr "" msgid "At least one row is required for a financial report template" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:881 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:884 msgid "At least one warehouse is mandatory" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:783 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:786 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 "" @@ -5937,7 +5937,7 @@ msgstr "" msgid "At row #{0}: the sequence id {1} cannot be less than previous row sequence id {2}" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:794 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:797 msgid "At row #{0}: you have selected the Difference Account {1}, which is a Cost of Goods Sold type account. Please select a different account" msgstr "" @@ -6244,7 +6244,7 @@ msgstr "" msgid "Auto re-order" msgstr "" -#: erpnext/public/js/controllers/buying.js:377 +#: erpnext/public/js/controllers/buying.js:382 #: erpnext/public/js/utils/sales_common.js:484 msgid "Auto repeat document updated" msgstr "" @@ -6349,7 +6349,7 @@ msgstr "" #: erpnext/public/js/utils.js:647 #: erpnext/stock/doctype/delivery_note_item/delivery_note_item.json #: erpnext/stock/doctype/pick_list_item/pick_list_item.json -#: erpnext/stock/report/stock_ageing/stock_ageing.py:170 +#: erpnext/stock/report/stock_ageing/stock_ageing.py:175 msgid "Available Qty" msgstr "" @@ -6438,7 +6438,7 @@ msgstr "" msgid "Available for use date is required" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:1044 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1047 msgid "Available quantity is {0}, you need {1}" msgstr "" @@ -6450,8 +6450,8 @@ msgstr "" msgid "Available-for-use Date should be after purchase date" msgstr "" -#: erpnext/stock/report/stock_ageing/stock_ageing.py:171 -#: erpnext/stock/report/stock_ageing/stock_ageing.py:205 +#: erpnext/stock/report/stock_ageing/stock_ageing.py:176 +#: erpnext/stock/report/stock_ageing/stock_ageing.py:210 #: erpnext/stock/report/stock_balance/stock_balance.py:590 msgid "Average Age" msgstr "" @@ -6567,7 +6567,7 @@ msgstr "" #: erpnext/manufacturing/report/bom_stock_analysis/bom_stock_analysis.js:8 #: erpnext/manufacturing/report/work_order_stock_report/work_order_stock_report.py:109 #: erpnext/manufacturing/workspace/manufacturing/manufacturing.json -#: erpnext/selling/doctype/sales_order/sales_order.js:1456 +#: erpnext/selling/doctype/sales_order/sales_order.js:1458 #: erpnext/stock/doctype/material_request/material_request.js:351 #: erpnext/stock/doctype/purchase_receipt_item/purchase_receipt_item.json #: erpnext/stock/doctype/stock_entry/stock_entry.js:788 @@ -6761,13 +6761,6 @@ msgstr "" msgid "BOM Stock Analysis" msgstr "" -#. Label of a Link in the Manufacturing Workspace -#. Label of a Workspace Sidebar Item -#: erpnext/manufacturing/workspace/manufacturing/manufacturing.json -#: erpnext/workspace_sidebar/manufacturing.json -msgid "BOM Stock Report" -msgstr "" - #. Label of the tab_2_tab (Tab Break) field in DocType 'BOM Creator' #: erpnext/manufacturing/doctype/bom_creator/bom_creator.json msgid "BOM Tree" @@ -6824,7 +6817,7 @@ msgstr "" msgid "BOM Website Operation" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:2448 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:2451 msgid "BOM and Finished Good Quantity is mandatory for Disassembly" msgstr "" @@ -7711,12 +7704,12 @@ msgstr "" msgid "Batch {0} is not available in warehouse {1}" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:3521 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:3524 #: erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py:290 msgid "Batch {0} of Item {1} has expired." msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:3527 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:3530 msgid "Batch {0} of Item {1} is disabled." msgstr "" @@ -7887,7 +7880,7 @@ msgstr "" msgid "Billing Address Name" msgstr "" -#: erpnext/controllers/accounts_controller.py:571 +#: erpnext/controllers/accounts_controller.py:573 msgid "Billing Address does not belong to the {0}" msgstr "" @@ -8121,7 +8114,7 @@ msgid "Blanket Orders" msgstr "" #: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js:109 -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js:260 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js:271 msgid "Block Invoice" msgstr "" @@ -8980,7 +8973,7 @@ msgid "Can only make payment against unbilled {0}" msgstr "" #: erpnext/accounts/doctype/payment_entry/payment_entry.js:1517 -#: erpnext/controllers/accounts_controller.py:3191 +#: erpnext/controllers/accounts_controller.py:3193 #: erpnext/public/js/controllers/accounts.js:103 msgid "Can refer row only if the charge type is 'On Previous Row Amount' or 'Previous Row Total'" msgstr "" @@ -9105,7 +9098,7 @@ msgstr "" msgid "Cannot cancel this document as it is linked with the submitted asset {asset_link}. Please cancel the asset to continue." msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:558 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:561 msgid "Cannot cancel transaction for Completed Work Order." msgstr "" @@ -9187,7 +9180,7 @@ msgstr "" msgid "Cannot delete Serial No {0}, as it is used in stock transactions" msgstr "" -#: erpnext/controllers/accounts_controller.py:3790 +#: erpnext/controllers/accounts_controller.py:3797 msgid "Cannot delete an item which has been ordered" msgstr "" @@ -9216,7 +9209,7 @@ msgstr "" msgid "Cannot disassemble more than produced quantity." msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:924 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:927 msgid "Cannot disassemble {0} qty against Stock Entry {1}. Only {2} qty available to disassemble." msgstr "" @@ -9241,7 +9234,7 @@ msgstr "" msgid "Cannot find Item with this Barcode" msgstr "" -#: erpnext/controllers/accounts_controller.py:3742 +#: erpnext/controllers/accounts_controller.py:3749 msgid "Cannot find a default warehouse for item {0}. Please set one in the Item Master or in Stock Settings." msgstr "" @@ -9265,12 +9258,12 @@ msgstr "" msgid "Cannot receive from customer against negative outstanding" msgstr "" -#: erpnext/controllers/accounts_controller.py:3938 +#: erpnext/controllers/accounts_controller.py:3945 msgid "Cannot reduce quantity than ordered or purchased quantity" msgstr "" #: erpnext/accounts/doctype/payment_entry/payment_entry.js:1530 -#: erpnext/controllers/accounts_controller.py:3206 +#: erpnext/controllers/accounts_controller.py:3208 #: erpnext/public/js/controllers/accounts.js:120 msgid "Cannot refer row number greater than or equal to current row number for this Charge type" msgstr "" @@ -9290,7 +9283,7 @@ msgstr "" #: erpnext/accounts/doctype/payment_entry/payment_entry.js:1523 #: erpnext/accounts/doctype/payment_entry/payment_entry.js:1701 #: erpnext/accounts/doctype/payment_entry/payment_entry.py:1827 -#: erpnext/controllers/accounts_controller.py:3196 +#: erpnext/controllers/accounts_controller.py:3198 #: erpnext/public/js/controllers/accounts.js:112 #: erpnext/public/js/controllers/taxes_and_totals.js:550 msgid "Cannot select charge type as 'On Previous Row Amount' or 'On Previous Row Total' for first row" @@ -9308,12 +9301,12 @@ msgstr "" msgid "Cannot set multiple Item Defaults for a company." msgstr "" -#: erpnext/controllers/accounts_controller.py:3904 -msgid "Cannot set quantity less than delivered quantity" +#: erpnext/controllers/accounts_controller.py:3911 +msgid "Cannot set quantity less than delivered quantity." msgstr "" -#: erpnext/controllers/accounts_controller.py:3905 -msgid "Cannot set quantity less than received quantity" +#: erpnext/controllers/accounts_controller.py:3912 +msgid "Cannot set quantity less than received quantity." msgstr "" #: erpnext/stock/doctype/item_variant_settings/item_variant_settings.py:69 @@ -9324,7 +9317,7 @@ msgstr "" msgid "Cannot start deletion. Another deletion {0} is already queued/running. Please wait for it to complete." msgstr "" -#: erpnext/controllers/accounts_controller.py:3932 +#: erpnext/controllers/accounts_controller.py:3939 msgid "Cannot update rate as item {0} is already ordered or purchased against this quotation" msgstr "" @@ -9599,7 +9592,7 @@ msgstr "" msgid "Category-wise Asset Value" msgstr "" -#: erpnext/buying/doctype/purchase_order/purchase_order.py:298 +#: erpnext/buying/doctype/purchase_order/purchase_order.py:297 #: erpnext/buying/doctype/request_for_quotation/request_for_quotation.py:143 msgid "Caution" msgstr "" @@ -9737,7 +9730,7 @@ msgid "Channel Partner" msgstr "" #: erpnext/accounts/doctype/payment_entry/payment_entry.py:2256 -#: erpnext/controllers/accounts_controller.py:3259 +#: erpnext/controllers/accounts_controller.py:3261 msgid "Charge of type 'Actual' in row {0} cannot be included in Item Rate or Paid Amount" msgstr "" @@ -10933,11 +10926,11 @@ msgstr "" msgid "Company Address Name" msgstr "" -#: erpnext/controllers/accounts_controller.py:4370 +#: erpnext/controllers/accounts_controller.py:4377 msgid "Company Address is missing. You don't have permission to create an Address. Please contact your System Manager." msgstr "" -#: erpnext/controllers/accounts_controller.py:4358 +#: erpnext/controllers/accounts_controller.py:4365 msgid "Company Address is missing. You don't have permission to update it. Please contact your System Manager." msgstr "" @@ -11707,7 +11700,7 @@ msgstr "" msgid "Contact Person" msgstr "" -#: erpnext/controllers/accounts_controller.py:583 +#: erpnext/controllers/accounts_controller.py:585 msgid "Contact Person does not belong to the {0}" msgstr "" @@ -11901,15 +11894,15 @@ msgstr "" msgid "Conversion factor for item {0} has been reset to 1.0 as the uom {1} is same as stock uom {2}." msgstr "" -#: erpnext/controllers/accounts_controller.py:2974 +#: erpnext/controllers/accounts_controller.py:2976 msgid "Conversion rate cannot be 0" msgstr "" -#: erpnext/controllers/accounts_controller.py:2981 +#: erpnext/controllers/accounts_controller.py:2983 msgid "Conversion rate is 1.00, but document currency is different from company currency" msgstr "" -#: erpnext/controllers/accounts_controller.py:2977 +#: erpnext/controllers/accounts_controller.py:2979 msgid "Conversion rate must be 1.00 if document currency is same as company currency" msgstr "" @@ -12315,7 +12308,7 @@ msgstr "" msgid "Cost of Goods Sold" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:797 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:800 msgid "Cost of Goods Sold Account in Items Table" msgstr "" @@ -12394,7 +12387,7 @@ msgstr "" msgid "Could Not Delete Demo Data" msgstr "" -#: erpnext/selling/doctype/quotation/quotation.py:622 +#: erpnext/selling/doctype/quotation/quotation.py:624 msgid "Could not auto create Customer due to the following missing mandatory field(s):" msgstr "" @@ -12705,7 +12698,7 @@ msgstr "" #. Title of an Onboarding Step #. Label of an action in the Onboarding Step 'Create Purchase Order' #: erpnext/buying/onboarding_step/create_purchase_order/create_purchase_order.json -#: erpnext/selling/doctype/sales_order/sales_order.js:1709 +#: erpnext/selling/doctype/sales_order/sales_order.js:1711 #: erpnext/utilities/activation.py:106 msgid "Create Purchase Order" msgstr "" @@ -12938,7 +12931,7 @@ msgstr "" msgid "Creating Accounts..." msgstr "" -#: erpnext/selling/doctype/sales_order/sales_order.js:1584 +#: erpnext/selling/doctype/sales_order/sales_order.js:1586 msgid "Creating Delivery Note ..." msgstr "" @@ -12962,12 +12955,12 @@ msgstr "" msgid "Creating Purchase Invoices ..." msgstr "" -#: erpnext/selling/doctype/sales_order/sales_order.js:1733 +#: erpnext/selling/doctype/sales_order/sales_order.js:1735 msgid "Creating Purchase Order ..." msgstr "" -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js:699 -#: erpnext/buying/doctype/purchase_order/purchase_order.js:497 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js:710 +#: erpnext/buying/doctype/purchase_order/purchase_order.js:506 #: erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.js:74 msgid "Creating Purchase Receipt ..." msgstr "" @@ -12981,11 +12974,11 @@ msgstr "" msgid "Creating Stock Entry" msgstr "" -#: erpnext/selling/doctype/sales_order/sales_order.js:1854 +#: erpnext/selling/doctype/sales_order/sales_order.js:1856 msgid "Creating Subcontracting Inward Order ..." msgstr "" -#: erpnext/buying/doctype/purchase_order/purchase_order.js:512 +#: erpnext/buying/doctype/purchase_order/purchase_order.js:521 msgid "Creating Subcontracting Order ..." msgstr "" @@ -13216,7 +13209,7 @@ msgstr "" #: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json #: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:376 #: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py:384 -#: erpnext/controllers/accounts_controller.py:2373 +#: erpnext/controllers/accounts_controller.py:2375 msgid "Credit To" msgstr "" @@ -13692,7 +13685,7 @@ msgstr "" #: erpnext/accounts/doctype/pricing_rule/pricing_rule.json #: erpnext/accounts/doctype/process_statement_of_accounts_customer/process_statement_of_accounts_customer.json #: erpnext/accounts/doctype/promotional_scheme/promotional_scheme.json -#: erpnext/accounts/doctype/sales_invoice/sales_invoice.js:390 +#: erpnext/accounts/doctype/sales_invoice/sales_invoice.js:392 #: erpnext/accounts/doctype/sales_invoice/sales_invoice.json #: erpnext/accounts/doctype/sales_invoice_reference/sales_invoice_reference.json #: erpnext/accounts/doctype/tax_rule/tax_rule.json @@ -13732,7 +13725,7 @@ msgstr "" #: erpnext/selling/doctype/customer/customer.json #: erpnext/selling/doctype/installation_note/installation_note.json #: erpnext/selling/doctype/party_specific_item/party_specific_item.json -#: erpnext/selling/doctype/sales_order/sales_order.js:1197 +#: erpnext/selling/doctype/sales_order/sales_order.js:1199 #: erpnext/selling/doctype/sales_order/sales_order.json #: erpnext/selling/doctype/sales_order/sales_order_calendar.js:19 #: erpnext/selling/doctype/selling_settings/selling_settings.js:64 @@ -14702,7 +14695,7 @@ msgstr "" #: erpnext/accounts/doctype/sales_invoice/sales_invoice.json #: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:1012 #: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:1023 -#: erpnext/controllers/accounts_controller.py:2373 +#: erpnext/controllers/accounts_controller.py:2375 msgid "Debit To" msgstr "" @@ -14880,7 +14873,7 @@ msgstr "" msgid "Default BOM for {0} not found" msgstr "" -#: erpnext/controllers/accounts_controller.py:3976 +#: erpnext/controllers/accounts_controller.py:3983 msgid "Default BOM not found for FG Item {0}" msgstr "" @@ -15497,6 +15490,10 @@ msgstr "" msgid "Delimiter options" msgstr "" +#: erpnext/buying/doctype/purchase_order/purchase_order.js:359 +msgid "Deliver (Dropship)" +msgstr "" + #. Label of the deliver_secondary_items (Check) field in DocType 'Selling #. Settings' #: erpnext/selling/doctype/selling_settings/selling_settings.json @@ -15509,7 +15506,6 @@ msgstr "" #. Option for the 'Status' (Select) field in DocType 'Stock Reservation Entry' #. Option for the 'Status' (Select) field in DocType 'Subcontracting Inward #. Order' -#: erpnext/buying/doctype/purchase_order/purchase_order.js:359 #: erpnext/buying/doctype/purchase_order/purchase_order.json #: erpnext/buying/doctype/purchase_order/purchase_order_list.js:20 #: erpnext/controllers/website_list_for_contact.py:209 @@ -15566,6 +15562,7 @@ msgstr "" #. Order Secondary Item' #: erpnext/accounts/doctype/pos_invoice_item/pos_invoice_item.json #: erpnext/accounts/doctype/sales_invoice_item/sales_invoice_item.json +#: erpnext/buying/doctype/purchase_order/purchase_order.js:801 #: erpnext/selling/doctype/sales_order_item/sales_order_item.json #: erpnext/selling/report/sales_order_analysis/sales_order_analysis.py:262 #: erpnext/stock/doctype/serial_and_batch_entry/serial_and_batch_entry.json @@ -15582,10 +15579,24 @@ msgstr "" msgid "Delivered Qty (in Stock UOM)" msgstr "" +#: erpnext/buying/doctype/purchase_order/purchase_order.js:842 +msgid "Delivered Qty cannot be increased by more than {0} for item {1}" +msgstr "" + +#: erpnext/buying/doctype/purchase_order/purchase_order.js:834 +msgid "Delivered Qty cannot be reduced by more than {0} for item {1}" +msgstr "" + #: erpnext/selling/report/item_wise_sales_history/item_wise_sales_history.py:101 msgid "Delivered Quantity" msgstr "" +#. Label of the delivered_by_supplier (Check) field in DocType 'Purchase +#. Invoice Item' +#: erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.json +msgid "Delivered by Supplier" +msgstr "" + #. Label of the delivered_by_supplier (Check) field in DocType 'Item' #: erpnext/stock/doctype/item/item.json msgid "Delivered by Supplier (Drop Ship)" @@ -15612,7 +15623,7 @@ msgstr "" #: erpnext/public/js/utils.js:895 #: erpnext/selling/doctype/delivery_schedule_item/delivery_schedule_item.json #: erpnext/selling/doctype/sales_order/sales_order.js:632 -#: erpnext/selling/doctype/sales_order/sales_order.js:1531 +#: erpnext/selling/doctype/sales_order/sales_order.js:1533 #: erpnext/selling/doctype/sales_order/sales_order.json #: erpnext/selling/doctype/sales_order_item/sales_order_item.json #: erpnext/selling/report/sales_order_analysis/sales_order_analysis.py:321 @@ -15652,7 +15663,7 @@ msgstr "" #. Label of a Workspace Sidebar Item #: erpnext/accounts/doctype/pos_invoice_item/pos_invoice_item.json #: erpnext/accounts/doctype/sales_invoice/sales_invoice.js:129 -#: erpnext/accounts/doctype/sales_invoice/sales_invoice.js:413 +#: erpnext/accounts/doctype/sales_invoice/sales_invoice.js:415 #: erpnext/accounts/doctype/sales_invoice/sales_invoice_list.js:36 #: erpnext/accounts/doctype/sales_invoice_item/sales_invoice_item.json #: erpnext/accounts/report/delivered_items_to_be_billed/delivered_items_to_be_billed.js:22 @@ -15667,7 +15678,7 @@ msgstr "" #: erpnext/stock/doctype/delivery_stop/delivery_stop.json #: erpnext/stock/doctype/delivery_trip/delivery_trip.js:54 #: erpnext/stock/doctype/packing_slip/packing_slip.json -#: erpnext/stock/doctype/pick_list/pick_list.js:134 +#: erpnext/stock/doctype/pick_list/pick_list.js:137 #: erpnext/stock/doctype/purchase_receipt/purchase_receipt.js:59 #: erpnext/stock/doctype/quality_inspection/quality_inspection.json #: erpnext/stock/doctype/shipment_delivery_note/shipment_delivery_note.json @@ -16126,11 +16137,11 @@ msgstr "" msgid "Difference Account" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:786 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:789 msgid "Difference Account in Items Table" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:775 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:778 msgid "Difference Account must be a Asset/Liability type account (Temporary Opening), since this Stock Entry is an Opening Entry" msgstr "" @@ -16357,11 +16368,11 @@ msgstr "" msgid "Disabled Warehouse {0} cannot be used for this transaction." msgstr "" -#: erpnext/controllers/accounts_controller.py:901 +#: erpnext/controllers/accounts_controller.py:903 msgid "Disabled pricing rules since this {} is an internal transfer" msgstr "" -#: erpnext/controllers/accounts_controller.py:915 +#: erpnext/controllers/accounts_controller.py:917 msgid "Disabled tax included prices since this {} is an internal transfer" msgstr "" @@ -16389,7 +16400,7 @@ msgstr "" msgid "Disassemble Order" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:2390 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:2393 msgid "Disassemble Qty cannot be less than or equal to 0." msgstr "" @@ -17212,7 +17223,7 @@ msgstr "" #. Name of a DocType #. Label of a Workspace Sidebar Item #: erpnext/accounts/doctype/dunning/dunning.json -#: erpnext/accounts/doctype/sales_invoice/sales_invoice.js:156 +#: erpnext/accounts/doctype/sales_invoice/sales_invoice.js:158 #: erpnext/workspace_sidebar/banking.json msgid "Dunning" msgstr "" @@ -17434,7 +17445,7 @@ msgstr "" msgid "Each Transaction" msgstr "" -#: erpnext/stock/report/stock_ageing/stock_ageing.py:177 +#: erpnext/stock/report/stock_ageing/stock_ageing.py:182 msgid "Earliest" msgstr "" @@ -18506,7 +18517,7 @@ msgstr "" msgid "Exception Budget Approver Role" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:931 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:934 msgid "Excess Disassembly" msgstr "" @@ -18554,8 +18565,8 @@ msgstr "" msgid "Exchange Gain/Loss" msgstr "" -#: erpnext/controllers/accounts_controller.py:1774 -#: erpnext/controllers/accounts_controller.py:1859 +#: erpnext/controllers/accounts_controller.py:1776 +#: erpnext/controllers/accounts_controller.py:1861 msgid "Exchange Gain/Loss amount has been booked through {0}" msgstr "" @@ -19230,7 +19241,7 @@ msgstr "" msgid "Fetch Subscription Updates" msgstr "" -#: erpnext/accounts/doctype/sales_invoice/sales_invoice.js:284 +#: erpnext/accounts/doctype/sales_invoice/sales_invoice.js:286 msgid "Fetch Timesheet" msgstr "" @@ -19570,15 +19581,15 @@ msgstr "" msgid "Finished Good Item Quantity" msgstr "" -#: erpnext/controllers/accounts_controller.py:3962 +#: erpnext/controllers/accounts_controller.py:3969 msgid "Finished Good Item is not specified for service item {0}" msgstr "" -#: erpnext/controllers/accounts_controller.py:3979 +#: erpnext/controllers/accounts_controller.py:3986 msgid "Finished Good Item {0} Qty can not be zero" msgstr "" -#: erpnext/controllers/accounts_controller.py:3973 +#: erpnext/controllers/accounts_controller.py:3980 msgid "Finished Good Item {0} must be a sub-contracted item" msgstr "" @@ -19623,7 +19634,7 @@ msgstr "" msgid "Finished Good {0} must be a sub-contracted item." msgstr "" -#: erpnext/selling/doctype/sales_order/sales_order.js:1435 +#: erpnext/selling/doctype/sales_order/sales_order.js:1437 #: erpnext/setup/doctype/company/company.py:386 msgid "Finished Goods" msgstr "" @@ -19665,7 +19676,7 @@ msgstr "" msgid "Finished Goods based Operating Cost" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:1767 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1770 msgid "Finished Item {0} does not match with Work Order {1}" msgstr "" @@ -20005,7 +20016,7 @@ msgstr "" msgid "For Production" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:898 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:901 msgid "For Quantity (Manufactured Qty) is mandatory" msgstr "" @@ -20015,7 +20026,7 @@ msgstr "" msgid "For Raw Materials" msgstr "" -#: erpnext/controllers/accounts_controller.py:1439 +#: erpnext/controllers/accounts_controller.py:1441 msgid "For Return Invoices with Stock effect, '0' qty Items are not allowed. Following rows are affected: {0}" msgstr "" @@ -20033,7 +20044,7 @@ msgstr "" #: erpnext/manufacturing/doctype/material_request_plan_item/material_request_plan_item.json #: erpnext/manufacturing/doctype/production_plan/production_plan.js:471 #: erpnext/manufacturing/doctype/production_plan/production_plan.json -#: erpnext/selling/doctype/sales_order/sales_order.js:1448 +#: erpnext/selling/doctype/sales_order/sales_order.js:1450 #: erpnext/stock/doctype/material_request/material_request.js:361 #: erpnext/templates/form_grid/material_request_grid.html:36 msgid "For Warehouse" @@ -20102,7 +20113,7 @@ msgstr "" msgid "For projected and forecast quantities, the system will consider all child warehouses under the selected parent warehouse." msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:1799 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1802 msgid "For quantity {0} should not be greater than allowed quantity {1}" msgstr "" @@ -20135,7 +20146,7 @@ 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:1069 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1072 msgid "For the item {0}, the consumed quantity should be {1} according to the BOM {2}." msgstr "" @@ -21026,14 +21037,14 @@ msgid "Get Item Locations" msgstr "" #. Label of the get_items_from (Select) field in DocType 'Production Plan' -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js:166 -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js:191 -#: erpnext/accounts/doctype/sales_invoice/sales_invoice.js:340 -#: erpnext/accounts/doctype/sales_invoice/sales_invoice.js:374 -#: erpnext/accounts/doctype/sales_invoice/sales_invoice.js:406 -#: erpnext/accounts/doctype/sales_invoice/sales_invoice.js:446 -#: erpnext/buying/doctype/purchase_order/purchase_order.js:540 -#: erpnext/buying/doctype/purchase_order/purchase_order.js:563 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js:177 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js:202 +#: erpnext/accounts/doctype/sales_invoice/sales_invoice.js:342 +#: erpnext/accounts/doctype/sales_invoice/sales_invoice.js:376 +#: erpnext/accounts/doctype/sales_invoice/sales_invoice.js:408 +#: erpnext/accounts/doctype/sales_invoice/sales_invoice.js:448 +#: erpnext/buying/doctype/purchase_order/purchase_order.js:549 +#: erpnext/buying/doctype/purchase_order/purchase_order.js:572 #: erpnext/buying/doctype/request_for_quotation/request_for_quotation.js:380 #: erpnext/buying/doctype/request_for_quotation/request_for_quotation.js:402 #: erpnext/buying/doctype/request_for_quotation/request_for_quotation.js:447 @@ -21044,10 +21055,10 @@ 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:329 +#: erpnext/public/js/controllers/buying.js:334 #: erpnext/selling/doctype/quotation/quotation.js:182 #: erpnext/selling/doctype/sales_order/sales_order.js:211 -#: erpnext/selling/doctype/sales_order/sales_order.js:1214 +#: erpnext/selling/doctype/sales_order/sales_order.js:1216 #: erpnext/stock/doctype/delivery_note/delivery_note.js:187 #: erpnext/stock/doctype/delivery_note/delivery_note.js:239 #: erpnext/stock/doctype/material_request/material_request.js:141 @@ -21083,7 +21094,7 @@ msgstr "" msgid "Get Items from Material Requests against this Supplier" msgstr "" -#: erpnext/public/js/controllers/buying.js:606 +#: erpnext/public/js/controllers/buying.js:611 msgid "Get Items from Product Bundle" msgstr "" @@ -21178,7 +21189,7 @@ msgstr "" msgid "Get Suppliers By" msgstr "" -#: erpnext/accounts/doctype/sales_invoice/sales_invoice.js:336 +#: erpnext/accounts/doctype/sales_invoice/sales_invoice.js:338 msgid "Get Timesheets" msgstr "" @@ -21250,7 +21261,7 @@ msgstr "" msgid "Goods Transferred" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:2317 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:2320 msgid "Goods are already received against the outward entry {0}" msgstr "" @@ -22683,7 +22694,7 @@ msgstr "" msgid "Ignore Exchange Rate Revaluation and Gain / Loss Journals" msgstr "" -#: erpnext/selling/doctype/sales_order/sales_order.js:1430 +#: erpnext/selling/doctype/sales_order/sales_order.js:1432 msgid "Ignore Existing Ordered Qty" msgstr "" @@ -23142,7 +23153,7 @@ msgstr "" #: erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.json #: erpnext/buying/doctype/purchase_order_item/purchase_order_item.json #: erpnext/manufacturing/doctype/production_plan_item/production_plan_item.json -#: erpnext/selling/doctype/sales_order/sales_order.js:1426 +#: erpnext/selling/doctype/sales_order/sales_order.js:1428 #: erpnext/stock/doctype/purchase_receipt_item/purchase_receipt_item.json #: erpnext/subcontracting/doctype/subcontracting_inward_order_item/subcontracting_inward_order_item.json #: erpnext/subcontracting/doctype/subcontracting_order_item/subcontracting_order_item.json @@ -23365,7 +23376,7 @@ msgstr "" msgid "Incorrect Company" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:1076 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1079 msgid "Incorrect Component Quantity" msgstr "" @@ -23661,19 +23672,19 @@ msgstr "" msgid "Insufficient Capacity" msgstr "" -#: erpnext/controllers/accounts_controller.py:3856 -#: erpnext/controllers/accounts_controller.py:3880 -#: erpnext/controllers/accounts_controller.py:4400 -#: erpnext/controllers/accounts_controller.py:4406 -#: erpnext/controllers/accounts_controller.py:4428 +#: erpnext/controllers/accounts_controller.py:3863 +#: erpnext/controllers/accounts_controller.py:3887 +#: erpnext/controllers/accounts_controller.py:4407 +#: erpnext/controllers/accounts_controller.py:4413 +#: erpnext/controllers/accounts_controller.py:4435 msgid "Insufficient Permissions" msgstr "" #: erpnext/accounts/doctype/pos_invoice/pos_invoice.py:463 #: erpnext/stock/doctype/pick_list/pick_list.py:145 #: erpnext/stock/doctype/pick_list/pick_list.py:163 -#: erpnext/stock/doctype/pick_list/pick_list.py:1088 -#: erpnext/stock/doctype/stock_entry/stock_entry.py:1048 +#: erpnext/stock/doctype/pick_list/pick_list.py:1090 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1051 #: erpnext/stock/serial_batch_bundle.py:1219 erpnext/stock/stock_ledger.py:1747 #: erpnext/stock/stock_ledger.py:2225 msgid "Insufficient Stock" @@ -23784,7 +23795,7 @@ msgstr "" msgid "Inter Company Reference" msgstr "" -#: erpnext/buying/doctype/purchase_order/purchase_order.js:444 +#: erpnext/buying/doctype/purchase_order/purchase_order.js:453 msgid "Inter Company Sales Order" msgstr "" @@ -23842,15 +23853,15 @@ msgstr "" msgid "Internal Purchase Order" msgstr "" -#: erpnext/controllers/accounts_controller.py:801 +#: erpnext/controllers/accounts_controller.py:803 msgid "Internal Sale or Delivery Reference missing." msgstr "" -#: erpnext/buying/doctype/purchase_order/purchase_order.js:443 +#: erpnext/buying/doctype/purchase_order/purchase_order.js:452 msgid "Internal Sales Order" msgstr "" -#: erpnext/controllers/accounts_controller.py:803 +#: erpnext/controllers/accounts_controller.py:805 msgid "Internal Sales Reference Missing" msgstr "" @@ -23881,7 +23892,7 @@ msgstr "" msgid "Internal Transfer" msgstr "" -#: erpnext/controllers/accounts_controller.py:812 +#: erpnext/controllers/accounts_controller.py:814 msgid "Internal Transfer Reference Missing" msgstr "" @@ -23914,8 +23925,8 @@ msgstr "" #: erpnext/accounts/doctype/sales_invoice/sales_invoice.py:1028 #: erpnext/assets/doctype/asset_category/asset_category.py:69 #: erpnext/assets/doctype/asset_category/asset_category.py:97 -#: erpnext/controllers/accounts_controller.py:3220 -#: erpnext/controllers/accounts_controller.py:3228 +#: erpnext/controllers/accounts_controller.py:3222 +#: erpnext/controllers/accounts_controller.py:3230 msgid "Invalid Account" msgstr "" @@ -23936,7 +23947,7 @@ msgstr "" msgid "Invalid Attribute" msgstr "" -#: erpnext/controllers/accounts_controller.py:623 +#: erpnext/controllers/accounts_controller.py:625 msgid "Invalid Auto Repeat Date" msgstr "" @@ -23966,7 +23977,7 @@ msgstr "" #: erpnext/assets/doctype/asset/asset.py:361 #: erpnext/assets/doctype/asset/asset.py:368 -#: erpnext/controllers/accounts_controller.py:3243 +#: erpnext/controllers/accounts_controller.py:3245 msgid "Invalid Cost Center" msgstr "" @@ -24034,7 +24045,7 @@ msgstr "" msgid "Invalid Parent Account" msgstr "" -#: erpnext/public/js/controllers/buying.js:428 +#: erpnext/public/js/controllers/buying.js:433 msgid "Invalid Part Number" msgstr "" @@ -24064,12 +24075,12 @@ msgstr "" msgid "Invalid Purchase Invoice" msgstr "" -#: erpnext/controllers/accounts_controller.py:3900 -#: erpnext/controllers/accounts_controller.py:3914 +#: erpnext/controllers/accounts_controller.py:3907 +#: erpnext/controllers/accounts_controller.py:3921 msgid "Invalid Qty" msgstr "" -#: erpnext/controllers/accounts_controller.py:1457 +#: erpnext/controllers/accounts_controller.py:1459 msgid "Invalid Quantity" msgstr "" @@ -24094,12 +24105,12 @@ msgstr "" msgid "Invalid Selling Price" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:1842 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1845 msgid "Invalid Serial and Batch Bundle" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:1110 -#: erpnext/stock/doctype/stock_entry/stock_entry.py:1132 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1113 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1135 msgid "Invalid Source and Target Warehouse" msgstr "" @@ -24270,7 +24281,7 @@ msgstr "" #. Account' #: erpnext/accounts/doctype/invoice_discounting/invoice_discounting.json #: erpnext/accounts/doctype/journal_entry_account/journal_entry_account.json -#: erpnext/accounts/doctype/sales_invoice/sales_invoice.js:146 +#: erpnext/accounts/doctype/sales_invoice/sales_invoice.js:148 msgid "Invoice Discounting" msgstr "" @@ -25158,7 +25169,7 @@ msgstr "" #: erpnext/public/js/stock_analytics.js:92 #: erpnext/selling/doctype/party_specific_item/party_specific_item.json #: erpnext/selling/doctype/product_bundle_item/product_bundle_item.json -#: erpnext/selling/doctype/sales_order/sales_order.js:1672 +#: erpnext/selling/doctype/sales_order/sales_order.js:1674 #: erpnext/selling/page/point_of_sale/pos_item_cart.js:50 #: erpnext/selling/report/customer_wise_item_price/customer_wise_item_price.js:14 #: erpnext/selling/report/item_wise_sales_history/item_wise_sales_history.js:36 @@ -25385,7 +25396,7 @@ msgstr "" #: erpnext/accounts/doctype/pricing_rule_item_code/pricing_rule_item_code.json #: erpnext/accounts/doctype/promotional_scheme/promotional_scheme.json #: erpnext/accounts/doctype/promotional_scheme_product_discount/promotional_scheme_product_discount.json -#: erpnext/accounts/doctype/sales_invoice/sales_invoice.js:293 +#: erpnext/accounts/doctype/sales_invoice/sales_invoice.js:295 #: erpnext/accounts/report/billed_items_to_be_received/billed_items_to_be_received.py:68 #: erpnext/accounts/report/delivered_items_to_be_billed/delivered_items_to_be_billed.py:37 #: erpnext/accounts/report/gross_profit/gross_profit.py:312 @@ -25398,6 +25409,7 @@ msgstr "" #: erpnext/assets/doctype/asset_capitalization_stock_item/asset_capitalization_stock_item.json #: erpnext/assets/doctype/asset_maintenance/asset_maintenance.json #: erpnext/assets/doctype/asset_maintenance_log/asset_maintenance_log.json +#: erpnext/buying/doctype/purchase_order/purchase_order.js:773 #: erpnext/buying/doctype/purchase_order_item/purchase_order_item.json #: erpnext/buying/doctype/purchase_order_item_supplied/purchase_order_item_supplied.json #: erpnext/buying/doctype/purchase_receipt_item_supplied/purchase_receipt_item_supplied.json @@ -25452,8 +25464,8 @@ msgstr "" #: erpnext/selling/doctype/quotation_item/quotation_item.json #: erpnext/selling/doctype/sales_order/sales_order.js:376 #: erpnext/selling/doctype/sales_order/sales_order.js:484 -#: erpnext/selling/doctype/sales_order/sales_order.js:1277 -#: erpnext/selling/doctype/sales_order/sales_order.js:1441 +#: erpnext/selling/doctype/sales_order/sales_order.js:1279 +#: erpnext/selling/doctype/sales_order/sales_order.js:1443 #: erpnext/selling/doctype/sales_order_item/sales_order_item.json #: erpnext/selling/report/customer_wise_item_price/customer_wise_item_price.py:29 #: erpnext/selling/report/item_wise_sales_history/item_wise_sales_history.py:27 @@ -25502,7 +25514,7 @@ msgstr "" #: erpnext/stock/report/serial_no_and_batch_traceability/serial_no_and_batch_traceability.js:8 #: erpnext/stock/report/serial_no_and_batch_traceability/serial_no_and_batch_traceability.py:433 #: erpnext/stock/report/serial_no_ledger/serial_no_ledger.js:7 -#: erpnext/stock/report/stock_ageing/stock_ageing.py:133 +#: erpnext/stock/report/stock_ageing/stock_ageing.py:138 #: erpnext/stock/report/stock_projected_qty/stock_projected_qty.py:104 #: erpnext/stock/report/stock_qty_vs_batch_qty/stock_qty_vs_batch_qty.py:25 #: erpnext/stock/report/stock_qty_vs_serial_no_count/stock_qty_vs_serial_no_count.py:26 @@ -25701,7 +25713,7 @@ msgstr "" #: erpnext/stock/report/itemwise_recommended_reorder_level/itemwise_recommended_reorder_level.py:55 #: erpnext/stock/report/product_bundle_balance/product_bundle_balance.js:37 #: erpnext/stock/report/product_bundle_balance/product_bundle_balance.py:100 -#: erpnext/stock/report/stock_ageing/stock_ageing.py:142 +#: erpnext/stock/report/stock_ageing/stock_ageing.py:147 #: erpnext/stock/report/stock_analytics/stock_analytics.js:8 #: erpnext/stock/report/stock_analytics/stock_analytics.py:52 #: erpnext/stock/report/stock_balance/stock_balance.js:32 @@ -25885,6 +25897,7 @@ msgstr "" #: erpnext/assets/doctype/asset_capitalization_stock_item/asset_capitalization_stock_item.json #: erpnext/assets/doctype/asset_maintenance/asset_maintenance.json #: erpnext/assets/doctype/asset_maintenance_log/asset_maintenance_log.json +#: erpnext/buying/doctype/purchase_order/purchase_order.js:780 #: erpnext/buying/doctype/purchase_order_item/purchase_order_item.json #: erpnext/buying/doctype/purchase_receipt_item_supplied/purchase_receipt_item_supplied.json #: erpnext/buying/doctype/request_for_quotation_item/request_for_quotation_item.json @@ -25926,7 +25939,7 @@ msgstr "" #: erpnext/public/js/controllers/transaction.js:2839 #: erpnext/public/js/utils.js:831 #: erpnext/selling/doctype/quotation_item/quotation_item.json -#: erpnext/selling/doctype/sales_order/sales_order.js:1284 +#: erpnext/selling/doctype/sales_order/sales_order.js:1286 #: erpnext/selling/doctype/sales_order_item/sales_order_item.json #: erpnext/selling/report/customer_wise_item_price/customer_wise_item_price.py:35 #: erpnext/selling/report/item_wise_sales_history/item_wise_sales_history.py:33 @@ -25962,7 +25975,7 @@ msgstr "" #: erpnext/stock/report/itemwise_recommended_reorder_level/itemwise_recommended_reorder_level.py:54 #: erpnext/stock/report/serial_and_batch_summary/serial_and_batch_summary.py:131 #: erpnext/stock/report/serial_no_and_batch_traceability/serial_no_and_batch_traceability.py:440 -#: erpnext/stock/report/stock_ageing/stock_ageing.py:139 +#: erpnext/stock/report/stock_ageing/stock_ageing.py:144 #: erpnext/stock/report/stock_analytics/stock_analytics.py:45 #: erpnext/stock/report/stock_balance/stock_balance.py:479 #: erpnext/stock/report/stock_ledger/stock_ledger.py:293 @@ -26003,7 +26016,7 @@ msgstr "" msgid "Item Price" msgstr "" -#: erpnext/stock/get_item_details.py:1124 +#: erpnext/stock/get_item_details.py:1132 msgid "Item Price Added for {0} in Price List {1}" msgstr "" @@ -26022,7 +26035,7 @@ msgstr "" msgid "Item Price Stock" msgstr "" -#: erpnext/stock/get_item_details.py:1148 +#: erpnext/stock/get_item_details.py:1156 msgid "Item Price added for {0} in Price List {1}" msgstr "" @@ -26030,7 +26043,7 @@ msgstr "" msgid "Item Price appears multiple times based on Price List, Supplier/Customer, Currency, Item, Batch, UOM, Qty, and Dates." msgstr "" -#: erpnext/stock/get_item_details.py:1107 +#: erpnext/stock/get_item_details.py:1115 msgid "Item Price updated for {0} in Price List {1}" msgstr "" @@ -26311,7 +26324,7 @@ msgstr "" msgid "Item and Warranty Details" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:3500 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:3503 msgid "Item for row {0} does not match Material Request" msgstr "" @@ -26332,7 +26345,7 @@ msgid "Item must be added using 'Get Items from Purchase Receipts' button" msgstr "" #: erpnext/buying/report/subcontracted_item_to_be_received/subcontracted_item_to_be_received.py:42 -#: erpnext/selling/doctype/sales_order/sales_order.js:1679 +#: erpnext/selling/doctype/sales_order/sales_order.js:1681 msgid "Item name" msgstr "" @@ -26341,11 +26354,11 @@ msgstr "" msgid "Item operation" msgstr "" -#: erpnext/controllers/accounts_controller.py:3954 +#: erpnext/controllers/accounts_controller.py:3961 msgid "Item qty can not be updated as raw materials are already processed." msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:1247 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1250 msgid "Item rate has been updated to zero as Allow Zero Valuation Rate is checked for item {0}" msgstr "" @@ -26409,6 +26422,10 @@ msgstr "" msgid "Item {0} has no Serial No. Only serialized items can have delivery based on Serial No" msgstr "" +#: erpnext/buying/doctype/purchase_order/purchase_order.js:826 +msgid "Item {0} has no changes in delivered quantity. Please unselect the row if you do not wish to update its quantity." +msgstr "" + #: erpnext/stock/doctype/item/item.py:1156 msgid "Item {0} has reached its end of life on {1}" msgstr "" @@ -26441,7 +26458,7 @@ msgstr "" msgid "Item {0} is not a subcontracted item" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:2229 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:2232 msgid "Item {0} is not active or end of life has been reached" msgstr "" @@ -26461,7 +26478,7 @@ msgstr "" msgid "Item {0} must be a non-stock item" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:1580 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1583 msgid "Item {0} not found in 'Raw Materials Supplied' table in {1} {2}" msgstr "" @@ -26469,7 +26486,7 @@ msgstr "" msgid "Item {0} not found." msgstr "" -#: erpnext/buying/doctype/purchase_order/purchase_order.py:325 +#: erpnext/buying/doctype/purchase_order/purchase_order.py:324 msgid "Item {0}: Ordered qty {1} cannot be less than minimum order qty {2} (defined in Item)." msgstr "" @@ -26548,7 +26565,7 @@ msgid "Items Filter" msgstr "" #: erpnext/manufacturing/doctype/production_plan/production_plan.py:1683 -#: erpnext/selling/doctype/sales_order/sales_order.js:1717 +#: erpnext/selling/doctype/sales_order/sales_order.js:1719 msgid "Items Required" msgstr "" @@ -26571,15 +26588,15 @@ msgstr "" msgid "Items and Pricing" msgstr "" -#: erpnext/controllers/accounts_controller.py:4214 +#: erpnext/controllers/accounts_controller.py:4221 msgid "Items cannot be updated as Subcontracting Inward Order(s) exist against this Subcontracted Sales Order." msgstr "" -#: erpnext/controllers/accounts_controller.py:4207 +#: erpnext/controllers/accounts_controller.py:4214 msgid "Items cannot be updated as Subcontracting Order is created against the Purchase Order {0}." msgstr "" -#: erpnext/selling/doctype/sales_order/sales_order.js:1477 +#: erpnext/selling/doctype/sales_order/sales_order.js:1479 msgid "Items for Raw Material Request" msgstr "" @@ -26587,7 +26604,7 @@ msgstr "" msgid "Items not found." msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:1243 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1246 msgid "Items rate has been updated to zero as Allow Zero Valuation Rate is checked for the following items: {0}" msgstr "" @@ -27091,7 +27108,7 @@ msgstr "" #. Name of a DocType #. Label of a Link in the Stock Workspace #. Label of a Workspace Sidebar Item -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js:641 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js:652 #: erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.json #: erpnext/stock/doctype/purchase_receipt/purchase_receipt.js:88 #: erpnext/stock/workspace/stock/stock.json @@ -27220,7 +27237,7 @@ msgstr "" msgid "Last transacted" msgstr "" -#: erpnext/stock/report/stock_ageing/stock_ageing.py:178 +#: erpnext/stock/report/stock_ageing/stock_ageing.py:183 msgid "Latest" msgstr "" @@ -27594,7 +27611,7 @@ msgstr "" msgid "Link existing Quality Procedure." msgstr "" -#: erpnext/buying/doctype/purchase_order/purchase_order.js:582 +#: erpnext/buying/doctype/purchase_order/purchase_order.js:591 msgid "Link to Material Request" msgstr "" @@ -27909,7 +27926,7 @@ msgstr "" #: erpnext/accounts/doctype/loyalty_point_entry/loyalty_point_entry.json #: erpnext/accounts/doctype/loyalty_program/loyalty_program.json #: erpnext/accounts/doctype/pos_invoice/pos_invoice.json -#: erpnext/accounts/doctype/sales_invoice/sales_invoice.js:1204 +#: erpnext/accounts/doctype/sales_invoice/sales_invoice.js:1206 #: erpnext/accounts/doctype/sales_invoice/sales_invoice.json #: erpnext/selling/doctype/customer/customer.json #: erpnext/selling/page/point_of_sale/pos_item_cart.js:952 @@ -28101,7 +28118,7 @@ msgstr "" #. Visit' #. Label of a Link in the Support Workspace #. Label of a Workspace Sidebar Item -#: erpnext/accounts/doctype/sales_invoice/sales_invoice.js:162 +#: erpnext/accounts/doctype/sales_invoice/sales_invoice.js:164 #: erpnext/crm/workspace/crm/crm.json #: erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.json #: erpnext/maintenance/doctype/maintenance_visit/maintenance_visit.js:81 @@ -28381,7 +28398,7 @@ msgstr "" msgid "Mandatory For Profit and Loss Account" msgstr "" -#: erpnext/selling/doctype/quotation/quotation.py:626 +#: erpnext/selling/doctype/quotation/quotation.py:628 msgid "Mandatory Missing" msgstr "" @@ -28464,8 +28481,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:1324 -#: erpnext/stock/doctype/stock_entry/stock_entry.py:1340 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1327 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1343 #: 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 @@ -28544,7 +28561,7 @@ msgstr "" msgid "Manufacturer Part Number" msgstr "" -#: erpnext/public/js/controllers/buying.js:425 +#: erpnext/public/js/controllers/buying.js:430 msgid "Manufacturer Part Number {0} is invalid" msgstr "" @@ -28614,7 +28631,7 @@ msgstr "" msgid "Manufacturing Manager" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:2587 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:2590 msgid "Manufacturing Quantity is mandatory" msgstr "" @@ -28844,7 +28861,7 @@ msgstr "" #. Option for the 'Purpose' (Select) field in DocType 'Stock Entry Type' #: erpnext/setup/setup_wizard/operations/install_fixtures.py:114 #: erpnext/stock/doctype/stock_entry/stock_entry.json -#: erpnext/stock/doctype/stock_entry/stock_entry.py:1325 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1328 #: erpnext/stock/doctype/stock_entry_type/stock_entry_type.json msgid "Material Consumption for Manufacture" msgstr "" @@ -28915,7 +28932,7 @@ msgstr "" #. Service Item' #. Label of a Workspace Sidebar Item #: erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.json -#: erpnext/buying/doctype/purchase_order/purchase_order.js:519 +#: erpnext/buying/doctype/purchase_order/purchase_order.js:528 #: erpnext/buying/doctype/purchase_order_item/purchase_order_item.json #: erpnext/buying/doctype/request_for_quotation/request_for_quotation.js:361 #: erpnext/buying/doctype/request_for_quotation_item/request_for_quotation_item.json @@ -29043,7 +29060,7 @@ msgstr "" msgid "Material Request {0} is cancelled or stopped" msgstr "" -#: erpnext/selling/doctype/sales_order/sales_order.js:1493 +#: erpnext/selling/doctype/sales_order/sales_order.js:1495 msgid "Material Request {0} submitted." msgstr "" @@ -29150,7 +29167,7 @@ msgstr "" msgid "Material from Customer" msgstr "" -#: erpnext/buying/doctype/purchase_order/purchase_order.js:389 +#: erpnext/buying/doctype/purchase_order/purchase_order.js:394 #: erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.js:649 msgid "Material to Supplier" msgstr "" @@ -29237,7 +29254,7 @@ msgstr "" #: erpnext/manufacturing/doctype/work_order/work_order.js:1058 #: erpnext/manufacturing/doctype/work_order/work_order.js:1065 #: erpnext/manufacturing/doctype/work_order/work_order.js:1088 -#: erpnext/stock/doctype/pick_list/pick_list.js:200 +#: erpnext/stock/doctype/pick_list/pick_list.js:203 #: erpnext/stock/doctype/stock_entry/stock_entry.js:382 msgid "Max: {0}" msgstr "" @@ -29264,11 +29281,11 @@ msgstr "" msgid "Maximum Producible Items" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:4106 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:4109 msgid "Maximum Samples - {0} can be retained for Batch {1} and Item {2}." msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:4097 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:4100 msgid "Maximum Samples - {0} have already been retained for Batch {1} and Item {2} in Batch {3}." msgstr "" @@ -29724,7 +29741,7 @@ msgstr "" msgid "Missing Finance Book" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:1777 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1780 msgid "Missing Finished Good" msgstr "" @@ -29732,7 +29749,7 @@ msgstr "" msgid "Missing Formula" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:1083 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1086 msgid "Missing Item" msgstr "" @@ -30032,11 +30049,11 @@ msgstr "" msgid "Multiple company fields available: {0}. Please select manually." msgstr "" -#: erpnext/controllers/accounts_controller.py:1303 +#: erpnext/controllers/accounts_controller.py:1305 msgid "Multiple fiscal years exist for the date {0}. Please set company in Fiscal Year" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:1784 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1787 msgid "Multiple items cannot be marked as finished item" msgstr "" @@ -30498,7 +30515,7 @@ msgstr "" msgid "Net Weight UOM" msgstr "" -#: erpnext/controllers/accounts_controller.py:1663 +#: erpnext/controllers/accounts_controller.py:1665 msgid "Net total calculation precision loss" msgstr "" @@ -30536,11 +30553,11 @@ msgstr "" msgid "New Balance In Base Currency" msgstr "" -#: erpnext/stock/doctype/batch/batch.js:168 +#: erpnext/stock/doctype/batch/batch.js:169 msgid "New Batch ID (Optional)" msgstr "" -#: erpnext/stock/doctype/batch/batch.js:162 +#: erpnext/stock/doctype/batch/batch.js:163 msgid "New Batch Qty" msgstr "" @@ -30681,7 +30698,7 @@ msgstr "" msgid "New invoices will be generated as per schedule even if current invoices are unpaid or past due date" msgstr "" -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js:250 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js:261 msgid "New release date should be in the future" msgstr "" @@ -30771,11 +30788,11 @@ msgstr "" msgid "No Items selected for transfer." msgstr "" -#: erpnext/selling/doctype/sales_order/sales_order.js:1258 +#: erpnext/selling/doctype/sales_order/sales_order.js:1260 msgid "No Items with Bill of Materials to Manufacture or all items already manufactured" msgstr "" -#: erpnext/selling/doctype/sales_order/sales_order.js:1411 +#: erpnext/selling/doctype/sales_order/sales_order.js:1413 msgid "No Items with Bill of Materials." msgstr "" @@ -31050,7 +31067,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:535 +#: erpnext/public/js/controllers/buying.js:540 msgid "No pending Material Requests found to link for the given items." msgstr "" @@ -31100,7 +31117,7 @@ msgstr "" msgid "No rows with zero document count found" msgstr "" -#: erpnext/stock/doctype/batch/batch.js:76 +#: erpnext/stock/doctype/batch/batch.js:77 msgid "No stock available for this batch." msgstr "" @@ -31309,7 +31326,7 @@ msgstr "" msgid "Note: Item {0} added multiple times" msgstr "" -#: erpnext/controllers/accounts_controller.py:709 +#: erpnext/controllers/accounts_controller.py:711 msgid "Note: Payment Entry will not be created since 'Cash or Bank Account' was not specified" msgstr "" @@ -31775,7 +31792,7 @@ msgstr "" msgid "Only one operation can have 'Is Final Finished Good' checked when 'Track Semi Finished Goods' is enabled." msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:1339 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1342 msgid "Only one {0} entry can be created against the Work Order {1}" msgstr "" @@ -32706,7 +32723,7 @@ msgstr "" msgid "Out of Order" msgstr "" -#: erpnext/stock/doctype/pick_list/pick_list.py:630 +#: erpnext/stock/doctype/pick_list/pick_list.py:632 msgid "Out of Stock" msgstr "" @@ -32874,7 +32891,7 @@ msgstr "" msgid "Overbilling of {0} {1} ignored for item {2} because you have {3} role." msgstr "" -#: erpnext/controllers/accounts_controller.py:2181 +#: erpnext/controllers/accounts_controller.py:2183 msgid "Overbilling of {} ignored because you have {} role." msgstr "" @@ -33936,7 +33953,7 @@ msgstr "" msgid "Party Account No. (Bank Statement)" msgstr "" -#: erpnext/controllers/accounts_controller.py:2465 +#: erpnext/controllers/accounts_controller.py:2467 msgid "Party Account {0} currency ({1}) and document currency ({2}) should be same" msgstr "" @@ -34236,15 +34253,15 @@ msgstr "" #: erpnext/accounts/doctype/invoice_discounting/invoice_discounting_dashboard.py:10 #: erpnext/accounts/doctype/payment_request/payment_request_dashboard.py:12 #: erpnext/accounts/doctype/pos_invoice/pos_invoice.js:82 -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js:119 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js:124 #: erpnext/accounts/doctype/purchase_invoice/purchase_invoice_dashboard.py:20 #: erpnext/accounts/doctype/purchase_invoice/purchase_invoice_list.js:55 #: erpnext/accounts/doctype/sales_invoice/sales_invoice.js:98 #: erpnext/accounts/doctype/sales_invoice/sales_invoice_dashboard.py:25 #: erpnext/accounts/doctype/sales_invoice/sales_invoice_list.js:42 -#: erpnext/buying/doctype/purchase_order/purchase_order.js:421 +#: erpnext/buying/doctype/purchase_order/purchase_order.js:430 #: erpnext/buying/doctype/purchase_order/purchase_order_dashboard.py:24 -#: erpnext/selling/doctype/sales_order/sales_order.js:1173 +#: erpnext/selling/doctype/sales_order/sales_order.js:1175 #: erpnext/selling/doctype/sales_order/sales_order_dashboard.py:31 msgid "Payment" msgstr "" @@ -34373,7 +34390,7 @@ msgstr "" msgid "Payment Entry is already created" msgstr "" -#: erpnext/controllers/accounts_controller.py:1614 +#: erpnext/controllers/accounts_controller.py:1616 msgid "Payment Entry {0} is linked against Order {1}, check if it should be pulled as advance in this invoice." msgstr "" @@ -34594,10 +34611,10 @@ msgstr "" #: erpnext/accounts/doctype/payment_order/payment_order.json #: erpnext/accounts/doctype/payment_order_reference/payment_order_reference.json #: erpnext/accounts/doctype/payment_request/payment_request.json -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js:135 -#: erpnext/accounts/doctype/sales_invoice/sales_invoice.js:139 -#: erpnext/buying/doctype/purchase_order/purchase_order.js:429 -#: erpnext/selling/doctype/sales_order/sales_order.js:1166 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js:146 +#: erpnext/accounts/doctype/sales_invoice/sales_invoice.js:140 +#: erpnext/buying/doctype/purchase_order/purchase_order.js:438 +#: erpnext/selling/doctype/sales_order/sales_order.js:1167 #: erpnext/workspace_sidebar/invoicing.json #: erpnext/workspace_sidebar/payments.json msgid "Payment Request" @@ -34653,7 +34670,7 @@ msgstr "" #: 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/controllers/accounts_controller.py:2745 +#: erpnext/controllers/accounts_controller.py:2747 #: erpnext/selling/doctype/quotation/quotation.json #: erpnext/selling/doctype/sales_order/sales_order.json msgid "Payment Schedule" @@ -34938,7 +34955,7 @@ msgstr "" #: erpnext/manufacturing/doctype/production_plan_item/production_plan_item.json #: erpnext/manufacturing/doctype/work_order/work_order.js:356 #: erpnext/manufacturing/report/production_plan_summary/production_plan_summary.py:182 -#: erpnext/selling/doctype/sales_order/sales_order.js:1686 +#: erpnext/selling/doctype/sales_order/sales_order.js:1688 #: erpnext/selling/report/pending_so_items_for_purchase_request/pending_so_items_for_purchase_request.py:45 msgid "Pending Qty" msgstr "" @@ -35635,7 +35652,7 @@ msgstr "" msgid "Plants and Machineries" msgstr "" -#: erpnext/stock/doctype/pick_list/pick_list.py:627 +#: erpnext/stock/doctype/pick_list/pick_list.py:629 msgid "Please Restock Items and Update the Pick List to continue. To discontinue, cancel the Pick List." msgstr "" @@ -35647,7 +35664,7 @@ msgstr "" msgid "Please Select a Company." msgstr "" -#: erpnext/accounts/doctype/sales_invoice/sales_invoice.js:418 +#: erpnext/accounts/doctype/sales_invoice/sales_invoice.js:420 #: erpnext/stock/doctype/delivery_note/delivery_note.js:162 #: erpnext/stock/doctype/delivery_note/delivery_note.js:204 msgid "Please Select a Customer" @@ -35802,7 +35819,7 @@ msgstr "" msgid "Please convert the parent account in corresponding child company to a group account." msgstr "" -#: erpnext/selling/doctype/quotation/quotation.py:624 +#: erpnext/selling/doctype/quotation/quotation.py:626 msgid "Please create Customer from Lead {0}." msgstr "" @@ -35814,7 +35831,7 @@ msgstr "" msgid "Please create a new Accounting Dimension if required." msgstr "" -#: erpnext/controllers/accounts_controller.py:802 +#: erpnext/controllers/accounts_controller.py:804 msgid "Please create purchase from internal sale or delivery document itself" msgstr "" @@ -35878,7 +35895,7 @@ msgstr "" msgid "Please ensure {} account {} is a Receivable account." msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:761 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:764 msgid "Please enter Difference Account or set default Stock Adjustment Account for company {0}" msgstr "" @@ -35989,7 +36006,7 @@ msgstr "" msgid "Please enter company name first" msgstr "" -#: erpnext/controllers/accounts_controller.py:2971 +#: erpnext/controllers/accounts_controller.py:2973 msgid "Please enter default currency in Company Master" msgstr "" @@ -36256,11 +36273,11 @@ msgstr "" msgid "Please select Stock Asset Account" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:1703 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1706 msgid "Please select Subcontracting Order instead of Purchase Order {0}" msgstr "" -#: erpnext/controllers/accounts_controller.py:2820 +#: erpnext/controllers/accounts_controller.py:2822 msgid "Please select Unrealized Profit / Loss account or add default Unrealized Profit / Loss account account for company {0}" msgstr "" @@ -36269,7 +36286,7 @@ msgid "Please select a BOM" msgstr "" #: erpnext/accounts/party.py:417 -#: erpnext/stock/doctype/pick_list/pick_list.py:1689 +#: erpnext/stock/doctype/pick_list/pick_list.py:1691 msgid "Please select a Company" msgstr "" @@ -36370,6 +36387,10 @@ msgstr "" msgid "Please select at least one filter: Item Code, Batch, or Serial No." msgstr "" +#: erpnext/buying/doctype/purchase_order/purchase_order.js:818 +msgid "Please select at least one item to update delivered quantity." +msgstr "" + #: erpnext/stock/report/incorrect_serial_and_batch_bundle/incorrect_serial_and_batch_bundle.js:33 msgid "Please select at least one row to fix" msgstr "" @@ -36382,7 +36403,7 @@ msgstr "" msgid "Please select at least one schedule." msgstr "" -#: erpnext/selling/doctype/sales_order/sales_order.js:1328 +#: erpnext/selling/doctype/sales_order/sales_order.js:1330 msgid "Please select atleast one item to continue" msgstr "" @@ -36512,7 +36533,7 @@ msgstr "" #: erpnext/accounts/doctype/process_statement_of_accounts/process_statement_of_accounts.js:58 #: erpnext/accounts/doctype/process_statement_of_accounts/process_statement_of_accounts.js:68 #: erpnext/accounts/doctype/process_statement_of_accounts/process_statement_of_accounts.js:78 -#: erpnext/accounts/doctype/sales_invoice/sales_invoice.js:882 +#: erpnext/accounts/doctype/sales_invoice/sales_invoice.js:884 msgid "Please set Company" msgstr "" @@ -36666,7 +36687,7 @@ msgstr "" msgid "Please set filter based on Item or Warehouse" msgstr "" -#: erpnext/controllers/accounts_controller.py:2381 +#: erpnext/controllers/accounts_controller.py:2383 msgid "Please set one of the following:" msgstr "" @@ -36713,7 +36734,7 @@ msgstr "" #: erpnext/public/js/queries.js:34 erpnext/public/js/queries.js:49 #: erpnext/public/js/queries.js:82 erpnext/public/js/queries.js:103 -#: erpnext/public/js/queries.js:130 +#: erpnext/public/js/queries.js:134 msgid "Please set {0} first." msgstr "" @@ -36733,7 +36754,7 @@ msgstr "" msgid "Please set {0} in Company {1} to account for Exchange Gain / Loss" msgstr "" -#: erpnext/controllers/accounts_controller.py:591 +#: erpnext/controllers/accounts_controller.py:593 msgid "Please set {0} to {1}, the same account that was used in the original invoice {2}." msgstr "" @@ -36750,17 +36771,17 @@ msgid "Please specify Company" msgstr "" #: erpnext/accounts/doctype/pos_invoice/pos_invoice.js:120 -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js:419 -#: erpnext/accounts/doctype/sales_invoice/sales_invoice.js:615 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js:430 +#: erpnext/accounts/doctype/sales_invoice/sales_invoice.js:617 msgid "Please specify Company to proceed" msgstr "" -#: erpnext/controllers/accounts_controller.py:3202 +#: erpnext/controllers/accounts_controller.py:3204 #: erpnext/public/js/controllers/accounts.js:117 msgid "Please specify a valid Row ID for row {0} in table {1}" msgstr "" -#: erpnext/public/js/queries.js:144 +#: erpnext/public/js/queries.js:148 msgid "Please specify a {0} first." msgstr "" @@ -37067,7 +37088,7 @@ msgstr "" msgid "Posting Time" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:2537 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:2540 msgid "Posting date and posting time is mandatory" msgstr "" @@ -37353,7 +37374,7 @@ msgstr "" msgid "Price List Currency" msgstr "" -#: erpnext/stock/get_item_details.py:1322 +#: erpnext/stock/get_item_details.py:1330 msgid "Price List Currency not selected" msgstr "" @@ -38062,8 +38083,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:325 -#: erpnext/public/js/controllers/buying.js:610 +#: erpnext/public/js/controllers/buying.js:330 +#: erpnext/public/js/controllers/buying.js:615 #: erpnext/selling/doctype/product_bundle/product_bundle.json #: erpnext/selling/workspace/selling/selling.json #: erpnext/stock/doctype/purchase_receipt_item/purchase_receipt_item.json @@ -38847,7 +38868,7 @@ msgstr "" #: erpnext/accounts/report/billed_items_to_be_received/billed_items_to_be_received.py:53 #: erpnext/assets/doctype/asset/asset.json #: erpnext/assets/doctype/asset_repair_purchase_invoice/asset_repair_purchase_invoice.json -#: erpnext/buying/doctype/purchase_order/purchase_order.js:412 +#: erpnext/buying/doctype/purchase_order/purchase_order.js:417 #: erpnext/buying/doctype/purchase_order/purchase_order_list.js:63 #: erpnext/buying/doctype/supplier_quotation/supplier_quotation_list.js:21 #: erpnext/buying/workspace/buying/buying.json @@ -38929,7 +38950,7 @@ msgstr "" #. Label of a Link in the Subcontracting Workspace #. Label of a Workspace Sidebar Item #: erpnext/accounts/doctype/journal_entry_account/journal_entry_account.json -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js:145 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js:156 #: erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.json #: erpnext/accounts/doctype/sales_invoice_item/sales_invoice_item.json #: erpnext/accounts/report/item_wise_purchase_register/item_wise_purchase_register.py:237 @@ -39049,7 +39070,7 @@ msgstr "" msgid "Purchase Order Trends" msgstr "" -#: erpnext/selling/doctype/sales_order/sales_order.js:1630 +#: erpnext/selling/doctype/sales_order/sales_order.js:1632 msgid "Purchase Order already created for all Sales Order items" msgstr "" @@ -39065,7 +39086,7 @@ msgstr "" msgid "Purchase Order {0} is not submitted" msgstr "" -#: erpnext/buying/doctype/purchase_order/purchase_order.py:888 +#: erpnext/buying/doctype/purchase_order/purchase_order.py:890 msgid "Purchase Orders" msgstr "" @@ -39080,7 +39101,7 @@ msgstr "" msgid "Purchase Orders Items Overdue" msgstr "" -#: erpnext/buying/doctype/purchase_order/purchase_order.py:286 +#: erpnext/buying/doctype/purchase_order/purchase_order.py:285 msgid "Purchase Orders are not allowed for {0} due to a scorecard standing of {1}." msgstr "" @@ -39095,7 +39116,7 @@ msgstr "" msgid "Purchase Orders to Receive" msgstr "" -#: erpnext/controllers/accounts_controller.py:2013 +#: erpnext/controllers/accounts_controller.py:2015 msgid "Purchase Orders {0} are un-linked" msgstr "" @@ -39118,9 +39139,9 @@ msgstr "" #. Reservation Entry' #. Label of a Link in the Stock Workspace #. Label of a Workspace Sidebar Item -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js:170 -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js:617 -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js:627 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js:181 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js:628 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js:638 #: erpnext/accounts/doctype/purchase_invoice/purchase_invoice_list.js:49 #: erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.json #: erpnext/accounts/report/item_wise_purchase_register/item_wise_purchase_register.py:244 @@ -39128,7 +39149,7 @@ msgstr "" #: erpnext/accounts/report/received_items_to_be_billed/received_items_to_be_billed.js:22 #: erpnext/accounts/report/received_items_to_be_billed/received_items_to_be_billed.py:21 #: erpnext/assets/doctype/asset/asset.json -#: erpnext/buying/doctype/purchase_order/purchase_order.js:379 +#: erpnext/buying/doctype/purchase_order/purchase_order.js:384 #: erpnext/buying/doctype/purchase_order/purchase_order_list.js:69 #: erpnext/setup/doctype/authorization_rule/authorization_rule.json #: erpnext/stock/doctype/landed_cost_item/landed_cost_item.json @@ -39335,7 +39356,7 @@ msgstr "" msgid "Purpose" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:578 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:581 msgid "Purpose must be one of {0}" msgstr "" @@ -39423,8 +39444,8 @@ msgstr "" #: erpnext/selling/doctype/sales_order/sales_order.js:502 #: erpnext/selling/doctype/sales_order/sales_order.js:592 #: erpnext/selling/doctype/sales_order/sales_order.js:639 -#: erpnext/selling/doctype/sales_order/sales_order.js:1304 -#: erpnext/selling/doctype/sales_order/sales_order.js:1466 +#: erpnext/selling/doctype/sales_order/sales_order.js:1306 +#: erpnext/selling/doctype/sales_order/sales_order.js:1468 #: erpnext/selling/report/sales_order_analysis/sales_order_analysis.py:255 #: erpnext/stock/doctype/landed_cost_item/landed_cost_item.json #: erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.json @@ -39498,6 +39519,7 @@ msgstr "" #. Label of the actual_qty (Float) field in DocType 'Stock Closing Balance' #. Label of the actual_qty (Float) field in DocType 'Stock Ledger Entry' +#: erpnext/buying/doctype/purchase_order/purchase_order.js:808 #: erpnext/stock/doctype/stock_closing_balance/stock_closing_balance.json #: erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.json #: erpnext/stock/report/fifo_queue_vs_qty_after_transaction_comparison/fifo_queue_vs_qty_after_transaction_comparison.py:169 @@ -39603,12 +39625,12 @@ msgid "Qty in Stock UOM" msgstr "" #. Label of the for_qty (Float) field in DocType 'Pick List' -#: erpnext/stock/doctype/pick_list/pick_list.js:198 +#: erpnext/stock/doctype/pick_list/pick_list.js:201 #: erpnext/stock/doctype/pick_list/pick_list.json msgid "Qty of Finished Goods Item" msgstr "" -#: erpnext/stock/doctype/pick_list/pick_list.py:674 +#: erpnext/stock/doctype/pick_list/pick_list.py:676 msgid "Qty of Finished Goods Item should be greater than 0." msgstr "" @@ -39979,6 +40001,10 @@ msgstr "" msgid "Quality Review Objective" msgstr "" +#: erpnext/buying/doctype/purchase_order/purchase_order.js:866 +msgid "Quantities updated successfully." +msgstr "" + #. Label of the qty (Data) field in DocType 'Opening Invoice Creation Tool #. Item' #. Label of the qty (Float) field in DocType 'POS Invoice Item' @@ -40019,6 +40045,7 @@ msgstr "" #: erpnext/accounts/doctype/subscription_plan_detail/subscription_plan_detail.json #: erpnext/accounts/report/inactive_sales_items/inactive_sales_items.py:47 #: erpnext/assets/doctype/asset_capitalization_stock_item/asset_capitalization_stock_item.json +#: erpnext/buying/doctype/purchase_order/purchase_order.js:787 #: erpnext/buying/doctype/purchase_order_item/purchase_order_item.json #: erpnext/buying/doctype/request_for_quotation_item/request_for_quotation_item.json #: erpnext/buying/doctype/supplier_quotation_item/supplier_quotation_item.json @@ -40033,7 +40060,7 @@ msgstr "" #: erpnext/manufacturing/doctype/plant_floor/plant_floor.js:194 #: erpnext/manufacturing/doctype/plant_floor/plant_floor.js:218 #: erpnext/manufacturing/doctype/production_plan_sub_assembly_item/production_plan_sub_assembly_item.json -#: erpnext/public/js/controllers/buying.js:617 +#: erpnext/public/js/controllers/buying.js:622 #: erpnext/public/js/stock_analytics.js:50 #: erpnext/public/js/utils/serial_no_batch_selector.js:497 #: erpnext/selling/doctype/quotation_item/quotation_item.json @@ -40169,7 +40196,7 @@ msgid "Quantity must be less than or equal to {0}" msgstr "" #: erpnext/manufacturing/doctype/work_order/work_order.js:1116 -#: erpnext/stock/doctype/pick_list/pick_list.js:206 +#: erpnext/stock/doctype/pick_list/pick_list.js:209 msgid "Quantity must not be more than {0}" msgstr "" @@ -40271,7 +40298,7 @@ msgstr "" #. Label of a Link in the Selling Workspace #. Option for the 'Transaction' (Select) field in DocType 'Authorization Rule' #. Label of a Workspace Sidebar Item -#: erpnext/accounts/doctype/sales_invoice/sales_invoice.js:381 +#: erpnext/accounts/doctype/sales_invoice/sales_invoice.js:383 #: erpnext/buying/doctype/supplier_quotation/supplier_quotation.js:51 #: erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.html:20 #: erpnext/crm/doctype/contract/contract.json @@ -40282,7 +40309,7 @@ msgstr "" #: erpnext/crm/report/lead_details/lead_details.js:37 #: erpnext/manufacturing/doctype/blanket_order/blanket_order.js:38 #: erpnext/selling/doctype/quotation/quotation.json -#: erpnext/selling/doctype/sales_order/sales_order.js:1189 +#: erpnext/selling/doctype/sales_order/sales_order.js:1191 #: erpnext/selling/doctype/sales_order_item/sales_order_item.json #: erpnext/selling/doctype/selling_settings/selling_settings.js:65 #: erpnext/selling/workspace/selling/selling.json @@ -40648,7 +40675,7 @@ msgstr "" msgid "Rate at which this tax is applied" msgstr "" -#: erpnext/controllers/accounts_controller.py:4080 +#: erpnext/controllers/accounts_controller.py:4087 msgid "Rate of '{}' items cannot be changed" msgstr "" @@ -40962,7 +40989,7 @@ msgid "Real Estate" msgstr "" #. Label of the hold_comment (Small Text) field in DocType 'Purchase Invoice' -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js:274 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js:285 #: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json msgid "Reason For Putting On Hold" msgstr "" @@ -40972,8 +40999,8 @@ msgstr "" msgid "Reason for Failure" msgstr "" -#: erpnext/buying/doctype/purchase_order/purchase_order.js:687 -#: erpnext/selling/doctype/sales_order/sales_order.js:1801 +#: erpnext/buying/doctype/purchase_order/purchase_order.js:696 +#: erpnext/selling/doctype/sales_order/sales_order.js:1803 msgid "Reason for Hold" msgstr "" @@ -40982,7 +41009,7 @@ msgstr "" msgid "Reason for Leaving" msgstr "" -#: erpnext/selling/doctype/sales_order/sales_order.js:1816 +#: erpnext/selling/doctype/sales_order/sales_order.js:1818 msgid "Reason for hold:" msgstr "" @@ -41689,8 +41716,8 @@ msgstr "" #. Label of the release_date (Date) field in DocType 'Purchase Invoice' #. Label of the release_date (Date) field in DocType 'Supplier' -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js:266 -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js:310 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js:277 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js:321 #: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json #: erpnext/buying/doctype/supplier/supplier.json #: erpnext/manufacturing/report/material_requirements_planning_report/material_requirements_planning_report.py:1079 @@ -42449,7 +42476,7 @@ msgstr "" #: erpnext/manufacturing/doctype/work_order/work_order.js:943 #: erpnext/selling/doctype/sales_order/sales_order.js:107 -#: erpnext/stock/doctype/pick_list/pick_list.js:150 +#: erpnext/stock/doctype/pick_list/pick_list.js:153 #: erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.js:180 msgid "Reserve" msgstr "" @@ -42575,7 +42602,7 @@ msgstr "" #: erpnext/selling/doctype/sales_order/sales_order.js:465 #: erpnext/stock/dashboard/item_dashboard_list.html:15 #: erpnext/stock/doctype/bin/bin.json -#: erpnext/stock/doctype/pick_list/pick_list.js:170 +#: erpnext/stock/doctype/pick_list/pick_list.js:173 #: erpnext/stock/report/reserved_stock/reserved_stock.json #: erpnext/stock/report/stock_balance/stock_balance.py:572 #: erpnext/stock/stock_ledger.py:2324 @@ -42630,7 +42657,7 @@ msgstr "" #: erpnext/public/js/stock_reservation.js:203 #: erpnext/selling/doctype/sales_order/sales_order.js:418 -#: erpnext/stock/doctype/pick_list/pick_list.js:295 +#: erpnext/stock/doctype/pick_list/pick_list.js:298 #: erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.js:293 msgid "Reserving Stock..." msgstr "" @@ -42915,7 +42942,7 @@ msgstr "" msgid "Return / Credit Note" msgstr "" -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js:126 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js:131 msgid "Return / Debit Note" msgstr "" @@ -43552,7 +43579,7 @@ msgstr "" msgid "Row #{0}: Accepted Warehouse is mandatory for the accepted Item {1}" msgstr "" -#: erpnext/controllers/accounts_controller.py:1291 +#: erpnext/controllers/accounts_controller.py:1293 msgid "Row #{0}: Account {1} does not belong to company {2}" msgstr "" @@ -43581,7 +43608,7 @@ msgstr "" msgid "Row #{0}: Asset {1} is already sold" msgstr "" -#: erpnext/buying/doctype/purchase_order/purchase_order.py:334 +#: erpnext/buying/doctype/purchase_order/purchase_order.py:333 msgid "Row #{0}: BOM is not specified for subcontracting item {0}" msgstr "" @@ -43617,27 +43644,27 @@ msgstr "" msgid "Row #{0}: Cannot create entry with different taxable AND withholding document links." msgstr "" -#: erpnext/controllers/accounts_controller.py:3783 +#: erpnext/controllers/accounts_controller.py:3790 msgid "Row #{0}: Cannot delete item {1} which has already been billed." msgstr "" -#: erpnext/controllers/accounts_controller.py:3757 +#: erpnext/controllers/accounts_controller.py:3764 msgid "Row #{0}: Cannot delete item {1} which has already been delivered" msgstr "" -#: erpnext/controllers/accounts_controller.py:3776 +#: erpnext/controllers/accounts_controller.py:3783 msgid "Row #{0}: Cannot delete item {1} which has already been received" msgstr "" -#: erpnext/controllers/accounts_controller.py:3763 +#: erpnext/controllers/accounts_controller.py:3770 msgid "Row #{0}: Cannot delete item {1} which has work order assigned to it." msgstr "" -#: erpnext/controllers/accounts_controller.py:3769 +#: erpnext/controllers/accounts_controller.py:3776 msgid "Row #{0}: Cannot delete item {1} which is already ordered against this Sales Order." msgstr "" -#: erpnext/controllers/accounts_controller.py:4090 +#: erpnext/controllers/accounts_controller.py:4097 msgid "Row #{0}: Cannot set Rate if the billed amount is greater than the amount for Item {1}." msgstr "" @@ -43720,7 +43747,7 @@ msgstr "" msgid "Row #{0}: Dates overlapping with other row in group {1}" msgstr "" -#: erpnext/buying/doctype/purchase_order/purchase_order.py:358 +#: erpnext/buying/doctype/purchase_order/purchase_order.py:357 msgid "Row #{0}: Default BOM not found for FG Item {1}" msgstr "" @@ -43744,22 +43771,22 @@ msgstr "" msgid "Row #{0}: Expense account {1} is not valid for Purchase Invoice {2}. Only expense accounts from non-stock items are allowed." msgstr "" -#: erpnext/buying/doctype/purchase_order/purchase_order.py:363 +#: erpnext/buying/doctype/purchase_order/purchase_order.py:362 #: erpnext/selling/doctype/sales_order/sales_order.py:305 msgid "Row #{0}: Finished Good Item Qty can not be zero" msgstr "" -#: erpnext/buying/doctype/purchase_order/purchase_order.py:345 +#: erpnext/buying/doctype/purchase_order/purchase_order.py:344 #: erpnext/selling/doctype/sales_order/sales_order.py:285 msgid "Row #{0}: Finished Good Item is not specified for service item {1}" msgstr "" -#: erpnext/buying/doctype/purchase_order/purchase_order.py:352 +#: erpnext/buying/doctype/purchase_order/purchase_order.py:351 #: erpnext/selling/doctype/sales_order/sales_order.py:292 msgid "Row #{0}: Finished Good Item {1} must be a sub-contracted item" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:534 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:537 msgid "Row #{0}: Finished Good must be {1}" msgstr "" @@ -43796,7 +43823,7 @@ msgstr "" msgid "Row #{0}: Item added" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:1634 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1637 msgid "Row #{0}: Item {1} cannot be transferred more than {2} against {3} {4}" msgstr "" @@ -43873,7 +43900,7 @@ msgstr "" msgid "Row #{0}: Opening Accumulated Depreciation must be less than or equal to {1}" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:960 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:963 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 "" @@ -43902,7 +43929,7 @@ msgstr "" msgid "Row #{0}: Please set reorder quantity" msgstr "" -#: erpnext/controllers/accounts_controller.py:614 +#: erpnext/controllers/accounts_controller.py:616 msgid "Row #{0}: Please update deferred revenue/expense account in item row or default account in company master" msgstr "" @@ -43940,7 +43967,7 @@ msgstr "" msgid "Row #{0}: Quantity cannot be a non-positive number. Please increase the quantity or remove the Item {1}" msgstr "" -#: erpnext/controllers/accounts_controller.py:1454 +#: erpnext/controllers/accounts_controller.py:1456 msgid "Row #{0}: Quantity for Item {1} cannot be zero." msgstr "" @@ -43956,8 +43983,8 @@ msgstr "" msgid "Row #{0}: Quantity to reserve for the Item {1} should be greater than 0." msgstr "" -#: erpnext/controllers/accounts_controller.py:869 -#: erpnext/controllers/accounts_controller.py:881 +#: erpnext/controllers/accounts_controller.py:871 +#: erpnext/controllers/accounts_controller.py:883 #: erpnext/utilities/transaction_base.py:172 #: erpnext/utilities/transaction_base.py:178 msgid "Row #{0}: Rate must be same as {1}: {2} ({3} / {4})" @@ -44027,15 +44054,15 @@ msgstr "" msgid "Row #{0}: Serial No(s) {1} are not a part of the linked Subcontracting Inward Order. Please select valid Serial No(s)." msgstr "" -#: erpnext/controllers/accounts_controller.py:642 +#: erpnext/controllers/accounts_controller.py:644 msgid "Row #{0}: Service End Date cannot be before Invoice Posting Date" msgstr "" -#: erpnext/controllers/accounts_controller.py:636 +#: erpnext/controllers/accounts_controller.py:638 msgid "Row #{0}: Service Start Date cannot be greater than Service End Date" msgstr "" -#: erpnext/controllers/accounts_controller.py:630 +#: erpnext/controllers/accounts_controller.py:632 msgid "Row #{0}: Service Start and End Date is required for deferred accounting" msgstr "" @@ -44059,11 +44086,11 @@ msgstr "" msgid "Row #{0}: Source Warehouse {1} for item {2} must be same as Source Warehouse {3} in the Work Order." msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:1107 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1110 msgid "Row #{0}: Source and Target Warehouse cannot be the same for Material Transfer" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:1129 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1132 msgid "Row #{0}: Source, Target Warehouse and Inventory Dimensions cannot be the exact same for Material Transfer" msgstr "" @@ -44156,7 +44183,7 @@ msgstr "" msgid "Row #{0}: You must select an Asset for Item {1}." msgstr "" -#: erpnext/public/js/controllers/buying.js:265 +#: erpnext/public/js/controllers/buying.js:270 msgid "Row #{0}: {1} can not be negative for item {2}" msgstr "" @@ -44172,7 +44199,7 @@ msgstr "" msgid "Row #{0}: {1} of {2} should be {3}. Please update the {1} or select a different account." msgstr "" -#: erpnext/controllers/accounts_controller.py:3897 +#: erpnext/controllers/accounts_controller.py:3904 msgid "Row #{0}:Quantity for Item {1} cannot be zero." msgstr "" @@ -44289,7 +44316,7 @@ 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:1658 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1661 msgid "Row {0}# Item {1} not found in 'Raw Materials Supplied' table in {2} {3}" msgstr "" @@ -44321,7 +44348,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:1319 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1322 msgid "Row {0}: As {1} is enabled, raw materials cannot be added to {2} entry. Use {3} entry to consume raw materials." msgstr "" @@ -44343,7 +44370,7 @@ msgstr "" msgid "Row {0}: Conversion Factor is mandatory" msgstr "" -#: erpnext/controllers/accounts_controller.py:3240 +#: erpnext/controllers/accounts_controller.py:3242 msgid "Row {0}: Cost Center {1} does not belong to Company {2}" msgstr "" @@ -44371,7 +44398,7 @@ msgstr "" msgid "Row {0}: Delivery Warehouse cannot be same as Customer Warehouse for Item {1}." msgstr "" -#: erpnext/controllers/accounts_controller.py:2733 +#: erpnext/controllers/accounts_controller.py:2735 msgid "Row {0}: Due Date in the Payment Terms table cannot be before Posting Date" msgstr "" @@ -44533,7 +44560,7 @@ msgstr "" msgid "Row {0}: Qty cannot be greater than {1} for the Item {2}." msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:625 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:628 msgid "Row {0}: Qty in Stock UOM can not be zero." msgstr "" @@ -44545,7 +44572,7 @@ msgstr "" msgid "Row {0}: Quantity cannot be negative." msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:1034 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1037 msgid "Row {0}: Quantity not available for {4} in warehouse {1} at posting time of the entry ({2} {3})" msgstr "" @@ -44557,7 +44584,7 @@ msgstr "" msgid "Row {0}: Shift cannot be changed since the depreciation has already been processed" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:1671 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1674 msgid "Row {0}: Subcontracted Item is mandatory for the raw material {1}" msgstr "" @@ -44573,11 +44600,11 @@ msgstr "" msgid "Row {0}: The entire expense amount for account {1} in {2} has already been allocated." msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:671 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:674 msgid "Row {0}: The item {1}, quantity must be positive number" msgstr "" -#: erpnext/controllers/accounts_controller.py:3217 +#: erpnext/controllers/accounts_controller.py:3219 msgid "Row {0}: The {3} Account {1} does not belong to the company {2}" msgstr "" @@ -44585,11 +44612,11 @@ msgstr "" msgid "Row {0}: To set {1} periodicity, difference between from and to date must be greater than or equal to {2}" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:3595 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:3598 msgid "Row {0}: Transferred quantity cannot be greater than the requested quantity." msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:619 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:622 msgid "Row {0}: UOM Conversion Factor is mandatory" msgstr "" @@ -44606,7 +44633,7 @@ msgstr "" msgid "Row {0}: Workstation or Workstation Type is mandatory for an operation {1}" msgstr "" -#: erpnext/controllers/accounts_controller.py:1173 +#: erpnext/controllers/accounts_controller.py:1175 msgid "Row {0}: user has not applied the rule {1} on the item {2}" msgstr "" @@ -44618,7 +44645,7 @@ msgstr "" msgid "Row {0}: {1} must be greater than 0" msgstr "" -#: erpnext/controllers/accounts_controller.py:779 +#: erpnext/controllers/accounts_controller.py:781 msgid "Row {0}: {1} {2} cannot be same as {3} (Party Account) {4}" msgstr "" @@ -44664,7 +44691,7 @@ msgstr "" msgid "Rows with Same Account heads will be merged on Ledger" msgstr "" -#: erpnext/controllers/accounts_controller.py:2744 +#: erpnext/controllers/accounts_controller.py:2746 msgid "Rows with duplicate due dates in other rows were found: {0}" msgstr "" @@ -44672,7 +44699,7 @@ msgstr "" msgid "Rows: {0} have 'Payment Entry' as reference_type. This should not be set manually." msgstr "" -#: erpnext/controllers/accounts_controller.py:281 +#: erpnext/controllers/accounts_controller.py:282 msgid "Rows: {0} in {1} section are Invalid. Reference Name should point to a valid Payment Entry or Journal Entry." msgstr "" @@ -45107,7 +45134,7 @@ msgstr "" #. Label of a Workspace Sidebar Item #: erpnext/accounts/doctype/journal_entry_account/journal_entry_account.json #: erpnext/accounts/doctype/pos_invoice_item/pos_invoice_item.json -#: erpnext/accounts/doctype/sales_invoice/sales_invoice.js:359 +#: erpnext/accounts/doctype/sales_invoice/sales_invoice.js:361 #: erpnext/accounts/doctype/sales_invoice_item/sales_invoice_item.json #: erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.py:284 #: erpnext/accounts/report/sales_register/sales_register.py:238 @@ -45207,7 +45234,7 @@ msgstr "" #: erpnext/manufacturing/doctype/work_order/work_order.json #: erpnext/selling/doctype/delivery_schedule_item/delivery_schedule_item.json #: erpnext/selling/doctype/sales_order/sales_order.js:344 -#: erpnext/selling/doctype/sales_order/sales_order.js:1311 +#: erpnext/selling/doctype/sales_order/sales_order.js:1313 #: erpnext/selling/doctype/sales_order_item/sales_order_item.json #: erpnext/stock/doctype/material_request_item/material_request_item.json #: erpnext/stock/doctype/pick_list_item/pick_list_item.json @@ -45704,7 +45731,7 @@ msgstr "" msgid "Sample Size" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:4088 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:4091 msgid "Sample quantity {0} cannot be more than received quantity {1}" msgstr "" @@ -46075,17 +46102,17 @@ msgstr "" msgid "Select Attribute Values" msgstr "" -#: erpnext/selling/doctype/sales_order/sales_order.js:1294 +#: erpnext/selling/doctype/sales_order/sales_order.js:1296 msgid "Select BOM" msgstr "" -#: erpnext/selling/doctype/sales_order/sales_order.js:1271 +#: erpnext/selling/doctype/sales_order/sales_order.js:1273 msgid "Select BOM and Qty for Production" msgstr "" #: erpnext/assets/doctype/asset_repair/asset_repair.js:234 #: erpnext/public/js/utils/sales_common.js:443 -#: erpnext/stock/doctype/pick_list/pick_list.js:387 +#: erpnext/stock/doctype/pick_list/pick_list.js:390 msgid "Select Batch No" msgstr "" @@ -46164,13 +46191,13 @@ msgstr "" #. Forecast' #: erpnext/manufacturing/doctype/master_production_schedule/master_production_schedule.json #: erpnext/manufacturing/doctype/sales_forecast/sales_forecast.json -#: erpnext/selling/doctype/sales_order/sales_order.js:1637 -#: erpnext/selling/doctype/sales_order/sales_order.js:1665 +#: erpnext/selling/doctype/sales_order/sales_order.js:1639 +#: erpnext/selling/doctype/sales_order/sales_order.js:1667 #: erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.js:493 msgid "Select Items" msgstr "" -#: erpnext/selling/doctype/sales_order/sales_order.js:1523 +#: erpnext/selling/doctype/sales_order/sales_order.js:1525 msgid "Select Items based on Delivery Date" msgstr "" @@ -46181,7 +46208,7 @@ msgstr "" #. Label of the select_items_to_manufacture_section (Section Break) field in #. DocType 'Production Plan' #: erpnext/manufacturing/doctype/production_plan/production_plan.json -#: erpnext/selling/doctype/sales_order/sales_order.js:1323 +#: erpnext/selling/doctype/sales_order/sales_order.js:1325 msgid "Select Items to Manufacture" msgstr "" @@ -46199,7 +46226,7 @@ msgstr "" msgid "Select Job Worker Address" msgstr "" -#: erpnext/accounts/doctype/sales_invoice/sales_invoice.js:1201 +#: erpnext/accounts/doctype/sales_invoice/sales_invoice.js:1203 #: erpnext/selling/page/point_of_sale/pos_item_cart.js:955 msgid "Select Loyalty Program" msgstr "" @@ -46213,19 +46240,19 @@ msgid "Select Possible Supplier" msgstr "" #: erpnext/manufacturing/doctype/work_order/work_order.js:1122 -#: erpnext/stock/doctype/pick_list/pick_list.js:216 +#: erpnext/stock/doctype/pick_list/pick_list.js:219 msgid "Select Quantity" msgstr "" #: erpnext/assets/doctype/asset_repair/asset_repair.js:234 #: erpnext/public/js/utils/sales_common.js:443 -#: erpnext/stock/doctype/pick_list/pick_list.js:387 +#: erpnext/stock/doctype/pick_list/pick_list.js:390 msgid "Select Serial No" msgstr "" #: erpnext/assets/doctype/asset_repair/asset_repair.js:237 #: erpnext/public/js/utils/sales_common.js:446 -#: erpnext/stock/doctype/pick_list/pick_list.js:390 +#: erpnext/stock/doctype/pick_list/pick_list.js:393 msgid "Select Serial and Batch" msgstr "" @@ -46242,7 +46269,7 @@ msgstr "" msgid "Select Supplier Address" msgstr "" -#: erpnext/stock/doctype/batch/batch.js:149 +#: erpnext/stock/doctype/batch/batch.js:150 msgid "Select Target Warehouse" msgstr "" @@ -46325,7 +46352,7 @@ msgstr "" msgid "Select company name first." msgstr "" -#: erpnext/controllers/accounts_controller.py:2992 +#: erpnext/controllers/accounts_controller.py:2994 msgid "Select finance book for the item {0} at row {1}" msgstr "" @@ -47404,6 +47431,10 @@ msgstr "" msgid "Set Delivery Warehouse" msgstr "" +#: erpnext/buying/doctype/purchase_order/purchase_order.js:753 +msgid "Set Dropship Items Delivered Quantity" +msgstr "" + #: erpnext/manufacturing/doctype/job_card/job_card.js:412 #: erpnext/manufacturing/doctype/job_card/job_card.js:481 msgid "Set Finished Good Quantity" @@ -47436,11 +47467,11 @@ msgstr "" msgid "Set Landed Cost Based on Purchase Invoice Rate" msgstr "" -#: erpnext/accounts/doctype/sales_invoice/sales_invoice.js:1213 +#: erpnext/accounts/doctype/sales_invoice/sales_invoice.js:1215 msgid "Set Loyalty Program" msgstr "" -#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js:304 +#: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js:315 msgid "Set New Release Date" msgstr "" @@ -47508,7 +47539,7 @@ msgstr "" msgid "Set Source Warehouse" msgstr "" -#: erpnext/selling/doctype/sales_order/sales_order.js:1643 +#: erpnext/selling/doctype/sales_order/sales_order.js:1645 msgid "Set Supplier" msgstr "" @@ -47687,7 +47718,7 @@ msgstr "" msgid "Setting Events to {0}, since the Employee attached to the below Sales Persons does not have a User ID{1}" msgstr "" -#: erpnext/stock/doctype/pick_list/pick_list.js:95 +#: erpnext/stock/doctype/pick_list/pick_list.js:98 msgid "Setting Item Locations..." msgstr "" @@ -47956,7 +47987,7 @@ msgstr "" msgid "Shipping Address Template" msgstr "" -#: erpnext/controllers/accounts_controller.py:573 +#: erpnext/controllers/accounts_controller.py:575 msgid "Shipping Address does not belong to the {0}" msgstr "" @@ -48421,7 +48452,7 @@ msgstr "" msgid "Simultaneous" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:749 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:752 msgid "Since there is a process loss of {0} units for the finished good {1}, you should reduce the quantity by {0} units for the finished good {1} in the Items Table." msgstr "" @@ -48526,7 +48557,7 @@ msgstr "" msgid "Solvency Ratios" msgstr "" -#: erpnext/controllers/accounts_controller.py:4350 +#: erpnext/controllers/accounts_controller.py:4357 msgid "Some required Company details are missing. You don't have permission to update them. Please contact your System Manager." msgstr "" @@ -48599,11 +48630,11 @@ msgstr "" msgid "Source Stock Entry (Manufacture)" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:912 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:915 msgid "Source Stock Entry {0} belongs to Work Order {1}, not {2}. Please use a manufacture entry from the same Work Order." msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:2370 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:2373 msgid "Source Stock Entry {0} has no finished goods quantity" msgstr "" @@ -48669,7 +48700,7 @@ msgstr "" msgid "Source and Target Location cannot be same" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:878 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:881 msgid "Source and target warehouse cannot be same for row {0}" msgstr "" @@ -48682,9 +48713,9 @@ msgstr "" msgid "Source of Funds (Liabilities)" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:844 -#: erpnext/stock/doctype/stock_entry/stock_entry.py:861 -#: erpnext/stock/doctype/stock_entry/stock_entry.py:868 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:847 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:864 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:871 msgid "Source warehouse is mandatory for row {0}" msgstr "" @@ -48723,8 +48754,8 @@ msgid "Spending for Account {0} ({1}) between {2} and {3} has already exceeded t msgstr "" #: erpnext/assets/doctype/asset/asset.js:689 -#: erpnext/stock/doctype/batch/batch.js:103 -#: erpnext/stock/doctype/batch/batch.js:184 +#: erpnext/stock/doctype/batch/batch.js:104 +#: erpnext/stock/doctype/batch/batch.js:185 #: erpnext/support/doctype/issue/issue.js:114 msgid "Split" msgstr "" @@ -48734,7 +48765,7 @@ msgstr "" msgid "Split Asset" msgstr "" -#: erpnext/stock/doctype/batch/batch.js:183 +#: erpnext/stock/doctype/batch/batch.js:184 msgid "Split Batch" msgstr "" @@ -49135,7 +49166,7 @@ msgstr "" msgid "Stock Details" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:1002 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1005 msgid "Stock Entries already created for Work Order {0}: {1}" msgstr "" @@ -49156,7 +49187,7 @@ msgstr "" #: erpnext/manufacturing/workspace/manufacturing/manufacturing.json #: erpnext/stock/doctype/landed_cost_item/landed_cost_item.json #: erpnext/stock/doctype/landed_cost_purchase_receipt/landed_cost_purchase_receipt.json -#: erpnext/stock/doctype/pick_list/pick_list.js:140 +#: erpnext/stock/doctype/pick_list/pick_list.js:143 #: erpnext/stock/doctype/quality_inspection/quality_inspection.json #: erpnext/stock/doctype/stock_entry/stock_entry.json #: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.json @@ -49194,11 +49225,11 @@ msgstr "" msgid "Stock Entry Type" msgstr "" -#: erpnext/stock/doctype/pick_list/pick_list.py:1508 +#: erpnext/stock/doctype/pick_list/pick_list.py:1510 msgid "Stock Entry has been already created against this Pick List" msgstr "" -#: erpnext/stock/doctype/batch/batch.js:137 +#: erpnext/stock/doctype/batch/batch.js:138 msgid "Stock Entry {0} created" msgstr "" @@ -49279,7 +49310,7 @@ msgstr "" msgid "Stock Ledgers won’t be reposted." msgstr "" -#: erpnext/stock/doctype/batch/batch.js:80 +#: erpnext/stock/doctype/batch/batch.js:81 #: erpnext/stock/doctype/item/item.js:667 msgid "Stock Levels" msgstr "" @@ -49447,9 +49478,9 @@ msgstr "" #: erpnext/selling/doctype/sales_order/sales_order.js:124 #: erpnext/selling/doctype/sales_order/sales_order.js:137 #: erpnext/selling/doctype/sales_order/sales_order.js:258 -#: erpnext/stock/doctype/pick_list/pick_list.js:152 -#: erpnext/stock/doctype/pick_list/pick_list.js:167 -#: erpnext/stock/doctype/pick_list/pick_list.js:172 +#: erpnext/stock/doctype/pick_list/pick_list.js:155 +#: erpnext/stock/doctype/pick_list/pick_list.js:170 +#: erpnext/stock/doctype/pick_list/pick_list.js:175 #: erpnext/stock/doctype/stock_entry/stock_entry_dashboard.py:12 #: erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py:739 #: erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py:674 @@ -50148,7 +50179,7 @@ msgstr "" #. Label of the subcontracting_order (Link) field in DocType 'Subcontracting #. Receipt Supplied Item' #. Label of a Workspace Sidebar Item -#: erpnext/buying/doctype/purchase_order/purchase_order.js:399 +#: erpnext/buying/doctype/purchase_order/purchase_order.js:404 #: erpnext/controllers/subcontracting_controller.py:1173 #: erpnext/manufacturing/workspace/manufacturing/manufacturing.json #: erpnext/stock/doctype/stock_entry/stock_entry.json @@ -50187,7 +50218,7 @@ msgstr "" msgid "Subcontracting Order Supplied Item" msgstr "" -#: erpnext/buying/doctype/purchase_order/purchase_order.py:925 +#: erpnext/buying/doctype/purchase_order/purchase_order.py:927 msgid "Subcontracting Order {0} created." msgstr "" @@ -50276,7 +50307,7 @@ msgstr "" msgid "Subdivision" msgstr "" -#: erpnext/buying/doctype/purchase_order/purchase_order.py:921 +#: erpnext/buying/doctype/purchase_order/purchase_order.py:923 #: erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.py:1116 msgid "Submit Action Failed" msgstr "" @@ -50627,7 +50658,7 @@ msgstr "" #: erpnext/selling/doctype/customer/customer.js:253 #: erpnext/selling/doctype/party_specific_item/party_specific_item.json #: erpnext/selling/doctype/sales_order/sales_order.js:197 -#: erpnext/selling/doctype/sales_order/sales_order.js:1701 +#: erpnext/selling/doctype/sales_order/sales_order.js:1703 #: erpnext/selling/doctype/sales_order_item/sales_order_item.json #: erpnext/selling/doctype/sms_center/sms_center.json #: erpnext/setup/workspace/home/home.json @@ -50912,7 +50943,7 @@ msgstr "" #. Label of a Link in the Buying Workspace #. Label of the supplier_quotation (Link) field in DocType 'Quotation' #. Label of a Workspace Sidebar Item -#: erpnext/buying/doctype/purchase_order/purchase_order.js:544 +#: erpnext/buying/doctype/purchase_order/purchase_order.js:553 #: erpnext/buying/doctype/purchase_order/purchase_order.json #: erpnext/buying/doctype/purchase_order_item/purchase_order_item.json #: erpnext/buying/doctype/request_for_quotation/request_for_quotation.js:40 @@ -50954,7 +50985,7 @@ msgstr "" msgid "Supplier Reference" msgstr "" -#: erpnext/selling/doctype/sales_order/sales_order.js:1725 +#: erpnext/selling/doctype/sales_order/sales_order.js:1727 msgid "Supplier Required" msgstr "" @@ -51048,7 +51079,7 @@ msgstr "" msgid "Supplier delivers to Customer" msgstr "" -#: erpnext/selling/doctype/sales_order/sales_order.js:1724 +#: erpnext/selling/doctype/sales_order/sales_order.js:1726 msgid "Supplier is required for all selected Items" msgstr "" @@ -51203,7 +51234,7 @@ msgstr "" msgid "System will fetch all the entries if limit value is zero." msgstr "" -#: erpnext/controllers/accounts_controller.py:2226 +#: erpnext/controllers/accounts_controller.py:2228 msgid "System will not check over billing since amount for Item {0} in {1} is zero" msgstr "" @@ -51395,9 +51426,9 @@ msgstr "" msgid "Target Warehouse {0} must be same as Delivery Warehouse {1} in the Subcontracting Inward Order Item." msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:850 -#: erpnext/stock/doctype/stock_entry/stock_entry.py:857 -#: erpnext/stock/doctype/stock_entry/stock_entry.py:872 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:853 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:860 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:875 msgid "Target warehouse is mandatory for row {0}" msgstr "" @@ -52455,7 +52486,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:2822 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:2825 msgid "The Process Loss Qty has reset as per job cards Process Loss Qty" msgstr "" @@ -52471,7 +52502,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:1839 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1842 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 "" @@ -52575,7 +52606,7 @@ msgstr "" msgid "The following batches are expired, please restock them:
    {0}" msgstr "" -#: erpnext/controllers/accounts_controller.py:424 +#: erpnext/controllers/accounts_controller.py:426 msgid "The following cancelled repost entries exist for {0}:

    {1}

    Kindly delete these entries before continuing." msgstr "" @@ -52674,7 +52705,7 @@ msgstr "" msgid "The original invoice should be consolidated before or along with the return invoice." msgstr "" -#: erpnext/controllers/accounts_controller.py:203 +#: erpnext/controllers/accounts_controller.py:204 msgid "The outstanding amount {0} in {1} is lesser than {2}. Updating the outstanding to this invoice." msgstr "" @@ -52714,7 +52745,7 @@ msgstr "" msgid "The reserved stock will be released when you update items. Are you certain you wish to proceed?" msgstr "" -#: erpnext/stock/doctype/pick_list/pick_list.js:161 +#: erpnext/stock/doctype/pick_list/pick_list.js:164 msgid "The reserved stock will be released. Are you certain you wish to proceed?" msgstr "" @@ -52929,7 +52960,7 @@ msgstr "" msgid "There is no batch found against the {0}: {1}" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:1776 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:1779 msgid "There must be atleast 1 Finished Good in this Stock Entry" msgstr "" @@ -52972,7 +53003,7 @@ msgstr "" msgid "This Month's Summary" msgstr "" -#: erpnext/buying/doctype/purchase_order/purchase_order.py:934 +#: erpnext/buying/doctype/purchase_order/purchase_order.py:936 msgid "This Purchase Order has been fully subcontracted." msgstr "" @@ -53349,7 +53380,7 @@ msgstr "" #. Name of a DocType #. Label of a Link in the Projects Workspace #. Label of a Workspace Sidebar Item -#: erpnext/accounts/doctype/sales_invoice/sales_invoice.js:281 +#: erpnext/accounts/doctype/sales_invoice/sales_invoice.js:283 #: erpnext/projects/doctype/timesheet/timesheet.json #: erpnext/projects/report/daily_timesheet_summary/daily_timesheet_summary.py:26 #: erpnext/projects/report/timesheet_billing_summary/timesheet_billing_summary.py:59 @@ -53427,7 +53458,7 @@ msgstr "" msgid "To Currency" msgstr "" -#: erpnext/controllers/accounts_controller.py:623 +#: erpnext/controllers/accounts_controller.py:625 #: erpnext/setup/doctype/holiday_list/holiday_list.py:121 msgid "To Date cannot be before From Date" msgstr "" @@ -53637,7 +53668,7 @@ msgid "To Value" msgstr "" #: erpnext/manufacturing/doctype/plant_floor/plant_floor.js:224 -#: erpnext/stock/doctype/batch/batch.js:115 +#: erpnext/stock/doctype/batch/batch.js:116 msgid "To Warehouse" msgstr "" @@ -53701,7 +53732,7 @@ msgid "To include sub-assembly costs and secondary items in Finished Goods on a msgstr "" #: erpnext/accounts/doctype/payment_entry/payment_entry.py:2247 -#: erpnext/controllers/accounts_controller.py:3250 +#: erpnext/controllers/accounts_controller.py:3252 msgid "To include tax in row {0} in Item rate, taxes in rows {1} must also be included" msgstr "" @@ -54261,7 +54292,7 @@ msgstr "" msgid "Total Paid Amount" msgstr "" -#: erpnext/controllers/accounts_controller.py:2798 +#: erpnext/controllers/accounts_controller.py:2800 msgid "Total Payment Amount in Payment Schedule must be equal to Grand / Rounded Total" msgstr "" @@ -54868,7 +54899,7 @@ msgstr "" #. Option for the 'Asset Status' (Select) field in DocType 'Serial No' #: erpnext/accounts/doctype/share_transfer/share_transfer.json #: erpnext/assets/doctype/asset_movement/asset_movement.json -#: erpnext/buying/doctype/purchase_order/purchase_order.js:393 +#: erpnext/buying/doctype/purchase_order/purchase_order.js:398 #: erpnext/stock/doctype/item_reorder/item_reorder.json #: erpnext/stock/doctype/serial_no/serial_no.json #: erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.js:651 @@ -55223,6 +55254,7 @@ msgstr "" #: erpnext/accounts/doctype/sales_invoice_item/sales_invoice_item.json #: erpnext/accounts/report/billed_items_to_be_received/billed_items_to_be_received.py:75 #: erpnext/assets/doctype/asset_capitalization_service_item/asset_capitalization_service_item.json +#: erpnext/buying/doctype/purchase_order/purchase_order.js:794 #: erpnext/buying/doctype/purchase_order_item/purchase_order_item.json #: erpnext/buying/doctype/request_for_quotation_item/request_for_quotation_item.json #: erpnext/buying/doctype/supplier_quotation_item/supplier_quotation_item.json @@ -55249,7 +55281,7 @@ msgstr "" #: erpnext/selling/doctype/delivery_schedule_item/delivery_schedule_item.json #: erpnext/selling/doctype/product_bundle_item/product_bundle_item.json #: erpnext/selling/doctype/quotation_item/quotation_item.json -#: erpnext/selling/doctype/sales_order/sales_order.js:1694 +#: erpnext/selling/doctype/sales_order/sales_order.js:1696 #: erpnext/selling/doctype/sales_order_item/sales_order_item.json #: erpnext/selling/report/item_wise_sales_history/item_wise_sales_history.py:43 #: erpnext/selling/report/sales_analytics/sales_analytics.py:138 @@ -55270,7 +55302,7 @@ msgstr "" #: erpnext/stock/report/batch_wise_balance_history/batch_wise_balance_history.py:87 #: erpnext/stock/report/item_prices/item_prices.py:55 #: erpnext/stock/report/product_bundle_balance/product_bundle_balance.py:94 -#: erpnext/stock/report/stock_ageing/stock_ageing.py:179 +#: erpnext/stock/report/stock_ageing/stock_ageing.py:184 #: erpnext/stock/report/stock_analytics/stock_analytics.py:59 #: erpnext/stock/report/stock_projected_qty/stock_projected_qty.py:134 #: erpnext/stock/report/supplier_wise_sales_analytics/supplier_wise_sales_analytics.py:60 @@ -55339,7 +55371,7 @@ msgstr "" msgid "UOM Name" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:4010 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:4013 msgid "UOM conversion factor required for UOM: {0} in Item: {1}" msgstr "" @@ -55507,7 +55539,7 @@ msgstr "" msgid "Unit Of Measure" msgstr "" -#: erpnext/controllers/accounts_controller.py:4080 +#: erpnext/controllers/accounts_controller.py:4087 msgid "Unit Price" msgstr "" @@ -55660,7 +55692,7 @@ msgstr "" #: erpnext/manufacturing/doctype/work_order/work_order.js:952 #: erpnext/selling/doctype/sales_order/sales_order.js:122 -#: erpnext/stock/doctype/pick_list/pick_list.js:158 +#: erpnext/stock/doctype/pick_list/pick_list.js:161 #: erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.js:193 msgid "Unreserve" msgstr "" @@ -55681,7 +55713,7 @@ msgstr "" #: erpnext/public/js/stock_reservation.js:281 #: erpnext/selling/doctype/sales_order/sales_order.js:522 -#: erpnext/stock/doctype/pick_list/pick_list.js:310 +#: erpnext/stock/doctype/pick_list/pick_list.js:313 #: erpnext/subcontracting/doctype/subcontracting_order/subcontracting_order.js:390 msgid "Unreserving Stock..." msgstr "" @@ -55858,7 +55890,7 @@ msgstr "" msgid "Update Costing and Billing" msgstr "" -#: erpnext/stock/doctype/pick_list/pick_list.js:128 +#: erpnext/stock/doctype/pick_list/pick_list.js:131 msgid "Update Current Stock" msgstr "" @@ -55883,7 +55915,7 @@ msgstr "" #. Invoice' #: erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json #: erpnext/accounts/doctype/sales_invoice/sales_invoice.json -#: erpnext/controllers/accounts_controller.py:196 +#: erpnext/controllers/accounts_controller.py:197 msgid "Update Outstanding for Self" msgstr "" @@ -55902,7 +55934,7 @@ msgstr "" msgid "Update Rate and Availability" msgstr "" -#: erpnext/buying/doctype/purchase_order/purchase_order.js:567 +#: erpnext/buying/doctype/purchase_order/purchase_order.js:576 msgid "Update Rate as per Last Purchase" msgstr "" @@ -56559,7 +56591,7 @@ msgid "Valuation rate for the item as per Sales Invoice (Only for Internal Trans msgstr "" #: erpnext/accounts/doctype/payment_entry/payment_entry.py:2271 -#: erpnext/controllers/accounts_controller.py:3274 +#: erpnext/controllers/accounts_controller.py:3276 msgid "Valuation type charges can not be marked as Inclusive" msgstr "" @@ -56571,7 +56603,7 @@ msgstr "" msgid "Value (G - D)" msgstr "" -#: erpnext/stock/report/stock_ageing/stock_ageing.py:222 +#: erpnext/stock/report/stock_ageing/stock_ageing.py:227 msgid "Value ({0})" msgstr "" @@ -57592,7 +57624,7 @@ msgstr "" msgid "Wavelength In Megametres" msgstr "" -#: erpnext/controllers/accounts_controller.py:191 +#: erpnext/controllers/accounts_controller.py:192 msgid "We can see {0} is made against {1}. If you want {1}'s outstanding to be updated, uncheck the '{2}' checkbox." msgstr "" @@ -57968,7 +58000,7 @@ msgstr "" msgid "Work Order Item" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:915 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:918 msgid "Work Order Mismatch" msgstr "" @@ -58022,7 +58054,7 @@ msgstr "" msgid "Work Order has been {0}" msgstr "" -#: erpnext/selling/doctype/sales_order/sales_order.js:1257 +#: erpnext/selling/doctype/sales_order/sales_order.js:1259 msgid "Work Order not created" msgstr "" @@ -58030,11 +58062,11 @@ msgstr "" msgid "Work Order {0} created" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:2386 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:2389 msgid "Work Order {0} has no produced qty" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:952 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:955 msgid "Work Order {0}: Job Card not found for the operation {1}" msgstr "" @@ -58043,7 +58075,7 @@ msgstr "" msgid "Work Orders" msgstr "" -#: erpnext/selling/doctype/sales_order/sales_order.js:1350 +#: erpnext/selling/doctype/sales_order/sales_order.js:1352 msgid "Work Orders Created: {0}" msgstr "" @@ -58368,7 +58400,7 @@ msgstr "" msgid "You are importing data for the code list:" msgstr "" -#: erpnext/controllers/accounts_controller.py:3877 +#: erpnext/controllers/accounts_controller.py:3884 msgid "You are not allowed to update as per the conditions set in {} Workflow." msgstr "" @@ -58417,7 +58449,7 @@ msgid "You can only have Plans with the same billing cycle in a Subscription" msgstr "" #: erpnext/accounts/doctype/pos_invoice/pos_invoice.js:423 -#: erpnext/accounts/doctype/sales_invoice/sales_invoice.js:1021 +#: erpnext/accounts/doctype/sales_invoice/sales_invoice.js:1023 msgid "You can only redeem max {0} points in this order." msgstr "" @@ -58433,7 +58465,7 @@ msgstr "" msgid "You can set it as a machine name or operation type. For example, stiching machine 12" msgstr "" -#: erpnext/controllers/accounts_controller.py:212 +#: erpnext/controllers/accounts_controller.py:213 msgid "You can use {0} to reconcile against {1} later." msgstr "" @@ -58513,7 +58545,7 @@ msgstr "" msgid "You do not have permission to edit this document" msgstr "" -#: erpnext/controllers/accounts_controller.py:3853 +#: erpnext/controllers/accounts_controller.py:3860 msgid "You do not have permissions to {} items in a {}." msgstr "" @@ -58525,15 +58557,15 @@ msgstr "" msgid "You don't have enough points to redeem." msgstr "" -#: erpnext/controllers/accounts_controller.py:4425 +#: erpnext/controllers/accounts_controller.py:4432 msgid "You don't have permission to create a Company Address. Please contact your System Manager." msgstr "" -#: erpnext/controllers/accounts_controller.py:4405 +#: erpnext/controllers/accounts_controller.py:4412 msgid "You don't have permission to update Company details. Please contact your System Manager." msgstr "" -#: erpnext/controllers/accounts_controller.py:4399 +#: erpnext/controllers/accounts_controller.py:4406 msgid "You don't have permission to update this document. Please contact your System Manager." msgstr "" @@ -58577,7 +58609,7 @@ msgstr "" msgid "You need to cancel POS Closing Entry {} to be able to cancel this document." msgstr "" -#: erpnext/controllers/accounts_controller.py:3225 +#: erpnext/controllers/accounts_controller.py:3227 msgid "You selected the account group {1} as {2} Account in row {0}. Please select a single account." msgstr "" @@ -58628,7 +58660,7 @@ msgstr "" msgid "Zero Rated" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:625 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:628 msgid "Zero quantity" msgstr "" @@ -58953,7 +58985,7 @@ msgstr "" msgid "you must select Capital Work in Progress Account in accounts table" msgstr "" -#: erpnext/controllers/accounts_controller.py:1283 +#: erpnext/controllers/accounts_controller.py:1285 msgid "{0} '{1}' is disabled" msgstr "" @@ -58969,7 +59001,7 @@ msgstr "" msgid "{0} {1} has submitted Assets. Remove Item {2} from table to continue." msgstr "" -#: erpnext/controllers/accounts_controller.py:2380 +#: erpnext/controllers/accounts_controller.py:2382 msgid "{0} Account not found against Customer {1}." msgstr "" @@ -59084,7 +59116,7 @@ msgstr "" #: erpnext/manufacturing/doctype/production_plan/production_plan.py:923 #: erpnext/manufacturing/doctype/production_plan/production_plan.py:1039 -#: erpnext/stock/doctype/pick_list/pick_list.py:1330 +#: erpnext/stock/doctype/pick_list/pick_list.py:1332 #: erpnext/subcontracting/doctype/subcontracting_inward_order/subcontracting_inward_order.py:322 msgid "{0} created" msgstr "" @@ -59097,7 +59129,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:295 +#: erpnext/buying/doctype/purchase_order/purchase_order.py:294 msgid "{0} currently has a {1} Supplier Scorecard standing, and Purchase Orders to this supplier should be issued with caution." msgstr "" @@ -59109,7 +59141,7 @@ msgstr "" msgid "{0} does not belong to Company {1}" msgstr "" -#: erpnext/controllers/accounts_controller.py:350 +#: erpnext/controllers/accounts_controller.py:352 msgid "{0} does not belong to the Company {1}." msgstr "" @@ -59143,7 +59175,7 @@ msgstr "" msgid "{0} hours" msgstr "" -#: erpnext/controllers/accounts_controller.py:2738 +#: erpnext/controllers/accounts_controller.py:2740 msgid "{0} in row {1}" msgstr "" @@ -59165,7 +59197,7 @@ msgstr "" msgid "{0} is already running for {1}" msgstr "" -#: erpnext/controllers/accounts_controller.py:173 +#: erpnext/controllers/accounts_controller.py:174 msgid "{0} is blocked so this transaction cannot proceed" msgstr "" @@ -59186,7 +59218,7 @@ msgstr "" msgid "{0} is mandatory. Maybe Currency Exchange record is not created for {1} to {2}" msgstr "" -#: erpnext/controllers/accounts_controller.py:3182 +#: erpnext/controllers/accounts_controller.py:3184 msgid "{0} is mandatory. Maybe Currency Exchange record is not created for {1} to {2}." msgstr "" @@ -59202,7 +59234,7 @@ msgstr "" msgid "{0} is not a group node. Please select a group node as parent cost center" msgstr "" -#: erpnext/stock/doctype/stock_entry/stock_entry.py:677 +#: erpnext/stock/doctype/stock_entry/stock_entry.py:680 msgid "{0} is not a stock Item" msgstr "" @@ -59294,11 +59326,11 @@ msgstr "" msgid "{0} units are reserved for Item {1} in Warehouse {2}, please un-reserve the same to {3} the Stock Reconciliation." msgstr "" -#: erpnext/stock/doctype/pick_list/pick_list.py:1085 +#: erpnext/stock/doctype/pick_list/pick_list.py:1087 msgid "{0} units of Item {1} is not available in any of the warehouses." msgstr "" -#: erpnext/stock/doctype/pick_list/pick_list.py:1078 +#: erpnext/stock/doctype/pick_list/pick_list.py:1080 msgid "{0} units of Item {1} is not available in any of the warehouses. Other Pick Lists exist for this item." msgstr "" @@ -59381,7 +59413,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:435 +#: erpnext/buying/doctype/purchase_order/purchase_order.py:434 #: erpnext/selling/doctype/sales_order/sales_order.py:600 #: erpnext/stock/doctype/material_request/material_request.py:255 msgid "{0} {1} has been modified. Please refresh." @@ -59562,7 +59594,7 @@ msgstr "" msgid "{0}: Virtual DocType (no database table)" msgstr "" -#: erpnext/controllers/accounts_controller.py:540 +#: erpnext/controllers/accounts_controller.py:542 msgid "{0}: {1} does not belong to the Company: {2}" msgstr "" From f24b55633600facf3eba3f76b7cd7c682d323317 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Mon, 11 May 2026 07:40:14 +0000 Subject: [PATCH 11/19] =?UTF-8?q?fix:=20do=20not=20rely=20on=20client=20si?= =?UTF-8?q?de=20to=20update=20quantities=20during=20partial=20d=E2=80=A6?= =?UTF-8?q?=20(backport=20#54804)=20(#54821)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: do not rely on client side to update quantities during partial d… (#54804) fix: do not rely on client side to update quantities during partial dropship (cherry picked from commit 03acbc3dc9af07ebaa900e443c5dc1497270e789) # Conflicts: # erpnext/buying/doctype/purchase_order/purchase_order.py * chore: resolve conflicts --------- Co-authored-by: Mihir Kandoi --- .../doctype/purchase_order/purchase_order.js | 73 +++++-------------- .../doctype/purchase_order/purchase_order.py | 46 +++++++++++- 2 files changed, 64 insertions(+), 55 deletions(-) diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.js b/erpnext/buying/doctype/purchase_order/purchase_order.js index bb6e261c22d..86e7c790b7a 100644 --- a/erpnext/buying/doctype/purchase_order/purchase_order.js +++ b/erpnext/buying/doctype/purchase_order/purchase_order.js @@ -813,61 +813,26 @@ erpnext.buying.PurchaseOrderController = class PurchaseOrderController extends ( }, ], primary_action: (values) => { - const data = values.items.filter((item) => item.__checked); - if (!data.length) { - frappe.throw(__("Please select at least one item to update delivered quantity.")); - } - - data.forEach((item) => { - if (!item.qty_change) { - frappe.throw( - __( - "Item {0} has no changes in delivered quantity. Please unselect the row if you do not wish to update its quantity.", - [item.item_code.bold()] - ) - ); - } - if (item.qty_change < 0 && Math.abs(item.qty_change) > item.delivered_qty) { - frappe.throw( - __("Delivered Qty cannot be reduced by more than {0} for item {1}", [ - item.delivered_qty, - item.item_code.bold(), - ]) - ); - } - if (item.qty_change > 0 && item.delivered_qty + item.qty_change > item.qty) { - frappe.throw( - __("Delivered Qty cannot be increased by more than {0} for item {1}", [ - item.qty - item.delivered_qty, - item.item_code.bold(), - ]) - ); - } - }); - - data.forEach((item) => { - frappe.model.set_value( - "Purchase Order Item", - item.name, - "received_qty", - item.delivered_qty + item.qty_change - ); - }); - const frm = this.frm; - frm.dirty(); - frm.save("Update", () => { - frappe.call({ - doc: frm.doc, - method: "update_receiving_percentage", - callback: function (r) { - if (!r.exc) { - dialog.hide(); - frappe.toast(__("Quantities updated successfully.")); - frm.reload_doc(); - } - }, - }); + frappe.call({ + doc: frm.doc, + method: "update_dropship_received_qty", + args: { + data: values.items + .filter((item) => item.__checked) + .map((item) => ({ + name: item.name, + current_qty: item.delivered_qty, + qty_change: item.qty_change, + })), + }, + callback: function (r) { + if (!r.exc) { + frm.reload_doc(); + frappe.toast(__("Quantities updated successfully.")); + dialog.hide(); + } + }, }); }, }); diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.py b/erpnext/buying/doctype/purchase_order/purchase_order.py index 140eef0ba38..aad447a8e7e 100644 --- a/erpnext/buying/doctype/purchase_order/purchase_order.py +++ b/erpnext/buying/doctype/purchase_order/purchase_order.py @@ -575,6 +575,51 @@ class PurchaseOrder(BuyingController): def has_drop_ship_item(self): return any(d.delivered_by_supplier for d in self.items) + @frappe.whitelist() + def update_dropship_received_qty(self, data: list[dict]): + if not data: + frappe.throw(_("Please select at least one item to update delivered quantity.")) + + for d in data: + item = next((item for item in self.items if item.name == d.get("name")), None) + + if not item: + frappe.throw( + _("Item with name {0} not found in the Purchase Order").format(frappe.bold(d.get("name"))) + ) + + if not item.has_permlevel_access_to("received_qty", permission_type="write"): + frappe.throw( + _("You don't have permission to update Received Qty DocField for item {0}").format( + frappe.bold(item.item_code) + ) + ) + + if not d.get("qty_change"): + frappe.throw( + _( + "Item {0} has no changes in delivered quantity. Please unselect the row if you do not wish to update its quantity." + ).format(frappe.bold(item.item_code)) + ) + + if d.get("qty_change") < 0 and abs(d.get("qty_change")) > item.received_qty: + frappe.throw( + _("Delivered Qty cannot be reduced by more than {0} for item {1}").format( + item.received_qty, frappe.bold(item.item_code) + ) + ) + + if d.get("qty_change") > 0 and item.received_qty + d.get("qty_change") > item.qty: + frappe.throw( + _("Delivered Qty cannot be increased by more than {0} for item {1}").format( + item.qty - item.received_qty, frappe.bold(item.item_code) + ) + ) + + item.received_qty += d.get("qty_change") + self.update_receiving_percentage() + self.save() + def is_against_so(self): return any(d.sales_order for d in self.items if d.sales_order) @@ -588,7 +633,6 @@ class PurchaseOrder(BuyingController): stock_bin = get_bin(d.rm_item_code, d.reserve_warehouse) stock_bin.update_reserved_qty_for_sub_contracting(subcontract_doctype="Purchase Order") - @frappe.whitelist() def update_receiving_percentage(self): total_qty, received_qty = 0.0, 0.0 for item in self.items: From 0db7e1e56b7ac6dfa58711f108a4be1e6ef54b04 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Mon, 11 May 2026 08:08:09 +0000 Subject: [PATCH 12/19] fix: check if item is dropshipped before updating quantity (backport #54825) (#54827) fix: check if item is dropshipped before updating quantity (#54825) (cherry picked from commit 23e9ad3fd9426cfd1f9971b9171473926b2e52ee) Co-authored-by: Mihir Kandoi --- erpnext/buying/doctype/purchase_order/purchase_order.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.py b/erpnext/buying/doctype/purchase_order/purchase_order.py index aad447a8e7e..5a4d1db2a6c 100644 --- a/erpnext/buying/doctype/purchase_order/purchase_order.py +++ b/erpnext/buying/doctype/purchase_order/purchase_order.py @@ -588,6 +588,13 @@ class PurchaseOrder(BuyingController): _("Item with name {0} not found in the Purchase Order").format(frappe.bold(d.get("name"))) ) + if not item.delivered_by_supplier: + frappe.throw( + _( + "Item {0} is not a drop ship item. Only drop ship items can have Delivered Qty updated." + ).format(frappe.bold(item.item_code)) + ) + if not item.has_permlevel_access_to("received_qty", permission_type="write"): frappe.throw( _("You don't have permission to update Received Qty DocField for item {0}").format( From 1d20469c99abbc934742a8b99dabb667c4246782 Mon Sep 17 00:00:00 2001 From: ruthra kumar Date: Mon, 11 May 2026 13:02:17 +0530 Subject: [PATCH 13/19] refactor(test): speed up payment reconciliation tests (cherry picked from commit f58242dca704cdac67631ec1b08003176b715672) --- .../test_payment_reconciliation.py | 357 +++++------------- erpnext/tests/utils.py | 14 + 2 files changed, 116 insertions(+), 255 deletions(-) diff --git a/erpnext/accounts/doctype/payment_reconciliation/test_payment_reconciliation.py b/erpnext/accounts/doctype/payment_reconciliation/test_payment_reconciliation.py index 1bbf228d73a..18501c0fefd 100644 --- a/erpnext/accounts/doctype/payment_reconciliation/test_payment_reconciliation.py +++ b/erpnext/accounts/doctype/payment_reconciliation/test_payment_reconciliation.py @@ -21,122 +21,23 @@ from erpnext.tests.utils import ERPNextTestSuite class TestPaymentReconciliation(ERPNextTestSuite): def setUp(self): - self.create_company() - self.create_item() - self.create_customer() - self.create_account() - self.create_cost_center() - self.clear_old_entries() - - def create_company(self): - company = None - if frappe.db.exists("Company", "_Test Payment Reconciliation"): - company = frappe.get_doc("Company", "_Test Payment Reconciliation") - else: - company = frappe.get_doc( - { - "doctype": "Company", - "company_name": "_Test Payment Reconciliation", - "country": "India", - "default_currency": "INR", - "create_chart_of_accounts_based_on": "Standard Template", - "chart_of_accounts": "Standard", - } - ) - company = company.save() - - self.company = company.name - self.cost_center = company.cost_center - self.warehouse = "All Warehouses - _PR" - self.income_account = "Sales - _PR" - self.expense_account = "Cost of Goods Sold - _PR" - self.debit_to = "Debtors - _PR" - self.creditors = "Creditors - _PR" - self.cash = "Cash - _PR" - - # create bank account - if frappe.db.exists("Account", "HDFC - _PR"): - self.bank = "HDFC - _PR" - else: - bank_acc = frappe.get_doc( - { - "doctype": "Account", - "account_name": "HDFC", - "parent_account": "Bank Accounts - _PR", - "company": self.company, - } - ) - bank_acc.save() - self.bank = bank_acc.name - - def create_item(self): - item = create_item( - item_code="_Test PR Item", is_stock_item=0, company=self.company, warehouse=self.warehouse - ) - self.item = item if isinstance(item, str) else item.item_code - - def create_customer(self): - self.customer = make_customer("_Test PR Customer") - self.customer2 = make_customer("_Test PR Customer 2") - self.customer3 = make_customer("_Test PR Customer 3", "EUR") - self.customer4 = make_customer("_Test PR Customer 4", "EUR") - self.customer5 = make_customer("_Test PR Customer 5", "EUR") - - def create_account(self): - accounts = [ - { - "attribute": "debtors_eur", - "account_name": "Debtors EUR", - "parent_account": "Accounts Receivable - _PR", - "account_currency": "EUR", - "account_type": "Receivable", - }, - { - "attribute": "creditors_usd", - "account_name": "Payable USD", - "parent_account": "Accounts Payable - _PR", - "account_currency": "USD", - "account_type": "Payable", - }, - # 'Payable' account for capturing advance paid, under 'Assets' group - { - "attribute": "advance_payable_account", - "account_name": "Advance Paid", - "parent_account": "Current Assets - _PR", - "account_currency": "INR", - "account_type": "Payable", - }, - # 'Receivable' account for capturing advance received, under 'Liabilities' group - { - "attribute": "advance_receivable_account", - "account_name": "Advance Received", - "parent_account": "Current Liabilities - _PR", - "account_currency": "INR", - "account_type": "Receivable", - }, - ] - - for x in accounts: - x = frappe._dict(x) - if not frappe.db.get_value( - "Account", filters={"account_name": x.account_name, "company": self.company} - ): - acc = frappe.new_doc("Account") - acc.account_name = x.account_name - acc.parent_account = x.parent_account - acc.company = self.company - acc.account_currency = x.account_currency - acc.account_type = x.account_type - acc.insert() - else: - name = frappe.db.get_value( - "Account", - filters={"account_name": x.account_name, "company": self.company}, - fieldname="name", - pluck=True, - ) - acc = frappe.get_doc("Account", name) - setattr(self, x.attribute, acc.name) + self.company = "_Test Company" + self.debit_to = "Debtors - _TC" + self.creditors = "Creditors - _TC" + self.bank = "HDFC - _TC" + self.cash = "Cash - _TC" + self.item = "_Test Item" + self.cost_center = self.main_cc = "Main - _TC" + self.sub_cc = "Sub - _TC" + self.customer = "_Test Customer" + self.advance_receivable_account = "Advance Received - _TC" + self.advance_payable_account = "Advance Paid - _TC" + self.income_account = "Sales - _TC" + self.expense_account = "Cost of Goods Sold - _TC" + self.warehouse = "All Warehouses - _TC" + self.customer_usd = "_Test Customer USD" + self.debtors_usd = "_Test Receivable USD - _TC" + self.creditors_usd = "_Test Payable USD - _TC" def create_sales_invoice( self, qty=1, rate=100, posting_date=None, do_not_save=False, do_not_submit=False @@ -253,18 +154,6 @@ class TestPaymentReconciliation(ERPNextTestSuite): ) return pord - def clear_old_entries(self): - doctype_list = [ - "GL Entry", - "Payment Ledger Entry", - "Sales Invoice", - "Purchase Invoice", - "Payment Entry", - "Journal Entry", - ] - for doctype in doctype_list: - qb.from_(qb.DocType(doctype)).delete().where(qb.DocType(doctype).company == self.company).run() - def create_payment_reconciliation(self, party_is_customer=True): pr = frappe.new_doc("Payment Reconciliation") pr.company = self.company @@ -300,22 +189,6 @@ class TestPaymentReconciliation(ERPNextTestSuite): ) return je - def create_cost_center(self): - # Setup cost center - cc_name = "Sub" - - self.main_cc = frappe.get_doc("Cost Center", get_default_cost_center(self.company)) - - cc_exists = frappe.db.get_list("Cost Center", filters={"cost_center_name": cc_name}) - if cc_exists: - self.sub_cc = frappe.get_doc("Cost Center", cc_exists[0].name) - else: - sub_cc = frappe.new_doc("Cost Center") - sub_cc.cost_center_name = "Sub" - sub_cc.parent_cost_center = self.main_cc.parent_cost_center - sub_cc.company = self.main_cc.company - self.sub_cc = sub_cc.save() - def test_filter_min_max(self): # check filter condition minimum and maximum amount self.create_sales_invoice(qty=1, rate=300) @@ -478,7 +351,7 @@ class TestPaymentReconciliation(ERPNextTestSuite): def test_payment_against_journal(self): transaction_date = nowdate() - sales = "Sales - _PR" + sales = "Sales - _TC" amount = 921 # debit debtors account to record an invoice je = self.create_journal_entry(self.debit_to, sales, amount, transaction_date) @@ -513,7 +386,7 @@ class TestPaymentReconciliation(ERPNextTestSuite): transaction_date = nowdate() self.supplier = "_Test Supplier USD" - self.supplier2 = make_supplier("_Test Supplier2 USD", "USD") + self.supplier2 = "_Test Another Supplier USD" amount = 100 exc_rate1 = 80 exc_rate2 = 83 @@ -666,7 +539,7 @@ class TestPaymentReconciliation(ERPNextTestSuite): def test_journal_against_journal(self): transaction_date = nowdate() - sales = "Sales - _PR" + sales = "Sales - _TC" amount = 100 # debit debtors account to simulate a invoice @@ -841,47 +714,49 @@ class TestPaymentReconciliation(ERPNextTestSuite): def test_pr_output_foreign_currency_and_amount(self): # test for currency and amount invoices and payments transaction_date = nowdate() - # In EUR + # In USD amount = 100 exchange_rate = 80 si = self.create_sales_invoice( qty=1, rate=amount, posting_date=transaction_date, do_not_save=True, do_not_submit=True ) - si.customer = self.customer3 - si.currency = "EUR" + si.customer = self.customer_usd + si.currency = "USD" si.conversion_rate = exchange_rate - si.debit_to = self.debtors_eur + si.debit_to = self.debtors_usd si = si.save().submit() cr_note = self.create_sales_invoice( qty=-1, rate=amount, posting_date=transaction_date, do_not_save=True, do_not_submit=True ) - cr_note.customer = self.customer3 + cr_note.customer = self.customer_usd cr_note.is_return = 1 - cr_note.currency = "EUR" + cr_note.currency = "USD" cr_note.conversion_rate = exchange_rate - cr_note.debit_to = self.debtors_eur + cr_note.debit_to = self.debtors_usd cr_note = cr_note.save().submit() pr = self.create_payment_reconciliation() - pr.party = self.customer3 - pr.receivable_payable_account = self.debtors_eur + pr.party = self.customer_usd + pr.receivable_payable_account = self.debtors_usd pr.get_unreconciled_entries() self.assertEqual(len(pr.invoices), 1) self.assertEqual(len(pr.payments), 1) self.assertEqual(pr.invoices[0].amount, amount) - self.assertEqual(pr.invoices[0].currency, "EUR") + self.assertEqual(pr.invoices[0].currency, "USD") self.assertEqual(pr.payments[0].amount, amount) - self.assertEqual(pr.payments[0].currency, "EUR") + self.assertEqual(pr.payments[0].currency, "USD") cr_note.cancel() - pay = self.create_payment_entry(amount=amount, posting_date=transaction_date, customer=self.customer3) - pay.paid_from = self.debtors_eur - pay.paid_from_account_currency = "EUR" + pay = self.create_payment_entry( + amount=amount, posting_date=transaction_date, customer=self.customer_usd + ) + pay.paid_from = self.debtors_usd + pay.paid_from_account_currency = "USD" pay.source_exchange_rate = exchange_rate pay.received_amount = exchange_rate * amount pay = pay.save().submit() @@ -890,21 +765,21 @@ class TestPaymentReconciliation(ERPNextTestSuite): self.assertEqual(len(pr.invoices), 1) self.assertEqual(len(pr.payments), 1) self.assertEqual(pr.payments[0].amount, amount) - self.assertEqual(pr.payments[0].currency, "EUR") + self.assertEqual(pr.payments[0].currency, "USD") def test_difference_amount_via_journal_entry(self): # Make Sale Invoice si = self.create_sales_invoice( qty=1, rate=100, posting_date=nowdate(), do_not_save=True, do_not_submit=True ) - si.customer = self.customer4 - si.currency = "EUR" + si.customer = self.customer_usd + si.currency = "USD" si.conversion_rate = 85 - si.debit_to = self.debtors_eur + si.debit_to = self.debtors_usd si.save().submit() # Make payment using Journal Entry - je1 = self.create_journal_entry("HDFC - _PR", self.debtors_eur, 100, nowdate()) + je1 = self.create_journal_entry("HDFC - _TC", self.debtors_usd, 100, nowdate()) je1.multi_currency = 1 je1.accounts[0].exchange_rate = 1 je1.accounts[0].credit_in_account_currency = 0 @@ -912,7 +787,7 @@ class TestPaymentReconciliation(ERPNextTestSuite): je1.accounts[0].debit_in_account_currency = 8000 je1.accounts[0].debit = 8000 je1.accounts[1].party_type = "Customer" - je1.accounts[1].party = self.customer4 + je1.accounts[1].party = self.customer_usd je1.accounts[1].exchange_rate = 80 je1.accounts[1].credit_in_account_currency = 100 je1.accounts[1].credit = 8000 @@ -921,7 +796,7 @@ class TestPaymentReconciliation(ERPNextTestSuite): je1.save() je1.submit() - je2 = self.create_journal_entry("HDFC - _PR", self.debtors_eur, 200, nowdate()) + je2 = self.create_journal_entry("HDFC - _TC", self.debtors_usd, 200, nowdate()) je2.multi_currency = 1 je2.accounts[0].exchange_rate = 1 je2.accounts[0].credit_in_account_currency = 0 @@ -929,7 +804,7 @@ class TestPaymentReconciliation(ERPNextTestSuite): je2.accounts[0].debit_in_account_currency = 16000 je2.accounts[0].debit = 16000 je2.accounts[1].party_type = "Customer" - je2.accounts[1].party = self.customer4 + je2.accounts[1].party = self.customer_usd je2.accounts[1].exchange_rate = 80 je2.accounts[1].credit_in_account_currency = 200 je1.accounts[1].credit = 16000 @@ -939,8 +814,8 @@ class TestPaymentReconciliation(ERPNextTestSuite): je2.submit() pr = self.create_payment_reconciliation() - pr.party = self.customer4 - pr.receivable_payable_account = self.debtors_eur + pr.party = self.customer_usd + pr.receivable_payable_account = self.debtors_usd pr.get_unreconciled_entries() self.assertEqual(len(pr.invoices), 1) @@ -960,7 +835,7 @@ class TestPaymentReconciliation(ERPNextTestSuite): invoices = [x.as_dict() for x in pr.invoices] payments = [pr.payments[1].as_dict()] pr.allocate_entries(frappe._dict({"invoices": invoices, "payments": payments})) - pr.allocation[0].difference_account = "Exchange Gain/Loss - _PR" + pr.allocation[0].difference_account = "Exchange Gain/Loss - _TC" self.assertEqual(pr.allocation[0].allocated_amount, 100) self.assertEqual(pr.allocation[0].difference_amount, -500) @@ -969,7 +844,7 @@ class TestPaymentReconciliation(ERPNextTestSuite): pr.reconcile() total_credit_amount = frappe.db.get_all( "Journal Entry Account", - {"account": self.debtors_eur, "docstatus": 1, "reference_name": si.name}, + {"account": self.debtors_usd, "docstatus": 1, "reference_name": si.name}, [{"SUM": "credit", "as": "amount"}], group_by="reference_name", )[0].amount @@ -979,7 +854,7 @@ class TestPaymentReconciliation(ERPNextTestSuite): jea_parent = frappe.db.get_all( "Journal Entry Account", - filters={"account": self.debtors_eur, "docstatus": 1, "reference_name": si.name, "credit": 500}, + filters={"account": self.debtors_usd, "docstatus": 1, "reference_name": si.name, "credit": 500}, fields=["parent"], )[0] self.assertEqual( @@ -991,14 +866,14 @@ class TestPaymentReconciliation(ERPNextTestSuite): si = self.create_sales_invoice( qty=1, rate=100, posting_date=nowdate(), do_not_save=True, do_not_submit=True ) - si.customer = self.customer4 - si.currency = "EUR" + si.customer = self.customer_usd + si.currency = "USD" si.conversion_rate = 85 - si.debit_to = self.debtors_eur + si.debit_to = self.debtors_usd si.save().submit() # Make payment using Journal Entry - je1 = self.create_journal_entry("HDFC - _PR", self.debtors_eur, 100, nowdate()) + je1 = self.create_journal_entry("HDFC - _TC", self.debtors_usd, 100, nowdate()) je1.multi_currency = 1 je1.accounts[0].exchange_rate = 1 je1.accounts[0].credit_in_account_currency = -8000 @@ -1006,7 +881,7 @@ class TestPaymentReconciliation(ERPNextTestSuite): je1.accounts[0].debit_in_account_currency = 0 je1.accounts[0].debit = 0 je1.accounts[1].party_type = "Customer" - je1.accounts[1].party = self.customer4 + je1.accounts[1].party = self.customer_usd je1.accounts[1].exchange_rate = 80 je1.accounts[1].credit_in_account_currency = 100 je1.accounts[1].credit = 8000 @@ -1015,7 +890,7 @@ class TestPaymentReconciliation(ERPNextTestSuite): je1.save() je1.submit() - je2 = self.create_journal_entry("HDFC - _PR", self.debtors_eur, 200, nowdate()) + je2 = self.create_journal_entry("HDFC - _TC", self.debtors_usd, 200, nowdate()) je2.multi_currency = 1 je2.accounts[0].exchange_rate = 1 je2.accounts[0].credit_in_account_currency = -16000 @@ -1023,7 +898,7 @@ class TestPaymentReconciliation(ERPNextTestSuite): je2.accounts[0].debit_in_account_currency = 0 je2.accounts[0].debit = 0 je2.accounts[1].party_type = "Customer" - je2.accounts[1].party = self.customer4 + je2.accounts[1].party = self.customer_usd je2.accounts[1].exchange_rate = 80 je2.accounts[1].credit_in_account_currency = 200 je1.accounts[1].credit = 16000 @@ -1033,8 +908,8 @@ class TestPaymentReconciliation(ERPNextTestSuite): je2.submit() pr = self.create_payment_reconciliation() - pr.party = self.customer4 - pr.receivable_payable_account = self.debtors_eur + pr.party = self.customer_usd + pr.receivable_payable_account = self.debtors_usd pr.get_unreconciled_entries() self.assertEqual(len(pr.invoices), 1) @@ -1054,7 +929,7 @@ class TestPaymentReconciliation(ERPNextTestSuite): invoices = [x.as_dict() for x in pr.invoices] payments = [pr.payments[1].as_dict()] pr.allocate_entries(frappe._dict({"invoices": invoices, "payments": payments})) - pr.allocation[0].difference_account = "Exchange Gain/Loss - _PR" + pr.allocation[0].difference_account = "Exchange Gain/Loss - _TC" self.assertEqual(pr.allocation[0].allocated_amount, 100) self.assertEqual(pr.allocation[0].difference_amount, -500) @@ -1063,7 +938,7 @@ class TestPaymentReconciliation(ERPNextTestSuite): pr.reconcile() total_credit_amount = frappe.db.get_all( "Journal Entry Account", - {"account": self.debtors_eur, "docstatus": 1, "reference_name": si.name}, + {"account": self.debtors_usd, "docstatus": 1, "reference_name": si.name}, [{"SUM": "credit", "as": "amount"}], group_by="reference_name", )[0].amount @@ -1073,7 +948,7 @@ class TestPaymentReconciliation(ERPNextTestSuite): jea_parent = frappe.db.get_all( "Journal Entry Account", - filters={"account": self.debtors_eur, "docstatus": 1, "reference_name": si.name, "credit": 500}, + filters={"account": self.debtors_usd, "docstatus": 1, "reference_name": si.name, "credit": 500}, fields=["parent"], )[0] self.assertEqual( @@ -1085,10 +960,10 @@ class TestPaymentReconciliation(ERPNextTestSuite): si = self.create_sales_invoice( qty=1, rate=100, posting_date=nowdate(), do_not_save=True, do_not_submit=True ) - si.customer = self.customer5 - si.currency = "EUR" + si.customer = self.customer_usd + si.currency = "USD" si.conversion_rate = 85 - si.debit_to = self.debtors_eur + si.debit_to = self.debtors_usd si.save().submit() # Make payment using Payment Entry @@ -1096,8 +971,8 @@ class TestPaymentReconciliation(ERPNextTestSuite): company=self.company, payment_type="Receive", party_type="Customer", - party=self.customer5, - paid_from=self.debtors_eur, + party=self.customer_usd, + paid_from=self.debtors_usd, paid_to=self.bank, paid_amount=100, ) @@ -1111,8 +986,8 @@ class TestPaymentReconciliation(ERPNextTestSuite): company=self.company, payment_type="Receive", party_type="Customer", - party=self.customer5, - paid_from=self.debtors_eur, + party=self.customer_usd, + paid_from=self.debtors_usd, paid_to=self.bank, paid_amount=200, ) @@ -1123,8 +998,8 @@ class TestPaymentReconciliation(ERPNextTestSuite): pe2.submit() pr = self.create_payment_reconciliation() - pr.party = self.customer5 - pr.receivable_payable_account = self.debtors_eur + pr.party = self.customer_usd + pr.receivable_payable_account = self.debtors_usd pr.get_unreconciled_entries() self.assertEqual(len(pr.invoices), 1) @@ -1152,14 +1027,14 @@ class TestPaymentReconciliation(ERPNextTestSuite): """ si = self.create_sales_invoice(qty=1, rate=100, do_not_submit=True) - si.cost_center = self.main_cc.name + si.cost_center = self.main_cc si.submit() pr = get_payment_entry(si.doctype, si.name) - pr.cost_center = self.sub_cc.name + pr.cost_center = self.sub_cc pr = pr.save().submit() pr = self.create_payment_reconciliation() - pr.cost_center = self.main_cc.name + pr.cost_center = self.main_cc pr.get_unreconciled_entries() @@ -1176,38 +1051,38 @@ class TestPaymentReconciliation(ERPNextTestSuite): # 'Main - PR' Cost Center si1 = self.create_sales_invoice(qty=1, rate=rate, posting_date=transaction_date, do_not_submit=True) - si1.cost_center = self.main_cc.name + si1.cost_center = self.main_cc si1.submit() pe1 = self.create_payment_entry(posting_date=transaction_date, amount=rate) - pe1.cost_center = self.main_cc.name + pe1.cost_center = self.main_cc pe1 = pe1.save().submit() je1 = self.create_journal_entry(self.bank, self.debit_to, 100, transaction_date) - je1.accounts[0].cost_center = self.main_cc.name - je1.accounts[1].cost_center = self.main_cc.name + je1.accounts[0].cost_center = self.main_cc + je1.accounts[1].cost_center = self.main_cc je1.accounts[1].party_type = "Customer" je1.accounts[1].party = self.customer je1 = je1.save().submit() # 'Sub - PR' Cost Center si2 = self.create_sales_invoice(qty=1, rate=rate, posting_date=transaction_date, do_not_submit=True) - si2.cost_center = self.sub_cc.name + si2.cost_center = self.sub_cc si2.submit() pe2 = self.create_payment_entry(posting_date=transaction_date, amount=rate) - pe2.cost_center = self.sub_cc.name + pe2.cost_center = self.sub_cc pe2 = pe2.save().submit() je2 = self.create_journal_entry(self.bank, self.debit_to, 100, transaction_date) - je2.accounts[0].cost_center = self.sub_cc.name - je2.accounts[1].cost_center = self.sub_cc.name + je2.accounts[0].cost_center = self.sub_cc + je2.accounts[1].cost_center = self.sub_cc je2.accounts[1].party_type = "Customer" je2.accounts[1].party = self.customer je2 = je2.save().submit() pr = self.create_payment_reconciliation() - pr.cost_center = self.main_cc.name + pr.cost_center = self.main_cc pr.get_unreconciled_entries() @@ -1219,7 +1094,7 @@ class TestPaymentReconciliation(ERPNextTestSuite): self.assertCountEqual(payment_vouchers, [pe1.name, je1.name]) # Change cost center - pr.cost_center = self.sub_cc.name + pr.cost_center = self.sub_cc pr.get_unreconciled_entries() @@ -1242,7 +1117,7 @@ class TestPaymentReconciliation(ERPNextTestSuite): qty=1, rate=1, posting_date=nowdate(), do_not_save=True, do_not_submit=True ) si.customer = self.customer - si.currency = "EUR" + si.currency = "USD" si.conversion_rate = 85 si.debit_to = self.debit_to si.save().submit() @@ -1624,7 +1499,7 @@ class TestPaymentReconciliation(ERPNextTestSuite): "credit": 0.0, }, { - "account": "Cash - _PR", + "account": "Cash - _TC", "voucher_no": pe.name, "against_voucher": None, "debit": 0.0, @@ -1782,10 +1657,10 @@ class TestPaymentReconciliation(ERPNextTestSuite): ) amount = 200.0 je = self.create_journal_entry(self.debit_to, self.bank, amount) - je.accounts[0].cost_center = self.main_cc.name + je.accounts[0].cost_center = self.main_cc je.accounts[0].party_type = "Customer" je.accounts[0].party = self.customer - je.accounts[1].cost_center = self.main_cc.name + je.accounts[1].cost_center = self.main_cc je = je.save().submit() pe = self.create_payment_entry(amount=amount).save().submit() @@ -1879,7 +1754,7 @@ class TestPaymentReconciliation(ERPNextTestSuite): self.assertEqual(pl_entries, expected_ple) def test_advance_payment_reconciliation_against_journal_for_supplier(self): - self.supplier = make_supplier("_Test Supplier") + self.supplier = "_Test Supplier" frappe.db.set_value( "Company", self.company, @@ -1891,10 +1766,10 @@ class TestPaymentReconciliation(ERPNextTestSuite): ) amount = 200.0 je = self.create_journal_entry(self.creditors, self.bank, -amount) - je.accounts[0].cost_center = self.main_cc.name + je.accounts[0].cost_center = self.main_cc je.accounts[0].party_type = "Supplier" je.accounts[0].party = self.supplier - je.accounts[1].cost_center = self.main_cc.name + je.accounts[1].cost_center = self.main_cc je = je.save().submit() pe = self.create_payment_entry(amount=amount) @@ -2062,13 +1937,13 @@ class TestPaymentReconciliation(ERPNextTestSuite): }, { "account": self.bank, - "cost_center": self.sub_cc.name, + "cost_center": self.sub_cc, "credit_in_account_currency": 0, "debit_in_account_currency": 500, }, { "account": self.cash, - "cost_center": self.sub_cc.name, + "cost_center": self.sub_cc, "credit_in_account_currency": 0, "debit_in_account_currency": 500, }, @@ -2337,7 +2212,7 @@ class TestPaymentReconciliation(ERPNextTestSuite): def test_foreign_currency_reverse_payment_entry_against_payment_entry_for_customer(self): transaction_date = nowdate() - customer = self.customer3 + customer = self.customer_usd amount = 1000 exchange_rate_at_payment = 100 exchange_rate_at_reverse_payment = 95 @@ -2345,8 +2220,8 @@ class TestPaymentReconciliation(ERPNextTestSuite): # Receive amount from customer - 1,00,000 pe = self.create_payment_entry(amount=amount, posting_date=transaction_date, customer=customer) pe.payment_type = "Receive" - pe.paid_from = self.debtors_eur - pe.paid_from_account_currency = "EUR" + pe.paid_from = self.debtors_usd + pe.paid_from_account_currency = "USD" pe.source_exchange_rate = exchange_rate_at_payment pe.paid_amount = amount pe.received_amount = exchange_rate_at_payment * amount @@ -2364,14 +2239,14 @@ class TestPaymentReconciliation(ERPNextTestSuite): reverse_pe.target_exchange_rate = exchange_rate_at_reverse_payment reverse_pe.paid_amount = exchange_rate_at_reverse_payment * amount reverse_pe.received_amount = amount - reverse_pe.paid_to = self.debtors_eur - reverse_pe.paid_to_account_currency = "EUR" + reverse_pe.paid_to = self.debtors_usd + reverse_pe.paid_to_account_currency = "USD" reverse_pe.save().submit() # Reconcile payments pr = self.create_payment_reconciliation() pr.party = customer - pr.receivable_payable_account = self.debtors_eur + pr.receivable_payable_account = self.debtors_usd pr.get_unreconciled_entries() invoices = [invoice.as_dict() for invoice in pr.invoices] payments = [payment.as_dict() for payment in pr.payments] @@ -2436,13 +2311,13 @@ class TestPaymentReconciliation(ERPNextTestSuite): def test_foreign_currency_reverse_journal_entry_against_journal_entry_for_customer(self): transaction_date = nowdate() - customer = self.customer3 + customer = self.customer_usd amount = 1000 exchange_rate_at_payment = 95 exchange_rate_at_reverse_payment = 100 # Receive amount from customer - 95,000 - je1 = self.create_journal_entry(self.cash, self.debtors_eur, amount, transaction_date) + je1 = self.create_journal_entry(self.cash, self.debtors_usd, amount, transaction_date) je1.multi_currency = 1 je1.accounts[0].exchange_rate = 1 je1.accounts[0].debit_in_account_currency = exchange_rate_at_payment * amount @@ -2456,7 +2331,7 @@ class TestPaymentReconciliation(ERPNextTestSuite): je1.submit() # Pay amount to customer - 1,00,000 - je2 = self.create_journal_entry(self.debtors_eur, self.cash, amount, transaction_date) + je2 = self.create_journal_entry(self.debtors_usd, self.cash, amount, transaction_date) je2.multi_currency = 1 je2.accounts[0].party_type = "Customer" je2.accounts[0].party = customer @@ -2472,7 +2347,7 @@ class TestPaymentReconciliation(ERPNextTestSuite): # Reconcile payments pr = self.create_payment_reconciliation() pr.party = customer - pr.receivable_payable_account = self.debtors_eur + pr.receivable_payable_account = self.debtors_usd pr.get_unreconciled_entries() self.assertEqual(len(pr.invoices), 1) @@ -2540,34 +2415,6 @@ class TestPaymentReconciliation(ERPNextTestSuite): pr.reconcile() -def make_customer(customer_name, currency=None): - if not frappe.db.exists("Customer", customer_name): - customer = frappe.new_doc("Customer") - customer.customer_name = customer_name - customer.type = "Individual" - - if currency: - customer.default_currency = currency - customer.save() - return customer.name - else: - return customer_name - - -def make_supplier(supplier_name, currency=None): - if not frappe.db.exists("Supplier", supplier_name): - supplier = frappe.new_doc("Supplier") - supplier.supplier_name = supplier_name - supplier.type = "Individual" - - if currency: - supplier.default_currency = currency - supplier.save() - return supplier.name - else: - return supplier_name - - def create_fiscal_year(company, year_start_date, year_end_date): fy_docname = frappe.db.exists( "Fiscal Year", {"year_start_date": year_start_date, "year_end_date": year_end_date} diff --git a/erpnext/tests/utils.py b/erpnext/tests/utils.py index 297caa15b98..70f12142fac 100644 --- a/erpnext/tests/utils.py +++ b/erpnext/tests/utils.py @@ -900,6 +900,13 @@ class BootStrapTestData: "default_currency": "USD", "accounts": [{"company": "_Test Company", "account": "_Test Payable USD - _TC"}], }, + { + "doctype": "Supplier", + "supplier_name": "_Test Another Supplier USD", + "supplier_group": "_Test Supplier Group", + "default_currency": "USD", + "accounts": [{"company": "_Test Company", "account": "_Test Payable USD - _TC"}], + }, { "doctype": "Supplier", "supplier_name": "_Test Supplier With Tax Category", @@ -951,6 +958,13 @@ class BootStrapTestData: "is_group": 0, "parent_cost_center": "_Test Company - _TC", }, + { + "company": "_Test Company", + "cost_center_name": "Sub", + "doctype": "Cost Center", + "is_group": 0, + "parent_cost_center": "_Test Company - _TC", + }, ] self.make_records(["cost_center_name", "company"], records) From 87b798b93639bffbe4509793e139461e8a7a7fa2 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Mon, 11 May 2026 21:23:34 +0530 Subject: [PATCH 14/19] fix: validate variant values (backport #54831) (#54839) fix: validate variant values (#54831) (cherry picked from commit 95705f18aad8359a5ae791b4d08b162334d7de00) Co-authored-by: Mihir Kandoi --- .../doctype/sales_order/test_sales_order.py | 2 +- erpnext/stock/doctype/item/item.py | 38 +++++++++++++++++++ 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/erpnext/selling/doctype/sales_order/test_sales_order.py b/erpnext/selling/doctype/sales_order/test_sales_order.py index 6a8abea1543..d74f849facd 100644 --- a/erpnext/selling/doctype/sales_order/test_sales_order.py +++ b/erpnext/selling/doctype/sales_order/test_sales_order.py @@ -1619,7 +1619,7 @@ class TestSalesOrder(ERPNextTestSuite): make_item( # template item "Test-WO-Tshirt", { - "has_variant": 1, + "has_variants": 1, "variant_based_on": "Item Attribute", "attributes": [{"attribute": "Test Colour"}], }, diff --git a/erpnext/stock/doctype/item/item.py b/erpnext/stock/doctype/item/item.py index 639d6a292ec..a2826be91f9 100644 --- a/erpnext/stock/doctype/item/item.py +++ b/erpnext/stock/doctype/item/item.py @@ -202,6 +202,7 @@ class Item(Document): self.validate_warehouse_for_reorder() self.update_bom_item_desc() + self.validate_variant() self.validate_has_variants() self.validate_attributes_in_variants() self.validate_stock_exists_for_template_item() @@ -811,6 +812,43 @@ class Item(Document): enqueue_after_commit=True, ) + def validate_variant(self): + if self.variant_of: + has_variants, based_on = frappe.get_value( + "Item", self.variant_of, ["has_variants", "variant_based_on"] + ) + if not has_variants: + frappe.throw(_("Item {0} is not a template item.").format(frappe.bold(self.variant_of))) + + if based_on == "Item Attribute": + for d in self.attributes: + if not frappe.db.exists( + "Item Variant Attribute", {"attribute": d.attribute, "parent": self.variant_of} + ): + frappe.throw( + _("Attribute {0} is not valid for the selected template.").format( + frappe.bold(d.attribute) + ) + ) + + numeric_values, disabled = frappe.get_value( + "Item Variant Attribute", + {"attribute": d.attribute, "parent": self.variant_of}, + ["numeric_values", "disabled"], + ) + + if disabled: + frappe.throw(_("Attribute {0} is disabled.").format(frappe.bold(d.attribute))) + + if not numeric_values and not frappe.db.exists( + "Item Attribute Value", {"parent": d.attribute, "attribute_value": d.attribute_value} + ): + frappe.throw( + _("Attribute Value {0} is not valid for the selected attribute {1}.").format( + frappe.bold(d.attribute_value), frappe.bold(d.attribute) + ) + ) + def validate_has_variants(self): if self.is_new(): return From 7086db1e1cb46f364c14986f1b20413e4962c859 Mon Sep 17 00:00:00 2001 From: nishkagosalia Date: Mon, 11 May 2026 16:24:57 +0530 Subject: [PATCH 15/19] fix: rename supplier wise stock analytics report (cherry picked from commit 85206e02788e8e0ed883916281868cc1e423e176) --- erpnext/buying/workspace/buying/buying.json | 4 ++-- .../__init__.py | 0 .../item_wise_consumption.js} | 2 +- .../item_wise_consumption.json} | 4 ++-- .../item_wise_consumption.py} | 0 erpnext/stock/report/test_reports.py | 2 +- erpnext/workspace_sidebar/buying.json | 4 ++-- 7 files changed, 8 insertions(+), 8 deletions(-) rename erpnext/stock/report/{supplier_wise_sales_analytics => item_wise_consumption}/__init__.py (100%) rename erpnext/stock/report/{supplier_wise_sales_analytics/supplier_wise_sales_analytics.js => item_wise_consumption/item_wise_consumption.js} (90%) rename erpnext/stock/report/{supplier_wise_sales_analytics/supplier_wise_sales_analytics.json => item_wise_consumption/item_wise_consumption.json} (83%) rename erpnext/stock/report/{supplier_wise_sales_analytics/supplier_wise_sales_analytics.py => item_wise_consumption/item_wise_consumption.py} (100%) diff --git a/erpnext/buying/workspace/buying/buying.json b/erpnext/buying/workspace/buying/buying.json index 4f356256f11..6bc20901467 100644 --- a/erpnext/buying/workspace/buying/buying.json +++ b/erpnext/buying/workspace/buying/buying.json @@ -345,9 +345,9 @@ "dependencies": "", "hidden": 0, "is_query_report": 1, - "label": "Supplier-Wise Sales Analytics", + "label": "Item Wise Consumption", "link_count": 0, - "link_to": "Supplier-Wise Sales Analytics", + "link_to": "Item Wise Consumption", "link_type": "Report", "onboard": 1, "type": "Link" diff --git a/erpnext/stock/report/supplier_wise_sales_analytics/__init__.py b/erpnext/stock/report/item_wise_consumption/__init__.py similarity index 100% rename from erpnext/stock/report/supplier_wise_sales_analytics/__init__.py rename to erpnext/stock/report/item_wise_consumption/__init__.py diff --git a/erpnext/stock/report/supplier_wise_sales_analytics/supplier_wise_sales_analytics.js b/erpnext/stock/report/item_wise_consumption/item_wise_consumption.js similarity index 90% rename from erpnext/stock/report/supplier_wise_sales_analytics/supplier_wise_sales_analytics.js rename to erpnext/stock/report/item_wise_consumption/item_wise_consumption.js index 92a01c4ce20..729a5eecd25 100644 --- a/erpnext/stock/report/supplier_wise_sales_analytics/supplier_wise_sales_analytics.js +++ b/erpnext/stock/report/item_wise_consumption/item_wise_consumption.js @@ -1,7 +1,7 @@ // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors // License: GNU General Public License v3. See license.txt -frappe.query_reports["Supplier-Wise Sales Analytics"] = { +frappe.query_reports["Item Wise Consumption"] = { filters: [ { fieldname: "supplier", diff --git a/erpnext/stock/report/supplier_wise_sales_analytics/supplier_wise_sales_analytics.json b/erpnext/stock/report/item_wise_consumption/item_wise_consumption.json similarity index 83% rename from erpnext/stock/report/supplier_wise_sales_analytics/supplier_wise_sales_analytics.json rename to erpnext/stock/report/item_wise_consumption/item_wise_consumption.json index 98fc2199738..1f6ebf2c6a8 100644 --- a/erpnext/stock/report/supplier_wise_sales_analytics/supplier_wise_sales_analytics.json +++ b/erpnext/stock/report/item_wise_consumption/item_wise_consumption.json @@ -10,10 +10,10 @@ "modified": "2017-02-24 20:13:38.914651", "modified_by": "Administrator", "module": "Stock", - "name": "Supplier-Wise Sales Analytics", + "name": "Item Wise Consumption", "owner": "Administrator", "ref_doctype": "Stock Ledger Entry", - "report_name": "Supplier-Wise Sales Analytics", + "report_name": "Item Wise Consumption", "report_type": "Script Report", "roles": [ { diff --git a/erpnext/stock/report/supplier_wise_sales_analytics/supplier_wise_sales_analytics.py b/erpnext/stock/report/item_wise_consumption/item_wise_consumption.py similarity index 100% rename from erpnext/stock/report/supplier_wise_sales_analytics/supplier_wise_sales_analytics.py rename to erpnext/stock/report/item_wise_consumption/item_wise_consumption.py diff --git a/erpnext/stock/report/test_reports.py b/erpnext/stock/report/test_reports.py index 5f8aa9a32ea..7564c8bb433 100644 --- a/erpnext/stock/report/test_reports.py +++ b/erpnext/stock/report/test_reports.py @@ -63,7 +63,7 @@ REPORT_FILTER_TEST_CASES: list[tuple[ReportName, ReportFilters]] = [ ("Incorrect Stock Value Report", {"company": "_Test Company with perpetual inventory"}), ("Incorrect Serial No Valuation", {}), ("Incorrect Balance Qty After Transaction", {}), - ("Supplier-Wise Sales Analytics", {}), + ("Item Wise Consumption", {}), ("Item Prices", {"items": "Enabled Items only"}), ("Delayed Item Report", {"based_on": "Sales Invoice"}), ("Delayed Item Report", {"based_on": "Delivery Note"}), diff --git a/erpnext/workspace_sidebar/buying.json b/erpnext/workspace_sidebar/buying.json index 0aeec49948f..5382090613e 100644 --- a/erpnext/workspace_sidebar/buying.json +++ b/erpnext/workspace_sidebar/buying.json @@ -328,8 +328,8 @@ "collapsible": 1, "indent": 0, "keep_closed": 0, - "label": "Supplier-Wise Sales Analytics", - "link_to": "Supplier-Wise Sales Analytics", + "label": "Item Wise Consumption", + "link_to": "Item Wise Consumption", "link_type": "Report", "show_arrow": 0, "type": "Link" From 3dbadfadd5e273f11019daacc605acc49a848b71 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 12 May 2026 09:46:45 +0000 Subject: [PATCH 16/19] fix: raw material should not have target warehouse in manufacture entry (backport #54849) (#54861) fix: raw material should not have target warehouse in manufacture entry (#54849) (cherry picked from commit b5527cf328d47613f7484104405d1c1a6a481873) Co-authored-by: Mihir Kandoi --- .../stock/doctype/stock_entry/stock_entry.py | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.py b/erpnext/stock/doctype/stock_entry/stock_entry.py index b06c0013e9d..d8fa53210da 100644 --- a/erpnext/stock/doctype/stock_entry/stock_entry.py +++ b/erpnext/stock/doctype/stock_entry/stock_entry.py @@ -243,7 +243,6 @@ class StockEntry(StockController, SubcontractingInwardController): self.set_transfer_qty() self.validate_uom_is_integer("uom", "qty") self.validate_uom_is_integer("stock_uom", "transfer_qty") - self.validate_warehouse() self.validate_warehouse_of_sabb() self.validate_work_order() self.validate_source_stock_entry() @@ -259,6 +258,7 @@ class StockEntry(StockController, SubcontractingInwardController): else: self.validate_job_card_fg_item() + self.validate_warehouse() self.validate_with_material_request() self.validate_batch() self.validate_inspection() @@ -853,15 +853,14 @@ class StockEntry(StockController, SubcontractingInwardController): frappe.throw(_("Target warehouse is mandatory for row {0}").format(d.idx)) if self.purpose == "Manufacture": - if has_bom: - if d.is_finished_item or d.type or d.is_legacy_scrap_item: - d.s_warehouse = None - if not d.t_warehouse: - frappe.throw(_("Target warehouse is mandatory for row {0}").format(d.idx)) - else: - d.t_warehouse = None - if not d.s_warehouse: - frappe.throw(_("Source warehouse is mandatory for row {0}").format(d.idx)) + if d.is_finished_item or d.type or d.is_legacy_scrap_item: + d.s_warehouse = None + if not d.t_warehouse: + frappe.throw(_("Target warehouse is mandatory for row {0}").format(d.idx)) + else: + d.t_warehouse = None + if not d.s_warehouse: + frappe.throw(_("Source warehouse is mandatory for row {0}").format(d.idx)) if self.purpose == "Disassemble": if has_bom: From b962a1a0cd9ccd040c81d03f015b4cc71d26b99e Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 12 May 2026 10:13:49 +0000 Subject: [PATCH 17/19] fix(task): update depends_on for closing date and review date #54850 (backport #54852) (#54863) fix(task): update depends_on for closing date and review date #54850 (#54852) (cherry picked from commit 3532c1cc69a73511bc3a2092960e36bdc5becc8b) Co-authored-by: Jaypal Lakum <96212547+jp-the-dev@users.noreply.github.com> --- erpnext/projects/doctype/task/task.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/erpnext/projects/doctype/task/task.json b/erpnext/projects/doctype/task/task.json index 1cf8aeee8a8..c41f203fdbf 100644 --- a/erpnext/projects/doctype/task/task.json +++ b/erpnext/projects/doctype/task/task.json @@ -305,7 +305,7 @@ "label": "Additional Info" }, { - "depends_on": "eval:doc.status == \"Closed\" || doc.status == \"Pending Review\"", + "depends_on": "eval:doc.status == \"Completed\" || doc.status == \"Pending Review\"", "fieldname": "review_date", "fieldtype": "Date", "label": "Review Date", @@ -313,7 +313,7 @@ "oldfieldtype": "Date" }, { - "depends_on": "eval:doc.status == \"Closed\"", + "depends_on": "eval:doc.status == \"Completed\"", "fieldname": "closing_date", "fieldtype": "Date", "label": "Closing Date", From 98de025a09f215c3d9c0d3fe633d03e6de0a095a Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 12 May 2026 16:31:21 +0000 Subject: [PATCH 18/19] fix: added permission validation for `deactivate_sales_person` (backport #54884) (#54886) * fix: added permission validation for `deactivate_sales_person` (#54884) (cherry picked from commit 9134db9cd3d1779f08247e8c99dc1edf8efd5734) # Conflicts: # erpnext/setup/doctype/employee/employee.py * chore: resolved conflict --------- Co-authored-by: diptanilsaha --- erpnext/setup/doctype/employee/employee.py | 1 + 1 file changed, 1 insertion(+) diff --git a/erpnext/setup/doctype/employee/employee.py b/erpnext/setup/doctype/employee/employee.py index 81324fb89ba..d73ce511360 100755 --- a/erpnext/setup/doctype/employee/employee.py +++ b/erpnext/setup/doctype/employee/employee.py @@ -417,6 +417,7 @@ def is_holiday(employee, date=None, raise_exception=True, only_non_weekly=False, @frappe.whitelist() def deactivate_sales_person(status=None, employee=None): + frappe.has_permission("Employee", doc=employee, ptype="write", throw=True) if status == "Left": sales_person = frappe.db.get_value("Sales Person", {"Employee": employee}) if sales_person: From 8f0310859d314324f52d7883be35cff0c7da5d8b Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 12 May 2026 16:46:05 +0000 Subject: [PATCH 19/19] feat: Philippines chart of account (backport #53918) (#54888) feat: Added Philippines chart of account json file (#53918) * feat: Added philipinnes chart of account json file * feat: made changes as per review comments and corrected indentation * feat: made changes as per review comments * feat: made changes as per review comments to resolve the issues * fix: fixed changes as per review comments * fix: fixed changes as per review comments on bank group account --------- (cherry picked from commit 5560f6c2704193710f0fcdc76a48b54cddd8f928) Signed-off-by: Soham-ambibuzz Signed-off-by: soham7117 Co-authored-by: Soham-ambibuzz Co-authored-by: soham7117 --- .../verified/philippines.json | 840 ++++++++++++++++++ 1 file changed, 840 insertions(+) create mode 100644 erpnext/accounts/doctype/account/chart_of_accounts/verified/philippines.json diff --git a/erpnext/accounts/doctype/account/chart_of_accounts/verified/philippines.json b/erpnext/accounts/doctype/account/chart_of_accounts/verified/philippines.json new file mode 100644 index 00000000000..ea3977711a7 --- /dev/null +++ b/erpnext/accounts/doctype/account/chart_of_accounts/verified/philippines.json @@ -0,0 +1,840 @@ +{ + "name": "Philippines", + "country": "Philippines", + "tree": { + "Asset": { + "account_number": "1000", + "is_group": 1, + "root_type": "Asset", + "Current Assets": { + "account_number": "1001", + "is_group": 1, + "root_type": "Asset", + "Cash": { + "account_number": "1100", + "is_group": 1, + "root_type": "Asset", + "account_type": "Cash", + "Cash on Hand": { + "account_number": "1101", + "is_group": 0, + "root_type": "Asset", + "account_type": "Cash" + }, + "Petty Cash Fund": { + "account_number": "1200", + "is_group": 1, + "root_type": "Asset", + "account_type": "Cash", + "Petty Cash Fund": { + "account_number": "1201", + "is_group": 0, + "root_type": "Asset", + "account_type": "Cash" + } + } + }, + "Bank Accounts": { + "account_number": "1102", + "is_group": 1, + "root_type": "Asset", + "account_type": "Bank" + }, + "Advances to Officers & Employees": { + "account_number": "1290", + "is_group": 1, + "root_type": "Asset", + "Advances to Officers & Employees": { + "account_number": "1291", + "is_group": 0, + "root_type": "Asset" + } + }, + "Accounts Receivable Trade": { + "account_number": "1300", + "is_group": 1, + "root_type": "Asset", + "Accounts Receivable - Trade": { + "account_number": "1301", + "is_group": 0, + "root_type": "Asset", + "account_type": "Receivable" + } + }, + "Accounts Receivable - Affiliates": { + "account_number": "1310", + "is_group": 1, + "root_type": "Asset", + "Due from Company": { + "account_number": "1311", + "is_group": 0, + "root_type": "Asset" + } + }, + "Accounts Receivable - Others": { + "account_number": "1400", + "is_group": 1, + "root_type": "Asset", + "Accounts Receivable - Others": { + "account_number": "1401", + "is_group": 0, + "root_type": "Asset" + } + }, + "Parts, Materials and Supplies": { + "account_number": "1500", + "is_group": 1, + "root_type": "Asset", + "Parts, Materials and Supplies": { + "account_number": "1501", + "is_group": 0, + "root_type": "Asset" + }, + "Raw Materials - Demo": { + "account_number": "1502", + "is_group": 0, + "root_type": "Asset" + } + }, + "Project in Progress": { + "account_number": "1510", + "is_group": 1, + "root_type": "Asset", + "Project in Progress": { + "account_number": "1511", + "is_group": 0, + "root_type": "Asset" + }, + "Factory Overhead Variance": { + "account_number": "1512", + "is_group": 0, + "root_type": "Asset" + } + }, + "Finished Goods": { + "account_number": "1520", + "is_group": 1, + "root_type": "Asset", + "Finished Goods Inventory": { + "account_number": "1531", + "is_group": 0, + "root_type": "Asset", + "account_type": "Stock" + }, + "Inventory in Transit": { + "account_number": "1532", + "is_group": 0, + "root_type": "Asset", + "account_type": "Stock Adjustment" + } + }, + "Prepayments": { + "account_number": "1600", + "is_group": 1, + "root_type": "Asset", + "Prepaid Insurance & Bonds": { + "account_number": "1601", + "is_group": 0, + "root_type": "Asset" + }, + "Prepaid Rent": { + "account_number": "1602", + "is_group": 0, + "root_type": "Asset" + } + }, + "VAT Input Tax": { + "account_number": "1610", + "is_group": 1, + "root_type": "Asset", + "VAT Input Tax - Goods": { + "account_number": "1611", + "is_group": 0, + "root_type": "Asset", + "account_type": "Tax" + } + } + }, + "Non - Current Assets": { + "account_number": "1002", + "is_group": 1, + "root_type": "Asset", + "Property, Plants And Equipments": { + "account_number": "1700", + "is_group": 1, + "root_type": "Asset", + "Land": { + "account_number": "1701", + "is_group": 0, + "root_type": "Asset", + "account_type": "Fixed Asset" + }, + "Buildings & Improvements": { + "account_number": "1702", + "is_group": 0, + "root_type": "Asset", + "account_type": "Fixed Asset" + }, + "Delivery & Trans Equipment": { + "account_number": "1703", + "is_group": 0, + "root_type": "Asset", + "account_type": "Fixed Asset" + }, + "Furniture & Fixtures": { + "account_number": "1704", + "is_group": 0, + "root_type": "Asset", + "account_type": "Fixed Asset" + }, + "Machinery & Equipment": { + "account_number": "1705", + "is_group": 0, + "root_type": "Asset", + "account_type": "Fixed Asset" + } + }, + "Accum Depr. - Property, Plants and Equipment": { + "account_number": "1800", + "is_group": 1, + "root_type": "Asset", + "Accumulated Dep Bdgs & Improv": { + "account_number": "1801", + "is_group": 0, + "root_type": "Asset", + "account_type": "Accumulated Depreciation" + }, + "Accumulated Dep Delivery & Trans": { + "account_number": "1802", + "is_group": 0, + "root_type": "Asset", + "account_type": "Accumulated Depreciation" + }, + "Accumulated Dep Furniture & Fixture": { + "account_number": "1803", + "is_group": 0, + "root_type": "Asset", + "account_type": "Accumulated Depreciation" + }, + "Accumulated Depreciation - Machinery & Equipment": { + "account_number": "1804", + "is_group": 0, + "root_type": "Asset", + "account_type": "Accumulated Depreciation" + } + } + }, + "Other Assets": { + "account_number": "1003", + "is_group": 1, + "root_type": "Asset", + "Advances To Supplier": { + "account_number": "1900", + "is_group": 1, + "root_type": "Asset", + "Advances To Supplier": { + "account_number": "1901", + "is_group": 0, + "root_type": "Asset" + } + }, + "Miscellaneous Deposits": { + "account_number": "1910", + "is_group": 1, + "root_type": "Asset", + "Miscellaneous Deposits": { + "account_number": "1911", + "is_group": 0, + "root_type": "Asset" + } + }, + "Retirement Fund": { + "account_number": "1920", + "is_group": 1, + "root_type": "Asset", + "Retirement Fund": { + "account_number": "1921", + "is_group": 0, + "root_type": "Asset" + } + }, + "Investment": { + "account_number": "1930", + "is_group": 1, + "root_type": "Asset", + "Investment": { + "account_number": "1931", + "is_group": 0, + "root_type": "Asset" + } + }, + "System Development": { + "account_number": "1940", + "is_group": 1, + "root_type": "Asset", + "System Development": { + "account_number": "1941", + "is_group": 0, + "root_type": "Asset" + } + } + } + }, + "Liability": { + "account_number": "2000", + "is_group": 1, + "root_type": "Liability", + "Current Liabilities": { + "account_number": "2001", + "is_group": 1, + "root_type": "Liability", + "Accounts Payable Trade": { + "account_number": "2100", + "is_group": 1, + "root_type": "Liability", + "Accounts Payable - Trade": { + "account_number": "2101", + "is_group": 0, + "root_type": "Liability", + "account_type": "Payable" + } + }, + "Accounts Payable Others": { + "account_number": "2110", + "is_group": 1, + "root_type": "Liability", + "Accounts Payable - Payroll": { + "account_number": "2111", + "is_group": 0, + "root_type": "Liability" + } + }, + "VAT Output Tax": { + "account_number": "2200", + "is_group": 1, + "root_type": "Liability", + "VAT Output Tax": { + "account_number": "2201", + "is_group": 0, + "root_type": "Liability", + "account_type": "Tax" + } + }, + "Withholding Taxes Payable Wages": { + "account_number": "2210", + "is_group": 1, + "root_type": "Liability", + "Withholding Taxes Payable Wages": { + "account_number": "2211", + "is_group": 0, + "root_type": "Liability", + "account_type": "Tax" + } + }, + "Withholding Taxes Payable Expanded": { + "account_number": "2220", + "is_group": 1, + "root_type": "Liability", + "Withholding Taxes Payable Expanded": { + "account_number": "2221", + "is_group": 0, + "root_type": "Liability", + "account_type": "Tax" + } + }, + "Accruals And Other Current Payables": { + "account_number": "2300", + "is_group": 1, + "root_type": "Liability", + "Stock Received But Not Billed": { + "account_number": "2301", + "is_group": 0, + "root_type": "Liability", + "account_type": "Stock Received But Not Billed" + } + }, + "Payable to Government and Other Institutions": { + "account_number": "2400", + "is_group": 1, + "root_type": "Liability", + "SSS Premium Payable": { + "account_number": "2401", + "is_group": 0, + "root_type": "Liability" + }, + "SSS Salary Loan Payable": { + "account_number": "2402", + "is_group": 0, + "root_type": "Liability" + }, + "PhilHealth Premium": { + "account_number": "2403", + "is_group": 0, + "root_type": "Liability" + }, + "Pag-ibig Loan Payable": { + "account_number": "2404", + "is_group": 0, + "root_type": "Liability" + }, + "Coop Loans": { + "account_number": "2405", + "is_group": 0, + "root_type": "Liability" + }, + "Coop Contributions": { + "account_number": "2406", + "is_group": 0, + "root_type": "Liability" + }, + "Canteen": { + "account_number": "2407", + "is_group": 0, + "root_type": "Liability" + }, + "AUB Loan Payable": { + "account_number": "2408", + "is_group": 0, + "root_type": "Liability" + }, + "HSBC Loan Payable": { + "account_number": "2409", + "is_group": 0, + "root_type": "Liability" + } + }, + "Customer Deposits": { + "account_number": "2500", + "is_group": 0, + "root_type": "Liability", + "account_type": "Payable" + } + }, + "Non Current Liabilities": { + "account_number": "2002", + "is_group": 1, + "root_type": "Liability", + "Due To Associated Company": { + "account_number": "2600", + "is_group": 1, + "root_type": "Liability", + "Due To Associated Company": { + "account_number": "2601", + "is_group": 0, + "root_type": "Liability" + } + }, + "Deferred Income": { + "account_number": "2700", + "is_group": 1, + "root_type": "Liability", + "Deferred Income": { + "account_number": "2701", + "is_group": 0, + "root_type": "Liability" + } + }, + "Notes Payable": { + "account_number": "2800", + "is_group": 1, + "root_type": "Liability", + "Notes Payable": { + "account_number": "2801", + "is_group": 0, + "root_type": "Liability" + } + }, + "Dividends Payable": { + "account_number": "2900", + "is_group": 0, + "root_type": "Liability" + } + } + }, + "Equity": { + "account_number": "3000", + "is_group": 1, + "root_type": "Equity", + "STOCKHOLDER'S EQUITY": { + "account_number": "3001", + "is_group": 1, + "root_type": "Equity", + "Capital Stocks": { + "account_number": "3100", + "is_group": 1, + "root_type": "Equity", + "Capital Stocks": { + "account_number": "3101", + "is_group": 0, + "root_type": "Equity" + } + }, + "Subscription Receivable": { + "account_number": "3200", + "is_group": 1, + "root_type": "Equity", + "Subscription Receivable": { + "account_number": "3201", + "is_group": 0, + "root_type": "Equity" + } + }, + "Retained Earnings": { + "account_number": "3300", + "is_group": 1, + "root_type": "Equity", + "Retained Earnings": { + "account_number": "3301", + "is_group": 0, + "root_type": "Equity" + } + }, + "Current Year (Profit/Loss)": { + "account_number": "3400", + "is_group": 0, + "root_type": "Equity" + }, + "Drawings": { + "account_number": "3500", + "is_group": 1, + "root_type": "Equity", + "Drawings": { + "account_number": "3501", + "is_group": 0, + "root_type": "Equity" + } + } + } + }, + "Income": { + "account_number": "4000", + "is_group": 1, + "root_type": "Income", + "Gross Sales": { + "account_number": "4100", + "is_group": 1, + "root_type": "Income", + "Sales": { + "account_number": "4101", + "is_group": 0, + "root_type": "Income" + } + }, + "Sales Adjustment": { + "account_number": "4200", + "is_group": 1, + "root_type": "Income", + "Sales Return And Allowance": { + "account_number": "4201", + "is_group": 0, + "root_type": "Income" + } + }, + "Sales Discount": { + "account_number": "4300", + "is_group": 1, + "root_type": "Income", + "Sales Discount": { + "account_number": "4301", + "is_group": 0, + "root_type": "Income" + } + }, + "Other Income": { + "account_number": "6000", + "is_group": 1, + "root_type": "Income", + "Interest Income Bank": { + "account_number": "6010", + "is_group": 1, + "root_type": "Income", + "Interest Income Bank": { + "account_number": "6011", + "is_group": 0, + "root_type": "Income" + } + }, + "Dividend Income": { + "account_number": "6020", + "is_group": 1, + "root_type": "Income", + "Dividend Income": { + "account_number": "6021", + "is_group": 0, + "root_type": "Income" + } + } + } + }, + "Expense": { + "account_number": "5000", + "is_group": 1, + "root_type": "Expense", + "Operating Expenses": { + "account_number": "5100", + "is_group": 1, + "root_type": "Expense", + "Salaries, Wages": { + "account_number": "5101", + "is_group": 0, + "root_type": "Expense" + }, + "13th Month Pay & Bonus": { + "account_number": "5102", + "is_group": 0, + "root_type": "Expense" + }, + "Overtime & Night Diff": { + "account_number": "5103", + "is_group": 0, + "root_type": "Expense" + }, + "Incentive/Performance Bonus": { + "account_number": "5104", + "is_group": 0, + "root_type": "Expense" + }, + "Employees Benefits": { + "account_number": "5105", + "is_group": 0, + "root_type": "Expense" + }, + "Advertising & Promotions": { + "account_number": "5106", + "is_group": 0, + "root_type": "Expense" + }, + "Amortization of Leasehold Improvement": { + "account_number": "5107", + "is_group": 0, + "root_type": "Expense" + }, + "Amortization of Pre-Operating": { + "account_number": "5108", + "is_group": 0, + "root_type": "Expense" + }, + "Amortization of System Development": { + "account_number": "5109", + "is_group": 0, + "root_type": "Expense" + }, + "Audit & Legal Fee": { + "account_number": "5110", + "is_group": 0, + "root_type": "Expense" + }, + "Bad Debts Expenses": { + "account_number": "5111", + "is_group": 0, + "root_type": "Expense" + }, + "Client Service & Maintenance": { + "account_number": "5112", + "is_group": 0, + "root_type": "Expense" + }, + "Commission Expenses": { + "account_number": "5113", + "is_group": 0, + "root_type": "Expense" + }, + "Communications": { + "account_number": "5114", + "is_group": 0, + "root_type": "Expense" + }, + "Contractual Services": { + "account_number": "5115", + "is_group": 0, + "root_type": "Expense" + }, + "Depreciation Expenses": { + "account_number": "5116", + "is_group": 0, + "root_type": "Expense", + "account_type": "Depreciation" + }, + "Donation & Contribution": { + "account_number": "5117", + "is_group": 0, + "root_type": "Expense" + }, + "Dues & Subscription": { + "account_number": "5118", + "is_group": 0, + "root_type": "Expense" + }, + "Employee Med/Dental/Hosp Expenses": { + "account_number": "5119", + "is_group": 0, + "root_type": "Expense" + }, + "Employee Uniforms": { + "account_number": "5120", + "is_group": 0, + "root_type": "Expense" + }, + "Equipage": { + "account_number": "5121", + "is_group": 0, + "root_type": "Expense" + }, + "Expenses for Reclassification": { + "account_number": "5122", + "is_group": 0, + "root_type": "Expense" + }, + "Gas & Oil": { + "account_number": "5123", + "is_group": 0, + "root_type": "Expense" + }, + "Insurance Expenses": { + "account_number": "5124", + "is_group": 0, + "root_type": "Expense" + }, + "Light & Water": { + "account_number": "5125", + "is_group": 0, + "root_type": "Expense" + }, + "Local/Overseas Travel": { + "account_number": "5126", + "is_group": 0, + "root_type": "Expense" + }, + "Meals & Transportation Expenses": { + "account_number": "5127", + "is_group": 0, + "root_type": "Expense" + }, + "Meeting & Conferences": { + "account_number": "5128", + "is_group": 0, + "root_type": "Expense" + }, + "Miscellaneous Expenses": { + "account_number": "5129", + "is_group": 0, + "root_type": "Expense" + }, + "Mockup Expenses": { + "account_number": "5130", + "is_group": 0, + "root_type": "Expense" + }, + "Obsolescence Expenses": { + "account_number": "5131", + "is_group": 0, + "root_type": "Expense" + }, + "Other Support Cost": { + "account_number": "5132", + "is_group": 0, + "root_type": "Expense" + }, + "Pag-ibig Contribution": { + "account_number": "5133", + "is_group": 0, + "root_type": "Expense" + }, + "Performance Bonds": { + "account_number": "5134", + "is_group": 0, + "root_type": "Expense" + }, + "Pre Employment Expenses": { + "account_number": "5135", + "is_group": 0, + "root_type": "Expense" + }, + "Professional Fees": { + "account_number": "5136", + "is_group": 0, + "root_type": "Expense" + }, + "Recruitment & Employment": { + "account_number": "5137", + "is_group": 0, + "root_type": "Expense" + }, + "Rent Expenses": { + "account_number": "5138", + "is_group": 0, + "root_type": "Expense" + }, + "Rent Expenses Others": { + "account_number": "5139", + "is_group": 0, + "root_type": "Expense" + }, + "Repairs & Maintenance": { + "account_number": "5140", + "is_group": 0, + "root_type": "Expense" + }, + "Representation Expenses": { + "account_number": "5141", + "is_group": 0, + "root_type": "Expense" + }, + "Research & Development": { + "account_number": "5142", + "is_group": 0, + "root_type": "Expense" + }, + "Security Expenses": { + "account_number": "5143", + "is_group": 0, + "root_type": "Expense" + }, + "Shared Services Fee": { + "account_number": "5144", + "is_group": 0, + "root_type": "Expense" + }, + "SSS/Medicare/EC Contributions": { + "account_number": "5145", + "is_group": 0, + "root_type": "Expense" + }, + "Stationery & Supplies": { + "account_number": "5146", + "is_group": 0, + "root_type": "Expense" + }, + "Taxes & Licenses": { + "account_number": "5147", + "is_group": 0, + "root_type": "Expense", + "account_type": "Tax" + }, + "Training & Seminar": { + "account_number": "5148", + "is_group": 0, + "root_type": "Expense" + } + }, + "Stock Adjustment": { + "account_number": "5200", + "is_group": 0, + "root_type": "Expense", + "account_type": "Stock Adjustment" + }, + "Round Off": { + "account_number": "5300", + "is_group": 0, + "root_type": "Expense", + "account_type": "Round Off" + }, + "Expenses Included In Valuation": { + "account_number": "5400", + "is_group": 0, + "root_type": "Expense", + "account_type": "Expenses Included In Valuation" + } + } + } +} \ No newline at end of file