diff --git a/manufacturing_overview/manufacturing_overview/api.py b/manufacturing_overview/manufacturing_overview/api.py index 1870993..03b02d6 100644 --- a/manufacturing_overview/manufacturing_overview/api.py +++ b/manufacturing_overview/manufacturing_overview/api.py @@ -2,11 +2,13 @@ import frappe from functools import reduce from datetime import date -# frappe.utils.logger.set_log_level("DEBUG") -# logger = frappe.logger("manufacturing_overview", -# allow_site=True, file_count=100000) +from erpnext.manufacturing.doctype.bom.bom import get_bom_items, BOM, get_bom_items_as_dict +from erpnext.stock.get_item_details import get_default_bom -# logger.debug(f"String") +frappe.utils.logger.set_log_level("DEBUG") +logger = frappe.logger("manufacturing_overview", allow_site=True) + +#logger.debug(f"String") def getDueInDays(d): @@ -14,9 +16,12 @@ def getDueInDays(d): return delta.days -def getWorkOrders(soname): - return frappe.get_all("Work Order", filters={ - 'sales_order': soname}, fields=['name']) +def getWorkOrder(soItemName): + return frappe.get_all("Work Order", filters={"sales_order_item": soItemName}) + +def getPurchaseOrder(soItemName): + + return frappe.get_all("Purchase Order Item", filters={"sales_order_item": soItemName}, fields=['parent']) def getAmountInWarehouses(item_code): @@ -62,7 +67,8 @@ def generateProductionOverviewCacheData(): item_group = "Produkte" ORDER BY delivery_date, item_code, name - """, as_dict=1) + """, as_dict=1) + currentWarehouseQtyList = [] @@ -76,6 +82,19 @@ def generateProductionOverviewCacheData(): soItem.customer = shortenCustomerName(frappe.get_value( 'Sales Order', soItem.parent, 'customer')) + + soItem.direct_po = getPurchaseOrder(soItem.name) + if len(soItem.direct_po) >= 1: + soItem.direct_po = soItem.direct_po[0]['parent'] + else: + soItem.direct_po = None + soItem.direct_wo = getWorkOrder(soItem.name) + if len(soItem.direct_wo) >= 1: + soItem.direct_wo = soItem.direct_wo[0]['name'] + else: + soItem.direct_wo = None + + soItem = formatDate(soItem) soItem = calculateStatus(soItem) @@ -125,6 +144,36 @@ def getSalesorderOverviewList(): if salesOrderItems is None: salesOrderItems = generateProductionOverviewCacheData() - frappe.cache().set_value('production_overview', salesOrderItems, expires_in_sec=60) + frappe.cache().set_value('production_overview', salesOrderItems, expires_in_sec=1) return salesOrderItems + +@frappe.whitelist() +def get_bom_tree(item_code): + bom_name = get_default_bom(item_code) + root_bom = frappe.get_doc("BOM", bom_name) + if root_bom != None: + bom_tree = BOM.traverse_tree(root_bom) # Gets all BOM in correct order + + bomlist = [] + + for bom_item in bom_tree: + bom = frappe.get_doc("BOM", bom_item) + bomlist.append(bom) + # item = frappe.get_doc("Item", bom) + + + # current_bom_item = frappe.get_doc("BOM", 'BOM-0815-3-001').get_tree_representation() + # bom_items = get_bom_items("BOM-0815-3-001", "Hans Prothmann GmbH") #Fetches all raw materials + + # routing = BOM.get_routing(frm) #Gets alls operations + + # test = get_bom_items_as_dict(bom_name, "Hans Prothmann GmbH") # Gets all rm items as a dict + + # bomtreeitem = BOM.get_tree_representation(bom_name) + logger.debug(bomlist) + + + + # logger.debug(bomtree) + return bomlist diff --git a/manufacturing_overview/manufacturing_overview/productionplan.py b/manufacturing_overview/manufacturing_overview/productionplan.py index 04229a6..a0b4349 100644 --- a/manufacturing_overview/manufacturing_overview/productionplan.py +++ b/manufacturing_overview/manufacturing_overview/productionplan.py @@ -1,11 +1,14 @@ import frappe from erpnext.stock.get_item_details import get_default_bom +from frappe.utils import ( + nowdate +) -# frappe.utils.logger.set_log_level("DEBUG") -# logger = frappe.logger("manufacturing_overview", -# allow_site=True, file_count=50) +frappe.utils.logger.set_log_level("DEBUG") +logger = frappe.logger("manufacturing_overview", + allow_site=True, file_count=50) +# logger.debug(f"{wo_id}") -# logger.debug(f"{current_value} + {value} = {updated_value}") @frappe.whitelist() @@ -57,3 +60,48 @@ def makepp(sales_order): return {'status': 201, 'docname': [pp.name]} + + +@frappe.whitelist() +def fixfinisheditemwopo(production_plan): + pp = frappe.get_doc("Production Plan", production_plan) + wo_id = frappe.get_all('Work Order', filters={'production_plan_item': pp.po_items[0].name}) + wo_id = wo_id[0]["name"] + + frappe.delete_doc("Work Order", wo_id) + + + po = frappe.new_doc("Purchase Order") + po.supplier = pp.po_items[0].custom_supplier + po.schedule_date = nowdate() + po.is_subcontracted = 1 + + for row in pp.po_items: + po_data = { + "fg_item": row.item_code, + # "warehouse": row.fg_warehouse, + # "production_plan_sub_assembly_item": row.name, + # "bom": row.bom_no, + # "production_plan": pp.name, + # "fg_item_qty": row.qty, + } + + # for field in [ + # "schedule_date", + # "qty", + # "description", + # "production_plan_item", + # ]: + # po_data[field] = row.get(field) + + po.append("items", po_data) + + po.set_service_items_for_finished_goods() + po.set_missing_values() + po.flags.ignore_mandatory = True + po.flags.ignore_validate = True + po.insert() + + + return {'status': 201, + 'docname': po.name} \ No newline at end of file diff --git a/manufacturing_overview/public/js/manufacturing_overview.bundle.js b/manufacturing_overview/public/js/manufacturing_overview.bundle.js index 91fcfad..9062e80 100644 --- a/manufacturing_overview/public/js/manufacturing_overview.bundle.js +++ b/manufacturing_overview/public/js/manufacturing_overview.bundle.js @@ -1,4 +1,5 @@ import './manufacturing_overview_desk.vue'; import './manufacturing_overview_page.js'; import './manufacturing_overview_row.vue'; -import './production_plan.js'; \ No newline at end of file +import './sales_order_addition.js'; +import './production_plan_addition.js'; \ No newline at end of file diff --git a/manufacturing_overview/public/js/manufacturing_overview_desk.vue b/manufacturing_overview/public/js/manufacturing_overview_desk.vue index 356fe9b..d467121 100644 --- a/manufacturing_overview/public/js/manufacturing_overview_desk.vue +++ b/manufacturing_overview/public/js/manufacturing_overview_desk.vue @@ -15,7 +15,8 @@ + v-bind:reference="so.parent" v-bind:due_in="so.due_in" v-bind:direct_wo="so.direct_wo" + v-bind:direct_po="so.direct_po"> @@ -43,6 +44,8 @@ export default { sales_order: "", status: "Unknown", due_in: 0, + direct_wo: "", + direct_po: "", }, ], timer: "", diff --git a/manufacturing_overview/public/js/manufacturing_overview_row.vue b/manufacturing_overview/public/js/manufacturing_overview_row.vue index 00d22d9..150efef 100644 --- a/manufacturing_overview/public/js/manufacturing_overview_row.vue +++ b/manufacturing_overview/public/js/manufacturing_overview_row.vue @@ -1,5 +1,6 @@ - + {{ - reference - }} + + {{ + reference + }} + + + - + {{ + direct_wo + }} + + + - + {{ + direct_po + }} + - - {{ delivery_date }} - - - {{ delivery_date }} - - - {{ delivery_date }} + + + + + + {{ delivery_date }} + {{ delivery_date }} + {{ delivery_date }} + + + + + + +