From 8052103197112d2e1abe7ac35a831267ad9549b7 Mon Sep 17 00:00:00 2001 From: s-aga-r Date: Tue, 28 Nov 2023 16:28:54 +0530 Subject: [PATCH] feat: provision to create PR from SCR --- .../purchase_receipt/purchase_receipt.js | 14 ++++++ .../subcontracting_receipt.js | 47 +++++++++++-------- .../subcontracting_receipt.py | 46 +++++++++--------- .../subcontracting_receipt_dashboard.py | 2 +- 4 files changed, 68 insertions(+), 41 deletions(-) diff --git a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js index 8943066152..6c9d3392e3 100644 --- a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js +++ b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js @@ -122,6 +122,20 @@ frappe.ui.form.on("Purchase Receipt", { erpnext.accounts.dimensions.update_dimension(frm, frm.doctype); }, + subcontracting_receipt: (frm) => { + if (frm.doc.is_subcontracted === 1 && frm.doc.is_old_subcontracting_flow === 0 && frm.doc.subcontracting_receipt) { + frm.set_value('items', null); + + erpnext.utils.map_current_doc({ + method: 'erpnext.subcontracting.doctype.subcontracting_receipt.subcontracting_receipt.make_purchase_receipt', + source_name: frm.doc.subcontracting_receipt, + target_doc: frm, + freeze: true, + freeze_message: __('Mapping Purchase Receipt ...'), + }); + } + }, + toggle_display_account_head: function(frm) { var enabled = erpnext.is_perpetual_inventory_enabled(frm.doc.company) frm.fields_dict["items"].grid.set_column_disp(["cost_center"], enabled); diff --git a/erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.js b/erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.js index 5585a4a84b..762cdc96af 100644 --- a/erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.js +++ b/erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.js @@ -26,27 +26,36 @@ frappe.ui.form.on('Subcontracting Receipt', { refresh: (frm) => { if (frm.doc.docstatus === 1) { frm.add_custom_button(__('Stock Ledger'), () => { - frappe.route_options = { - voucher_no: frm.doc.name, - from_date: frm.doc.posting_date, - to_date: moment(frm.doc.modified).format('YYYY-MM-DD'), - company: frm.doc.company, - show_cancelled_entries: frm.doc.docstatus === 2 - } - frappe.set_route('query-report', 'Stock Ledger'); - }, __('View')); + frappe.route_options = { + voucher_no: frm.doc.name, + from_date: frm.doc.posting_date, + to_date: moment(frm.doc.modified).format('YYYY-MM-DD'), + company: frm.doc.company, + show_cancelled_entries: frm.doc.docstatus === 2 + } + frappe.set_route('query-report', 'Stock Ledger'); + }, __('View')); frm.add_custom_button(__('Accounting Ledger'), () => { - frappe.route_options = { - voucher_no: frm.doc.name, - from_date: frm.doc.posting_date, - to_date: moment(frm.doc.modified).format('YYYY-MM-DD'), - company: frm.doc.company, - group_by: 'Group by Voucher (Consolidated)', - show_cancelled_entries: frm.doc.docstatus === 2 - } - frappe.set_route('query-report', 'General Ledger'); - }, __('View')); + frappe.route_options = { + voucher_no: frm.doc.name, + from_date: frm.doc.posting_date, + to_date: moment(frm.doc.modified).format('YYYY-MM-DD'), + company: frm.doc.company, + group_by: 'Group by Voucher (Consolidated)', + show_cancelled_entries: frm.doc.docstatus === 2 + } + frappe.set_route('query-report', 'General Ledger'); + }, __('View')); + + frm.add_custom_button(__('Purchase Receipt'), () => { + frappe.model.open_mapped_doc({ + method: 'erpnext.subcontracting.doctype.subcontracting_receipt.subcontracting_receipt.make_purchase_receipt', + frm: frm, + freeze: true, + freeze_message: __('Creating Purchase Receipt ...') + }); + }, __('Create')); } if (!frm.doc.is_return && frm.doc.docstatus === 1 && frm.doc.per_returned < 100) { diff --git a/erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.py b/erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.py index b980dbd2a3..000078f241 100644 --- a/erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.py +++ b/erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.py @@ -542,18 +542,20 @@ def make_subcontract_return(source_name, target_doc=None): return make_return_doc("Subcontracting Receipt", source_name, target_doc) -def make_purchase_receipt(subcontracting_receipt, save=False, submit=False, notify=False): - if isinstance(subcontracting_receipt, str): - subcontracting_receipt = frappe.get_doc("Subcontracting Receipt", subcontracting_receipt) +@frappe.whitelist() +def make_purchase_receipt(source_name, target_doc=None, save=False, submit=False, notify=False): + if isinstance(source_name, str): + source_name = frappe.get_doc("Subcontracting Receipt", source_name) - if not subcontracting_receipt.is_return: - purchase_receipt = frappe.new_doc("Purchase Receipt") - purchase_receipt.is_subcontracted = 1 - purchase_receipt.is_old_subcontracting_flow = 0 + if not source_name.is_return: + if not target_doc: + target_doc = frappe.new_doc("Purchase Receipt") + target_doc.is_subcontracted = 1 + target_doc.is_old_subcontracting_flow = 0 - purchase_receipt = get_mapped_doc( + target_doc = get_mapped_doc( "Subcontracting Receipt", - subcontracting_receipt.name, + source_name.name, { "Subcontracting Receipt": { "doctype": "Purchase Receipt", @@ -566,12 +568,12 @@ def make_purchase_receipt(subcontracting_receipt, save=False, submit=False, noti "field_no_map": ["total_qty", "total"], }, }, - purchase_receipt, + target_doc, ignore_child_tables=True, ) po_items_details = {} - for item in subcontracting_receipt.items: + for item in source_name.items: if item.purchase_order and item.purchase_order_item: if item.purchase_order not in po_items_details: po_doc = frappe.get_doc("Purchase Order", item.purchase_order) @@ -592,31 +594,33 @@ def make_purchase_receipt(subcontracting_receipt, save=False, submit=False, noti "purchase_order_item": item.purchase_order_item, "subcontracting_receipt_item": item.name, } - purchase_receipt.append("items", item_row) + target_doc.append("items", item_row) - if not purchase_receipt.items: + if not target_doc.items: frappe.throw( _("Purchase Order Item reference is missing in Subcontracting Receipt {0}").format( - subcontracting_receipt.name + source_name.name ) ) - if (save or submit) and frappe.has_permission(purchase_receipt.doctype, "create"): - purchase_receipt.save() + target_doc.set_missing_values() - if submit and frappe.has_permission(purchase_receipt.doctype, "submit", purchase_receipt): + if (save or submit) and frappe.has_permission(target_doc.doctype, "create"): + target_doc.save() + + if submit and frappe.has_permission(target_doc.doctype, "submit", target_doc): try: - purchase_receipt.submit() + target_doc.submit() except Exception as e: - purchase_receipt.add_comment("Comment", _("Submit Action Failed") + "

" + str(e)) + target_doc.add_comment("Comment", _("Submit Action Failed") + "

" + str(e)) if notify: frappe.msgprint( _("Purchase Receipt {0} created.").format( - get_link_to_form(purchase_receipt.doctype, purchase_receipt.name) + get_link_to_form(target_doc.doctype, target_doc.name) ), indicator="green", alert=True, ) - return purchase_receipt + return target_doc diff --git a/erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt_dashboard.py b/erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt_dashboard.py index f6e1356ed9..4d15938e4b 100644 --- a/erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt_dashboard.py +++ b/erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt_dashboard.py @@ -3,7 +3,7 @@ from frappe import _ def get_data(): return { - "fieldname": "subcontracting_receipt_no", + "fieldname": "subcontracting_receipt", "non_standard_fieldnames": { "Subcontracting Receipt": "return_against", },