diff --git a/erpnext/manufacturing/report/bom_stock_report/bom_stock_report.json b/erpnext/manufacturing/report/bom_stock_report/bom_stock_report.json index f2090b731a..c563b87686 100644 --- a/erpnext/manufacturing/report/bom_stock_report/bom_stock_report.json +++ b/erpnext/manufacturing/report/bom_stock_report/bom_stock_report.json @@ -8,7 +8,7 @@ "idx": 0, "is_standard": "Yes", "letter_head": "", - "modified": "2017-02-24 19:56:30.215599", + "modified": "2017-06-23 04:46:43.209008", "modified_by": "Administrator", "module": "Manufacturing", "name": "BOM Stock Report", @@ -16,7 +16,7 @@ "query": "SELECT \n\tbom_item.item_code as \"Item:Link/Item:200\",\n\tbom_item.description as \"Description:Data:300\",\n\tbom_item.qty as \"Required Qty:Float:100\",\n\tledger.actual_qty as \"In Stock Qty:Float:100\",\n\tFLOOR(ledger.actual_qty /bom_item.qty) as \"Enough Parts to Build:Int:100\"\nFROM\n\t`tabBOM Item` AS bom_item \n\tLEFT JOIN `tabBin` AS ledger\t\n\t\tON bom_item.item_code = ledger.item_code \n\t\tAND ledger.warehouse = %(warehouse)s\nWHERE\n\tbom_item.parent=%(bom)s\n\nGROUP BY bom_item.item_code", "ref_doctype": "BOM", "report_name": "BOM Stock Report", - "report_type": "Query Report", + "report_type": "Script Report", "roles": [ { "role": "Manufacturing Manager" diff --git a/erpnext/manufacturing/report/bom_stock_report/bom_stock_report.py b/erpnext/manufacturing/report/bom_stock_report/bom_stock_report.py new file mode 100644 index 0000000000..7f22ecf083 --- /dev/null +++ b/erpnext/manufacturing/report/bom_stock_report/bom_stock_report.py @@ -0,0 +1,61 @@ +# Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +import frappe +from frappe import _ + + +def execute(filters=None): + if not filters: filters = {} + columns = get_columns() + data = get_bom_stock(filters) + return columns, data + + +def get_columns(): + """return columns""" + columns = [ + _("Item") + ":Link/Item:150", + _("Description") + "::500", + _("Required Qty") + ":Float:100", + _("In Stock Qty") + ":Float:100", + _("Enough Parts to Build") + ":Float:200", + ] + + return columns + + +def get_bom_stock(filters): + conditions = "" + bom = filters.get("bom") + + if filters.get("warehouse"): + warehouse_details = frappe.db.get_value("Warehouse", filters.get("warehouse"), ["lft", "rgt"], as_dict=1) + 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: + conditions += "" + + return frappe.db.sql(""" + SELECT + bom_item.item_code , + bom_item.description , + bom_item.qty, + sum(ledger.actual_qty) as actual_qty, + sum(FLOOR(ledger.actual_qty /bom_item.qty))as to_build + FROM + `tabBOM Item` AS bom_item + LEFT JOIN `tabBin` AS ledger + ON bom_item.item_code = ledger.item_code + %s + WHERE + bom_item.parent = '%s' + + GROUP BY bom_item.item_code""" % + (conditions, bom))