From 53e19075d1c235b9cc14a47c2bbf726b2dcc7617 Mon Sep 17 00:00:00 2001 From: Makarand Bauskar Date: Thu, 28 Sep 2017 12:30:04 +0530 Subject: [PATCH] [hotfix] fixes and refactored Quoted Item Comparison report (#10954) --- .../quoted_item_comparison.js | 95 ++++++++++--------- .../quoted_item_comparison.py | 81 ++++++++-------- 2 files changed, 91 insertions(+), 85 deletions(-) diff --git a/erpnext/buying/report/quoted_item_comparison/quoted_item_comparison.js b/erpnext/buying/report/quoted_item_comparison/quoted_item_comparison.js index ad6ea7d7f8..0dc0ee6b7c 100644 --- a/erpnext/buying/report/quoted_item_comparison/quoted_item_comparison.js +++ b/erpnext/buying/report/quoted_item_comparison/quoted_item_comparison.js @@ -2,29 +2,29 @@ // For license information, please see license.txt frappe.query_reports["Quoted Item Comparison"] = { - "filters": [ + filters: [ { - "fieldname": "supplier_quotation", - "label": __("Supplier Quotation"), - "fieldtype": "Link", - "options": "Supplier Quotation", - "default": "", - "get_query": function () { + fieldtype: "Link", + label: __("Supplier Quotation"), + options: "Supplier Quotation", + fieldname: "supplier_quotation", + default: "", + get_query: () => { return { filters: { "docstatus": ["<", 2] } } } }, { - "fieldname": "item", - "label": __("Item"), - "fieldtype": "Link", - "options": "Item", - "default": "", - "reqd": 1, - "get_query": function () { - var quote = frappe.query_report_filters_by_name.supplier_quotation.get_value(); + reqd: 1, + default: "", + options: "Item", + label: __("Item"), + fieldname: "item", + fieldtype: "Link", + get_query: () => { + let quote = frappe.query_report_filters_by_name.supplier_quotation.get_value(); if (quote != "") { return { - query: "erpnext.buying.doctype.quality_inspection.quality_inspection.item_query", + query: "erpnext.stock.doctype.quality_inspection.quality_inspection.item_query", filters: { "from": "Supplier Quotation Item", "parent": quote @@ -39,47 +39,50 @@ frappe.query_reports["Quoted Item Comparison"] = { } } ], - onload: function (report) { + onload: (report) => { // Create a button for setting the default supplier - report.page.add_inner_button(__("Select Default Supplier"), function () { - - var reporter = frappe.query_reports["Quoted Item Comparison"]; + report.page.add_inner_button(__("Select Default Supplier"), () => { + let reporter = frappe.query_reports["Quoted Item Comparison"]; //Always make a new one so that the latest values get updated reporter.make_default_supplier_dialog(report); - report.dialog.show(); - setTimeout(function () { report.dialog.input.focus(); }, 1000); - }, 'Tools'); }, - "make_default_supplier_dialog": function (report) { + make_default_supplier_dialog: (report) => { // Get the name of the item to change - var filters = report.get_values(); - var item_code = filters.item; + if(!report.data) return; + + let filters = report.get_values(); + let item_code = filters.item; // Get a list of the suppliers (with a blank as well) for the user to select - var select_options = ""; - for (let supplier of report.data) { - select_options += supplier.supplier_name + '\n' - } + let suppliers = $.map(report.data, (row, idx)=>{ return row.supplier_name }) // Create a dialog window for the user to pick their supplier - var d = new frappe.ui.Dialog({ + let dialog = new frappe.ui.Dialog({ title: __('Select Default Supplier'), fields: [ - { fieldname: 'supplier', fieldtype: 'Select', label: 'Supplier', reqd: 1, options: select_options }, - { fieldname: 'ok_button', fieldtype: 'Button', label: 'Set Default Supplier' }, + { + reqd: 1, + label: 'Supplier', + fieldtype: 'Link', + options: 'Supplier', + fieldname: 'supplier', + get_query: () => { + return { + filters: { + 'name': ['in', suppliers] + } + } + } + } ] }); - // On the user clicking the ok button - d.fields_dict.ok_button.input.onclick = function () { - var btn = d.fields_dict.ok_button.input; - var v = report.dialog.get_values(); - if (v) { - $(btn).set_working(); - + dialog.set_primary_action("Set Default Supplier", () => { + let values = dialog.get_values(); + if(values) { // Set the default_supplier field of the appropriate Item to the selected supplier frappe.call({ method: "frappe.client.set_value", @@ -87,17 +90,17 @@ frappe.query_reports["Quoted Item Comparison"] = { doctype: "Item", name: item_code, fieldname: "default_supplier", - value: v.supplier, + value: values.supplier, }, - callback: function (r) { - $(btn).done_working(); + freeze: true, + callback: (r) => { frappe.msgprint("Successfully Set Supplier"); - report.dialog.hide(); + dialog.hide(); } }); } - } - report.dialog = d; + }); + dialog.show(); } } diff --git a/erpnext/buying/report/quoted_item_comparison/quoted_item_comparison.py b/erpnext/buying/report/quoted_item_comparison/quoted_item_comparison.py index 44e247e881..c399f3eee2 100644 --- a/erpnext/buying/report/quoted_item_comparison/quoted_item_comparison.py +++ b/erpnext/buying/report/quoted_item_comparison/quoted_item_comparison.py @@ -8,53 +8,55 @@ import frappe def execute(filters=None): qty_list = get_quantity_list(filters.item) - data = get_quote_list(filters.item, qty_list) - columns = get_columns(qty_list) - return columns, data def get_quote_list(item, qty_list): out = [] - if item: - price_data = [] - suppliers = [] - company_currency = frappe.db.get_default("currency") - float_precision = cint(frappe.db.get_default("float_precision")) or 2 - # Get the list of suppliers - for root in frappe.db.sql("""select parent, qty, rate from `tabSupplier Quotation Item` where item_code=%s and docstatus < 2""", item, as_dict=1): - for splr in frappe.db.sql("""SELECT supplier from `tabSupplier Quotation` where name =%s and docstatus < 2""", root.parent, as_dict=1): - ip = frappe._dict({ + if not item: + return [] + + suppliers = [] + price_data = [] + company_currency = frappe.db.get_default("currency") + float_precision = cint(frappe.db.get_default("float_precision")) or 2 + # Get the list of suppliers + for root in frappe.db.sql("""select parent, qty, rate from `tabSupplier Quotation Item` + where item_code=%s and docstatus < 2""", item, as_dict=1): + for splr in frappe.db.sql("""select supplier from `tabSupplier Quotation` + where name =%s and docstatus < 2""", root.parent, as_dict=1): + ip = frappe._dict({ "supplier": splr.supplier, "qty": root.qty, "parent": root.parent, - "rate": root.rate}) - price_data.append(ip) - suppliers.append(splr.supplier) - - #Add a row for each supplier - for root in set(suppliers): - supplier_currency = frappe.db.get_value("Supplier", root, "default_currency") - if supplier_currency: - exchange_rate = get_exchange_rate(supplier_currency, company_currency) - else: - exchange_rate = 1 - - row = frappe._dict({ - "supplier_name": root + "rate": root.rate }) - for col in qty_list: - # Get the quantity for this row - for item_price in price_data: - if str(item_price.qty) == col.key and item_price.supplier == root: - row[col.key] = flt(item_price.rate * exchange_rate, float_precision) - row[col.key + "QUOTE"] = item_price.parent - break - else: - row[col.key] = "" - row[col.key + "QUOTE"] = "" - out.append(row) + price_data.append(ip) + suppliers.append(splr.supplier) + + #Add a row for each supplier + for root in set(suppliers): + supplier_currency = frappe.db.get_value("Supplier", root, "default_currency") + if supplier_currency: + exchange_rate = get_exchange_rate(supplier_currency, company_currency) + else: + exchange_rate = 1 + + row = frappe._dict({ + "supplier_name": root + }) + for col in qty_list: + # Get the quantity for this row + for item_price in price_data: + if str(item_price.qty) == col.key and item_price.supplier == root: + row[col.key] = flt(item_price.rate * exchange_rate, float_precision) + row[col.key + "QUOTE"] = item_price.parent + break + else: + row[col.key] = "" + row[col.key + "QUOTE"] = "" + out.append(row) return out @@ -62,7 +64,8 @@ def get_quantity_list(item): out = [] if item: - qty_list = frappe.db.sql("""select distinct qty from `tabSupplier Quotation Item` where ifnull(item_code,'')=%s and docstatus < 2""", item, as_dict=1) + qty_list = frappe.db.sql("""select distinct qty from `tabSupplier Quotation Item` + where ifnull(item_code,'')=%s and docstatus < 2""", item, as_dict=1) qty_list.sort(reverse=False) for qt in qty_list: col = frappe._dict({ @@ -98,4 +101,4 @@ def get_columns(qty_list): "width": 90 }) - return columns + return columns \ No newline at end of file