Merge branch 'rfq_supplier_pull' into develop
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 6847a98..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,6 +134,42 @@
}
})
}, __("Get items from"));
+
+ // 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 Items from Material Requests'},
+ ]
+ });
+
+ // 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();
+ if(v) {
+ $(btn).set_working();
+
+ erpnext.utils.map_current_doc({
+ 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",
+ docstatus: 1,
+ status: ["!=", "Stopped"],
+ per_ordered: ["<", 99.99],
+ company: cur_frm.doc.company
+ }
+ });
+ $(btn).done_working();
+ 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 3ff45f5..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,7 +6,7 @@
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
@@ -244,3 +244,49 @@
args = doc.get('suppliers')[cint(supplier_idx) - 1]
doc.update_supplier_part_no(args)
return doc
+
+@frappe.whitelist()
+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)
+
+ 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"]
+ ]
+ }
+ }, target_doc)
+
+ return target_doc
+
\ No newline at end of file