In RFQ, get items from material requests based on possible supplier
diff --git a/erpnext/buying/doctype/request_for_quotation/request_for_quotation.js b/erpnext/buying/doctype/request_for_quotation/request_for_quotation.js
index 2822733..113dbe0 100644
--- a/erpnext/buying/doctype/request_for_quotation/request_for_quotation.js
+++ b/erpnext/buying/doctype/request_for_quotation/request_for_quotation.js
@@ -134,21 +134,19 @@
}
})
}, __("Get items from"));
- cur_frm.add_custom_button(__('Possible Supplier'),
- function() {
-
-
-
- //Create a dialog window for the user to pick their supplier
+
+ // Get items from open Material Requests based on supplier
+ cur_frm.add_custom_button(__('Possible Supplier'), function() {
+ // Create a dialog window for the user to pick their supplier
var d = new frappe.ui.Dialog({
title: __('Select Possible Supplier'),
fields: [
{fieldname: 'supplier', fieldtype:'Link', options:'Supplier', label:'Supplier', reqd:1},
- {fieldname: 'ok_button', fieldtype:'Button', label:'Get Material Requests'},
+ {fieldname: 'ok_button', fieldtype:'Button', label:'Get Items from Material Requests'},
]
});
- //On the user clicking the ok button
+ // 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 = d.get_values();
@@ -156,7 +154,7 @@
$(btn).set_working();
erpnext.utils.map_current_doc({
- method: "erpnext.buying.doctype.request_for_quotation.request_for_quotation.get_matreq_from_possible_supplier",
+ method: "erpnext.buying.doctype.request_for_quotation.request_for_quotation.get_item_from_material_requests_based_on_supplier",
source_name: v.supplier,
get_query_filters: {
material_request_type: "Purchase",
@@ -167,10 +165,8 @@
}
});
$(btn).done_working();
- //msgprint("Loaded Material Requests");
d.hide();
}
-
}
d.show();
}, __("Get items from"));
diff --git a/erpnext/buying/doctype/request_for_quotation/request_for_quotation.py b/erpnext/buying/doctype/request_for_quotation/request_for_quotation.py
index 9592534..6300864 100644
--- a/erpnext/buying/doctype/request_for_quotation/request_for_quotation.py
+++ b/erpnext/buying/doctype/request_for_quotation/request_for_quotation.py
@@ -6,13 +6,13 @@
import frappe, json
from frappe import _
from frappe.model.mapper import get_mapped_doc
-from frappe.utils import get_url, random_string, cint
+from frappe.utils import get_url, cint
from frappe.utils.user import get_user_fullname
from frappe.utils.print_format import download_pdf
from frappe.desk.form.load import get_attachments
from frappe.core.doctype.communication.email import make
from erpnext.accounts.party import get_party_account_currency, get_party_details
-from erpnext.stock.doctype.material_request.material_request import set_missing_values, make_request_for_quotation
+from erpnext.stock.doctype.material_request.material_request import set_missing_values
from erpnext.controllers.buying_controller import BuyingController
STANDARD_USERS = ("Guest", "Administrator")
@@ -246,42 +246,47 @@
return doc
@frappe.whitelist()
-def get_matreq_from_possible_supplier(source_name, target_doc = None):
+def get_item_from_material_requests_based_on_supplier(source_name, target_doc = None):
+ mr_items_list = frappe.db.sql("""
+ SELECT
+ mr.name, mr_item.item_code
+ FROM
+ `tabItem` as item,
+ `tabItem Supplier` as item_supp,
+ `tabMaterial Request Item` as mr_item,
+ `tabMaterial Request` as mr
+ WHERE item_supp.supplier = %(supplier)s
+ AND item.name = item_supp.parent
+ AND mr_item.parent = mr.name
+ AND mr_item.item_code = item.name
+ AND mr.status != "Stopped"
+ AND mr.material_request_type = "Purchase"
+ AND mr.docstatus = 1
+ AND mr.per_ordered < 99.99""", {"supplier": source_name}, as_dict=1)
+
+ material_requests = {}
+ for d in mr_items_list:
+ material_requests.setdefault(d.name, []).append(d.item_code)
- item_list = frappe.db.sql("""SELECT matreq.name, matreqi.item_code
- FROM `tabItem` as item,
- `tabItem Supplier` as itemsup,
- `tabMaterial Request Item` as matreqi,
- `tabMaterial Request` as matreq
- WHERE itemsup.supplier = %(supplier)s
- AND item.name = itemsup.parent
- AND matreqi.parent = matreq.name
- AND matreqi.item_code = item.name
- AND matreq.status != "Stopped"
- AND matreq.material_request_type = "Purchase"
- AND matreq.docstatus = 1
- AND matreq.per_ordered < 99.99""", \
- {"supplier": source_name},as_dict=1)
- for d in item_list:
- frappe.msgprint(d.name + " - " + d.item_code)
- target_doc = get_mapped_doc("Material Request", d.name, {
- "Material Request": {
- "doctype": "Request for Quotation",
- "validation": {
- "docstatus": ["=", 1],
- "material_request_type": ["=", "Purchase"],
-
+ for mr, items in material_requests.items():
+ target_doc = get_mapped_doc("Material Request", mr, {
+ "Material Request": {
+ "doctype": "Request for Quotation",
+ "validation": {
+ "docstatus": ["=", 1],
+ "material_request_type": ["=", "Purchase"],
+ }
+ },
+ "Material Request Item": {
+ "doctype": "Request for Quotation Item",
+ "condition": lambda row: row.item_code in items,
+ "field_map": [
+ ["name", "material_request_item"],
+ ["parent", "material_request"],
+ ["uom", "uom"]
+ ]
}
- },
- "Material Request Item": {
- "doctype": "Request for Quotation Item",
- "condition": lambda doc: doc.item_code == d.item_code,
- "field_map": [
- ["name", "material_request_item"],
- ["parent", "material_request"],
- ["uom", "uom"]
- ]
- }
- }, target_doc)
+ }, target_doc)
+
return target_doc
\ No newline at end of file