BOM Stock Calculation Report (#14561)
* BOM Stock Calculated * BOM Stock Calculated * BOM Stock Calculated * BOM Stock Calculated * BOM Stock Calculated * Update bom_stock_calculated.json
This commit is contained in:
		
							parent
							
								
									e25dcd2737
								
							
						
					
					
						commit
						0484547150
					
				| @ -0,0 +1,27 @@ | ||||
| // Copyright (c) 2016, Epoch Consulting and contributors
 | ||||
| // For license information, please see license.txt
 | ||||
| /* eslint-disable */ | ||||
| 
 | ||||
| frappe.query_reports["BOM Stock Calculated"] = { | ||||
| 	"filters": [ | ||||
| 		{ | ||||
| 			"fieldname": "bom", | ||||
| 			"label": __("BOM"), | ||||
| 			"fieldtype": "Link", | ||||
| 			"options": "BOM", | ||||
| 			"reqd": 1 | ||||
| 		}, | ||||
|         	{ | ||||
| 	            "fieldname": "qty_to_make", | ||||
|         	    "label": __("Quantity to Make"), | ||||
|         	    "fieldtype": "Int", | ||||
|         	    "default": "1" | ||||
| 	       }, | ||||
| 
 | ||||
| 		 { | ||||
| 			"fieldname": "show_exploded_view", | ||||
| 			"label": __("Show exploded view"), | ||||
| 			"fieldtype": "Check" | ||||
| 		} | ||||
| 	] | ||||
| } | ||||
| @ -0,0 +1,26 @@ | ||||
| { | ||||
|  "add_total_row": 0,  | ||||
|  "creation": "2018-05-17 12:40:31.355049",  | ||||
|  "disabled": 0,  | ||||
|  "docstatus": 0,  | ||||
|  "doctype": "Report",  | ||||
|  "idx": 0,  | ||||
|  "is_standard": "Yes",  | ||||
|  "letter_head": "",  | ||||
|  "modified": "2018-06-18 13:33:18.103220",  | ||||
|  "modified_by": "Administrator",  | ||||
|  "module": "Manufacturing",  | ||||
|  "name": "BOM Stock Calculated",  | ||||
|  "owner": "Administrator",  | ||||
|  "ref_doctype": "BOM",  | ||||
|  "report_name": "BOM Stock Calculated",  | ||||
|  "report_type": "Script Report",  | ||||
|  "roles": [ | ||||
|   { | ||||
|    "role": "Manufacturing Manager" | ||||
|   },  | ||||
|   { | ||||
|    "role": "Manufacturing User" | ||||
|   } | ||||
|  ] | ||||
| } | ||||
| @ -0,0 +1,93 @@ | ||||
| # 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() | ||||
| 	summ_data = [] | ||||
| 
 | ||||
| 	data = get_bom_stock(filters) | ||||
| 	qty_to_make = filters.get("qty_to_make") | ||||
| 
 | ||||
| 	for rows in data: | ||||
| 	        item_map = get_item_details(rows[0]) | ||||
| 		reqd_qty = qty_to_make * rows[3] | ||||
| 		last_pur_price = frappe.db.get_value("Item", rows[0], "last_purchase_rate") | ||||
| 		if rows[4] > 0: | ||||
| 			diff_qty = rows[4] - reqd_qty | ||||
| 	        	summ_data.append([rows[0], rows[1], item_map[rows[0]]["manufacturer"], item_map[rows[0]]["manufacturer_part_no"], rows[3], rows[4], reqd_qty, diff_qty, last_pur_price]) | ||||
| 		else: | ||||
| 			diff_qty = 0 - reqd_qty | ||||
| 			summ_data.append([rows[0], rows[1], item_map[rows[0]]["manufacturer"], item_map[rows[0]]["manufacturer_part_no"], rows[3], "0.000", reqd_qty, diff_qty, last_pur_price]) | ||||
| 
 | ||||
| 	return columns, summ_data | ||||
| 
 | ||||
| def get_columns(): | ||||
| 	"""return columns""" | ||||
| 	columns = [ | ||||
| 		_("Item") + ":Link/Item:100", | ||||
| 		_("Description") + "::150", | ||||
| 		_("Manufacturer") + "::100", | ||||
| 		_("Manufacturer Part Number") + "::100", | ||||
| 		_("Qty") + ":Float:50", | ||||
| 		_("Stock Qty") + ":Float:100", | ||||
| 		_("Reqd Qty")+ ":Float:100", | ||||
| 		_("Diff Qty")+ ":Float:100", | ||||
| 		_("Last Purchase Price")+ ":Float:100", | ||||
| 
 | ||||
| 
 | ||||
| 	] | ||||
| 
 | ||||
| 	return columns | ||||
| 
 | ||||
| def get_bom_stock(filters): | ||||
| 	conditions = "" | ||||
| 	bom = filters.get("bom") | ||||
| 
 | ||||
| 	table = "`tabBOM Item`" | ||||
| 	qty_field = "qty" | ||||
| 
 | ||||
| 	if filters.get("show_exploded_view"): | ||||
| 		table = "`tabBOM Explosion Item`" | ||||
| 		qty_field = "stock_qty" | ||||
| 
 | ||||
| 	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_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)) | ||||
| 
 | ||||
| def get_item_details(item_code): | ||||
|         items = frappe.db.sql("""select it.item_group, it.item_name, it.stock_uom, it.name, it.brand, it.description, it.manufacturer_part_no, it.manufacturer from tabItem it where it.item_code = %s""", item_code, as_dict=1) | ||||
| 
 | ||||
|         return dict((d.name, d) for d in items) | ||||
| 
 | ||||
| 
 | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user