From cd13a28417a141553a49f206f50f2eb4cca5c823 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Tue, 14 Nov 2017 17:13:19 +0530 Subject: [PATCH] Get items from quotation in sales invoice --- .../doctype/sales_invoice/sales_invoice.js | 7 +- .../selling/doctype/quotation/quotation.py | 85 +++++++++---------- 2 files changed, 44 insertions(+), 48 deletions(-) diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.js b/erpnext/accounts/doctype/sales_invoice/sales_invoice.js index b0566f1f30..ccaae49670 100644 --- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.js +++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.js @@ -95,8 +95,9 @@ erpnext.accounts.SalesInvoiceController = erpnext.selling.SellingController.exte // Show buttons only when pos view is active if (cint(doc.docstatus==0) && cur_frm.page.current_view_name!=="pos" && !doc.is_return) { - cur_frm.cscript.sales_order_btn(); - cur_frm.cscript.delivery_note_btn(); + this.frm.cscript.sales_order_btn(); + this.frm.cscript.delivery_note_btn(); + this.frm.cscript.quotation_btn(); } this.set_default_print_format(); @@ -163,7 +164,7 @@ erpnext.accounts.SalesInvoiceController = erpnext.selling.SellingController.exte this.$quotation_btn = this.frm.add_custom_button(__('Quotation'), function() { erpnext.utils.map_current_doc({ - method: "erpnext.selling.doctype.quotation.quotation.make_quotation", + method: "erpnext.selling.doctype.quotation.quotation.make_sales_invoice", source_doctype: "Quotation", target: me.frm, setters: { diff --git a/erpnext/selling/doctype/quotation/quotation.py b/erpnext/selling/doctype/quotation/quotation.py index c240c653ea..6d9c170aef 100644 --- a/erpnext/selling/doctype/quotation/quotation.py +++ b/erpnext/selling/doctype/quotation/quotation.py @@ -169,51 +169,46 @@ def _make_sales_order(source_name, target_doc=None, ignore_permissions=False): return doclist @frappe.whitelist() - def make_quotation(source_name, target_doc=None): - return _make_quotation(source_name, target_doc) - - def _make_quotation(source_name, target_doc=None, ignore_permissions=False): - customer = _make_customer(source_name, ignore_permissions) - - def set_missing_values(source, target): - if customer: - target.customer = customer.name - target.customer_name = customer.customer_name - target.ignore_pricing_rule = 1 - target.flags.ignore_permissions = ignore_permissions - target.run_method("set_missing_values") - target.run_method("calculate_taxes_and_totals") - - def update_item(obj, target, source_parent): - target.stock_qty = flt(obj.qty) * flt(obj.conversion_factor) - - doclist = get_mapped_doc("Quotation", source_name, { - "Quotation": { - "doctype": "Sales Invoice", - "validation": { - "docstatus": ["=", 1] - } - }, - "Quotation Item": { - "doctype": "Sales Invoice Item", - "field_map": { - "parent": "prevdoc_docname" - }, - "postprocess": update_item - }, - "Sales Taxes and Charges": { - "doctype": "Sales Taxes and Charges", - "add_if_empty": True - }, - "Sales Team": { - "doctype": "Sales Team", - "add_if_empty": True - } - }, target_doc, set_missing_values, ignore_permissions=ignore_permissions) - - # postprocess: fetch shipping address, set missing values - - return doclist +def make_sales_invoice(source_name, target_doc=None): + return _make_sales_invoice(source_name, target_doc) + +def _make_sales_invoice(source_name, target_doc=None, ignore_permissions=False): + customer = _make_customer(source_name, ignore_permissions) + + def set_missing_values(source, target): + if customer: + target.customer = customer.name + target.customer_name = customer.customer_name + target.ignore_pricing_rule = 1 + target.flags.ignore_permissions = ignore_permissions + target.run_method("set_missing_values") + target.run_method("calculate_taxes_and_totals") + + def update_item(obj, target, source_parent): + target.stock_qty = flt(obj.qty) * flt(obj.conversion_factor) + + doclist = get_mapped_doc("Quotation", source_name, { + "Quotation": { + "doctype": "Sales Invoice", + "validation": { + "docstatus": ["=", 1] + } + }, + "Quotation Item": { + "doctype": "Sales Invoice Item", + "postprocess": update_item + }, + "Sales Taxes and Charges": { + "doctype": "Sales Taxes and Charges", + "add_if_empty": True + }, + "Sales Team": { + "doctype": "Sales Team", + "add_if_empty": True + } + }, target_doc, set_missing_values, ignore_permissions=ignore_permissions) + + return doclist def _make_customer(source_name, ignore_permissions=False): quotation = frappe.db.get_value("Quotation", source_name, ["lead", "order_type", "customer"])