Exploded view for BOM Stock Report (#12506)
* Multilevel BOM Stock Report prototype * Rechristened multilevel to exploded view * Removed trailing whitespace in line 16. Replaced spaces with tabs for indentation * Used BOM Explosion item in query for exploded view * Removed trailing whitespaces for Codacy compliance
This commit is contained in:
parent
d8b4c8bd5b
commit
dc0db3a652
@ -12,6 +12,10 @@ frappe.query_reports["BOM Stock Report"] = {
|
|||||||
"fieldtype": "Link",
|
"fieldtype": "Link",
|
||||||
"options": "Warehouse",
|
"options": "Warehouse",
|
||||||
"reqd": 1
|
"reqd": 1
|
||||||
|
}, {
|
||||||
|
"fieldname": "show_exploded_view",
|
||||||
|
"label": __("Show exploded view"),
|
||||||
|
"fieldtype": "Check"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
@ -6,52 +6,61 @@ import frappe
|
|||||||
from frappe import _
|
from frappe import _
|
||||||
|
|
||||||
def execute(filters=None):
|
def execute(filters=None):
|
||||||
if not filters: filters = {}
|
if not filters: filters = {}
|
||||||
columns = get_columns()
|
columns = get_columns()
|
||||||
data = get_bom_stock(filters)
|
|
||||||
return columns, data
|
data = get_bom_stock(filters)
|
||||||
|
|
||||||
|
return columns, data
|
||||||
|
|
||||||
def get_columns():
|
def get_columns():
|
||||||
"""return columns"""
|
"""return columns"""
|
||||||
columns = [
|
columns = [
|
||||||
_("Item") + ":Link/Item:150",
|
_("Item") + ":Link/Item:150",
|
||||||
_("Description") + "::500",
|
_("Description") + "::500",
|
||||||
_("Required Qty") + ":Float:100",
|
_("Required Qty") + ":Float:100",
|
||||||
_("In Stock Qty") + ":Float:100",
|
_("In Stock Qty") + ":Float:100",
|
||||||
_("Enough Parts to Build") + ":Float:200",
|
_("Enough Parts to Build") + ":Float:200",
|
||||||
]
|
]
|
||||||
|
|
||||||
return columns
|
return columns
|
||||||
|
|
||||||
def get_bom_stock(filters):
|
def get_bom_stock(filters):
|
||||||
conditions = ""
|
conditions = ""
|
||||||
bom = filters.get("bom")
|
bom = filters.get("bom")
|
||||||
|
|
||||||
if filters.get("warehouse"):
|
table = "`tabBOM Item`"
|
||||||
warehouse_details = frappe.db.get_value("Warehouse", filters.get("warehouse"), ["lft", "rgt"], as_dict=1)
|
qty_field = "qty"
|
||||||
if warehouse_details:
|
|
||||||
conditions += " and exists (select name from `tabWarehouse` wh \
|
|
||||||
where wh.lft >= %s and wh.rgt <= %s and ledger.warehouse = wh.name)" % (warehouse_details.lft,
|
|
||||||
warehouse_details.rgt)
|
|
||||||
else:
|
|
||||||
conditions += " and ledger.warehouse = '%s'" % frappe.db.escape(filters.get("warehouse"))
|
|
||||||
|
|
||||||
else:
|
if filters.get("show_exploded_view"):
|
||||||
conditions += ""
|
table = "`tabBOM Explosion Item`"
|
||||||
|
qty_field = "stock_qty"
|
||||||
|
|
||||||
return frappe.db.sql("""
|
if filters.get("warehouse"):
|
||||||
SELECT
|
warehouse_details = frappe.db.get_value("Warehouse", filters.get("warehouse"), ["lft", "rgt"], as_dict=1)
|
||||||
bom_item.item_code ,
|
if warehouse_details:
|
||||||
bom_item.description ,
|
conditions += " and exists (select name from `tabWarehouse` wh \
|
||||||
bom_item.qty,
|
where wh.lft >= %s and wh.rgt <= %s and ledger.warehouse = wh.name)" % (warehouse_details.lft,
|
||||||
sum(ledger.actual_qty) as actual_qty,
|
warehouse_details.rgt)
|
||||||
sum(FLOOR(ledger.actual_qty /bom_item.qty))as to_build
|
else:
|
||||||
FROM
|
conditions += " and ledger.warehouse = '%s'" % frappe.db.escape(filters.get("warehouse"))
|
||||||
`tabBOM Item` AS bom_item
|
|
||||||
LEFT JOIN `tabBin` AS ledger
|
|
||||||
ON bom_item.item_code = ledger.item_code
|
|
||||||
%s
|
|
||||||
WHERE
|
|
||||||
bom_item.parent = '%s' and bom_item.parenttype='BOM'
|
|
||||||
|
|
||||||
GROUP BY bom_item.item_code""" % (conditions, bom))
|
else:
|
||||||
|
conditions += ""
|
||||||
|
|
||||||
|
return frappe.db.sql("""
|
||||||
|
SELECT
|
||||||
|
bom_item.item_code ,
|
||||||
|
bom_item.description ,
|
||||||
|
bom_item.{qty_field},
|
||||||
|
sum(ledger.actual_qty) as actual_qty,
|
||||||
|
sum(FLOOR(ledger.actual_qty / bom_item.{qty_field}))as to_build
|
||||||
|
FROM
|
||||||
|
{table} AS bom_item
|
||||||
|
LEFT JOIN `tabBin` AS ledger
|
||||||
|
ON bom_item.item_code = ledger.item_code
|
||||||
|
{conditions}
|
||||||
|
WHERE
|
||||||
|
bom_item.parent = '{bom}' and bom_item.parenttype='BOM'
|
||||||
|
|
||||||
|
GROUP BY bom_item.item_code""".format(qty_field=qty_field, table=table, conditions=conditions, bom=bom))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user