From 4265c5a772111b233486301f5a2663231547b4f8 Mon Sep 17 00:00:00 2001 From: rohitwaghchaure Date: Mon, 24 Dec 2018 14:38:49 +0530 Subject: [PATCH] Rename BOM and Work order fields (#16209) * Rename BOM and Work order fields * Rearranged BOM fields --- erpnext/manufacturing/doctype/bom/bom.js | 2 + erpnext/manufacturing/doctype/bom/bom.json | 313 +++++++++--------- erpnext/manufacturing/doctype/bom/bom.py | 20 +- .../doctype/bom/test_records.json | 14 +- .../bom_explosion_item.json | 7 +- .../doctype/bom_item/bom_item.json | 148 +++++++-- .../doctype/job_card/job_card.js | 3 +- .../doctype/job_card/job_card.json | 138 +++++--- .../doctype/job_card/job_card.py | 40 ++- .../doctype/job_card/job_card_list.js | 2 + .../doctype/work_order/test_work_order.py | 2 +- .../doctype/work_order/work_order.js | 26 +- .../doctype/work_order/work_order.json | 141 ++++---- .../doctype/work_order/work_order.py | 10 +- .../work_order_item/work_order_item.json | 7 +- erpnext/patches.txt | 1 + erpnext/patches/v11_0/rename_bom_wo_fields.py | 24 ++ .../update_allow_transfer_for_manufacture.py | 4 +- erpnext/stock/doctype/item/item.json | 15 +- .../stock/doctype/stock_entry/stock_entry.py | 4 +- 20 files changed, 551 insertions(+), 370 deletions(-) create mode 100644 erpnext/patches/v11_0/rename_bom_wo_fields.py diff --git a/erpnext/manufacturing/doctype/bom/bom.js b/erpnext/manufacturing/doctype/bom/bom.js index a01011a178d..2615b31782c 100644 --- a/erpnext/manufacturing/doctype/bom/bom.js +++ b/erpnext/manufacturing/doctype/bom/bom.js @@ -402,6 +402,8 @@ frappe.ui.form.on("BOM Item", "items_remove", function(frm) { var toggle_operations = function(frm) { frm.toggle_display("operations_section", cint(frm.doc.with_operations) == 1); + frm.toggle_display("transfer_material_against", cint(frm.doc.with_operations) == 1); + frm.toggle_reqd("transfer_material_against", cint(frm.doc.with_operations) == 1); }; frappe.ui.form.on("BOM", "with_operations", function(frm) { diff --git a/erpnext/manufacturing/doctype/bom/bom.json b/erpnext/manufacturing/doctype/bom/bom.json index 8c5f2af96a8..0cf7dc4f816 100644 --- a/erpnext/manufacturing/doctype/bom/bom.json +++ b/erpnext/manufacturing/doctype/bom/bom.json @@ -80,41 +80,6 @@ "translatable": 0, "unique": 0 }, - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "default": "1", - "description": "Quantity of item obtained after manufacturing / repacking from given quantities of raw materials", - "fieldname": "quantity", - "fieldtype": "Float", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Quantity", - "length": 0, - "no_copy": 0, - "oldfieldname": "quantity", - "oldfieldtype": "Currency", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, { "allow_bulk_edit": 0, "allow_in_quick_entry": 0, @@ -154,8 +119,10 @@ "bold": 0, "collapsible": 0, "columns": 0, - "fieldname": "inspection_required", - "fieldtype": "Check", + "default": "1", + "description": "Quantity of item obtained after manufacturing / repacking from given quantities of raw materials", + "fieldname": "quantity", + "fieldtype": "Float", "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, @@ -163,51 +130,18 @@ "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, - "label": "Inspection Required", + "label": "Quantity", "length": 0, "no_copy": 0, + "oldfieldname": "quantity", + "oldfieldtype": "Currency", "permlevel": 0, - "precision": "", "print_hide": 0, "print_hide_if_no_value": 0, "read_only": 0, "remember_last_selected_value": 0, "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "depends_on": "inspection_required", - "fieldname": "quality_inspection_template", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Quality Inspection Template", - "length": 0, - "no_copy": 0, - "options": "Quality Inspection Template", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, + "reqd": 1, "search_index": 0, "set_only_once": 0, "translatable": 0, @@ -346,77 +280,11 @@ { "allow_bulk_edit": 0, "allow_in_quick_entry": 0, - "allow_on_submit": 1, + "allow_on_submit": 0, "bold": 0, "collapsible": 0, "columns": 0, - "fieldname": "rm_cost_as_per", - "fieldtype": "Select", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Rate Of Materials Based On", - "length": 0, - "no_copy": 0, - "options": "Valuation Rate\nLast Purchase Rate\nPrice List", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 1, - "bold": 0, - "collapsible": 0, - "columns": 0, - "depends_on": "eval:doc.rm_cost_as_per===\"Price List\"", - "fieldname": "buying_price_list", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Price List", - "length": 0, - "no_copy": 0, - "options": "Price List", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 1, - "bold": 0, - "collapsible": 0, - "columns": 0, - "default": "1", - "fieldname": "set_rate_of_sub_assembly_item_based_on_bom", + "fieldname": "inspection_required", "fieldtype": "Check", "hidden": 0, "ignore_user_permissions": 0, @@ -425,7 +293,7 @@ "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, - "label": "Set rate of sub-assembly item based on BOM", + "label": "Inspection Required", "length": 0, "no_copy": 0, "permlevel": 0, @@ -481,7 +349,7 @@ "collapsible": 0, "columns": 0, "fieldname": "allow_same_item_multiple_times", - "fieldtype": "Data", + "fieldtype": "Check", "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, @@ -508,12 +376,12 @@ { "allow_bulk_edit": 0, "allow_in_quick_entry": 0, - "allow_on_submit": 0, + "allow_on_submit": 1, "bold": 0, "collapsible": 0, "columns": 0, - "depends_on": "with_operations", - "fieldname": "transfer_material_against_job_card", + "default": "1", + "fieldname": "set_rate_of_sub_assembly_item_based_on_bom", "fieldtype": "Check", "hidden": 0, "ignore_user_permissions": 0, @@ -522,7 +390,7 @@ "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, - "label": "Transfer Material Against Job Card", + "label": "Set rate of sub-assembly item based on BOM", "length": 0, "no_copy": 0, "permlevel": 0, @@ -538,6 +406,40 @@ "translatable": 0, "unique": 0 }, + { + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "depends_on": "inspection_required", + "fieldname": "quality_inspection_template", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Quality Inspection Template", + "length": 0, + "no_copy": 0, + "options": "Quality Inspection Template", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, + "unique": 0 + }, { "allow_bulk_edit": 0, "allow_in_quick_entry": 0, @@ -603,6 +505,72 @@ "translatable": 0, "unique": 0 }, + { + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "", + "fieldname": "transfer_material_against", + "fieldtype": "Select", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Transfer Material Against", + "length": 0, + "no_copy": 0, + "options": "\nWork Order\nJob Card", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "conversion_rate", + "fieldtype": "Float", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Conversion Rate", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "9", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, + "unique": 0 + }, { "allow_bulk_edit": 0, "allow_in_quick_entry": 0, @@ -670,12 +638,12 @@ { "allow_bulk_edit": 0, "allow_in_quick_entry": 0, - "allow_on_submit": 0, + "allow_on_submit": 1, "bold": 0, "collapsible": 0, "columns": 0, - "fieldname": "conversion_rate", - "fieldtype": "Float", + "fieldname": "rm_cost_as_per", + "fieldtype": "Select", "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, @@ -683,17 +651,50 @@ "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, - "label": "Conversion Rate", + "label": "Rate Of Materials Based On", "length": 0, "no_copy": 0, + "options": "Valuation Rate\nLast Purchase Rate\nPrice List", "permlevel": 0, - "precision": "9", "print_hide": 0, "print_hide_if_no_value": 0, "read_only": 0, "remember_last_selected_value": 0, "report_hide": 0, - "reqd": 1, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 1, + "bold": 0, + "collapsible": 0, + "columns": 0, + "depends_on": "eval:doc.rm_cost_as_per===\"Price List\"", + "fieldname": "buying_price_list", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Price List", + "length": 0, + "no_copy": 0, + "options": "Price List", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, "search_index": 0, "set_only_once": 0, "translatable": 0, @@ -707,7 +708,7 @@ "collapsible": 0, "columns": 0, "depends_on": "", - "description": "Specify the operations, operating cost and give a unique Operation no to your operations.", + "description": "", "fieldname": "operations_section", "fieldtype": "Section Break", "hidden": 0, @@ -1976,7 +1977,7 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2018-10-24 02:07:21.618275", + "modified": "2018-12-13 17:45:44.843197", "modified_by": "Administrator", "module": "Manufacturing", "name": "BOM", diff --git a/erpnext/manufacturing/doctype/bom/bom.py b/erpnext/manufacturing/doctype/bom/bom.py index d72f00af8f0..54ffa069126 100644 --- a/erpnext/manufacturing/doctype/bom/bom.py +++ b/erpnext/manufacturing/doctype/bom/bom.py @@ -81,7 +81,7 @@ class BOM(WebsiteGenerator): def get_item_det(self, item_code): item = frappe.db.sql("""select name, item_name, docstatus, description, image, - is_sub_contracted_item, stock_uom, default_bom, last_purchase_rate, allow_transfer_for_manufacture + is_sub_contracted_item, stock_uom, default_bom, last_purchase_rate, include_item_in_manufacturing from `tabItem` where name=%s""", item_code, as_dict = 1) if not item: @@ -109,7 +109,7 @@ class BOM(WebsiteGenerator): "item_name": item.item_name, "bom_no": item.bom_no, "stock_qty": item.stock_qty, - "allow_transfer_for_manufacture": item.allow_transfer_for_manufacture + "include_item_in_manufacturing": item.include_item_in_manufacturing }) for r in ret: if not item.get(r): @@ -128,8 +128,8 @@ class BOM(WebsiteGenerator): self.validate_rm_item(item) args['bom_no'] = args['bom_no'] or item and cstr(item[0]['default_bom']) or '' - args['transfer_for_manufacture'] = (cstr(args.get('allow_transfer_for_manufacture', '')) or - item and item[0].allow_transfer_for_manufacture or 0) + args['transfer_for_manufacture'] = (cstr(args.get('include_item_in_manufacturing', '')) or + item and item[0].include_item_in_manufacturing or 0) args.update(item[0]) rate = self.get_rm_rate(args) @@ -145,7 +145,7 @@ class BOM(WebsiteGenerator): 'qty' : args.get("qty") or args.get("stock_qty") or 1, 'stock_qty' : args.get("qty") or args.get("stock_qty") or 1, 'base_rate' : rate, - 'allow_transfer_for_manufacture': cint(args['transfer_for_manufacture']) or 0 + 'include_item_in_manufacturing': cint(args['transfer_for_manufacture']) or 0 } return ret_item @@ -477,7 +477,7 @@ class BOM(WebsiteGenerator): 'stock_uom' : d.stock_uom, 'stock_qty' : flt(d.stock_qty), 'rate' : d.base_rate, - 'allow_transfer_for_manufacture': d.allow_transfer_for_manufacture + 'include_item_in_manufacturing': d.include_item_in_manufacturing })) def company_currency(self): @@ -494,7 +494,7 @@ class BOM(WebsiteGenerator): # Did not use qty_consumed_per_unit in the query, as it leads to rounding loss child_fb_items = frappe.db.sql("""select bom_item.item_code, bom_item.item_name, bom_item.description, bom_item.source_warehouse, bom_item.operation, - bom_item.stock_uom, bom_item.stock_qty, bom_item.rate, bom_item.allow_transfer_for_manufacture, + bom_item.stock_uom, bom_item.stock_qty, bom_item.rate, bom_item.include_item_in_manufacturing, bom_item.stock_qty / ifnull(bom.quantity, 1) as qty_consumed_per_unit from `tabBOM Explosion Item` bom_item, tabBOM bom where bom_item.parent = bom.name and bom.name = %s and bom.docstatus = 1""", bom_no, as_dict = 1) @@ -509,7 +509,7 @@ class BOM(WebsiteGenerator): 'stock_uom' : d['stock_uom'], 'stock_qty' : d['qty_consumed_per_unit'] * stock_qty, 'rate' : flt(d['rate']), - 'allow_transfer_for_manufacture': d.get('allow_transfer_for_manufacture', 0) + 'include_item_in_manufacturing': d.get('include_item_in_manufacturing', 0) })) def add_exploded_items(self): @@ -585,7 +585,7 @@ def get_bom_items_as_dict(bom, company, qty=1, fetch_exploded=1, fetch_scrap_ite query = query.format(table="BOM Explosion Item", where_conditions="", is_stock_item=is_stock_item, - select_columns = """, bom_item.source_warehouse, bom_item.operation, bom_item.allow_transfer_for_manufacture, + select_columns = """, bom_item.source_warehouse, bom_item.operation, bom_item.include_item_in_manufacturing, (Select idx from `tabBOM Item` where item_code = bom_item.item_code and parent = %(parent)s ) as idx""") items = frappe.db.sql(query, { "parent": bom, "qty": qty, "bom": bom, "company": company }, as_dict=True) @@ -594,7 +594,7 @@ def get_bom_items_as_dict(bom, company, qty=1, fetch_exploded=1, fetch_scrap_ite items = frappe.db.sql(query, { "qty": qty, "bom": bom, "company": company }, as_dict=True) else: query = query.format(table="BOM Item", where_conditions="", is_stock_item=is_stock_item, - select_columns = ", bom_item.source_warehouse, bom_item.idx, bom_item.operation, bom_item.allow_transfer_for_manufacture") + select_columns = ", bom_item.source_warehouse, bom_item.idx, bom_item.operation, bom_item.include_item_in_manufacturing") items = frappe.db.sql(query, { "qty": qty, "bom": bom, "company": company }, as_dict=True) for item in items: diff --git a/erpnext/manufacturing/doctype/bom/test_records.json b/erpnext/manufacturing/doctype/bom/test_records.json index 1a7e594e87c..25730f9b9f4 100644 --- a/erpnext/manufacturing/doctype/bom/test_records.json +++ b/erpnext/manufacturing/doctype/bom/test_records.json @@ -11,7 +11,7 @@ "uom": "_Test UOM", "stock_uom": "_Test UOM", "source_warehouse": "_Test Warehouse - _TC", - "allow_transfer_for_manufacture": 1 + "include_item_in_manufacturing": 1 }, { "amount": 2000.0, @@ -23,7 +23,7 @@ "uom": "_Test UOM", "stock_uom": "_Test UOM", "source_warehouse": "_Test Warehouse - _TC", - "allow_transfer_for_manufacture": 1 + "include_item_in_manufacturing": 1 } ], "docstatus": 1, @@ -57,7 +57,7 @@ "uom": "_Test UOM", "stock_uom": "_Test UOM", "source_warehouse": "_Test Warehouse - _TC", - "allow_transfer_for_manufacture": 1 + "include_item_in_manufacturing": 1 }, { "amount": 2000.0, @@ -69,7 +69,7 @@ "uom": "_Test UOM", "stock_uom": "_Test UOM", "source_warehouse": "_Test Warehouse - _TC", - "allow_transfer_for_manufacture": 1 + "include_item_in_manufacturing": 1 } ], "docstatus": 1, @@ -102,7 +102,7 @@ "uom": "_Test UOM", "stock_uom": "_Test UOM", "source_warehouse": "_Test Warehouse - _TC", - "allow_transfer_for_manufacture": 1 + "include_item_in_manufacturing": 1 }, { "amount": 3000.0, @@ -115,7 +115,7 @@ "uom": "_Test UOM", "stock_uom": "_Test UOM", "source_warehouse": "_Test Warehouse - _TC", - "allow_transfer_for_manufacture": 1 + "include_item_in_manufacturing": 1 } ], "docstatus": 1, @@ -150,7 +150,7 @@ "uom": "_Test UOM", "stock_uom": "_Test UOM", "source_warehouse": "_Test Warehouse - _TC", - "allow_transfer_for_manufacture": 1 + "include_item_in_manufacturing": 1 } ], "docstatus": 1, diff --git a/erpnext/manufacturing/doctype/bom_explosion_item/bom_explosion_item.json b/erpnext/manufacturing/doctype/bom_explosion_item/bom_explosion_item.json index ab3c5a12059..9fadbef0f54 100644 --- a/erpnext/manufacturing/doctype/bom_explosion_item/bom_explosion_item.json +++ b/erpnext/manufacturing/doctype/bom_explosion_item/bom_explosion_item.json @@ -1,5 +1,6 @@ { "allow_copy": 0, + "allow_events_in_timeline": 0, "allow_guest_to_view": 0, "allow_import": 0, "allow_rename": 0, @@ -573,7 +574,7 @@ "bold": 0, "collapsible": 0, "columns": 0, - "fieldname": "allow_transfer_for_manufacture", + "fieldname": "include_item_in_manufacturing", "fieldtype": "Check", "hidden": 0, "ignore_user_permissions": 0, @@ -582,7 +583,7 @@ "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, - "label": "Allow Transfer for Manufacture", + "label": "Include Item In Manufacturing", "length": 0, "no_copy": 0, "permlevel": 0, @@ -609,7 +610,7 @@ "issingle": 0, "istable": 1, "max_attachments": 0, - "modified": "2018-08-27 16:32:35.152139", + "modified": "2018-11-20 19:04:59.813773", "modified_by": "Administrator", "module": "Manufacturing", "name": "BOM Explosion Item", diff --git a/erpnext/manufacturing/doctype/bom_item/bom_item.json b/erpnext/manufacturing/doctype/bom_item/bom_item.json index cc69471eba2..b5203603041 100644 --- a/erpnext/manufacturing/doctype/bom_item/bom_item.json +++ b/erpnext/manufacturing/doctype/bom_item/bom_item.json @@ -79,34 +79,67 @@ "unique": 0 }, { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "column_break_3", - "fieldtype": "Column Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "operation", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Item operation", + "length": 0, + "no_copy": 0, + "options": "Operation", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_3", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, "unique": 0 }, { @@ -932,8 +965,7 @@ "bold": 0, "collapsible": 0, "columns": 0, - "fetch_from": "item_code.allow_transfer_for_manufacture", - "fieldname": "allow_transfer_for_manufacture", + "fetch_from": "item_code.include_item_in_manufacturing", "fieldtype": "Check", "hidden": 0, "ignore_user_permissions": 0, @@ -942,7 +974,6 @@ "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, - "label": "Allow Transfer for Manufacture", "length": 0, "no_copy": 0, "permlevel": 0, @@ -956,6 +987,29 @@ "search_index": 0, "set_only_once": 0, "translatable": 0, + "fieldname": "include_item_in_manufacturing", + "fieldtype": "Check", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Include Item In Manufacturing", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, "unique": 0 }, { @@ -1023,6 +1077,38 @@ "set_only_once": 0, "translatable": 0, "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "allow_alternative_item", + "fieldtype": "Check", + "hidden": 1, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Allow Alternative Item", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, + "unique": 0 } ], "has_web_view": 0, diff --git a/erpnext/manufacturing/doctype/job_card/job_card.js b/erpnext/manufacturing/doctype/job_card/job_card.js index 6f5290e9ca2..3fe9b8af30d 100644 --- a/erpnext/manufacturing/doctype/job_card/job_card.js +++ b/erpnext/manufacturing/doctype/job_card/job_card.js @@ -3,7 +3,7 @@ frappe.ui.form.on('Job Card', { refresh: function(frm) { - if (frm.doc.items && frm.doc.docstatus==1) { + if(!frm.doc.__islocal && frm.doc.items && frm.doc.items.length) { if (frm.doc.for_quantity != frm.doc.transferred_qty) { frm.add_custom_button(__("Material Request"), () => { frm.trigger("make_material_request"); @@ -31,6 +31,7 @@ frappe.ui.form.on('Job Card', { frm.add_custom_button(__("Complete Job"), () => { frm.set_value('actual_end_date', frappe.datetime.now_datetime()); frm.save(); + frm.savesubmit(); }); } } diff --git a/erpnext/manufacturing/doctype/job_card/job_card.json b/erpnext/manufacturing/doctype/job_card/job_card.json index 443cad8666c..b020c89053c 100644 --- a/erpnext/manufacturing/doctype/job_card/job_card.json +++ b/erpnext/manufacturing/doctype/job_card/job_card.json @@ -1,5 +1,6 @@ { "allow_copy": 0, + "allow_events_in_timeline": 0, "allow_guest_to_view": 0, "allow_import": 0, "allow_rename": 0, @@ -46,6 +47,39 @@ "translatable": 0, "unique": 0 }, + { + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "bom_no", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "BOM No", + "length": 0, + "no_copy": 0, + "options": "BOM", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, + "unique": 0 + }, { "allow_bulk_edit": 0, "allow_in_quick_entry": 0, @@ -112,39 +146,6 @@ "translatable": 0, "unique": 0 }, - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "wip_warehouse", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "WIP Warehouse", - "length": 0, - "no_copy": 0, - "options": "Warehouse", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, { "allow_bulk_edit": 0, "allow_in_quick_entry": 0, @@ -281,9 +282,8 @@ "bold": 0, "collapsible": 0, "columns": 0, - "default": "0", - "fieldname": "transferred_qty", - "fieldtype": "Float", + "fieldname": "wip_warehouse", + "fieldtype": "Link", "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, @@ -291,17 +291,18 @@ "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, - "label": "Transferred Qty", + "label": "WIP Warehouse", "length": 0, "no_copy": 0, + "options": "Warehouse", "permlevel": 0, "precision": "", "print_hide": 0, "print_hide_if_no_value": 0, - "read_only": 1, + "read_only": 0, "remember_last_selected_value": 0, "report_hide": 0, - "reqd": 0, + "reqd": 1, "search_index": 0, "set_only_once": 0, "translatable": 0, @@ -635,8 +636,9 @@ "bold": 0, "collapsible": 0, "columns": 0, - "fieldname": "bom_no", - "fieldtype": "Link", + "default": "0", + "fieldname": "transferred_qty", + "fieldtype": "Float", "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, @@ -644,10 +646,42 @@ "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, - "label": "BOM No", + "label": "Transferred Qty", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "0", + "fieldname": "requested_qty", + "fieldtype": "Float", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Requested Qty", "length": 0, "no_copy": 0, - "options": "BOM", "permlevel": 0, "precision": "", "print_hide": 0, @@ -701,8 +735,8 @@ "bold": 0, "collapsible": 0, "columns": 0, - "fieldname": "column_break_20", - "fieldtype": "Column Break", + "fieldname": "remarks", + "fieldtype": "Small Text", "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, @@ -710,6 +744,7 @@ "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, + "label": "Remarks", "length": 0, "no_copy": 0, "permlevel": 0, @@ -732,8 +767,8 @@ "bold": 0, "collapsible": 0, "columns": 0, - "fieldname": "remarks", - "fieldtype": "Small Text", + "fieldname": "column_break_20", + "fieldtype": "Column Break", "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, @@ -741,7 +776,6 @@ "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, - "label": "Remarks", "length": 0, "no_copy": 0, "permlevel": 0, @@ -776,13 +810,13 @@ "in_standard_filter": 0, "label": "Status", "length": 0, - "no_copy": 0, - "options": "Open\nWork In Progress\nCancelled\nCompleted", + "no_copy": 1, + "options": "Open\nWork In Progress\nMaterial Transferred\nSubmitted\nCancelled\nCompleted", "permlevel": 0, "precision": "", "print_hide": 0, "print_hide_if_no_value": 0, - "read_only": 0, + "read_only": 1, "remember_last_selected_value": 0, "report_hide": 0, "reqd": 0, @@ -834,7 +868,7 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2018-08-28 16:50:43.576151", + "modified": "2018-12-13 17:23:57.986381", "modified_by": "Administrator", "module": "Manufacturing", "name": "Job Card", diff --git a/erpnext/manufacturing/doctype/job_card/job_card.py b/erpnext/manufacturing/doctype/job_card/job_card.py index bc745350a7e..5343a280ca7 100644 --- a/erpnext/manufacturing/doctype/job_card/job_card.py +++ b/erpnext/manufacturing/doctype/job_card/job_card.py @@ -11,9 +11,9 @@ from frappe.model.document import Document class JobCard(Document): def validate(self): - self.status = 'Open' self.validate_actual_dates() self.set_time_in_mins() + self.set_status() def validate_actual_dates(self): if get_datetime(self.actual_start_date) > get_datetime(self.actual_end_date): @@ -48,7 +48,7 @@ class JobCard(Document): return doc = frappe.get_doc('Work Order', self.get('work_order')) - if not doc.transfer_material_against_job_card and doc.skip_transfer: + if doc.transfer_material_against == 'Work Order' and doc.skip_transfer: return for d in doc.required_items: @@ -104,20 +104,23 @@ class JobCard(Document): wo.set_actual_dates() wo.save() - def set_transferred_qty(self): + def set_transferred_qty(self, update_status=False): if not self.items: self.transferred_qty = self.for_quantity if self.docstatus == 1 else 0 if self.items: - self.transferred_qty = frappe.db.get_value('Stock Entry', {'job_card': self.name, - 'work_order': self.work_order, 'docstatus': 1}, 'sum(fg_completed_qty)') or 0 + self.transferred_qty = frappe.db.get_value('Stock Entry', { + 'job_card': self.name, + 'work_order': self.work_order, + 'docstatus': 1 + }, 'sum(fg_completed_qty)') or 0 self.db_set("transferred_qty", self.transferred_qty) qty = 0 if self.work_order: doc = frappe.get_doc('Work Order', self.work_order) - if doc.transfer_material_against_job_card and not doc.skip_transfer: + if doc.transfer_material_against == 'Job Card' and not doc.skip_transfer: completed = True for d in doc.operations: if d.status != 'Completed': @@ -131,15 +134,28 @@ class JobCard(Document): doc.db_set('material_transferred_for_manufacturing', qty) - self.set_status() + self.set_status(update_status) - def set_status(self): - status = 'Cancelled' if self.docstatus == 2 else 'Work In Progress' + def set_status(self, update_status=False): + self.status = { + 0: "Open", + 1: "Submitted", + 2: "Cancelled" + }[self.docstatus or 0] - if self.for_quantity == self.transferred_qty: - status = 'Completed' + if self.actual_start_date: + self.status = 'Work In Progress' - self.db_set('status', status) + if (self.docstatus == 1 and + (self.for_quantity == self.transferred_qty or not self.items)): + self.status = 'Completed' + + if self.status != 'Completed': + if self.for_quantity == self.transferred_qty: + self.status = 'Material Transferred' + + if update_status: + self.db_set('status', self.status) @frappe.whitelist() def make_material_request(source_name, target_doc=None): diff --git a/erpnext/manufacturing/doctype/job_card/job_card_list.js b/erpnext/manufacturing/doctype/job_card/job_card_list.js index d40a9fa4958..ed851ebc83b 100644 --- a/erpnext/manufacturing/doctype/job_card/job_card_list.js +++ b/erpnext/manufacturing/doctype/job_card/job_card_list.js @@ -6,6 +6,8 @@ frappe.listview_settings['Job Card'] = { return [__("Completed"), "green", "status,=,Completed"]; } else if (doc.docstatus == 2) { return [__("Cancelled"), "red", "status,=,Cancelled"]; + } else if (doc.status === "Material Transferred") { + return [__('Material Transferred'), "blue", "status,=,Material Transferred"]; } else { return [__("Open"), "red", "status,=,Open"]; } diff --git a/erpnext/manufacturing/doctype/work_order/test_work_order.py b/erpnext/manufacturing/doctype/work_order/test_work_order.py index 431ad325587..69381c53b3e 100644 --- a/erpnext/manufacturing/doctype/work_order/test_work_order.py +++ b/erpnext/manufacturing/doctype/work_order/test_work_order.py @@ -306,7 +306,7 @@ class TestWorkOrder(unittest.TestCase): items = {'Finished Good Transfer Item': 1, '_Test FG Item': 1, '_Test FG Item 1': 0} for item, allow_transfer in items.items(): make_item(item, { - 'allow_transfer_for_manufacture': allow_transfer + 'include_item_in_manufacturing': allow_transfer }) fg_item = 'Finished Good Transfer Item' diff --git a/erpnext/manufacturing/doctype/work_order/work_order.js b/erpnext/manufacturing/doctype/work_order/work_order.js index e85b0a5411b..7b2f9a4bff3 100644 --- a/erpnext/manufacturing/doctype/work_order/work_order.js +++ b/erpnext/manufacturing/doctype/work_order/work_order.js @@ -112,11 +112,20 @@ frappe.ui.form.on("Work Order", { frm.trigger('show_progress'); } - if (frm.doc.docstatus === 1 && frm.doc.operations + if (frm.doc.docstatus === 1 + && frm.doc.operations && frm.doc.operations.length && frm.doc.qty != frm.doc.material_transferred_for_manufacturing) { - frm.add_custom_button(__('Make Job Card'), () => { - frm.trigger("make_job_card") - }).addClass('btn-primary'); + const not_completed = frm.doc.operations.filter(d => { + if(d.status != 'Completed') { + return true; + } + }); + + if(not_completed && not_completed.length) { + frm.add_custom_button(__('Make Job Card'), () => { + frm.trigger("make_job_card") + }).addClass('btn-primary'); + } } if(frm.doc.required_items && frm.doc.allow_alternative_item) { @@ -294,7 +303,7 @@ frappe.ui.form.on("Work Order", { frm.trigger('set_sales_order'); erpnext.in_production_item_onchange = true; $.each(["description", "stock_uom", "project", "bom_no", - "allow_alternative_item", "transfer_material_against_job_card"], function(i, field) { + "allow_alternative_item", "transfer_material_against"], function(i, field) { frm.set_value(field, r.message[field]); }); @@ -340,9 +349,8 @@ frappe.ui.form.on("Work Order", { before_submit: function(frm) { frm.toggle_reqd(["fg_warehouse", "wip_warehouse"], true); frm.fields_dict.required_items.grid.toggle_reqd("source_warehouse", true); - if (frm.doc.operations) { - frm.fields_dict.operations.grid.toggle_reqd("workstation", true); - } + frm.toggle_reqd("transfer_material_against", frm.doc.operations); + frm.fields_dict.operations.grid.toggle_reqd("workstation", frm.doc.operations); }, set_sales_order: function(frm) { @@ -425,7 +433,7 @@ erpnext.work_order = { } const show_start_btn = (frm.doc.skip_transfer - || frm.doc.transfer_material_against_job_card) ? 0 : 1; + || frm.doc.transfer_material_against == 'Job Card') ? 0 : 1; if (show_start_btn){ if ((flt(doc.material_transferred_for_manufacturing) < flt(doc.qty)) diff --git a/erpnext/manufacturing/doctype/work_order/work_order.json b/erpnext/manufacturing/doctype/work_order/work_order.json index df9dd83a704..a65d04f61b8 100644 --- a/erpnext/manufacturing/doctype/work_order/work_order.json +++ b/erpnext/manufacturing/doctype/work_order/work_order.json @@ -1,5 +1,6 @@ { "allow_copy": 0, + "allow_events_in_timeline": 0, "allow_guest_to_view": 0, "allow_import": 1, "allow_rename": 0, @@ -183,6 +184,38 @@ "translatable": 0, "unique": 0 }, + { + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "allow_alternative_item", + "fieldtype": "Check", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Allow Alternative Item", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, + "unique": 0 + }, { "allow_bulk_edit": 0, "allow_in_quick_entry": 0, @@ -223,7 +256,8 @@ "bold": 0, "collapsible": 0, "columns": 0, - "fieldname": "allow_alternative_item", + "description": "Check if material transfer entry is not required", + "fieldname": "skip_transfer", "fieldtype": "Check", "hidden": 0, "ignore_user_permissions": 0, @@ -232,7 +266,7 @@ "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, - "label": "Allow Alternative Item", + "label": "Skip Material Transfer", "length": 0, "no_copy": 0, "permlevel": 0, @@ -486,39 +520,6 @@ "translatable": 0, "unique": 0 }, - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "description": "Check if material transfer entry is not required", - "fieldname": "skip_transfer", - "fieldtype": "Check", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Skip Material Transfer", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, { "allow_bulk_edit": 0, "allow_in_quick_entry": 0, @@ -552,39 +553,6 @@ "translatable": 0, "unique": 0 }, - { - "allow_bulk_edit": 0, - "allow_in_quick_entry": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "depends_on": "operations", - "fieldname": "transfer_material_against_job_card", - "fieldtype": "Check", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Transfer Material Against Job Card", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "translatable": 0, - "unique": 0 - }, { "allow_bulk_edit": 0, "allow_in_quick_entry": 0, @@ -1070,6 +1038,41 @@ "translatable": 0, "unique": 0 }, + { + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "Work Order", + "depends_on": "operations", + "fieldname": "transfer_material_against", + "fieldtype": "Select", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Transfer Material Against", + "length": 0, + "no_copy": 0, + "options": "\nWork Order\nJob Card", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, + "unique": 0 + }, { "allow_bulk_edit": 0, "allow_in_quick_entry": 0, @@ -1672,7 +1675,7 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2018-09-05 06:28:22.983369", + "modified": "2018-12-13 15:33:12.490710", "modified_by": "Administrator", "module": "Manufacturing", "name": "Work Order", diff --git a/erpnext/manufacturing/doctype/work_order/work_order.py b/erpnext/manufacturing/doctype/work_order/work_order.py index e73328f10e1..9873efa124b 100644 --- a/erpnext/manufacturing/doctype/work_order/work_order.py +++ b/erpnext/manufacturing/doctype/work_order/work_order.py @@ -191,7 +191,7 @@ class WorkOrder(Document): for purpose, fieldname in (("Manufacture", "produced_qty"), ("Material Transfer for Manufacture", "material_transferred_for_manufacturing")): if (purpose == 'Material Transfer for Manufacture' and - self.operations and self.transfer_material_against_job_card): + self.operations and self.transfer_material_against == 'Job Card'): continue qty = flt(frappe.db.sql("""select sum(fg_completed_qty) @@ -459,7 +459,7 @@ class WorkOrder(Document): 'allow_alternative_item': item.allow_alternative_item, 'required_qty': item.qty, 'source_warehouse': item.source_warehouse or item.default_warehouse, - 'allow_transfer_for_manufacture': item.allow_transfer_for_manufacture + 'include_item_in_manufacturing': item.include_item_in_manufacturing }) self.set_available_qty() @@ -564,11 +564,11 @@ def get_item_details(item, project = None): frappe.throw(_("Default BOM for {0} not found").format(item)) bom_data = frappe.db.get_value('BOM', res['bom_no'], - ['project', 'allow_alternative_item', 'transfer_material_against_job_card'], as_dict=1) + ['project', 'allow_alternative_item', 'transfer_material_against'], as_dict=1) res['project'] = project or bom_data.project res['allow_alternative_item'] = bom_data.allow_alternative_item - res['transfer_material_against_job_card'] = bom_data.transfer_material_against_job_card + res['transfer_material_against'] = bom_data.transfer_material_against res.update(check_if_scrap_warehouse_mandatory(res["bom_no"])) return res @@ -682,7 +682,7 @@ def create_job_card(work_order, row, qty=0, auto_create=False): 'wip_warehouse': work_order.wip_warehouse }) - if work_order.transfer_material_against_job_card and not work_order.skip_transfer: + if work_order.transfer_material_against == 'Job Card' and not work_order.skip_transfer: doc.get_required_items() if auto_create: diff --git a/erpnext/manufacturing/doctype/work_order_item/work_order_item.json b/erpnext/manufacturing/doctype/work_order_item/work_order_item.json index 1db11f76910..44421626361 100644 --- a/erpnext/manufacturing/doctype/work_order_item/work_order_item.json +++ b/erpnext/manufacturing/doctype/work_order_item/work_order_item.json @@ -1,5 +1,6 @@ { "allow_copy": 0, + "allow_events_in_timeline": 0, "allow_guest_to_view": 0, "allow_import": 0, "allow_rename": 0, @@ -342,7 +343,7 @@ "bold": 0, "collapsible": 0, "columns": 0, - "fieldname": "allow_transfer_for_manufacture", + "fieldname": "include_item_in_manufacturing", "fieldtype": "Check", "hidden": 0, "ignore_user_permissions": 0, @@ -351,7 +352,7 @@ "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, - "label": "Allow Transfer for Manufacture", + "label": "Include Item In Manufacturing", "length": 0, "no_copy": 0, "permlevel": 0, @@ -506,7 +507,7 @@ "issingle": 0, "istable": 1, "max_attachments": 0, - "modified": "2018-10-04 16:16:54.237829", + "modified": "2018-11-20 19:04:38.508839", "modified_by": "Administrator", "module": "Manufacturing", "name": "Work Order Item", diff --git a/erpnext/patches.txt b/erpnext/patches.txt index e5cee2e5a74..9b8a69d2b21 100755 --- a/erpnext/patches.txt +++ b/erpnext/patches.txt @@ -579,3 +579,4 @@ erpnext.patches.v10_0.update_user_image_in_employee erpnext.patches.v11_0.update_delivery_trip_status erpnext.patches.v10_0.repost_gle_for_purchase_receipts_with_rejected_items erpnext.patches.v11_0.set_missing_gst_hsn_code +erpnext.patches.v11_0.rename_bom_wo_fields diff --git a/erpnext/patches/v11_0/rename_bom_wo_fields.py b/erpnext/patches/v11_0/rename_bom_wo_fields.py new file mode 100644 index 00000000000..43fbea5ea7a --- /dev/null +++ b/erpnext/patches/v11_0/rename_bom_wo_fields.py @@ -0,0 +1,24 @@ +# Copyright (c) 2018, Frappe and Contributors +# License: GNU General Public License v3. See license.txt + +from __future__ import unicode_literals +import frappe +from frappe.model.utils.rename_field import rename_field + +def execute(): + for doctype in ['BOM Explosion Item', 'BOM Item', 'Work Order Item', 'Item']: + if frappe.db.has_column(doctype, 'allow_transfer_for_manufacture'): + rename_field('BOM Item', "allow_transfer_for_manufacture", "include_item_in_manufacturing") + + for doctype in ['BOM', 'Work Order']: + frappe.reload_doc('manufacturing', 'doctype', frappe.scrub(doctype)) + + if frappe.db.has_column(doctype, 'transfer_material_against_job_card'): + frappe.db.sql(""" UPDATE `tab%s` + SET transfer_material_against = CASE WHEN + transfer_material_against_job_card = 1 then 'Job Card' Else 'Work Order' END + WHERE docstatus < 2""" % (doctype)) + else: + frappe.db.sql(""" UPDATE `tab%s` + SET transfer_material_against = 'Work Order' + WHERE docstatus < 2""" % (doctype)) \ No newline at end of file diff --git a/erpnext/patches/v11_0/update_allow_transfer_for_manufacture.py b/erpnext/patches/v11_0/update_allow_transfer_for_manufacture.py index 9c94deee4b0..1b58c97ea4d 100644 --- a/erpnext/patches/v11_0/update_allow_transfer_for_manufacture.py +++ b/erpnext/patches/v11_0/update_allow_transfer_for_manufacture.py @@ -6,7 +6,7 @@ import frappe def execute(): frappe.reload_doc('stock', 'doctype', 'item') - frappe.db.sql(""" update `tabItem` set allow_transfer_for_manufacture = 1 + frappe.db.sql(""" update `tabItem` set include_item_in_manufacturing = 1 where ifnull(is_stock_item, 0) = 1""") for doctype in ['BOM Item', 'Work Order Item', 'BOM Explosion Item']: @@ -14,7 +14,7 @@ def execute(): frappe.db.sql(""" update `tab{0}` child, tabItem item set - child.allow_transfer_for_manufacture = 1 + child.include_item_in_manufacturing = 1 where child.item_code = item.name and ifnull(item.is_stock_item, 0) = 1 """.format(doctype)) \ No newline at end of file diff --git a/erpnext/stock/doctype/item/item.json b/erpnext/stock/doctype/item/item.json index 7d1bb6d27a9..0d2dd2ce6f9 100644 --- a/erpnext/stock/doctype/item/item.json +++ b/erpnext/stock/doctype/item/item.json @@ -1,5 +1,6 @@ { "allow_copy": 0, + "allow_events_in_timeline": 0, "allow_guest_to_view": 0, "allow_import": 1, "allow_rename": 1, @@ -453,7 +454,7 @@ "collapsible": 0, "columns": 0, "default": "1", - "fieldname": "allow_transfer_for_manufacture", + "fieldname": "include_item_in_manufacturing", "fieldtype": "Check", "hidden": 0, "ignore_user_permissions": 0, @@ -462,7 +463,7 @@ "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, - "label": "Allow Transfer for Manufacture", + "label": "Include Item In Manufacturing", "length": 0, "no_copy": 0, "permlevel": 0, @@ -1459,7 +1460,7 @@ "collapsible": 0, "columns": 0, "depends_on": "eval:doc.has_batch_no==1 && doc.create_new_batch==1", - "description": "Example: ABCD.#####. If series is set and Batch No is not mentioned in transactions, then automatic batch number will be created based on this series. If you always want to explicitly mention Batch No for this item, leave this blank. Note: this setting will take priority over the Naming Series Prefix in Stock Settings.", + "description": "Example: ABCD.#####. If series is set and Batch No is not mentioned in transactions,then automatic batch number will be created based on this series. If you always want to explicitly mention Batch No for this item,leave this blank. Note: this setting will take priority over the Naming Series Prefix in Stock Settings.", "fieldname": "batch_number_series", "fieldtype": "Data", "hidden": 0, @@ -1661,7 +1662,7 @@ "collapsible": 0, "columns": 0, "depends_on": "eval:doc.is_stock_item || doc.is_fixed_asset", - "description": "Example: ABCD.#####\nIf series is set and Serial No is not mentioned in transactions, then automatic serial number will be created based on this series. If you always want to explicitly mention Serial Nos for this item. leave this blank.", + "description": "Example: ABCD.#####\nIf series is set and Serial No is not mentioned in transactions,then automatic serial number will be created based on this series. If you always want to explicitly mention Serial Nos for this item. leave this blank.", "fieldname": "serial_no_series", "fieldtype": "Data", "hidden": 0, @@ -1729,7 +1730,7 @@ "columns": 0, "default": "0", "depends_on": "eval:!doc.variant_of", - "description": "If this item has variants, then it cannot be selected in sales orders etc.", + "description": "If this item has variants,then it cannot be selected in sales orders etc.", "fieldname": "has_variants", "fieldtype": "Check", "hidden": 0, @@ -1841,7 +1842,7 @@ "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, - "label": "Sales, Purchase, Accounting Defaults", + "label": "Sales,Purchase,Accounting Defaults", "length": 0, "no_copy": 0, "permlevel": 0, @@ -4113,7 +4114,7 @@ "issingle": 0, "istable": 0, "max_attachments": 1, - "modified": "2018-09-20 11:14:21.031369", + "modified": "2018-11-20 19:04:22.568410", "modified_by": "Administrator", "module": "Stock", "name": "Item", diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.py b/erpnext/stock/doctype/stock_entry/stock_entry.py index d8e46563f6f..5d3c6c4adcc 100644 --- a/erpnext/stock/doctype/stock_entry/stock_entry.py +++ b/erpnext/stock/doctype/stock_entry/stock_entry.py @@ -605,7 +605,7 @@ class StockEntry(StockController): if self.job_card: job_doc = frappe.get_doc('Job Card', self.job_card) - job_doc.set_transferred_qty() + job_doc.set_transferred_qty(update_status=True) if self.work_order: pro_doc = frappe.get_doc("Work Order", self.work_order) @@ -999,7 +999,7 @@ class StockEntry(StockController): for d in pro_order.get("required_items"): if (flt(d.required_qty) > flt(d.transferred_qty) and - (d.allow_transfer_for_manufacture or self.purpose != "Material Transfer for Manufacture")): + (d.include_item_in_manufacturing or self.purpose != "Material Transfer for Manufacture")): item_row = d.as_dict() if d.source_warehouse and not frappe.db.get_value("Warehouse", d.source_warehouse, "is_group"): item_row["from_warehouse"] = d.source_warehouse