From 72e4cdcb251a6e4b7905abfbb3e52bce5c21fa8d Mon Sep 17 00:00:00 2001 From: Neil Trini Lasrado Date: Fri, 21 Aug 2015 18:06:15 +0530 Subject: [PATCH 1/3] Added default WIP Warehouse and FG Warehouse to Manufacturing Settings Fetch default WIP Warehouse and FG Warehouse on load of Production Order --- .../manufacturing_settings.json | 409 +++++++++++++----- .../production_order/production_order.js | 15 +- .../production_order/production_order.py | 6 + 3 files changed, 323 insertions(+), 107 deletions(-) diff --git a/erpnext/manufacturing/doctype/manufacturing_settings/manufacturing_settings.json b/erpnext/manufacturing/doctype/manufacturing_settings/manufacturing_settings.json index 8be16b2153e..e2da87948d2 100644 --- a/erpnext/manufacturing/doctype/manufacturing_settings/manufacturing_settings.json +++ b/erpnext/manufacturing/doctype/manufacturing_settings/manufacturing_settings.json @@ -1,123 +1,320 @@ { - "allow_copy": 0, - "allow_import": 0, - "allow_rename": 0, - "creation": "2014-11-27 14:12:07.542534", - "custom": 0, - "docstatus": 0, - "doctype": "DocType", - "document_type": "Master", + "allow_copy": 0, + "allow_import": 0, + "allow_rename": 0, + "creation": "2014-11-27 14:12:07.542534", + "custom": 0, + "docstatus": 0, + "doctype": "DocType", + "document_type": "Document", "fields": [ { - "fieldname": "capacity_planning", - "fieldtype": "Section Break", - "label": "Capacity Planning", - "permlevel": 0, - "precision": "" - }, + "allow_on_submit": 0, + "fieldname": "capacity_planning", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Capacity Planning", + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, { - "description": "Disables creation of time logs against Production Orders.\nOperations shall not be tracked against Production Order", - "fieldname": "disable_capacity_planning", - "fieldtype": "Check", - "label": "Disable Capacity Planning and Time Tracking", - "permlevel": 0, - "precision": "" - }, + "allow_on_submit": 0, + "description": "Disables creation of time logs against Production Orders.\nOperations shall not be tracked against Production Order", + "fieldname": "disable_capacity_planning", + "fieldtype": "Check", + "hidden": 0, + "ignore_user_permissions": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Disable Capacity Planning and Time Tracking", + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, { - "description": "Plan time logs outside Workstation Working Hours.", - "fieldname": "allow_overtime", - "fieldtype": "Check", - "label": "Allow Overtime", - "permlevel": 0, - "precision": "" - }, + "allow_on_submit": 0, + "description": "Plan time logs outside Workstation Working Hours.", + "fieldname": "allow_overtime", + "fieldtype": "Check", + "hidden": 0, + "ignore_user_permissions": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Allow Overtime", + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, { - "default": "", - "fieldname": "allow_production_on_holidays", - "fieldtype": "Check", - "in_list_view": 1, - "label": "Allow Production on Holidays", - "options": "", - "permlevel": 0, - "precision": "" - }, + "allow_on_submit": 0, + "default": "", + "fieldname": "allow_production_on_holidays", + "fieldtype": "Check", + "hidden": 0, + "ignore_user_permissions": 0, + "in_filter": 0, + "in_list_view": 1, + "label": "Allow Production on Holidays", + "no_copy": 0, + "options": "", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, { - "default": "BOM", - "fieldname": "backflush_raw_materials_based_on", - "fieldtype": "Select", - "label": "Backflush Raw Materials Based On", - "options": "BOM\nMaterial Transferred for Manufacture", - "permlevel": 0, - "precision": "" - }, + "allow_on_submit": 0, + "fieldname": "column_break_3", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "in_filter": 0, + "in_list_view": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, { - "fieldname": "column_break_3", - "fieldtype": "Column Break", - "permlevel": 0, - "precision": "" - }, + "allow_on_submit": 0, + "default": "30", + "description": "Try planning operations for X days in advance.", + "fieldname": "capacity_planning_for_days", + "fieldtype": "Int", + "hidden": 0, + "ignore_user_permissions": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Capacity Planning For (Days)", + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, { - "default": "30", - "description": "Try planning operations for X days in advance.", - "fieldname": "capacity_planning_for_days", - "fieldtype": "Int", - "label": "Capacity Planning For (Days)", - "permlevel": 0, - "precision": "" - }, + "allow_on_submit": 0, + "description": "Default 10 mins", + "fieldname": "mins_between_operations", + "fieldtype": "Int", + "hidden": 0, + "ignore_user_permissions": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Time Between Operations (in mins)", + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, { - "description": "Default 10 mins", - "fieldname": "mins_between_operations", - "fieldtype": "Int", - "label": "Time Between Operations (in mins)", - "permlevel": 0, - "precision": "" - }, + "allow_on_submit": 0, + "fieldname": "section_break_6", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "in_filter": 0, + "in_list_view": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, { - "fieldname": "over_production_allowance_percentage", - "fieldtype": "Percent", - "label": "Over Production Allowance Percentage", - "permlevel": 0, - "precision": "" + "allow_on_submit": 0, + "fieldname": "over_production_allowance_percentage", + "fieldtype": "Percent", + "hidden": 0, + "ignore_user_permissions": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Over Production Allowance Percentage", + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "default": "BOM", + "fieldname": "backflush_raw_materials_based_on", + "fieldtype": "Select", + "hidden": 0, + "ignore_user_permissions": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Backflush Raw Materials Based On", + "no_copy": 0, + "options": "BOM\nMaterial Transferred for Manufacture", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "fieldname": "column_break_11", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "in_filter": 0, + "in_list_view": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "fieldname": "default_wip_warehouse", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Default Work In Progress Warehouse", + "no_copy": 0, + "options": "Warehouse", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "fieldname": "default_fg_warehouse", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Default Finished Goods Warehouse", + "no_copy": 0, + "options": "Warehouse", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 } - ], - "hide_heading": 0, - "hide_toolbar": 0, - "icon": "icon-wrench", - "in_create": 0, - "in_dialog": 0, - "is_submittable": 0, - "issingle": 1, - "istable": 0, - "modified": "2015-08-12 08:12:33.889753", - "modified_by": "Administrator", - "module": "Manufacturing", - "name": "Manufacturing Settings", - "name_case": "", - "owner": "Administrator", + ], + "hide_heading": 0, + "hide_toolbar": 0, + "icon": "icon-wrench", + "in_create": 0, + "in_dialog": 0, + "is_submittable": 0, + "issingle": 1, + "istable": 0, + "modified": "2015-08-21 08:27:03.794133", + "modified_by": "Administrator", + "module": "Manufacturing", + "name": "Manufacturing Settings", + "name_case": "", + "owner": "Administrator", "permissions": [ { - "amend": 0, - "apply_user_permissions": 0, - "cancel": 0, - "create": 1, - "delete": 0, - "email": 0, - "export": 0, - "import": 0, - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "Manufacturing Manager", - "set_user_permissions": 0, - "share": 1, - "submit": 0, + "amend": 0, + "apply_user_permissions": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "email": 0, + "export": 0, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Manufacturing Manager", + "set_user_permissions": 0, + "share": 1, + "submit": 0, "write": 1 } - ], - "read_only": 0, - "read_only_onload": 0, - "sort_field": "modified", + ], + "read_only": 0, + "read_only_onload": 0, + "sort_field": "modified", "sort_order": "DESC" -} +} \ No newline at end of file diff --git a/erpnext/manufacturing/doctype/production_order/production_order.js b/erpnext/manufacturing/doctype/production_order/production_order.js index 04fcaa5c011..cf02a3a7475 100644 --- a/erpnext/manufacturing/doctype/production_order/production_order.js +++ b/erpnext/manufacturing/doctype/production_order/production_order.js @@ -17,6 +17,7 @@ frappe.ui.form.on("Production Order", "onload", function(frm) { erpnext.production_order.set_custom_buttons(frm); erpnext.production_order.setup_company_filter(frm); erpnext.production_order.setup_bom_filter(frm); + erpnext.production_order.set_default_warehouse(frm); }); frappe.ui.form.on("Production Order", "refresh", function(frm) { @@ -138,10 +139,22 @@ erpnext.production_order = { } } else msgprint(__("Please enter Production Item first")); }); + }, + + set_default_warehouse: function(frm) { + frappe.call({ + method: "erpnext.manufacturing.doctype.production_order.production_order.get_default_warehouse", + + callback: function(r) { + if(!r.exe) { + frm.set_value("wip_warehouse", r.message[0]); + frm.set_value("fg_warehouse", r.message[1]) + } + } + }); } } - $.extend(cur_frm.cscript, { before_submit: function() { cur_frm.toggle_reqd(["fg_warehouse", "wip_warehouse"], true); diff --git a/erpnext/manufacturing/doctype/production_order/production_order.py b/erpnext/manufacturing/doctype/production_order/production_order.py index 2039d93659e..182f306c111 100644 --- a/erpnext/manufacturing/doctype/production_order/production_order.py +++ b/erpnext/manufacturing/doctype/production_order/production_order.py @@ -422,3 +422,9 @@ def make_time_log(name, operation, from_time=None, to_time=None, qty=None, proj if from_time and to_time : time_log.calculate_total_hours() return time_log + +@frappe.whitelist() +def get_default_warehouse(): + wip_warehouse = frappe.db.get_single_value("Manufacturing Settings", "default_wip_warehouse") + fg_warehouse = frappe.db.get_single_value("Manufacturing Settings", "default_fg_warehouse") + return wip_warehouse, fg_warehouse \ No newline at end of file From 75d90b1c00b039e03fa848e26f5ad029c4486cdb Mon Sep 17 00:00:00 2001 From: Neil Trini Lasrado Date: Fri, 21 Aug 2015 18:22:43 +0530 Subject: [PATCH 2/3] Fixed Produciton Planning Tool --- .../production_planning_tool/production_planning_tool.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py b/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py index e302cc782b1..3f08b1beaed 100644 --- a/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py +++ b/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py @@ -200,14 +200,16 @@ class ProductionPlanningTool(Document): def create_production_order(self, items): """Create production order. Called from Production Planning Tool""" - from erpnext.manufacturing.doctype.production_order.production_order import OverProductionError - + from erpnext.manufacturing.doctype.production_order.production_order import OverProductionError, get_default_warehouse + warehouse = get_default_warehouse() pro_list = [] for key in items: pro = frappe.new_doc("Production Order") pro.update(items[key]) pro.set_production_order_operations() - + if warehouse: + pro.wip_warehouse = warehouse[0] + pro.fg_warehouse = warehouse[1] frappe.flags.mute_messages = True try: pro.insert() From 92a3dbb5d335929b05600430ee6d1568df226575 Mon Sep 17 00:00:00 2001 From: Neil Trini Lasrado Date: Mon, 24 Aug 2015 15:52:27 +0530 Subject: [PATCH 3/3] Fixes in Default Warehouse --- .../doctype/production_order/production_order.js | 6 +++--- .../doctype/production_order/production_order.py | 2 +- .../production_planning_tool/production_planning_tool.py | 7 ++++--- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/erpnext/manufacturing/doctype/production_order/production_order.js b/erpnext/manufacturing/doctype/production_order/production_order.js index cf02a3a7475..00eac9ad7a0 100644 --- a/erpnext/manufacturing/doctype/production_order/production_order.js +++ b/erpnext/manufacturing/doctype/production_order/production_order.js @@ -12,12 +12,12 @@ frappe.ui.form.on("Production Order", "onload", function(frm) { "actual_start_date": "", "actual_end_date": "" }); + erpnext.production_order.set_default_warehouse(frm); } erpnext.production_order.set_custom_buttons(frm); erpnext.production_order.setup_company_filter(frm); erpnext.production_order.setup_bom_filter(frm); - erpnext.production_order.set_default_warehouse(frm); }); frappe.ui.form.on("Production Order", "refresh", function(frm) { @@ -147,8 +147,8 @@ erpnext.production_order = { callback: function(r) { if(!r.exe) { - frm.set_value("wip_warehouse", r.message[0]); - frm.set_value("fg_warehouse", r.message[1]) + frm.set_value("wip_warehouse", r.message.wip_warehouse); + frm.set_value("fg_warehouse", r.message.fg_warehouse) } } }); diff --git a/erpnext/manufacturing/doctype/production_order/production_order.py b/erpnext/manufacturing/doctype/production_order/production_order.py index 182f306c111..6299736d950 100644 --- a/erpnext/manufacturing/doctype/production_order/production_order.py +++ b/erpnext/manufacturing/doctype/production_order/production_order.py @@ -427,4 +427,4 @@ def make_time_log(name, operation, from_time=None, to_time=None, qty=None, proj def get_default_warehouse(): wip_warehouse = frappe.db.get_single_value("Manufacturing Settings", "default_wip_warehouse") fg_warehouse = frappe.db.get_single_value("Manufacturing Settings", "default_fg_warehouse") - return wip_warehouse, fg_warehouse \ No newline at end of file + return {"wip_warehouse": wip_warehouse, "fg_warehouse": fg_warehouse} \ No newline at end of file diff --git a/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py b/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py index 3f08b1beaed..254b5a58fa7 100644 --- a/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py +++ b/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py @@ -208,9 +208,11 @@ class ProductionPlanningTool(Document): pro.update(items[key]) pro.set_production_order_operations() if warehouse: - pro.wip_warehouse = warehouse[0] - pro.fg_warehouse = warehouse[1] + pro.wip_warehouse = warehouse.get('wip_warehouse') + if not pro.fg_warehouse: + pro.fg_warehouse = warehouse.get('fg_warehouse') frappe.flags.mute_messages = True + try: pro.insert() pro_list.append(pro.name) @@ -218,7 +220,6 @@ class ProductionPlanningTool(Document): pass frappe.flags.mute_messages = False - return pro_list def download_raw_materials(self):