mirror of
https://github.com/frappe/erpnext.git
synced 2026-05-26 08:24:47 +00:00
In RFQ, get items from material requests based on possible supplier
This commit is contained in:
@@ -134,21 +134,19 @@ erpnext.buying.RequestforQuotationController = erpnext.buying.BuyingController.e
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
}, __("Get items from"));
|
}, __("Get items from"));
|
||||||
cur_frm.add_custom_button(__('Possible Supplier'),
|
|
||||||
function() {
|
// 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
|
||||||
|
|
||||||
//Create a dialog window for the user to pick their supplier
|
|
||||||
var d = new frappe.ui.Dialog({
|
var d = new frappe.ui.Dialog({
|
||||||
title: __('Select Possible Supplier'),
|
title: __('Select Possible Supplier'),
|
||||||
fields: [
|
fields: [
|
||||||
{fieldname: 'supplier', fieldtype:'Link', options:'Supplier', label:'Supplier', reqd:1},
|
{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() {
|
d.fields_dict.ok_button.input.onclick = function() {
|
||||||
var btn = d.fields_dict.ok_button.input;
|
var btn = d.fields_dict.ok_button.input;
|
||||||
var v = d.get_values();
|
var v = d.get_values();
|
||||||
@@ -156,7 +154,7 @@ erpnext.buying.RequestforQuotationController = erpnext.buying.BuyingController.e
|
|||||||
$(btn).set_working();
|
$(btn).set_working();
|
||||||
|
|
||||||
erpnext.utils.map_current_doc({
|
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,
|
source_name: v.supplier,
|
||||||
get_query_filters: {
|
get_query_filters: {
|
||||||
material_request_type: "Purchase",
|
material_request_type: "Purchase",
|
||||||
@@ -167,10 +165,8 @@ erpnext.buying.RequestforQuotationController = erpnext.buying.BuyingController.e
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
$(btn).done_working();
|
$(btn).done_working();
|
||||||
//msgprint("Loaded Material Requests");
|
|
||||||
d.hide();
|
d.hide();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
d.show();
|
d.show();
|
||||||
}, __("Get items from"));
|
}, __("Get items from"));
|
||||||
|
|||||||
@@ -6,13 +6,13 @@ from __future__ import unicode_literals
|
|||||||
import frappe, json
|
import frappe, json
|
||||||
from frappe import _
|
from frappe import _
|
||||||
from frappe.model.mapper import get_mapped_doc
|
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.user import get_user_fullname
|
||||||
from frappe.utils.print_format import download_pdf
|
from frappe.utils.print_format import download_pdf
|
||||||
from frappe.desk.form.load import get_attachments
|
from frappe.desk.form.load import get_attachments
|
||||||
from frappe.core.doctype.communication.email import make
|
from frappe.core.doctype.communication.email import make
|
||||||
from erpnext.accounts.party import get_party_account_currency, get_party_details
|
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
|
from erpnext.controllers.buying_controller import BuyingController
|
||||||
|
|
||||||
STANDARD_USERS = ("Guest", "Administrator")
|
STANDARD_USERS = ("Guest", "Administrator")
|
||||||
@@ -246,42 +246,47 @@ def get_rfq_doc(doctype, name, supplier_idx):
|
|||||||
return doc
|
return doc
|
||||||
|
|
||||||
@frappe.whitelist()
|
@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
|
for mr, items in material_requests.items():
|
||||||
FROM `tabItem` as item,
|
target_doc = get_mapped_doc("Material Request", mr, {
|
||||||
`tabItem Supplier` as itemsup,
|
"Material Request": {
|
||||||
`tabMaterial Request Item` as matreqi,
|
"doctype": "Request for Quotation",
|
||||||
`tabMaterial Request` as matreq
|
"validation": {
|
||||||
WHERE itemsup.supplier = %(supplier)s
|
"docstatus": ["=", 1],
|
||||||
AND item.name = itemsup.parent
|
"material_request_type": ["=", "Purchase"],
|
||||||
AND matreqi.parent = matreq.name
|
}
|
||||||
AND matreqi.item_code = item.name
|
},
|
||||||
AND matreq.status != "Stopped"
|
"Material Request Item": {
|
||||||
AND matreq.material_request_type = "Purchase"
|
"doctype": "Request for Quotation Item",
|
||||||
AND matreq.docstatus = 1
|
"condition": lambda row: row.item_code in items,
|
||||||
AND matreq.per_ordered < 99.99""", \
|
"field_map": [
|
||||||
{"supplier": source_name},as_dict=1)
|
["name", "material_request_item"],
|
||||||
for d in item_list:
|
["parent", "material_request"],
|
||||||
frappe.msgprint(d.name + " - " + d.item_code)
|
["uom", "uom"]
|
||||||
target_doc = get_mapped_doc("Material Request", d.name, {
|
]
|
||||||
"Material Request": {
|
|
||||||
"doctype": "Request for Quotation",
|
|
||||||
"validation": {
|
|
||||||
"docstatus": ["=", 1],
|
|
||||||
"material_request_type": ["=", "Purchase"],
|
|
||||||
|
|
||||||
}
|
}
|
||||||
},
|
}, target_doc)
|
||||||
"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)
|
|
||||||
return target_doc
|
return target_doc
|
||||||
|
|
||||||
Reference in New Issue
Block a user