From 2da6b3d62883a0ec0100f564f939a763ea7ac7af Mon Sep 17 00:00:00 2001 From: rohitwaghchaure Date: Tue, 5 Jun 2018 13:06:52 +0530 Subject: [PATCH] [enhance] Provision to backflush raw materials based on stock entries for subcontracted items (#14296) --- .../buying_settings/buying_settings.json | 306 +++++++++++------- .../doctype/purchase_order/purchase_order.py | 1 + erpnext/controllers/buying_controller.py | 83 ++++- erpnext/patches.txt | 3 +- ...e_backflush_subcontract_rm_based_on_bom.py | 19 ++ .../stock/doctype/stock_entry/stock_entry.py | 7 +- .../stock_entry_detail.json | 81 ++++- 7 files changed, 372 insertions(+), 128 deletions(-) create mode 100644 erpnext/patches/v11_0/update_backflush_subcontract_rm_based_on_bom.py diff --git a/erpnext/buying/doctype/buying_settings/buying_settings.json b/erpnext/buying/doctype/buying_settings/buying_settings.json index c0684f939a9..21e9485915a 100644 --- a/erpnext/buying/doctype/buying_settings/buying_settings.json +++ b/erpnext/buying/doctype/buying_settings/buying_settings.json @@ -1,309 +1,383 @@ { "allow_copy": 0, - "allow_guest_to_view": 0, + "allow_guest_to_view": 0, "allow_import": 0, "allow_rename": 0, - "beta": 0, + "beta": 0, "creation": "2013-06-25 11:04:03", "custom": 0, "description": "Settings for Buying Module", "docstatus": 0, "doctype": "DocType", "document_type": "Other", - "editable_grid": 0, + "editable_grid": 0, "fields": [ { - "allow_bulk_edit": 0, + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, - "columns": 0, + "columns": 0, "default": "Supplier Name", "fieldname": "supp_master_name", "fieldtype": "Select", "hidden": 0, "ignore_user_permissions": 0, - "ignore_xss_filter": 0, + "ignore_xss_filter": 0, "in_filter": 0, - "in_global_search": 0, + "in_global_search": 0, "in_list_view": 0, - "in_standard_filter": 0, + "in_standard_filter": 0, "label": "Supplier Naming By", - "length": 0, + "length": 0, "no_copy": 0, "options": "Supplier Name\nNaming Series", "permlevel": 0, "print_hide": 0, - "print_hide_if_no_value": 0, + "print_hide_if_no_value": 0, "read_only": 0, - "remember_last_selected_value": 0, + "remember_last_selected_value": 0, "report_hide": 0, "reqd": 0, "search_index": 0, "set_only_once": 0, - "translatable": 0, + "translatable": 0, "unique": 0 }, { - "allow_bulk_edit": 0, + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, - "columns": 0, - "fieldname": "supplier_group", + "columns": 0, + "fieldname": "supplier_group", "fieldtype": "Link", "hidden": 0, "ignore_user_permissions": 0, - "ignore_xss_filter": 0, + "ignore_xss_filter": 0, "in_filter": 0, - "in_global_search": 0, + "in_global_search": 0, "in_list_view": 0, - "in_standard_filter": 0, - "label": "Default Supplier Group", - "length": 0, + "in_standard_filter": 0, + "label": "Default Supplier Group", + "length": 0, "no_copy": 0, - "options": "Supplier Group", + "options": "Supplier Group", "permlevel": 0, "print_hide": 0, - "print_hide_if_no_value": 0, + "print_hide_if_no_value": 0, "read_only": 0, - "remember_last_selected_value": 0, + "remember_last_selected_value": 0, "report_hide": 0, "reqd": 0, "search_index": 0, "set_only_once": 0, - "translatable": 0, + "translatable": 0, "unique": 0 }, { - "allow_bulk_edit": 0, + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, - "columns": 0, + "columns": 0, "fieldname": "buying_price_list", "fieldtype": "Link", "hidden": 0, "ignore_user_permissions": 0, - "ignore_xss_filter": 0, + "ignore_xss_filter": 0, "in_filter": 0, - "in_global_search": 0, + "in_global_search": 0, "in_list_view": 0, - "in_standard_filter": 0, + "in_standard_filter": 0, "label": "Default Buying Price List", - "length": 0, + "length": 0, "no_copy": 0, "options": "Price List", "permlevel": 0, "print_hide": 0, - "print_hide_if_no_value": 0, + "print_hide_if_no_value": 0, "read_only": 0, - "remember_last_selected_value": 0, + "remember_last_selected_value": 0, "report_hide": 0, "reqd": 0, "search_index": 0, "set_only_once": 0, - "translatable": 0, + "translatable": 0, "unique": 0 }, { - "allow_bulk_edit": 0, + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, - "columns": 0, + "columns": 0, "fieldname": "column_break_3", "fieldtype": "Column Break", "hidden": 0, "ignore_user_permissions": 0, - "ignore_xss_filter": 0, + "ignore_xss_filter": 0, "in_filter": 0, - "in_global_search": 0, + "in_global_search": 0, "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, + "in_standard_filter": 0, + "length": 0, "no_copy": 0, "permlevel": 0, "print_hide": 0, - "print_hide_if_no_value": 0, + "print_hide_if_no_value": 0, "read_only": 0, - "remember_last_selected_value": 0, + "remember_last_selected_value": 0, "report_hide": 0, "reqd": 0, "search_index": 0, "set_only_once": 0, - "translatable": 0, + "translatable": 0, "unique": 0 }, { - "allow_bulk_edit": 0, + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, - "columns": 0, + "columns": 0, "fieldname": "po_required", "fieldtype": "Select", "hidden": 0, "ignore_user_permissions": 0, - "ignore_xss_filter": 0, + "ignore_xss_filter": 0, "in_filter": 0, - "in_global_search": 0, + "in_global_search": 0, "in_list_view": 0, - "in_standard_filter": 0, + "in_standard_filter": 0, "label": "Purchase Order Required", - "length": 0, + "length": 0, "no_copy": 0, "options": "No\nYes", "permlevel": 0, "print_hide": 0, - "print_hide_if_no_value": 0, + "print_hide_if_no_value": 0, "read_only": 0, - "remember_last_selected_value": 0, + "remember_last_selected_value": 0, "report_hide": 0, "reqd": 0, "search_index": 0, "set_only_once": 0, - "translatable": 0, + "translatable": 0, "unique": 0 }, { - "allow_bulk_edit": 0, + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, - "columns": 0, + "columns": 0, "fieldname": "pr_required", "fieldtype": "Select", "hidden": 0, "ignore_user_permissions": 0, - "ignore_xss_filter": 0, + "ignore_xss_filter": 0, "in_filter": 0, - "in_global_search": 0, + "in_global_search": 0, "in_list_view": 0, - "in_standard_filter": 0, + "in_standard_filter": 0, "label": "Purchase Receipt Required", - "length": 0, + "length": 0, "no_copy": 0, "options": "No\nYes", "permlevel": 0, "print_hide": 0, - "print_hide_if_no_value": 0, + "print_hide_if_no_value": 0, "read_only": 0, - "remember_last_selected_value": 0, + "remember_last_selected_value": 0, "report_hide": 0, "reqd": 0, "search_index": 0, "set_only_once": 0, - "translatable": 0, + "translatable": 0, "unique": 0 }, { - "allow_bulk_edit": 0, + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, - "columns": 0, + "columns": 0, "fieldname": "maintain_same_rate", "fieldtype": "Check", "hidden": 0, "ignore_user_permissions": 0, - "ignore_xss_filter": 0, + "ignore_xss_filter": 0, "in_filter": 0, - "in_global_search": 0, + "in_global_search": 0, "in_list_view": 0, - "in_standard_filter": 0, + "in_standard_filter": 0, "label": "Maintain same rate throughout purchase cycle", - "length": 0, + "length": 0, "no_copy": 0, "permlevel": 0, "print_hide": 0, - "print_hide_if_no_value": 0, + "print_hide_if_no_value": 0, "read_only": 0, - "remember_last_selected_value": 0, + "remember_last_selected_value": 0, "report_hide": 0, "reqd": 0, "search_index": 0, "set_only_once": 0, - "translatable": 0, + "translatable": 0, "unique": 0 }, { - "allow_bulk_edit": 0, + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, - "columns": 0, + "columns": 0, "fieldname": "allow_multiple_items", "fieldtype": "Check", "hidden": 0, "ignore_user_permissions": 0, - "ignore_xss_filter": 0, + "ignore_xss_filter": 0, "in_filter": 0, - "in_global_search": 0, + "in_global_search": 0, "in_list_view": 0, - "in_standard_filter": 0, + "in_standard_filter": 0, "label": "Allow Item to be added multiple times in a transaction", - "length": 0, + "length": 0, "no_copy": 0, "permlevel": 0, "precision": "", "print_hide": 0, - "print_hide_if_no_value": 0, + "print_hide_if_no_value": 0, "read_only": 0, - "remember_last_selected_value": 0, + "remember_last_selected_value": 0, "report_hide": 0, "reqd": 0, "search_index": 0, "set_only_once": 0, - "translatable": 0, + "translatable": 0, "unique": 0 }, { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "default": "0", - "description": "If enabled, last purchase details of items will not be fetched from previous purchase order or purchase receipt", - "fieldname": "disable_fetch_last_purchase_rate", - "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": "Disable Fetching Last Purchase Details in Purchase Order", - "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, + "default": "0", + "description": "If enabled, last purchase details of items will not be fetched from previous purchase order or purchase receipt", + "fieldname": "disable_fetch_last_purchase_rate", + "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": "Disable Fetching Last Purchase Details in Purchase Order", + "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, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "subcontract", + "fieldtype": "Section 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, + "label": "Subcontract", + "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, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "backflush_raw_materials_of_subcontract_based_on", + "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": "Backflush Raw Materials of Subcontract Based On", + "length": 0, + "no_copy": 0, + "options": "BOM\nMaterial Transferred for Subcontract", + "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 } ], - "has_web_view": 0, + "has_web_view": 0, "hide_heading": 0, "hide_toolbar": 0, "icon": "fa fa-cog", "idx": 1, - "image_view": 0, + "image_view": 0, "in_create": 0, "is_submittable": 0, "issingle": 1, "istable": 0, - "max_attachments": 0, - "modified": "2018-04-19 07:56:42.888821", + "max_attachments": 0, + "modified": "2018-05-30 16:28:46.899823", "modified_by": "Administrator", "module": "Buying", "name": "Buying Settings", @@ -329,10 +403,10 @@ "write": 1 } ], - "quick_entry": 0, + "quick_entry": 0, "read_only": 0, - "read_only_onload": 0, - "show_name_in_global_search": 0, - "track_changes": 0, + "read_only_onload": 0, + "show_name_in_global_search": 0, + "track_changes": 0, "track_seen": 0 } \ No newline at end of file diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.py b/erpnext/buying/doctype/purchase_order/purchase_order.py index daca56a0104..f258546d61f 100644 --- a/erpnext/buying/doctype/purchase_order/purchase_order.py +++ b/erpnext/buying/doctype/purchase_order/purchase_order.py @@ -448,6 +448,7 @@ def make_rm_stock_entry(purchase_order, rm_items): 'qty': rm_item_data["qty"], 'from_warehouse': rm_item_data["warehouse"], 'stock_uom': rm_item_data["stock_uom"], + 'main_item_code': rm_item_data["item_code"], 'allow_alternative_item': item_wh[rm_item_code].get('allow_alternative_item') } } diff --git a/erpnext/controllers/buying_controller.py b/erpnext/controllers/buying_controller.py index 40993922436..bbe1a1288d7 100644 --- a/erpnext/controllers/buying_controller.py +++ b/erpnext/controllers/buying_controller.py @@ -186,16 +186,22 @@ class BuyingController(StockController): def create_raw_materials_supplied(self, raw_material_table): if self.is_subcontracted=="Yes": parent_items = [] - for item in self.get("items"): - if self.doctype in ["Purchase Receipt", "Purchase Invoice"]: - item.rm_supp_cost = 0.0 - if item.bom and item.item_code in self.sub_contracted_items: - self.update_raw_materials_supplied(item, raw_material_table) + backflush_raw_materials_based_on = frappe.db.get_single_value("Buying Settings", + "backflush_raw_materials_of_subcontract_based_on") + if (self.doctype == 'Purchase Receipt' and + backflush_raw_materials_based_on != 'BOM'): + self.update_raw_materials_supplied_based_on_stock_entries(raw_material_table) + else: + for item in self.get("items"): + if self.doctype in ["Purchase Receipt", "Purchase Invoice"]: + item.rm_supp_cost = 0.0 + if item.bom and item.item_code in self.sub_contracted_items: + self.update_raw_materials_supplied_based_on_bom(item, raw_material_table) - if [item.item_code, item.name] not in parent_items: - parent_items.append([item.item_code, item.name]) + if [item.item_code, item.name] not in parent_items: + parent_items.append([item.item_code, item.name]) - self.cleanup_raw_materials_supplied(parent_items, raw_material_table) + self.cleanup_raw_materials_supplied(parent_items, raw_material_table) elif self.doctype in ["Purchase Receipt", "Purchase Invoice"]: for item in self.get("items"): @@ -204,7 +210,43 @@ class BuyingController(StockController): if self.is_subcontracted == "No" and self.get("supplied_items"): self.set('supplied_items', []) - def update_raw_materials_supplied(self, item, raw_material_table): + def update_raw_materials_supplied_based_on_stock_entries(self, raw_material_table): + self.set(raw_material_table, []) + purchase_orders = [d.purchase_order for d in self.items] + if purchase_orders: + items = get_subcontracted_raw_materials_from_se(purchase_orders) + backflushed_raw_materials = get_backflushed_subcontracted_raw_materials_from_se(purchase_orders, self.name) + + for d in items: + qty = d.qty - backflushed_raw_materials.get(d.item_code, 0) + rm = self.append(raw_material_table, {}) + rm.rm_item_code = d.item_code + rm.item_name = d.item_name + rm.main_item_code = d.main_item_code + rm.description = d.description + rm.stock_uom = d.stock_uom + rm.required_qty = qty + rm.consumed_qty = qty + rm.serial_no = d.serial_no + rm.batch_no = d.batch_no + + # get raw materials rate + from erpnext.stock.utils import get_incoming_rate + rm.rate = get_incoming_rate({ + "item_code": d.item_code, + "warehouse": self.supplier_warehouse, + "posting_date": self.posting_date, + "posting_time": self.posting_time, + "qty": -1 * qty, + "serial_no": rm.serial_no + }) + if not rm.rate: + rm.rate = get_valuation_rate(d.item_code, self.supplier_warehouse, + self.doctype, self.name, currency=self.company_currency, company = self.company) + + rm.amount = qty * flt(rm.rate) + + def update_raw_materials_supplied_based_on_bom(self, item, raw_material_table): exploded_item = 1 if hasattr(item, 'include_exploded_items'): exploded_item = item.get('include_exploded_items') @@ -637,6 +679,29 @@ def get_items_from_bom(item_code, bom, exploded_item=1): return bom_items +def get_subcontracted_raw_materials_from_se(purchase_orders): + return frappe.db.sql(""" + select + sed.item_name, sed.item_code, sum(sed.qty) as qty, sed.description, + sed.stock_uom, sed.subcontracted_item as main_item_code, sed.serial_no, sed.batch_no + from `tabStock Entry` se,`tabStock Entry Detail` sed + where + se.name = sed.parent and se.docstatus=1 and se.purpose='Subcontract' + and se.purchase_order= (%s) and ifnull(sed.t_warehouse, '') != '' + group by sed.item_code, sed.t_warehouse + """ % (','.join(['%s'] * len(purchase_orders))), tuple(purchase_orders), as_dict=1) + +def get_backflushed_subcontracted_raw_materials_from_se(purchase_orders, purchase_receipt): + return frappe._dict(frappe.db.sql(""" + select + prsi.rm_item_code as item_code, sum(prsi.consumed_qty) as qty + from `tabPurchase Receipt` pr, `tabPurchase Receipt Item` pri, `tabPurchase Receipt Item Supplied` prsi + where + pr.name = pri.parent and pr.name = prsi.parent and pri.purchase_order= (%s) + and pri.item_code = prsi.main_item_code and pr.name != '%s' + group by prsi.rm_item_code + """ % (','.join(['%s'] * len(purchase_orders)), purchase_receipt), tuple(purchase_orders))) + def get_asset_item_details(asset_items): asset_items_data = {} for d in frappe.get_all('Item', fields = ["name", "has_serial_no", "serial_no_series"], diff --git a/erpnext/patches.txt b/erpnext/patches.txt index 76bf9b9bd13..d68603e834f 100644 --- a/erpnext/patches.txt +++ b/erpnext/patches.txt @@ -541,6 +541,7 @@ erpnext.patches.v11_0.check_buying_selling_in_currency_exchange erpnext.patches.v11_0.refactor_erpnext_shopify erpnext.patches.v11_0.move_item_defaults_to_child_table_for_multicompany erpnext.patches.v11_0.rename_overproduction_percent_field +erpnext.patches.v11_0.update_backflush_subcontract_rm_based_on_bom erpnext.patches.v10_0.update_status_in_purchase_receipt erpnext.patches.v11_0.inter_state_field_for_gst -erpnext.patches.v11_0.rename_members_with_naming_series #04-06-2018 \ No newline at end of file +erpnext.patches.v11_0.rename_members_with_naming_series #04-06-2018 diff --git a/erpnext/patches/v11_0/update_backflush_subcontract_rm_based_on_bom.py b/erpnext/patches/v11_0/update_backflush_subcontract_rm_based_on_bom.py new file mode 100644 index 00000000000..f71d9b43cfc --- /dev/null +++ b/erpnext/patches/v11_0/update_backflush_subcontract_rm_based_on_bom.py @@ -0,0 +1,19 @@ +# Copyright (c) 2017, Frappe and Contributors +# License: GNU General Public License v3. See license.txt + +from __future__ import unicode_literals +import frappe + +def execute(): + frappe.reload_doc('buying', 'doctype', 'buying_settings') + frappe.db.set_value('Buying Settings', None, 'backflush_raw_materials_of_subcontract_based_on', 'BOM') + + frappe.reload_doc('stock', 'doctype', 'stock_entry_detail') + frappe.db.sql(""" update `tabStock Entry Detail` as sed, + `tabStock Entry` as se, `tabPurchase Order Item Supplied` as pois + set + sed.subcontracted_item = pois.main_item_code + where + se.purpose = 'Subcontract' and sed.parent = se.name + and pois.rm_item_code = sed.item_code and se.docstatus = 1 + and pois.parenttype = 'Purchase Order'""") \ No newline at end of file diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.py b/erpnext/stock/doctype/stock_entry/stock_entry.py index 412331eb3fe..586e21de40f 100644 --- a/erpnext/stock/doctype/stock_entry/stock_entry.py +++ b/erpnext/stock/doctype/stock_entry/stock_entry.py @@ -441,7 +441,11 @@ class StockEntry(StockController): def validate_purchase_order(self): """Throw exception if more raw material is transferred against Purchase Order than in the raw materials supplied table""" - if self.purpose == "Subcontract" and self.purchase_order: + backflush_raw_materials_based_on = frappe.db.get_single_value("Buying Settings", + "backflush_raw_materials_of_subcontract_based_on") + + if (self.purpose == "Subcontract" and self.purchase_order and + backflush_raw_materials_based_on == 'BOM'): purchase_order = frappe.get_doc("Purchase Order", self.purchase_order) for se_item in self.items: item_code = se_item.original_item or se_item.item_code @@ -981,6 +985,7 @@ class StockEntry(StockController): se_child.expense_account = item_dict[d].get("expense_account") or expense_account se_child.cost_center = item_dict[d].get("cost_center") or cost_center se_child.allow_alternative_item = item_dict[d].get("allow_alternative_item", 0) + se_child.subcontracted_item = item_dict[d].get("main_item_code") if item_dict[d].get("idx"): se_child.idx = item_dict[d].get("idx") diff --git a/erpnext/stock/doctype/stock_entry_detail/stock_entry_detail.json b/erpnext/stock/doctype/stock_entry_detail/stock_entry_detail.json index 6176bf98a7d..940245cd5f9 100644 --- a/erpnext/stock/doctype/stock_entry_detail/stock_entry_detail.json +++ b/erpnext/stock/doctype/stock_entry_detail/stock_entry_detail.json @@ -15,6 +15,7 @@ "fields": [ { "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -46,6 +47,7 @@ }, { "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -76,6 +78,7 @@ }, { "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -109,6 +112,7 @@ }, { "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -138,6 +142,7 @@ }, { "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -171,6 +176,7 @@ }, { "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -200,6 +206,7 @@ }, { "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, "allow_on_submit": 0, "bold": 1, "collapsible": 0, @@ -233,6 +240,7 @@ }, { "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -262,6 +270,7 @@ }, { "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -292,6 +301,7 @@ }, { "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 1, @@ -323,6 +333,7 @@ }, { "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -357,6 +368,7 @@ }, { "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -387,6 +399,7 @@ }, { "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -418,6 +431,7 @@ }, { "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -450,6 +464,7 @@ }, { "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -480,6 +495,7 @@ }, { "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, "allow_on_submit": 0, "bold": 1, "collapsible": 0, @@ -512,6 +528,7 @@ }, { "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, "allow_on_submit": 0, "bold": 1, "collapsible": 0, @@ -545,6 +562,7 @@ }, { "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -577,6 +595,7 @@ }, { "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -609,6 +628,7 @@ }, { "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -642,6 +662,7 @@ }, { "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -674,6 +695,7 @@ }, { "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -703,6 +725,7 @@ }, { "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -736,6 +759,7 @@ }, { "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -768,6 +792,7 @@ }, { "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -801,6 +826,7 @@ }, { "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -833,6 +859,7 @@ }, { "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -866,6 +893,7 @@ }, { "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -899,6 +927,7 @@ }, { "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -929,6 +958,7 @@ }, { "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -961,6 +991,7 @@ }, { "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -990,6 +1021,7 @@ }, { "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1023,6 +1055,7 @@ }, { "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1056,6 +1089,7 @@ }, { "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1086,6 +1120,7 @@ }, { "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1118,6 +1153,7 @@ }, { "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1147,6 +1183,7 @@ }, { "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1180,6 +1217,7 @@ }, { "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1210,6 +1248,7 @@ }, { "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, "allow_on_submit": 1, "bold": 0, "collapsible": 0, @@ -1241,6 +1280,7 @@ }, { "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, "allow_on_submit": 1, "bold": 0, "collapsible": 0, @@ -1273,6 +1313,7 @@ }, { "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1305,6 +1346,7 @@ }, { "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1337,6 +1379,7 @@ }, { "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1366,6 +1409,7 @@ }, { "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1398,6 +1442,7 @@ }, { "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1429,6 +1474,7 @@ }, { "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -1458,6 +1504,39 @@ "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": "subcontracted_item", + "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": "Subcontracted Item", + "length": 0, + "no_copy": 0, + "options": "Item", + "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 } ], "has_web_view": 0, @@ -1470,7 +1549,7 @@ "issingle": 0, "istable": 1, "max_attachments": 0, - "modified": "2018-05-25 13:09:25.849700", + "modified": "2018-05-30 20:06:00.623763", "modified_by": "Administrator", "module": "Stock", "name": "Stock Entry Detail",