From 01e7224210aa0a9f17868a750da7970c86e27b06 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Fri, 29 May 2026 12:23:31 +0530 Subject: [PATCH] refactor(supplier_quotation): move mapping functions to mapper.py --- .../doctype/supplier_quotation/mapper.py | 110 ++++++++++++++++++ .../supplier_quotation/supplier_quotation.py | 108 +---------------- 2 files changed, 113 insertions(+), 105 deletions(-) create mode 100644 erpnext/buying/doctype/supplier_quotation/mapper.py diff --git a/erpnext/buying/doctype/supplier_quotation/mapper.py b/erpnext/buying/doctype/supplier_quotation/mapper.py new file mode 100644 index 00000000000..aebe5d94a4c --- /dev/null +++ b/erpnext/buying/doctype/supplier_quotation/mapper.py @@ -0,0 +1,110 @@ +# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors +# License: GNU General Public License v3. See license.txt + +import json + +import frappe +from frappe.model.document import Document +from frappe.model.mapper import get_mapped_doc +from frappe.utils import flt + + +@frappe.whitelist() +def make_purchase_order( + source_name: str, target_doc: str | Document | None = None, args: str | dict | None = None +): + if args is None: + args = {} + if isinstance(args, str): + args = json.loads(args) + + def set_missing_values(source, target): + target.run_method("set_missing_values") + target.run_method("get_schedule_dates") + target.run_method("calculate_taxes_and_totals") + + def update_item(obj, target, source_parent): + target.stock_qty = flt(obj.qty) * flt(obj.conversion_factor) + + def select_item(d): + filtered_items = args.get("filtered_children", []) + child_filter = d.name in filtered_items if filtered_items else True + return child_filter + + doclist = get_mapped_doc( + "Supplier Quotation", + source_name, + { + "Supplier Quotation": { + "doctype": "Purchase Order", + "field_no_map": ["transaction_date"], + "validation": { + "docstatus": ["=", 1], + }, + }, + "Supplier Quotation Item": { + "doctype": "Purchase Order Item", + "field_map": [ + ["name", "supplier_quotation_item"], + ["parent", "supplier_quotation"], + ["material_request", "material_request"], + ["material_request_item", "material_request_item"], + ["sales_order", "sales_order"], + ], + "postprocess": update_item, + "condition": select_item, + }, + "Purchase Taxes and Charges": { + "doctype": "Purchase Taxes and Charges", + }, + }, + target_doc, + set_missing_values, + ) + + return doclist + + +@frappe.whitelist() +def make_purchase_invoice(source_name: str, target_doc: str | Document | None = None): + doc = get_mapped_doc( + "Supplier Quotation", + source_name, + { + "Supplier Quotation": { + "doctype": "Purchase Invoice", + "validation": { + "docstatus": ["=", 1], + }, + }, + "Supplier Quotation Item": {"doctype": "Purchase Invoice Item"}, + "Purchase Taxes and Charges": {"doctype": "Purchase Taxes and Charges"}, + }, + target_doc, + ) + + return doc + + +@frappe.whitelist() +def make_quotation(source_name: str, target_doc: str | Document | None = None): + doclist = get_mapped_doc( + "Supplier Quotation", + source_name, + { + "Supplier Quotation": { + "doctype": "Quotation", + "field_map": { + "name": "supplier_quotation", + }, + }, + "Supplier Quotation Item": { + "doctype": "Quotation Item", + "condition": lambda doc: frappe.db.get_value("Item", doc.item_code, "is_sales_item") == 1, + "add_if_empty": True, + }, + }, + target_doc, + ) + + return doclist diff --git a/erpnext/buying/doctype/supplier_quotation/supplier_quotation.py b/erpnext/buying/doctype/supplier_quotation/supplier_quotation.py index c7fa6ecfc63..e267f6228c4 100644 --- a/erpnext/buying/doctype/supplier_quotation/supplier_quotation.py +++ b/erpnext/buying/doctype/supplier_quotation/supplier_quotation.py @@ -2,17 +2,16 @@ # License: GNU General Public License v3. See license.txt -import json - import frappe from frappe import _ from frappe.model.document import Document -from frappe.model.mapper import get_mapped_doc -from frappe.utils import flt, getdate, nowdate +from frappe.utils import getdate, nowdate from erpnext.buying.utils import validate_for_items from erpnext.controllers.buying_controller import BuyingController +from .mapper import make_purchase_invoice, make_purchase_order, make_quotation + form_grid_templates = {"items": "templates/form_grid/item_grid.html"} @@ -245,107 +244,6 @@ def get_list_context(context=None): return list_context -@frappe.whitelist() -def make_purchase_order( - source_name: str, target_doc: str | Document | None = None, args: str | dict | None = None -): - if args is None: - args = {} - if isinstance(args, str): - args = json.loads(args) - - def set_missing_values(source, target): - target.run_method("set_missing_values") - target.run_method("get_schedule_dates") - target.run_method("calculate_taxes_and_totals") - - def update_item(obj, target, source_parent): - target.stock_qty = flt(obj.qty) * flt(obj.conversion_factor) - - def select_item(d): - filtered_items = args.get("filtered_children", []) - child_filter = d.name in filtered_items if filtered_items else True - return child_filter - - doclist = get_mapped_doc( - "Supplier Quotation", - source_name, - { - "Supplier Quotation": { - "doctype": "Purchase Order", - "field_no_map": ["transaction_date"], - "validation": { - "docstatus": ["=", 1], - }, - }, - "Supplier Quotation Item": { - "doctype": "Purchase Order Item", - "field_map": [ - ["name", "supplier_quotation_item"], - ["parent", "supplier_quotation"], - ["material_request", "material_request"], - ["material_request_item", "material_request_item"], - ["sales_order", "sales_order"], - ], - "postprocess": update_item, - "condition": select_item, - }, - "Purchase Taxes and Charges": { - "doctype": "Purchase Taxes and Charges", - }, - }, - target_doc, - set_missing_values, - ) - - return doclist - - -@frappe.whitelist() -def make_purchase_invoice(source_name: str, target_doc: str | Document | None = None): - doc = get_mapped_doc( - "Supplier Quotation", - source_name, - { - "Supplier Quotation": { - "doctype": "Purchase Invoice", - "validation": { - "docstatus": ["=", 1], - }, - }, - "Supplier Quotation Item": {"doctype": "Purchase Invoice Item"}, - "Purchase Taxes and Charges": {"doctype": "Purchase Taxes and Charges"}, - }, - target_doc, - ) - - return doc - - -@frappe.whitelist() -def make_quotation(source_name: str, target_doc: str | Document | None = None): - doclist = get_mapped_doc( - "Supplier Quotation", - source_name, - { - "Supplier Quotation": { - "doctype": "Quotation", - "field_map": { - "name": "supplier_quotation", - }, - }, - "Supplier Quotation Item": { - "doctype": "Quotation Item", - "condition": lambda doc: frappe.db.get_value("Item", doc.item_code, "is_sales_item") == 1, - "add_if_empty": True, - }, - }, - target_doc, - ) - - return doclist - - def set_expired_status(): frappe.db.set_value( "Supplier Quotation",