fix: (travis) Production Plan Summary Report breaks if no WO
- `get_cached_value` throws a DoesNotExistError if non-existent value, used `get_value` instead - accomodate production plan items that dont have WO/PO against them as well (blank values) - added some None value handling to avoid AttributeError
This commit is contained in:
parent
031178224f
commit
1eb3ca2b86
@ -28,8 +28,15 @@ def get_production_plan_item_details(filters, data, order_details):
|
|||||||
|
|
||||||
production_plan_doc = frappe.get_cached_doc("Production Plan", filters.get("production_plan"))
|
production_plan_doc = frappe.get_cached_doc("Production Plan", filters.get("production_plan"))
|
||||||
for row in production_plan_doc.po_items:
|
for row in production_plan_doc.po_items:
|
||||||
work_order = frappe.get_cached_value("Work Order", {"production_plan_item": row.name,
|
work_order = frappe.get_value(
|
||||||
"bom_no": row.bom_no, "production_item": row.item_code}, "name")
|
"Work Order",
|
||||||
|
{
|
||||||
|
"production_plan_item": row.name,
|
||||||
|
"bom_no": row.bom_no,
|
||||||
|
"production_item": row.item_code
|
||||||
|
},
|
||||||
|
"name"
|
||||||
|
)
|
||||||
|
|
||||||
if row.item_code not in itemwise_indent:
|
if row.item_code not in itemwise_indent:
|
||||||
itemwise_indent.setdefault(row.item_code, {})
|
itemwise_indent.setdefault(row.item_code, {})
|
||||||
@ -40,10 +47,10 @@ def get_production_plan_item_details(filters, data, order_details):
|
|||||||
"item_name": frappe.get_cached_value("Item", row.item_code, "item_name"),
|
"item_name": frappe.get_cached_value("Item", row.item_code, "item_name"),
|
||||||
"qty": row.planned_qty,
|
"qty": row.planned_qty,
|
||||||
"document_type": "Work Order",
|
"document_type": "Work Order",
|
||||||
"document_name": work_order,
|
"document_name": work_order or "",
|
||||||
"bom_level": frappe.get_cached_value("BOM", row.bom_no, "bom_level"),
|
"bom_level": frappe.get_cached_value("BOM", row.bom_no, "bom_level"),
|
||||||
"produced_qty": order_details.get((work_order, row.item_code)).get("produced_qty"),
|
"produced_qty": order_details.get((work_order, row.item_code), {}).get("produced_qty", 0),
|
||||||
"pending_qty": flt(row.planned_qty) - flt(order_details.get((work_order, row.item_code)).get("produced_qty"))
|
"pending_qty": flt(row.planned_qty) - flt(order_details.get((work_order, row.item_code), {}).get("produced_qty", 0))
|
||||||
})
|
})
|
||||||
|
|
||||||
get_production_plan_sub_assembly_item_details(filters, row, production_plan_doc, data, order_details)
|
get_production_plan_sub_assembly_item_details(filters, row, production_plan_doc, data, order_details)
|
||||||
@ -54,11 +61,23 @@ def get_production_plan_sub_assembly_item_details(filters, row, production_plan_
|
|||||||
subcontracted_item = (item.type_of_manufacturing == 'Subcontract')
|
subcontracted_item = (item.type_of_manufacturing == 'Subcontract')
|
||||||
|
|
||||||
if subcontracted_item:
|
if subcontracted_item:
|
||||||
docname = frappe.get_cached_value("Purchase Order Item",
|
docname = frappe.get_value(
|
||||||
{"production_plan_sub_assembly_item": item.name, "docstatus": ("<", 2)}, "parent")
|
"Purchase Order Item",
|
||||||
|
{
|
||||||
|
"production_plan_sub_assembly_item": item.name,
|
||||||
|
"docstatus": ("<", 2)
|
||||||
|
},
|
||||||
|
"parent"
|
||||||
|
)
|
||||||
else:
|
else:
|
||||||
docname = frappe.get_cached_value("Work Order",
|
docname = frappe.get_value(
|
||||||
{"production_plan_sub_assembly_item": item.name, "docstatus": ("<", 2)}, "name")
|
"Work Order",
|
||||||
|
{
|
||||||
|
"production_plan_sub_assembly_item": item.name,
|
||||||
|
"docstatus": ("<", 2)
|
||||||
|
},
|
||||||
|
"name"
|
||||||
|
)
|
||||||
|
|
||||||
data.append({
|
data.append({
|
||||||
"indent": 1,
|
"indent": 1,
|
||||||
@ -66,10 +85,10 @@ def get_production_plan_sub_assembly_item_details(filters, row, production_plan_
|
|||||||
"item_name": item.item_name,
|
"item_name": item.item_name,
|
||||||
"qty": item.qty,
|
"qty": item.qty,
|
||||||
"document_type": "Work Order" if not subcontracted_item else "Purchase Order",
|
"document_type": "Work Order" if not subcontracted_item else "Purchase Order",
|
||||||
"document_name": docname,
|
"document_name": docname or "",
|
||||||
"bom_level": item.bom_level,
|
"bom_level": item.bom_level,
|
||||||
"produced_qty": order_details.get((docname, item.production_item)).get("produced_qty"),
|
"produced_qty": order_details.get((docname, item.production_item), {}).get("produced_qty", 0),
|
||||||
"pending_qty": flt(item.qty) - flt(order_details.get((docname, item.production_item)).get("produced_qty"))
|
"pending_qty": flt(item.qty) - flt(order_details.get((docname, item.production_item), {}).get("produced_qty", 0))
|
||||||
})
|
})
|
||||||
|
|
||||||
def get_work_order_details(filters, order_details):
|
def get_work_order_details(filters, order_details):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user