Created button to link buying items to material requests
This commit is contained in:
		
							parent
							
								
									ac65e956e8
								
							
						
					
					
						commit
						28945438f2
					
				| @ -221,6 +221,44 @@ erpnext.buying.BuyingController = erpnext.TransactionController.extend({ | |||||||
| 
 | 
 | ||||||
| 	tc_name: function() { | 	tc_name: function() { | ||||||
| 		this.get_terms(); | 		this.get_terms(); | ||||||
|  | 	}, | ||||||
|  | 	link_requests: function() {  | ||||||
|  | 		 | ||||||
|  | 		cur_frm.add_custom_button(__("Link to Material Requests"), | ||||||
|  | 			function() { | ||||||
|  | 				my_items = [] | ||||||
|  | 				for (var i in cur_frm.doc.items) { | ||||||
|  | 					if(!cur_frm.doc.items[i].material_request){ | ||||||
|  | 						my_items.push(cur_frm.doc.items[i].item_code); | ||||||
|  | 					} | ||||||
|  | 					 | ||||||
|  | 				} | ||||||
|  | 				frappe.call({	 | ||||||
|  | 					method: "erpnext.buying.doctype.purchase_common.purchase_common.get_linked_material_requests",  | ||||||
|  | 					args:{ | ||||||
|  | 						items: my_items						 | ||||||
|  | 					},  | ||||||
|  | 					callback: function(r) {  | ||||||
|  | 						//frm.reload_doc();
 | ||||||
|  | 						console.log(r.message); | ||||||
|  | 						for (var i in cur_frm.doc.items) { | ||||||
|  | 							var qty = cur_frm.doc.items[i].qty; | ||||||
|  | 							(r.message || []).forEach(function(d) { | ||||||
|  | 								if (d[0].qty > 0 && qty > 0 && cur_frm.doc.items[i].item_code == d[0].item_code) | ||||||
|  | 								{ | ||||||
|  | 									cur_frm.doc.items[i].material_request = d[0].mr_name; | ||||||
|  | 									cur_frm.doc.items[i].material_request_item = d[0].mr_item; | ||||||
|  | 									my_qty = Math.min(qty, d[0].qty); | ||||||
|  | 									qty = qty - my_qty; | ||||||
|  | 									d[0].qty = d[0].qty  - my_qty; | ||||||
|  | 								} | ||||||
|  | 							 | ||||||
|  | 							}); | ||||||
|  | 						} | ||||||
|  | 					} | ||||||
|  | 				}); | ||||||
|  | 			}); | ||||||
|  | 
 | ||||||
| 	} | 	} | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -2,7 +2,7 @@ | |||||||
| # License: GNU General Public License v3. See license.txt | # License: GNU General Public License v3. See license.txt | ||||||
| 
 | 
 | ||||||
| from __future__ import unicode_literals | from __future__ import unicode_literals | ||||||
| import frappe | import frappe, json | ||||||
| from frappe.utils import flt, cstr, cint | from frappe.utils import flt, cstr, cint | ||||||
| from frappe import _ | from frappe import _ | ||||||
| 
 | 
 | ||||||
| @ -79,4 +79,28 @@ class PurchaseCommon(BuyingController): | |||||||
| 		status = frappe.db.get_value(doctype, docname, "status") | 		status = frappe.db.get_value(doctype, docname, "status") | ||||||
| 
 | 
 | ||||||
| 		if status == "Closed": | 		if status == "Closed": | ||||||
| 			frappe.throw(_("{0} {1} status is {2}").format(doctype, docname, status), frappe.InvalidStatusError) | 			frappe.throw(_("{0} {1} status is {2}").format(doctype, docname, status), frappe.InvalidStatusError) | ||||||
|  | 			 | ||||||
|  | @frappe.whitelist() | ||||||
|  | def get_linked_material_requests(items): | ||||||
|  | 	items = json.loads(items) | ||||||
|  | 	mr_list = [] | ||||||
|  | 	for item in items: | ||||||
|  | 		material_request = frappe.db.sql("""SELECT distinct mr.name AS mr_name,  | ||||||
|  | 				(mr_item.qty - mr_item.ordered_qty) AS qty,  | ||||||
|  | 				mr_item.item_code AS item_code, | ||||||
|  | 				mr_item.name AS mr_item  | ||||||
|  | 			FROM `tabMaterial Request` mr, `tabMaterial Request Item` mr_item | ||||||
|  | 			WHERE mr.name = mr_item.parent | ||||||
|  | 				AND mr_item.item_code = %(item)s  | ||||||
|  | 				AND mr.material_request_type = 'Purchase' | ||||||
|  | 				AND mr.per_ordered < 99.99 | ||||||
|  | 				AND mr.docstatus = 1 | ||||||
|  | 				AND mr.status != 'Stopped' | ||||||
|  |                         ORDER BY mr_item.item_code ASC""",{"item": item}, as_dict=1) | ||||||
|  | 		if material_request: | ||||||
|  | 			mr_list.append(material_request) | ||||||
|  | 	 | ||||||
|  | 	return mr_list | ||||||
|  | 	 | ||||||
|  | 	 | ||||||
| @ -56,6 +56,7 @@ erpnext.buying.PurchaseOrderController = erpnext.buying.BuyingController.extend( | |||||||
| 			} | 			} | ||||||
| 		} else if(doc.docstatus===0) { | 		} else if(doc.docstatus===0) { | ||||||
| 			cur_frm.cscript.add_from_mappers(); | 			cur_frm.cscript.add_from_mappers(); | ||||||
|  | 			cur_frm.cscript.link_requests();  | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		if(doc.docstatus == 1 && in_list(["Closed", "Delivered"], doc.status)) { | 		if(doc.docstatus == 1 && in_list(["Closed", "Delivered"], doc.status)) { | ||||||
|  | |||||||
| @ -43,6 +43,7 @@ frappe.ui.form.on("Request for Quotation",{ | |||||||
| 				}); | 				}); | ||||||
| 			}); | 			}); | ||||||
| 		} | 		} | ||||||
|  | 		 | ||||||
| 	}, | 	}, | ||||||
| 
 | 
 | ||||||
