From 08aaf22b2aef3cdac0c3a982c9fc7facb8e35bb5 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 15 Sep 2023 12:09:48 +0530 Subject: [PATCH 1/8] fix: precision issue and column name (backport #37073) (#37089) fix: precision issue and column name (#37073) (cherry picked from commit f2395a92971f48904e88afb929285def7ba221e4) Co-authored-by: rohitwaghchaure --- .../requested_items_to_order_and_receive.py | 43 +++++++++++++------ 1 file changed, 31 insertions(+), 12 deletions(-) diff --git a/erpnext/buying/report/requested_items_to_order_and_receive/requested_items_to_order_and_receive.py b/erpnext/buying/report/requested_items_to_order_and_receive/requested_items_to_order_and_receive.py index 21241e086036..07187352eb70 100644 --- a/erpnext/buying/report/requested_items_to_order_and_receive/requested_items_to_order_and_receive.py +++ b/erpnext/buying/report/requested_items_to_order_and_receive/requested_items_to_order_and_receive.py @@ -7,7 +7,7 @@ import frappe from frappe import _ from frappe.query_builder.functions import Coalesce, Sum -from frappe.utils import date_diff, flt, getdate +from frappe.utils import cint, date_diff, flt, getdate def execute(filters=None): @@ -47,8 +47,10 @@ def get_data(filters): mr.transaction_date.as_("date"), mr_item.schedule_date.as_("required_date"), mr_item.item_code.as_("item_code"), - Sum(Coalesce(mr_item.stock_qty, 0)).as_("qty"), - Coalesce(mr_item.stock_uom, "").as_("uom"), + Sum(Coalesce(mr_item.qty, 0)).as_("qty"), + Sum(Coalesce(mr_item.stock_qty, 0)).as_("stock_qty"), + Coalesce(mr_item.uom, "").as_("uom"), + Coalesce(mr_item.stock_uom, "").as_("stock_uom"), Sum(Coalesce(mr_item.ordered_qty, 0)).as_("ordered_qty"), Sum(Coalesce(mr_item.received_qty, 0)).as_("received_qty"), (Sum(Coalesce(mr_item.stock_qty, 0)) - Sum(Coalesce(mr_item.received_qty, 0))).as_( @@ -96,7 +98,7 @@ def get_conditions(filters, query, mr, mr_item): def update_qty_columns(row_to_update, data_row): - fields = ["qty", "ordered_qty", "received_qty", "qty_to_receive", "qty_to_order"] + fields = ["qty", "stock_qty", "ordered_qty", "received_qty", "qty_to_receive", "qty_to_order"] for field in fields: row_to_update[field] += flt(data_row[field]) @@ -104,16 +106,20 @@ def update_qty_columns(row_to_update, data_row): def prepare_data(data, filters): """Prepare consolidated Report data and Chart data""" material_request_map, item_qty_map = {}, {} + precision = cint(frappe.db.get_default("float_precision")) or 2 for row in data: # item wise map for charts if not row["item_code"] in item_qty_map: item_qty_map[row["item_code"]] = { - "qty": row["qty"], - "ordered_qty": row["ordered_qty"], - "received_qty": row["received_qty"], - "qty_to_receive": row["qty_to_receive"], - "qty_to_order": row["qty_to_order"], + "qty": flt(row["stock_qty"], precision), + "stock_qty": flt(row["stock_qty"], precision), + "stock_uom": row["stock_uom"], + "uom": row["uom"], + "ordered_qty": flt(row["ordered_qty"], precision), + "received_qty": flt(row["received_qty"], precision), + "qty_to_receive": flt(row["qty_to_receive"], precision), + "qty_to_order": flt(row["qty_to_order"], precision), } else: item_entry = item_qty_map[row["item_code"]] @@ -200,21 +206,34 @@ def get_columns(filters): {"label": _("Item Name"), "fieldname": "item_name", "fieldtype": "Data", "width": 100}, {"label": _("Description"), "fieldname": "description", "fieldtype": "Data", "width": 200}, { - "label": _("Stock UOM"), + "label": _("UOM"), "fieldname": "uom", "fieldtype": "Data", "width": 100, }, + { + "label": _("Stock UOM"), + "fieldname": "stock_uom", + "fieldtype": "Data", + "width": 100, + }, ] ) columns.extend( [ { - "label": _("Stock Qty"), + "label": _("Qty"), "fieldname": "qty", "fieldtype": "Float", - "width": 120, + "width": 140, + "convertible": "qty", + }, + { + "label": _("Qty in Stock UOM"), + "fieldname": "stock_qty", + "fieldtype": "Float", + "width": 140, "convertible": "qty", }, { From f2b0ac6868387611d9d6d00274fea6655aceb9c0 Mon Sep 17 00:00:00 2001 From: ruthra kumar Date: Fri, 15 Sep 2023 16:19:27 +0530 Subject: [PATCH 2/8] refactor: move `unreconcile` btn inside a drop down --- erpnext/public/js/utils/unreconcile.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/public/js/utils/unreconcile.js b/erpnext/public/js/utils/unreconcile.js index acc77a64b017..bbdd51d6e54a 100644 --- a/erpnext/public/js/utils/unreconcile.js +++ b/erpnext/public/js/utils/unreconcile.js @@ -19,7 +19,7 @@ erpnext.accounts.unreconcile_payments = { if (r.message) { frm.add_custom_button(__("Un-Reconcile"), function() { erpnext.accounts.unreconcile_payments.build_unreconcile_dialog(frm); - }); + }, __('Actions')); } } }); From 94ce43b0d5d131e31e6fc01ac06cfa748d73caed Mon Sep 17 00:00:00 2001 From: ruthra kumar Date: Fri, 15 Sep 2023 16:21:50 +0530 Subject: [PATCH 3/8] refactor: add `unreconcile` btn to purchase invoice --- erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js | 1 + 1 file changed, 1 insertion(+) diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js index efe97415a55f..c8c9ad1b3a91 100644 --- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js +++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js @@ -161,6 +161,7 @@ erpnext.accounts.PurchaseInvoice = class PurchaseInvoice extends erpnext.buying. } this.frm.set_df_property("tax_withholding_category", "hidden", doc.apply_tds ? 0 : 1); + erpnext.accounts.unreconcile_payments.add_unreconcile_btn(me.frm); } unblock_invoice() { From 61778d505804df007a04583b5e7710eb8878bd9a Mon Sep 17 00:00:00 2001 From: Ankush Menat Date: Fri, 15 Sep 2023 16:51:56 +0530 Subject: [PATCH 4/8] ci: restart bench before final migrate (#37104) Also remove few patches which are now handled automatically --- .github/workflows/patch.yml | 2 ++ erpnext/patches.txt | 3 --- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/workflows/patch.yml b/.github/workflows/patch.yml index a633414fb9ca..07b8de7a900d 100644 --- a/.github/workflows/patch.yml +++ b/.github/workflows/patch.yml @@ -139,9 +139,11 @@ jobs: git -C "apps/frappe" checkout -q -f "${GITHUB_BASE_REF:-${GITHUB_REF##*/}}" git -C "apps/erpnext" checkout -q -f "$GITHUB_SHA" + pgrep honcho | xargs kill rm -rf ~/frappe-bench/env bench -v setup env bench pip install -e ./apps/erpnext + bench start &>> ~/frappe-bench/bench_start.log & bench --site test_site migrate diff --git a/erpnext/patches.txt b/erpnext/patches.txt index 7a07f5679a77..d0ee2e4dc4ed 100644 --- a/erpnext/patches.txt +++ b/erpnext/patches.txt @@ -339,9 +339,6 @@ execute:frappe.defaults.clear_default("fiscal_year") erpnext.patches.v15_0.remove_exotel_integration erpnext.patches.v14_0.single_to_multi_dunning execute:frappe.db.set_single_value('Selling Settings', 'allow_negative_rates_for_items', 0) -execute:frappe.delete_doc('DocType', 'Twitter Settings', ignore_missing=True) -execute:frappe.delete_doc('DocType', 'LinkedIn Settings', ignore_missing=True) -execute:frappe.delete_doc('DocType', 'Social Media Post', ignore_missing=True) erpnext.patches.v15_0.correct_asset_value_if_je_with_workflow erpnext.patches.v15_0.delete_woocommerce_settings_doctype # below migration patch should always run last From 097b9892dca4d8c41dfbe17ffd812287692d424e Mon Sep 17 00:00:00 2001 From: ruthra kumar Date: Fri, 15 Sep 2023 17:54:20 +0530 Subject: [PATCH 5/8] fix: asset validation misfire on debit notes --- erpnext/controllers/buying_controller.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/erpnext/controllers/buying_controller.py b/erpnext/controllers/buying_controller.py index b1ce539bc3d3..c302ece59621 100644 --- a/erpnext/controllers/buying_controller.py +++ b/erpnext/controllers/buying_controller.py @@ -190,10 +190,13 @@ def validate_asset_return(self): purchase_doc_field = ( "purchase_receipt" if self.doctype == "Purchase Receipt" else "purchase_invoice" ) - not_cancelled_asset = [ - d.name - for d in frappe.db.get_all("Asset", {purchase_doc_field: self.return_against, "docstatus": 1}) - ] + not_cancelled_asset = [] + if self.return_against: + not_cancelled_asset = [ + d.name + for d in frappe.db.get_all("Asset", {purchase_doc_field: self.return_against, "docstatus": 1}) + ] + if self.is_return and len(not_cancelled_asset): frappe.throw( _( From 7045810bae40ba24241123ac28708db32a638f89 Mon Sep 17 00:00:00 2001 From: Ankush Menat Date: Fri, 15 Sep 2023 20:46:39 +0530 Subject: [PATCH 6/8] refactor: move clear data button to user action --- erpnext/public/js/utils/demo.js | 105 ++++++++------------------------ 1 file changed, 24 insertions(+), 81 deletions(-) diff --git a/erpnext/public/js/utils/demo.js b/erpnext/public/js/utils/demo.js index 3ebc5efcf136..ef83cf61d445 100644 --- a/erpnext/public/js/utils/demo.js +++ b/erpnext/public/js/utils/demo.js @@ -1,91 +1,34 @@ +frappe.provide("erpnext.demo"); + $(document).on("toolbar_setup", function () { if (frappe.boot.sysdefaults.demo_company) { - render_clear_demo_button(); + render_clear_demo_action(); } - - // for first load after setup. - frappe.realtime.on("demo_data_complete", () => { - render_clear_demo_button(); - }); }); -function render_clear_demo_button() { - let wait_for_onboaring_tours = setInterval(() => { - if ($("#driver-page-overlay").length || $("#show-dialog").length) { - return; - } - setup_clear_demo_button(); - clearInterval(wait_for_onboaring_tours); - }, 2000); -} - -function setup_clear_demo_button() { - let message_string = __( - "Demo data is present on the system, erase data before starting real usage." +function render_clear_demo_action() { + let demo_action = $( + ` + ${__("Clear Demo Data")} + ` ); - let $floatingBar = $(` -
-
-

- ${message_string} -

- - - - - - -
-
- `); - - $("footer").append($floatingBar); + demo_action.appendTo($("#toolbar-user")); +} - $("#clear-demo").on("click", function () { - frappe.confirm( - __("Are you sure you want to clear all demo data?"), - () => { - frappe.call({ - method: "erpnext.setup.demo.clear_demo_data", - freeze: true, - freeze_message: __("Clearing Demo Data..."), - callback: function (r) { - frappe.ui.toolbar.clear_cache(); - frappe.show_alert({ - message: __("Demo data cleared"), - indicator: "green", - }); - $("footer").remove($floatingBar); - }, +erpnext.demo.clear_demo = function () { + frappe.confirm(__("Are you sure you want to clear all demo data?"), () => { + frappe.call({ + method: "erpnext.setup.demo.clear_demo_data", + freeze: true, + freeze_message: __("Clearing Demo Data..."), + callback: function (r) { + frappe.ui.toolbar.clear_cache(); + frappe.show_alert({ + message: __("Demo data cleared"), + indicator: "green", }); - } - ); + }, + }); }); - - $("#dismiss-demo-banner").on("click", function () { - $floatingBar.remove(); - }); -} +}; From fc016680c9015e3d5089bac84868e7556f96d77a Mon Sep 17 00:00:00 2001 From: s-aga-r Date: Fri, 15 Sep 2023 21:45:43 +0530 Subject: [PATCH 7/8] fix: ignore user permissions for `Source Warehouse` in MR (#37102) fix: ignore user permissions for Source Warehouse in MR --- erpnext/stock/doctype/material_request/material_request.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/erpnext/stock/doctype/material_request/material_request.json b/erpnext/stock/doctype/material_request/material_request.json index ffec57ca1dfc..25c765bbced3 100644 --- a/erpnext/stock/doctype/material_request/material_request.json +++ b/erpnext/stock/doctype/material_request/material_request.json @@ -296,6 +296,7 @@ "depends_on": "eval:doc.material_request_type == 'Material Transfer'", "fieldname": "set_from_warehouse", "fieldtype": "Link", + "ignore_user_permissions": 1, "label": "Set Source Warehouse", "options": "Warehouse" }, @@ -356,7 +357,7 @@ "idx": 70, "is_submittable": 1, "links": [], - "modified": "2023-07-25 17:19:31.662662", + "modified": "2023-09-15 12:07:24.789471", "modified_by": "Administrator", "module": "Stock", "name": "Material Request", From 34bb64e41a572c83d1d00ba821f8673ebfc5eb18 Mon Sep 17 00:00:00 2001 From: HENRY Florian Date: Sat, 16 Sep 2023 12:29:09 +0200 Subject: [PATCH 8/8] fix(ux): move `get_route_options_for_new_doc` to `refresh` (#37096) fix: move `get_route_options_for_new_doc` to `refresh` --- .../doctype/asset_repair/asset_repair.js | 20 ++--- .../doctype/job_card/job_card.js | 22 +++--- erpnext/public/js/controllers/transaction.js | 41 +++++----- .../installation_note/installation_note.js | 16 ++-- .../selling/doctype/quotation/quotation.js | 10 +-- erpnext/stock/doctype/pick_list/pick_list.js | 22 +++--- .../stock/doctype/stock_entry/stock_entry.js | 19 ++--- .../subcontracting_receipt.js | 77 ++++++++++--------- 8 files changed, 117 insertions(+), 110 deletions(-) diff --git a/erpnext/assets/doctype/asset_repair/asset_repair.js b/erpnext/assets/doctype/asset_repair/asset_repair.js index dae993a28343..03afcb944292 100644 --- a/erpnext/assets/doctype/asset_repair/asset_repair.js +++ b/erpnext/assets/doctype/asset_repair/asset_repair.js @@ -40,16 +40,6 @@ frappe.ui.form.on('Asset Repair', { } } }); - - let sbb_field = frm.get_docfield('stock_items', 'serial_and_batch_bundle'); - if (sbb_field) { - sbb_field.get_route_options_for_new_doc = (row) => { - return { - 'item_code': row.doc.item_code, - 'voucher_type': frm.doc.doctype, - } - }; - } }, refresh: function(frm) { @@ -61,6 +51,16 @@ frappe.ui.form.on('Asset Repair', { frappe.set_route("query-report", "General Ledger"); }); } + + let sbb_field = frm.get_docfield('stock_items', 'serial_and_batch_bundle'); + if (sbb_field) { + sbb_field.get_route_options_for_new_doc = (row) => { + return { + 'item_code': row.doc.item_code, + 'voucher_type': frm.doc.doctype, + } + }; + } }, repair_status: (frm) => { diff --git a/erpnext/manufacturing/doctype/job_card/job_card.js b/erpnext/manufacturing/doctype/job_card/job_card.js index f1e60948130a..66212755b23d 100644 --- a/erpnext/manufacturing/doctype/job_card/job_card.js +++ b/erpnext/manufacturing/doctype/job_card/job_card.js @@ -23,17 +23,6 @@ frappe.ui.form.on('Job Card', { } }); - let sbb_field = frm.get_docfield('serial_and_batch_bundle'); - if (sbb_field) { - sbb_field.get_route_options_for_new_doc = () => { - return { - 'item_code': frm.doc.production_item, - 'warehouse': frm.doc.wip_warehouse, - 'voucher_type': frm.doc.doctype, - } - }; - } - frm.set_indicator_formatter('sub_operation', function(doc) { if (doc.status == "Pending") { @@ -124,6 +113,17 @@ frappe.ui.form.on('Job Card', { } }); } + + let sbb_field = frm.get_docfield('serial_and_batch_bundle'); + if (sbb_field) { + sbb_field.get_route_options_for_new_doc = () => { + return { + 'item_code': frm.doc.production_item, + 'warehouse': frm.doc.wip_warehouse, + 'voucher_type': frm.doc.doctype, + } + }; + } }, setup_quality_inspection: function(frm) { diff --git a/erpnext/public/js/controllers/transaction.js b/erpnext/public/js/controllers/transaction.js index 80d7b79c1ecb..975adc2acea9 100644 --- a/erpnext/public/js/controllers/transaction.js +++ b/erpnext/public/js/controllers/transaction.js @@ -134,15 +134,6 @@ erpnext.TransactionController = class TransactionController extends erpnext.taxe } } }); - - let sbb_field = this.frm.get_docfield('items', 'serial_and_batch_bundle'); - if (sbb_field) { - sbb_field.get_route_options_for_new_doc = (row) => { - return { - 'item_code': row.doc.item_code, - } - }; - } } if( @@ -207,15 +198,6 @@ erpnext.TransactionController = class TransactionController extends erpnext.taxe }); } - let batch_no_field = this.frm.get_docfield("items", "batch_no"); - if (batch_no_field) { - batch_no_field.get_route_options_for_new_doc = function(row) { - return { - "item": row.doc.item_code - } - }; - } - if (this.frm.fields_dict["items"].grid.get_field('blanket_order')) { this.frm.set_query("blanket_order", "items", function(doc, cdt, cdn) { var item = locals[cdt][cdn]; @@ -268,6 +250,28 @@ erpnext.TransactionController = class TransactionController extends erpnext.taxe } ]); } + + if(this.frm.fields_dict['items'].grid.get_field('serial_and_batch_bundle')) { + let sbb_field = this.frm.get_docfield('items', 'serial_and_batch_bundle'); + if (sbb_field) { + sbb_field.get_route_options_for_new_doc = (row) => { + return { + 'item_code': row.doc.item_code, + } + }; + } + } + + if(this.frm.fields_dict['items'].grid.get_field('batch_no')) { + let batch_no_field = this.frm.get_docfield('items', 'batch_no'); + if (batch_no_field) { + batch_no_field.get_route_options_for_new_doc = function(row) { + return { + 'item': row.doc.item_code + } + }; + } + } } is_return() { @@ -358,7 +362,6 @@ erpnext.TransactionController = class TransactionController extends erpnext.taxe } refresh() { - erpnext.toggle_naming_series(); erpnext.hide_company(); this.set_dynamic_labels(); diff --git a/erpnext/selling/doctype/installation_note/installation_note.js b/erpnext/selling/doctype/installation_note/installation_note.js index dd6f8a8104e2..8128c77f8d4d 100644 --- a/erpnext/selling/doctype/installation_note/installation_note.js +++ b/erpnext/selling/doctype/installation_note/installation_note.js @@ -18,6 +18,14 @@ frappe.ui.form.on('Installation Note', { } } }); + }, + onload: function(frm) { + if(!frm.doc.status) { + frm.set_value({ status:'Draft'}); + } + if(frm.doc.__islocal) { + frm.set_value({inst_date: frappe.datetime.get_today()}); + } let sbb_field = frm.get_docfield('items', 'serial_and_batch_bundle'); if (sbb_field) { @@ -29,14 +37,6 @@ frappe.ui.form.on('Installation Note', { }; } }, - onload: function(frm) { - if(!frm.doc.status) { - frm.set_value({ status:'Draft'}); - } - if(frm.doc.__islocal) { - frm.set_value({inst_date: frappe.datetime.get_today()}); - } - }, customer: function(frm) { erpnext.utils.get_party_details(frm); }, diff --git a/erpnext/selling/doctype/quotation/quotation.js b/erpnext/selling/doctype/quotation/quotation.js index d18f70ade6de..1bc8d6857e97 100644 --- a/erpnext/selling/doctype/quotation/quotation.js +++ b/erpnext/selling/doctype/quotation/quotation.js @@ -48,6 +48,11 @@ frappe.ui.form.on('Quotation', { } } }); + }, + + refresh: function(frm) { + frm.trigger("set_label"); + frm.trigger("set_dynamic_field_label"); let sbb_field = frm.get_docfield('packed_items', 'serial_and_batch_bundle'); if (sbb_field) { @@ -61,11 +66,6 @@ frappe.ui.form.on('Quotation', { } }, - refresh: function(frm) { - frm.trigger("set_label"); - frm.trigger("set_dynamic_field_label"); - }, - quotation_to: function(frm) { frm.trigger("set_label"); frm.trigger("toggle_reqd_lead_customer"); diff --git a/erpnext/stock/doctype/pick_list/pick_list.js b/erpnext/stock/doctype/pick_list/pick_list.js index 4eed285fdab4..ae05b80727f2 100644 --- a/erpnext/stock/doctype/pick_list/pick_list.js +++ b/erpnext/stock/doctype/pick_list/pick_list.js @@ -65,17 +65,6 @@ frappe.ui.form.on('Pick List', { } } }); - - let sbb_field = frm.get_docfield('locations', 'serial_and_batch_bundle'); - if (sbb_field) { - sbb_field.get_route_options_for_new_doc = (row) => { - return { - 'item_code': row.doc.item_code, - 'warehouse': row.doc.warehouse, - 'voucher_type': frm.doc.doctype, - } - }; - } }, set_item_locations:(frm, save) => { if (!(frm.doc.locations && frm.doc.locations.length)) { @@ -132,6 +121,17 @@ frappe.ui.form.on('Pick List', { } } } + + let sbb_field = frm.get_docfield('locations', 'serial_and_batch_bundle'); + if (sbb_field) { + sbb_field.get_route_options_for_new_doc = (row) => { + return { + 'item_code': row.doc.item_code, + 'warehouse': row.doc.warehouse, + 'voucher_type': frm.doc.doctype, + } + }; + } }, work_order: (frm) => { frappe.db.get_value('Work Order', diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.js b/erpnext/stock/doctype/stock_entry/stock_entry.js index 4fb8a10748eb..d37e8ee599b1 100644 --- a/erpnext/stock/doctype/stock_entry/stock_entry.js +++ b/erpnext/stock/doctype/stock_entry/stock_entry.js @@ -117,15 +117,6 @@ frappe.ui.form.on('Stock Entry', { } }); - let sbb_field = frm.get_docfield('items', 'serial_and_batch_bundle'); - if (sbb_field) { - sbb_field.get_route_options_for_new_doc = (row) => { - return { - 'item_code': row.doc.item_code, - 'voucher_type': frm.doc.doctype, - } - }; - } frm.add_fetch("bom_no", "inspection_required", "inspection_required"); erpnext.accounts.dimensions.setup_dimension_filters(frm, frm.doctype); @@ -362,6 +353,16 @@ frappe.ui.form.on('Stock Entry', { if(!check_should_not_attach_bom_items(frm.doc.bom_no)) { erpnext.accounts.dimensions.update_dimension(frm, frm.doctype); } + + let sbb_field = frm.get_docfield('items', 'serial_and_batch_bundle'); + if (sbb_field) { + sbb_field.get_route_options_for_new_doc = (row) => { + return { + 'item_code': row.doc.item_code, + 'voucher_type': frm.doc.doctype, + } + }; + } }, get_items_from_transit_entry: function(frm) { diff --git a/erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.js b/erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.js index 8ac22e6f1bf7..19a1c939c3ee 100644 --- a/erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.js +++ b/erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.js @@ -77,6 +77,7 @@ frappe.ui.form.on('Subcontracting Receipt', { } frm.trigger('setup_quality_inspection'); + frm.trigger('set_route_options_for_new_doc'); }, set_warehouse: (frm) => { @@ -87,6 +88,23 @@ frappe.ui.form.on('Subcontracting Receipt', { set_warehouse_in_children(frm.doc.items, 'rejected_warehouse', frm.doc.rejected_warehouse); }, + get_scrap_items: (frm) => { + frappe.call({ + doc: frm.doc, + method: 'get_scrap_items', + args: { + recalculate_rate: true + }, + freeze: true, + freeze_message: __('Getting Scrap Items'), + callback: (r) => { + if (!r.exc) { + frm.refresh(); + } + } + }); + }, + set_queries: (frm) => { frm.set_query('set_warehouse', () => { return { @@ -173,7 +191,28 @@ frappe.ui.form.on('Subcontracting Receipt', { } } }); + }, + + get_serial_and_batch_bundle_filters: (doc, cdt, cdn) => { + let row = locals[cdt][cdn]; + return { + filters: { + 'item_code': row.item_code, + 'voucher_type': doc.doctype, + 'voucher_no': ['in', [doc.name, '']], + 'is_cancelled': 0, + } + } + }, + + setup_quality_inspection: (frm) => { + if (!frm.is_new() && frm.doc.docstatus === 0 && !frm.doc.is_return) { + let transaction_controller = new erpnext.TransactionController({ frm: frm }); + transaction_controller.setup_quality_inspection(); + } + }, + set_route_options_for_new_doc: (frm) => { let batch_no_field = frm.get_docfield('items', 'batch_no'); if (batch_no_field) { batch_no_field.get_route_options_for_new_doc = (row) => { @@ -213,42 +252,6 @@ frappe.ui.form.on('Subcontracting Receipt', { } } }, - - get_serial_and_batch_bundle_filters: (doc, cdt, cdn) => { - let row = locals[cdt][cdn]; - return { - filters: { - 'item_code': row.item_code, - 'voucher_type': doc.doctype, - 'voucher_no': ['in', [doc.name, '']], - 'is_cancelled': 0, - } - } - }, - - setup_quality_inspection: (frm) => { - if (!frm.is_new() && frm.doc.docstatus === 0 && !frm.doc.is_return) { - let transaction_controller = new erpnext.TransactionController({ frm: frm }); - transaction_controller.setup_quality_inspection(); - } - }, - - get_scrap_items: (frm) => { - frappe.call({ - doc: frm.doc, - method: 'get_scrap_items', - args: { - recalculate_rate: true - }, - freeze: true, - freeze_message: __('Getting Scrap Items'), - callback: (r) => { - if (!r.exc) { - frm.refresh(); - } - } - }); - }, }); frappe.ui.form.on('Landed Cost Taxes and Charges', { @@ -303,4 +306,4 @@ let set_missing_values = (frm) => { if (!r.exc) frm.refresh(); }, }); -} \ No newline at end of file +}