fix: Pending SO Items For Purchase Request not showing the so quantity correctly if so has duplicate items

This commit is contained in:
Rohit Waghchaure 2019-04-11 13:56:40 +05:30
parent 59c5a16037
commit 34ee41a35e

View File

@ -47,9 +47,8 @@ def get_columns():
}, },
{ {
"label": _("Material Request"), "label": _("Material Request"),
"options": "Material Request",
"fieldname": "material_request", "fieldname": "material_request",
"fieldtype": "Link", "fieldtype": "Data",
"width": 140 "width": 140
}, },
{ {
@ -116,32 +115,42 @@ def get_data():
{"sales_order_item": ("!=",""), "docstatus": 1}, {"sales_order_item": ("!=",""), "docstatus": 1},
["parent", "qty", "sales_order", "item_code"]) ["parent", "qty", "sales_order", "item_code"])
grouped_records = {} materials_request_dict = {}
for record in mr_records: for record in mr_records:
grouped_records.setdefault(record.sales_order, []).append(record) key = (record.sales_order, record.item_code)
if key not in materials_request_dict:
materials_request_dict.setdefault(key, {
'qty': 0,
'material_requests': [record.parent]
})
details = materials_request_dict.get(key)
details['qty'] += record.qty
if record.parent not in details.get('material_requests'):
details['material_requests'].append(record.parent)
pending_so=[] pending_so=[]
for so in sales_order_entry: for so in sales_order_entry:
# fetch all the material request records for a sales order item # fetch all the material request records for a sales order item
mr_list = grouped_records.get(so.name) or [{}] key = (so.name, so.item_code)
mr_item_record = ([mr for mr in mr_list if mr.get('item_code') == so.item_code] or [{}]) materials_request = materials_request_dict.get(key) or {}
for mr in mr_item_record:
# check for pending sales order # check for pending sales order
if cint(so.net_qty) > cint(mr.get('qty')): if cint(so.net_qty) > cint(materials_request.get('qty')):
so_record = { so_record = {
"item_code": so.item_code, "item_code": so.item_code,
"item_name": so.item_name, "item_name": so.item_name,
"description": so.description, "description": so.description,
"sales_order_no": so.name, "sales_order_no": so.name,
"date": so.transaction_date, "date": so.transaction_date,
"material_request": cstr(mr.get('parent')), "material_request": ','.join(materials_request.get('material_requests', [])),
"customer": so.customer, "customer": so.customer,
"territory": so.territory, "territory": so.territory,
"so_qty": so.net_qty, "so_qty": so.net_qty,
"requested_qty": cint(mr.get('qty')), "requested_qty": cint(materials_request.get('qty')),
"pending_qty": so.net_qty - cint(mr.get('qty')), "pending_qty": so.net_qty - cint(materials_request.get('qty')),
"company": so.company "company": so.company
} }
pending_so.append(so_record) pending_so.append(so_record)