[feature] pull from material request based on supplier
This commit is contained in:
parent
114bc09164
commit
834a4db596
@ -80,7 +80,8 @@ erpnext.buying.PurchaseOrderController = erpnext.buying.BuyingController.extend(
|
|||||||
company: cur_frm.doc.company
|
company: cur_frm.doc.company
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
});
|
}
|
||||||
|
);
|
||||||
|
|
||||||
cur_frm.add_custom_button(wn._('From Supplier Quotation'),
|
cur_frm.add_custom_button(wn._('From Supplier Quotation'),
|
||||||
function() {
|
function() {
|
||||||
@ -93,7 +94,20 @@ erpnext.buying.PurchaseOrderController = erpnext.buying.BuyingController.extend(
|
|||||||
company: cur_frm.doc.company
|
company: cur_frm.doc.company
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
});
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
cur_frm.add_custom_button(wn._('For Supplier'),
|
||||||
|
function() {
|
||||||
|
wn.model.map_current_doc({
|
||||||
|
method: "stock.doctype.material_request.material_request.make_purchase_order_based_on_supplier",
|
||||||
|
source_doctype: "Supplier",
|
||||||
|
get_query_filters: {
|
||||||
|
docstatus: ["!=", 2],
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
);
|
||||||
},
|
},
|
||||||
|
|
||||||
tc_name: function() {
|
tc_name: function() {
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
{
|
{
|
||||||
"creation": "2013-05-03 10:45:46",
|
"creation": "2013-05-03 10:45:46",
|
||||||
"docstatus": 0,
|
"docstatus": 0,
|
||||||
"modified": "2013-07-23 11:54:52",
|
"modified": "2013-07-26 16:26:15",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"owner": "Administrator"
|
"owner": "Administrator"
|
||||||
},
|
},
|
||||||
@ -36,7 +36,8 @@
|
|||||||
"parenttype": "DocType",
|
"parenttype": "DocType",
|
||||||
"permlevel": 0,
|
"permlevel": 0,
|
||||||
"read": 1,
|
"read": 1,
|
||||||
"report": 1
|
"report": 1,
|
||||||
|
"submit": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"doctype": "DocType",
|
"doctype": "DocType",
|
||||||
@ -402,6 +403,13 @@
|
|||||||
"read_only": 0,
|
"read_only": 0,
|
||||||
"reqd": 1
|
"reqd": 1
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"doctype": "DocField",
|
||||||
|
"fieldname": "default_supplier",
|
||||||
|
"fieldtype": "Link",
|
||||||
|
"label": "Default Supplier",
|
||||||
|
"options": "Supplier"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"depends_on": "eval:doc.is_purchase_item==\"Yes\"",
|
"depends_on": "eval:doc.is_purchase_item==\"Yes\"",
|
||||||
"description": "Lead Time days is number of days by which this item is expected in your warehouse. This days is fetched in Material Request when you select this item.",
|
"description": "Lead Time days is number of days by which this item is expected in your warehouse. This days is fetched in Material Request when you select this item.",
|
||||||
@ -876,7 +884,6 @@
|
|||||||
"create": 1,
|
"create": 1,
|
||||||
"doctype": "DocPerm",
|
"doctype": "DocPerm",
|
||||||
"role": "Material Master Manager",
|
"role": "Material Master Manager",
|
||||||
"submit": 0,
|
|
||||||
"write": 1
|
"write": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -885,7 +892,6 @@
|
|||||||
"create": 0,
|
"create": 0,
|
||||||
"doctype": "DocPerm",
|
"doctype": "DocPerm",
|
||||||
"role": "Material Manager",
|
"role": "Material Manager",
|
||||||
"submit": 0,
|
|
||||||
"write": 0
|
"write": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -894,19 +900,6 @@
|
|||||||
"create": 0,
|
"create": 0,
|
||||||
"doctype": "DocPerm",
|
"doctype": "DocPerm",
|
||||||
"role": "Material User",
|
"role": "Material User",
|
||||||
"submit": 0,
|
|
||||||
"write": 0
|
"write": 0
|
||||||
},
|
|
||||||
{
|
|
||||||
"doctype": "DocPerm",
|
|
||||||
"role": "Sales User"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"doctype": "DocPerm",
|
|
||||||
"role": "Purchase User"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"doctype": "DocPerm",
|
|
||||||
"role": "Accounts User"
|
|
||||||
}
|
}
|
||||||
]
|
]
|
@ -222,18 +222,18 @@ def _update_requested_qty(controller, mr_obj, mr_items):
|
|||||||
"posting_date": controller.doc.posting_date,
|
"posting_date": controller.doc.posting_date,
|
||||||
})
|
})
|
||||||
|
|
||||||
def set_missing_values(source, target):
|
def set_missing_values(source, target_doclist):
|
||||||
po = webnotes.bean(target)
|
po = webnotes.bean(target_doclist)
|
||||||
po.run_method("set_missing_values")
|
po.run_method("set_missing_values")
|
||||||
|
|
||||||
|
def update_item(obj, target, source_parent):
|
||||||
|
target.conversion_factor = 1
|
||||||
|
target.qty = flt(obj.qty) - flt(obj.ordered_qty)
|
||||||
|
|
||||||
@webnotes.whitelist()
|
@webnotes.whitelist()
|
||||||
def make_purchase_order(source_name, target_doclist=None):
|
def make_purchase_order(source_name, target_doclist=None):
|
||||||
from webnotes.model.mapper import get_mapped_doclist
|
from webnotes.model.mapper import get_mapped_doclist
|
||||||
|
|
||||||
def update_item(obj, target, source_parent):
|
|
||||||
target.conversion_factor = 1
|
|
||||||
target.qty = flt(obj.qty) - flt(obj.ordered_qty)
|
|
||||||
|
|
||||||
doclist = get_mapped_doclist("Material Request", source_name, {
|
doclist = get_mapped_doclist("Material Request", source_name, {
|
||||||
"Material Request": {
|
"Material Request": {
|
||||||
"doctype": "Purchase Order",
|
"doctype": "Purchase Order",
|
||||||
@ -257,6 +257,62 @@ def make_purchase_order(source_name, target_doclist=None):
|
|||||||
|
|
||||||
return [d.fields for d in doclist]
|
return [d.fields for d in doclist]
|
||||||
|
|
||||||
|
@webnotes.whitelist()
|
||||||
|
def make_purchase_order_based_on_supplier(source_name, target_doclist=None):
|
||||||
|
from webnotes.model.mapper import get_mapped_doclist
|
||||||
|
if target_doclist:
|
||||||
|
if isinstance(target_doclist, basestring):
|
||||||
|
import json
|
||||||
|
target_doclist = webnotes.doclist(json.loads(target_doclist))
|
||||||
|
target_doclist = target_doclist.get({"parentfield": ["!=", "po_details"]})
|
||||||
|
|
||||||
|
material_requests, supplier_items = get_material_requests_based_on_supplier(source_name)
|
||||||
|
|
||||||
|
def postprocess(source, target_doclist):
|
||||||
|
target_doclist[0].supplier = source_name
|
||||||
|
set_missing_values(source, target_doclist)
|
||||||
|
|
||||||
|
po_items = target_doclist.get({"parentfield": "po_details"})
|
||||||
|
target_doclist = target_doclist.get({"parentfield": ["!=", "po_details"]}) + \
|
||||||
|
[d for d in po_items
|
||||||
|
if d.fields.get("item_code") in supplier_items and d.fields.get("qty") > 0]
|
||||||
|
|
||||||
|
return target_doclist
|
||||||
|
|
||||||
|
for mr in material_requests:
|
||||||
|
target_doclist = get_mapped_doclist("Material Request", mr, {
|
||||||
|
"Material Request": {
|
||||||
|
"doctype": "Purchase Order",
|
||||||
|
},
|
||||||
|
"Material Request Item": {
|
||||||
|
"doctype": "Purchase Order Item",
|
||||||
|
"field_map": [
|
||||||
|
["name", "prevdoc_detail_docname"],
|
||||||
|
["parent", "prevdoc_docname"],
|
||||||
|
["parenttype", "prevdoc_doctype"],
|
||||||
|
["uom", "stock_uom"],
|
||||||
|
["uom", "uom"]
|
||||||
|
],
|
||||||
|
"postprocess": update_item
|
||||||
|
}
|
||||||
|
}, target_doclist, postprocess)
|
||||||
|
|
||||||
|
return [d.fields for d in target_doclist]
|
||||||
|
|
||||||
|
def get_material_requests_based_on_supplier(supplier):
|
||||||
|
supplier_items = [d[0] for d in webnotes.conn.get_values("Item",
|
||||||
|
{"default_supplier": supplier})]
|
||||||
|
material_requests = webnotes.conn.sql_list("""select distinct mr.name
|
||||||
|
from `tabMaterial Request` mr, `tabMaterial Request Item` mr_item
|
||||||
|
where mr.name = mr_item.parent
|
||||||
|
and mr_item.item_code in (%s)
|
||||||
|
and mr.material_request_type = 'Purchase'
|
||||||
|
and ifnull(mr.per_ordered, 0) < 99.99
|
||||||
|
and mr.docstatus = 1
|
||||||
|
and mr.status != 'Stopped'""" % ', '.join(['%s']*len(supplier_items)),
|
||||||
|
tuple(supplier_items))
|
||||||
|
return material_requests, supplier_items
|
||||||
|
|
||||||
@webnotes.whitelist()
|
@webnotes.whitelist()
|
||||||
def make_supplier_quotation(source_name, target_doclist=None):
|
def make_supplier_quotation(source_name, target_doclist=None):
|
||||||
from webnotes.model.mapper import get_mapped_doclist
|
from webnotes.model.mapper import get_mapped_doclist
|
||||||
@ -288,11 +344,6 @@ def make_stock_entry(source_name, target_doclist=None):
|
|||||||
def set_purpose(source, target):
|
def set_purpose(source, target):
|
||||||
target[0].purpose = "Material Transfer"
|
target[0].purpose = "Material Transfer"
|
||||||
|
|
||||||
def update_item(source, target, source_parent):
|
|
||||||
target.conversion_factor = 1
|
|
||||||
target.qty = flt(source.qty) - flt(source.ordered_qty)
|
|
||||||
|
|
||||||
|
|
||||||
doclist = get_mapped_doclist("Material Request", source_name, {
|
doclist = get_mapped_doclist("Material Request", source_name, {
|
||||||
"Material Request": {
|
"Material Request": {
|
||||||
"doctype": "Stock Entry",
|
"doctype": "Stock Entry",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user