From f79760ce2d4c953f7bfd626b592924be7899c1bb Mon Sep 17 00:00:00 2001 From: Neil Trini Lasrado Date: Tue, 23 Feb 2016 18:35:20 +0530 Subject: [PATCH] Mumtiple fixes --- .../production_order/production_order.json | 4 +- .../production_order/production_order.py | 4 +- .../production_plan_material_request.json | 6 +- .../production_plan_sales_order.json | 16 ++--- .../production_planning_tool.js | 62 ++++++++++++++++--- .../production_planning_tool.json | 14 ++--- .../production_planning_tool.py | 16 ++--- .../v6_21/rename_material_request_fields.py | 7 ++- .../doctype/sales_order/sales_order.py | 12 +--- .../material_request/material_request.js | 2 +- .../material_request/material_request.py | 18 +++--- .../material_request/test_material_request.py | 15 ++++- .../maintenance_schedule.py | 6 +- .../maintenance_schedule_item.json | 21 +++++-- 14 files changed, 134 insertions(+), 69 deletions(-) diff --git a/erpnext/manufacturing/doctype/production_order/production_order.json b/erpnext/manufacturing/doctype/production_order/production_order.json index 2ad2a3ba28..4a809cf439 100644 --- a/erpnext/manufacturing/doctype/production_order/production_order.json +++ b/erpnext/manufacturing/doctype/production_order/production_order.json @@ -928,7 +928,7 @@ "precision": "", "print_hide": 0, "print_hide_if_no_value": 0, - "read_only": 1, + "read_only": 0, "report_hide": 0, "reqd": 0, "search_index": 0, @@ -996,7 +996,7 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2016-02-08 04:36:35.071206", + "modified": "2016-02-23 07:29:38.091748", "modified_by": "Administrator", "module": "Manufacturing", "name": "Production Order", diff --git a/erpnext/manufacturing/doctype/production_order/production_order.py b/erpnext/manufacturing/doctype/production_order/production_order.py index b1678f15b7..210597ee98 100644 --- a/erpnext/manufacturing/doctype/production_order/production_order.py +++ b/erpnext/manufacturing/doctype/production_order/production_order.py @@ -155,16 +155,16 @@ class ProductionOrder(Document): frappe.db.set(self,'status', 'Submitted') self.make_time_logs() - self.update_planned_qty() self.update_completed_qty_in_material_request() + self.update_planned_qty() def on_cancel(self): self.validate_cancel() frappe.db.set(self,'status', 'Cancelled') self.delete_time_logs() - self.update_planned_qty() self.update_completed_qty_in_material_request() + self.update_planned_qty() def validate_cancel(self): if self.status == "Stopped": diff --git a/erpnext/manufacturing/doctype/production_plan_material_request/production_plan_material_request.json b/erpnext/manufacturing/doctype/production_plan_material_request/production_plan_material_request.json index 1a7c89485c..739c97f943 100644 --- a/erpnext/manufacturing/doctype/production_plan_material_request/production_plan_material_request.json +++ b/erpnext/manufacturing/doctype/production_plan_material_request/production_plan_material_request.json @@ -66,7 +66,7 @@ "bold": 0, "collapsible": 0, "fieldname": "material_request_date", - "fieldtype": "Read Only", + "fieldtype": "Date", "hidden": 0, "ignore_user_permissions": 0, "in_filter": 0, @@ -76,7 +76,7 @@ "no_copy": 0, "oldfieldname": "document_date", "oldfieldtype": "Date", - "options": "material_request.transaction_date", + "options": "", "permlevel": 0, "precision": "", "print_hide": 0, @@ -100,7 +100,7 @@ "issingle": 0, "istable": 1, "max_attachments": 0, - "modified": "2016-02-11 04:21:34.372317", + "modified": "2016-02-23 02:06:15.169120", "modified_by": "Administrator", "module": "Manufacturing", "name": "Production Plan Material Request", diff --git a/erpnext/manufacturing/doctype/production_plan_sales_order/production_plan_sales_order.json b/erpnext/manufacturing/doctype/production_plan_sales_order/production_plan_sales_order.json index 85bf7d6d60..5eaa274610 100644 --- a/erpnext/manufacturing/doctype/production_plan_sales_order/production_plan_sales_order.json +++ b/erpnext/manufacturing/doctype/production_plan_sales_order/production_plan_sales_order.json @@ -41,7 +41,7 @@ "bold": 0, "collapsible": 0, "fieldname": "sales_order_date", - "fieldtype": "Read Only", + "fieldtype": "Date", "hidden": 0, "ignore_user_permissions": 0, "in_filter": 0, @@ -51,12 +51,12 @@ "no_copy": 0, "oldfieldname": "document_date", "oldfieldtype": "Date", - "options": "sales_order.transaction_date", + "options": "", "permlevel": 0, "print_hide": 0, "print_hide_if_no_value": 0, "print_width": "120px", - "read_only": 0, + "read_only": 1, "report_hide": 0, "reqd": 0, "search_index": 0, @@ -92,7 +92,7 @@ "bold": 0, "collapsible": 0, "fieldname": "customer", - "fieldtype": "Read Only", + "fieldtype": "Link", "hidden": 0, "ignore_user_permissions": 0, "in_filter": 0, @@ -100,7 +100,7 @@ "label": "Customer", "length": 0, "no_copy": 0, - "options": "sales_order.customer", + "options": "Customer", "permlevel": 0, "print_hide": 0, "print_hide_if_no_value": 0, @@ -119,7 +119,7 @@ "collapsible": 0, "default": "", "fieldname": "grand_total", - "fieldtype": "Read Only", + "fieldtype": "Currency", "hidden": 0, "ignore_user_permissions": 0, "in_filter": 0, @@ -127,7 +127,7 @@ "label": "Grand Total", "length": 0, "no_copy": 0, - "options": "sales_order.base_grand_total", + "options": "", "permlevel": 0, "print_hide": 0, "print_hide_if_no_value": 0, @@ -150,7 +150,7 @@ "issingle": 0, "istable": 1, "max_attachments": 0, - "modified": "2016-02-11 04:17:42.849873", + "modified": "2016-02-23 02:13:07.340323", "modified_by": "Administrator", "module": "Manufacturing", "name": "Production Plan Sales Order", diff --git a/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.js b/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.js index 3fa1160d7e..6824013d68 100644 --- a/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.js +++ b/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.js @@ -3,7 +3,7 @@ frappe.require("assets/erpnext/js/utils.js"); -cur_frm.cscript.onload = function(doc, cdt, cdn) { +cur_frm.cscript.onload = function(doc) { cur_frm.set_value("company", frappe.defaults.get_user_default("Company")) } @@ -11,6 +11,58 @@ cur_frm.cscript.refresh = function(doc) { cur_frm.disable_save(); } +cur_frm.add_fetch("material_request", "transaction_date", "material_request_date"); + +cur_frm.add_fetch("sales_order", "transaction_date", "sales_order_date"); +cur_frm.add_fetch("sales_order", "customer", "customer"); +cur_frm.add_fetch("sales_order", "base_grand_total", "grand_total"); + +frappe.ui.form.on("Production Planning Tool", { + get_sales_orders: function(frm) { + frappe.call({ + doc: frm.doc, + method: "get_open_sales_orders", + callback: function(r) { + refresh_field("sales_orders"); + } + }); + }, + + get_material_request: function(frm) { + frappe.call({ + doc: frm.doc, + method: "get_pending_material_requests", + callback: function(r) { + refresh_field("material_requests"); + } + }); + }, + + get_items: function(frm) { + frappe.call({ + doc: frm.doc, + method: "get_items", + callback: function(r) { + refresh_field("items"); + } + }); + }, + + create_production_order: function(frm) { + frappe.call({ + doc: frm.doc, + method: "raise_production_orders" + }); + }, + + create_material_requests: function(frm) { + frappe.call({ + doc: frm.doc, + method: "raise_material_requests" + }); + } +}); + cur_frm.cscript.item_code = function(doc,cdt,cdn) { var d = locals[cdt][cdn]; if (d.item_code) { @@ -27,13 +79,6 @@ cur_frm.cscript.item_code = function(doc,cdt,cdn) { } } -cur_frm.cscript.raise_purchase_request = function(doc, cdt, cdn) { - return frappe.call({ - method: "raise_purchase_request", - doc:doc - }) -} - cur_frm.cscript.download_materials_required = function(doc, cdt, cdn) { return $c_obj(doc, 'validate_data', '', function(r, rt) { if (!r['exc']) @@ -41,7 +86,6 @@ cur_frm.cscript.download_materials_required = function(doc, cdt, cdn) { }); } - cur_frm.fields_dict['sales_orders'].grid.get_field('sales_order').get_query = function(doc) { var args = { "docstatus": 1 }; if(doc.customer) { diff --git a/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.json b/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.json index 699fb2a583..9ccd55e9ae 100644 --- a/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.json +++ b/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.json @@ -266,7 +266,7 @@ "label": "Get Sales Orders", "length": 0, "no_copy": 0, - "options": "get_open_sales_orders", + "options": "", "permlevel": 0, "print_hide": 0, "print_hide_if_no_value": 0, @@ -339,7 +339,7 @@ "label": "Get Material Request", "length": 0, "no_copy": 0, - "options": "get_pending_material_requests", + "options": "", "permlevel": 0, "precision": "", "print_hide": 0, @@ -413,7 +413,7 @@ "label": "Get Items", "length": 0, "no_copy": 0, - "options": "get_items", + "options": "", "permlevel": 0, "print_hide": 0, "print_hide_if_no_value": 0, @@ -503,7 +503,7 @@ "bold": 0, "collapsible": 0, "description": "Separate production order will be created for each finished good item.", - "fieldname": "raise_production_order", + "fieldname": "create_production_order", "fieldtype": "Button", "hidden": 0, "ignore_user_permissions": 0, @@ -512,7 +512,7 @@ "label": "Create Production Orders", "length": 0, "no_copy": 0, - "options": "raise_production_orders", + "options": "", "permlevel": 0, "print_hide": 0, "print_hide_if_no_value": 0, @@ -576,7 +576,7 @@ "bold": 0, "collapsible": 0, "description": "Items to be requested which are \"Out of Stock\" considering all warehouses based on projected qty and minimum order qty", - "fieldname": "raise_purchase_request", + "fieldname": "create_material_requests", "fieldtype": "Button", "hidden": 0, "ignore_user_permissions": 0, @@ -631,7 +631,7 @@ "issingle": 1, "istable": 0, "max_attachments": 0, - "modified": "2016-02-16 06:56:08.244906", + "modified": "2016-02-23 02:37:51.260645", "modified_by": "Administrator", "module": "Manufacturing", "name": "Production Planning Tool", 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 ee5e4e7590..ea7e660dd5 100644 --- a/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py +++ b/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py @@ -63,7 +63,7 @@ class ProductionPlanningTool(Document): """ Add sales orders in the table""" self.clear_table("sales_orders") - so_list = [d.sales_order for d in self.get('sales_orders')] + so_list = [] for r in open_so: if cstr(r['name']) not in so_list: pp_so = self.append('sales_orders', {}) @@ -107,7 +107,7 @@ class ProductionPlanningTool(Document): """ Add Material Requests in the table""" self.clear_table("material_requests") - mr_list = [d.material_request for d in self.get('material_requests')] + mr_list = [] for r in pending_mr: if cstr(r['name']) not in mr_list: mr = self.append('material_requests', {}) @@ -121,7 +121,7 @@ class ProductionPlanningTool(Document): self.get_mr_items() def get_so_items(self): - so_list = filter(None, [d.sales_order for d in self.get('sales_orders')]) + so_list = [d.sales_order for d in self.get('sales_orders') if d.sales_order] if not so_list: msgprint(_("Please enter Sales Orders in the above table")) return [] @@ -157,14 +157,14 @@ class ProductionPlanningTool(Document): self.add_items(items + packed_items) def get_mr_items(self): - mr_list = filter(None, [d.material_request for d in self.get('material_requests')]) + mr_list = [d.material_request for d in self.get('material_requests') if d.material_request] if not mr_list: msgprint(_("Please enter Material Requests in the above table")) return [] item_condition = "" if self.fg_item: - item_condition = ' and mr_item.item_code = "' + self.fg_item + '"' + item_condition = ' and mr_item.item_code = "' + frappe.db.escape(self.fg_item, percent=False) + '"' items = frappe.db.sql("""select distinct parent, name, item_code, warehouse, (qty - ordered_qty) as pending_qty @@ -371,7 +371,7 @@ class ProductionPlanningTool(Document): return item_list - def raise_purchase_request(self): + def raise_material_requests(self): """ Raise Material Request if projected qty is less than qty required Requested qty should be shortage qty considering minimum order qty @@ -384,7 +384,7 @@ class ProductionPlanningTool(Document): self.get_raw_materials(bom_dict) if self.item_dict: - self.insert_purchase_request() + self.create_material_request() def get_requested_items(self): item_projected_qty = self.get_projected_qty() @@ -433,7 +433,7 @@ class ProductionPlanningTool(Document): return dict(item_projected_qty) - def insert_purchase_request(self): + def create_material_request(self): items_to_be_requested = self.get_requested_items() material_request_list = [] diff --git a/erpnext/patches/v6_21/rename_material_request_fields.py b/erpnext/patches/v6_21/rename_material_request_fields.py index a65b2eb26e..07be27a5d6 100644 --- a/erpnext/patches/v6_21/rename_material_request_fields.py +++ b/erpnext/patches/v6_21/rename_material_request_fields.py @@ -6,6 +6,9 @@ import frappe from frappe.model.utils.rename_field import rename_field def execute(): - frappe.reload_doc('Stock', 'doctype', 'material_request_item') - rename_field("Material Request Item", "sales_order", "sales_order") + frappe.reload_doc('stock', 'doctype', 'material_request_item') + rename_field("Material Request Item", "sales_order_no", "sales_order") + + frappe.reload_doc('support', 'doctype', 'maintenance_schedule_item') + rename_field("Maintenance Schedule Item", "prevdoc_docname", "sales_order") \ No newline at end of file diff --git a/erpnext/selling/doctype/sales_order/sales_order.py b/erpnext/selling/doctype/sales_order/sales_order.py index bafdb34ecc..ac5e21edc9 100644 --- a/erpnext/selling/doctype/sales_order/sales_order.py +++ b/erpnext/selling/doctype/sales_order/sales_order.py @@ -193,7 +193,7 @@ class SalesOrder(SellingController): #check maintenance schedule submit_ms = frappe.db.sql_list("""select t1.name from `tabMaintenance Schedule` t1, `tabMaintenance Schedule Item` t2 - where t2.parent=t1.name and t2.prevdoc_docname = %s and t1.docstatus = 1""", self.name) + where t2.parent=t1.name and t2.sales_order = %s and t1.docstatus = 1""", self.name) if submit_ms: frappe.throw(_("Maintenance Schedule {0} must be cancelled before cancelling this Sales Order").format(comma_and(submit_ms))) @@ -464,15 +464,12 @@ def make_sales_invoice(source_name, target_doc=None, ignore_permissions=False): def make_maintenance_schedule(source_name, target_doc=None): maint_schedule = frappe.db.sql("""select t1.name from `tabMaintenance Schedule` t1, `tabMaintenance Schedule Item` t2 - where t2.parent=t1.name and t2.prevdoc_docname=%s and t1.docstatus=1""", source_name) + where t2.parent=t1.name and t2.sales_order=%s and t1.docstatus=1""", source_name) if not maint_schedule: doclist = get_mapped_doc("Sales Order", source_name, { "Sales Order": { "doctype": "Maintenance Schedule", - "field_map": { - "name": "sales_order" - }, "validation": { "docstatus": ["=", 1] } @@ -480,7 +477,7 @@ def make_maintenance_schedule(source_name, target_doc=None): "Sales Order Item": { "doctype": "Maintenance Schedule Item", "field_map": { - "parent": "prevdoc_docname" + "parent": "sales_order" }, "add_if_empty": True } @@ -499,9 +496,6 @@ def make_maintenance_visit(source_name, target_doc=None): doclist = get_mapped_doc("Sales Order", source_name, { "Sales Order": { "doctype": "Maintenance Visit", - "field_map": { - "name": "sales_order" - }, "validation": { "docstatus": ["=", 1] } diff --git a/erpnext/stock/doctype/material_request/material_request.js b/erpnext/stock/doctype/material_request/material_request.js index 559b954963..3f3eb99784 100644 --- a/erpnext/stock/doctype/material_request/material_request.js +++ b/erpnext/stock/doctype/material_request/material_request.js @@ -176,7 +176,7 @@ erpnext.buying.MaterialRequestController = erpnext.buying.BuyingController.exten frappe.call({ method:"erpnext.stock.doctype.material_request.material_request.raise_production_orders", args: { - "source_name": cur_frm.doc.name + "material_request": cur_frm.doc.name } }); } diff --git a/erpnext/stock/doctype/material_request/material_request.py b/erpnext/stock/doctype/material_request/material_request.py index c1a5281100..ff280fd835 100644 --- a/erpnext/stock/doctype/material_request/material_request.py +++ b/erpnext/stock/doctype/material_request/material_request.py @@ -7,7 +7,7 @@ from __future__ import unicode_literals import frappe -from frappe.utils import cstr, flt, getdate, comma_and +from frappe.utils import cstr, flt, getdate, new_line_sep from frappe import msgprint, _ from frappe.model.mapper import get_mapped_doc from erpnext.stock.stock_balance import update_bin_qty, get_indented_qty @@ -336,11 +336,11 @@ def make_stock_entry(source_name, target_doc=None): return doclist @frappe.whitelist() -def raise_production_orders(source_name): - material_request= frappe.get_doc("Material Request", source_name) +def raise_production_orders(material_request): + mr= frappe.get_doc("Material Request", material_request) errors =[] production_orders = [] - for d in material_request.items: + for d in mr.items: if (d.qty - d.ordered_qty) >0 : if frappe.db.get_value("Item", d.item_code, "is_pro_applicable"): prod_order = frappe.new_doc("Production Order") @@ -352,10 +352,10 @@ def raise_production_orders(source_name): prod_order.expected_delivery_date = d.schedule_date prod_order.sales_order = d.sales_order prod_order.bom_no = get_item_details(d.item_code).bom_no - prod_order.material_request = material_request.name + prod_order.material_request = mr.name prod_order.material_request_item = d.name - prod_order.planned_start_date = material_request.transaction_date - prod_order.company = material_request.company + prod_order.planned_start_date = mr.transaction_date + prod_order.company = mr.company prod_order.save() production_orders.append(prod_order.name) else: @@ -363,7 +363,7 @@ def raise_production_orders(source_name): if production_orders: message = ["""%s""" % \ (p, p) for p in production_orders] - msgprint(_("Production Orders {0} created").format(comma_and(message))) + msgprint(_("The following Production Orders were created : \n {0} ").format(new_line_sep(message))) if errors: - msgprint(_("Could not Raise Production Orders for {0}").format(comma_and(errors))) + msgprint(_("Productions Orders cannot be raised for : \n {0}").format(new_line_sep(errors))) return production_orders \ No newline at end of file diff --git a/erpnext/stock/doctype/material_request/test_material_request.py b/erpnext/stock/doctype/material_request/test_material_request.py index c675224ceb..ebdfa5a459 100644 --- a/erpnext/stock/doctype/material_request/test_material_request.py +++ b/erpnext/stock/doctype/material_request/test_material_request.py @@ -438,12 +438,14 @@ class TestMaterialRequest(unittest.TestCase): #testing bin requested qty after issuing stock against material request self.assertEquals(_get_requested_qty(), existing_requested_qty) - def test_completed_qty_for__manufacture(self): + def test_material_request_type_manufacture(self): mr = frappe.copy_doc(test_records[1]).insert() mr = frappe.get_doc("Material Request", mr.name) mr.submit() completed_qty = mr.items[0].ordered_qty - + requested_qty = frappe.db.sql("""select indented_qty from `tabBin` where \ + item_code= %s and warehouse= %s """, (mr.items[0].item_code, mr.items[0].warehouse))[0][0] + prod_order = raise_production_orders(mr.name) po = frappe.get_doc("Production Order", prod_order[0]) po.wip_warehouse = "_Test Warehouse 1 - _TC" @@ -451,11 +453,20 @@ class TestMaterialRequest(unittest.TestCase): mr = frappe.get_doc("Material Request", mr.name) self.assertEquals(completed_qty + po.qty, mr.items[0].ordered_qty) + + new_requested_qty = frappe.db.sql("""select indented_qty from `tabBin` where \ + item_code= %s and warehouse= %s """, (mr.items[0].item_code, mr.items[0].warehouse))[0][0] + + self.assertEquals(requested_qty - po.qty, new_requested_qty) po.cancel() mr = frappe.get_doc("Material Request", mr.name) self.assertEquals(completed_qty, mr.items[0].ordered_qty) + new_requested_qty = frappe.db.sql("""select indented_qty from `tabBin` where \ + item_code= %s and warehouse= %s """, (mr.items[0].item_code, mr.items[0].warehouse))[0][0] + self.assertEquals(requested_qty, new_requested_qty) + test_dependencies = ["Currency Exchange"] test_records = frappe.get_test_records('Material Request') diff --git a/erpnext/support/doctype/maintenance_schedule/maintenance_schedule.py b/erpnext/support/doctype/maintenance_schedule/maintenance_schedule.py index 14cad8e787..d7ba1463d5 100644 --- a/erpnext/support/doctype/maintenance_schedule/maintenance_schedule.py +++ b/erpnext/support/doctype/maintenance_schedule/maintenance_schedule.py @@ -158,12 +158,12 @@ class MaintenanceSchedule(TransactionBase): def validate_sales_order(self): for d in self.get('items'): - if d.prevdoc_docname: + if d.sales_order: chk = frappe.db.sql("""select ms.name from `tabMaintenance Schedule` ms, `tabMaintenance Schedule Item` msi where msi.parent=ms.name and - msi.prevdoc_docname=%s and ms.docstatus=1""", d.prevdoc_docname) + msi.sales_order=%s and ms.docstatus=1""", d.sales_order) if chk: - throw(_("Maintenance Schedule {0} exists against {0}").format(chk[0][0], d.prevdoc_docname)) + throw(_("Maintenance Schedule {0} exists against {0}").format(chk[0][0], d.sales_order)) def validate(self): self.validate_maintenance_detail() diff --git a/erpnext/support/doctype/maintenance_schedule_item/maintenance_schedule_item.json b/erpnext/support/doctype/maintenance_schedule_item/maintenance_schedule_item.json index f20cccb22c..6879f0675b 100644 --- a/erpnext/support/doctype/maintenance_schedule_item/maintenance_schedule_item.json +++ b/erpnext/support/doctype/maintenance_schedule_item/maintenance_schedule_item.json @@ -26,6 +26,7 @@ "options": "Item", "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 1, @@ -50,6 +51,7 @@ "oldfieldtype": "Data", "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 1, "report_hide": 0, "reqd": 0, @@ -74,6 +76,7 @@ "oldfieldtype": "Data", "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "print_width": "300px", "read_only": 1, "report_hide": 0, @@ -98,6 +101,7 @@ "no_copy": 0, "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 0, @@ -122,6 +126,7 @@ "oldfieldtype": "Date", "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 1, @@ -146,6 +151,7 @@ "oldfieldtype": "Date", "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 1, @@ -171,6 +177,7 @@ "options": "\nWeekly\nMonthly\nQuarterly\nHalf Yearly\nYearly\nRandom", "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 0, @@ -195,6 +202,7 @@ "oldfieldtype": "Int", "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 1, @@ -220,6 +228,7 @@ "options": "Sales Person", "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 1, @@ -242,6 +251,7 @@ "no_copy": 0, "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 0, @@ -266,6 +276,7 @@ "oldfieldtype": "Small Text", "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 0, @@ -277,19 +288,21 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, - "fieldname": "prevdoc_docname", - "fieldtype": "Data", + "fieldname": "sales_order", + "fieldtype": "Link", "hidden": 0, "ignore_user_permissions": 0, "in_filter": 1, "in_list_view": 0, - "label": "Against Docname", + "label": "Sales Order", "length": 0, "no_copy": 1, "oldfieldname": "prevdoc_docname", "oldfieldtype": "Data", + "options": "Sales Order", "permlevel": 0, "print_hide": 1, + "print_hide_if_no_value": 0, "print_width": "150px", "read_only": 1, "report_hide": 0, @@ -309,7 +322,7 @@ "issingle": 0, "istable": 1, "max_attachments": 0, - "modified": "2015-11-16 06:29:49.903875", + "modified": "2016-02-23 04:59:32.924534", "modified_by": "Administrator", "module": "Support", "name": "Maintenance Schedule Item",