| 	make_suppplier_quotation: function(frm) { | 	make_suppplier_quotation: function(frm) { | ||||||
| @ -134,7 +135,7 @@ erpnext.buying.RequestforQuotationController = erpnext.buying.BuyingController.e | |||||||
| 						} | 						} | ||||||
| 					}) | 					}) | ||||||
| 				}, __("Get items from")); | 				}, __("Get items from")); | ||||||
| 				 | 				cur_frm.cscript.link_requests(); | ||||||
| 				// Get items from open Material Requests based on supplier
 | 				// Get items from open Material Requests based on supplier
 | ||||||
| 				cur_frm.add_custom_button(__('Possible Supplier'), function() { | 				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
 | ||||||
| @ -170,6 +171,7 @@ erpnext.buying.RequestforQuotationController = erpnext.buying.BuyingController.e | |||||||
| 					}	 | 					}	 | ||||||
| 					d.show(); | 					d.show(); | ||||||
| 				}, __("Get items from")); | 				}, __("Get items from")); | ||||||
|  | 				 | ||||||
| 		} | 		} | ||||||
| 	}, | 	}, | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -16,6 +16,7 @@ erpnext.buying.SupplierQuotationController = erpnext.buying.BuyingController.ext | |||||||
| 
 | 
 | ||||||
| 		} | 		} | ||||||
| 		else if (this.frm.doc.docstatus===0) { | 		else if (this.frm.doc.docstatus===0) { | ||||||
|  | 			 | ||||||
| 			cur_frm.add_custom_button(__('Material Request'), | 			cur_frm.add_custom_button(__('Material Request'), | ||||||
| 				function() { | 				function() { | ||||||
| 					erpnext.utils.map_current_doc({ | 					erpnext.utils.map_current_doc({ | ||||||
| @ -30,6 +31,7 @@ erpnext.buying.SupplierQuotationController = erpnext.buying.BuyingController.ext | |||||||
| 						} | 						} | ||||||
| 					}) | 					}) | ||||||
| 				}, __("Get items from")); | 				}, __("Get items from")); | ||||||
|  | 			cur_frm.cscript.link_requests();  | ||||||
| 		} | 		} | ||||||
| 	}, | 	}, | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user