From 2b3ca41450728c6d835347362d1abbe6931aa355 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Sun, 7 Jul 2013 12:32:01 +0530 Subject: [PATCH] [mapper] support --- selling/doctype/sales_order/sales_order.js | 77 ++++------------- selling/doctype/sales_order/sales_order.py | 85 +++++++++++++------ .../doctype/customer_issue/customer_issue.js | 54 +++--------- .../doctype/customer_issue/customer_issue.py | 33 ++++--- .../maintenance_schedule.js | 32 ++----- .../maintenance_schedule.py | 42 +++++---- .../maintenance_schedule.txt | 45 +++++++--- .../maintenance_visit/maintenance_visit.js | 20 +++++ .../maintenance_visit/maintenance_visit.py | 37 +------- .../maintenance_visit/maintenance_visit.txt | 62 +++++++++++--- 10 files changed, 256 insertions(+), 231 deletions(-) diff --git a/selling/doctype/sales_order/sales_order.js b/selling/doctype/sales_order/sales_order.js index 8500a5102f..4c12580a44 100644 --- a/selling/doctype/sales_order/sales_order.js +++ b/selling/doctype/sales_order/sales_order.js @@ -48,7 +48,7 @@ erpnext.selling.SalesOrderController = erpnext.selling.SellingController.extend( if(flt(doc.per_delivered, 2) < 100 && (doc.order_type !='Sales')) { cur_frm.add_custom_button('Make Maint. Visit', this.make_maintenance_visit); cur_frm.add_custom_button('Make Maint. Schedule', - this.make_maintainance_schedule); + this.make_maintenance_schedule); } // indent @@ -98,13 +98,26 @@ erpnext.selling.SalesOrderController = erpnext.selling.SellingController.extend( make_sales_invoice: function() { wn.model.open_mapped_doc({ - method: "selling.doctype.quotation.quotation.make_quotation", + method: "selling.doctype.sales_order.sales_order.make_sales_invoice", + source_name: cur_frm.doc.name + }) + }, + + make_maintenance_schedule: function() { + wn.model.open_mapped_doc({ + method: "selling.doctype.sales_order.sales_order.make_maintenance_schedule", + source_name: cur_frm.doc.name + }) + }, + + make_maintenance_visit: function() { + wn.model.open_mapped_doc({ + method: "selling.doctype.sales_order.sales_order.make_maintenance_visit", source_name: cur_frm.doc.name }) }, pull_quotation_details: function() { - wn.model.map_current_doc({ method: "selling.doctype.quotation.quotation.make_sales_order", source_name: cur_frm.doc.quotation_no, @@ -155,64 +168,6 @@ cur_frm.fields_dict['quotation_no'].get_query = function(doc) { ORDER BY `tabQuotation`.`name` DESC LIMIT 50', {cond:cond}); } -//----------- make maintenance schedule---------- -cur_frm.cscript['Make Maintenance Schedule'] = function() { - var doc = cur_frm.doc; - - if (doc.docstatus == 1) { - $c_obj(make_doclist(doc.doctype, doc.name),'check_maintenance_schedule','', - function(r,rt){ - if(r.message == 'No'){ - n = wn.model.make_new_doc_and_get_name("Maintenance Schedule"); - $c('dt_map', args={ - 'docs':wn.model.compress([locals["Maintenance Schedule"][n]]), - 'from_doctype':'Sales Order', - 'to_doctype':'Maintenance Schedule', - 'from_docname':doc.name, - 'from_to_list':"[['Sales Order', 'Maintenance Schedule'], ['Sales Order Item', 'Maintenance Schedule Item']]" - } - , function(r,rt) { - loaddoc("Maintenance Schedule", n); - } - ); - } - else{ - msgprint("You have already created Maintenance Schedule against this Sales Order"); - } - } - ); - } -} - -cur_frm.cscript.make_maintenance_visit = function() { - var doc = cur_frm.doc; - - if (doc.docstatus == 1) { - $c_obj(make_doclist(doc.doctype, doc.name),'check_maintenance_visit','', - function(r,rt){ - if(r.message == 'No'){ - n = wn.model.make_new_doc_and_get_name("Maintenance Visit"); - $c('dt_map', args={ - 'docs':wn.model.compress([locals["Maintenance Visit"][n]]), - 'from_doctype':'Sales Order', - 'to_doctype':'Maintenance Visit', - 'from_docname':doc.name, - 'from_to_list':"[['Sales Order', 'Maintenance Visit'], ['Sales Order Item', 'Maintenance Visit Purpose']]" - } - , function(r,rt) { - loaddoc("Maintenance Visit", n); - } - ); - } - else{ - msgprint("You have already completed maintenance against this Sales Order"); - } - } - ); - } -} - - cur_frm.cscript['Stop Sales Order'] = function() { var doc = cur_frm.doc; diff --git a/selling/doctype/sales_order/sales_order.py b/selling/doctype/sales_order/sales_order.py index 6bb85f8766..af860fc281 100644 --- a/selling/doctype/sales_order/sales_order.py +++ b/selling/doctype/sales_order/sales_order.py @@ -23,6 +23,7 @@ from webnotes.utils import cstr, flt, getdate from webnotes.model.bean import getlist from webnotes.model.code import get_obj from webnotes import msgprint +from webnotes.model.mapper import get_mapped_doclist sql = webnotes.conn.sql @@ -55,20 +56,6 @@ class DocType(SellingController): def get_rate(self,arg): return get_obj('Sales Common').get_rate(arg) - def check_maintenance_schedule(self): - nm = 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", self.doc.name) - nm = nm and nm[0][0] or '' - - if not nm: - return 'No' - - def check_maintenance_visit(self): - nm = sql("select t1.name from `tabMaintenance Visit` t1, `tabMaintenance Visit Purpose` t2 where t2.parent=t1.name and t2.prevdoc_docname=%s and t1.docstatus=1 and t1.completion_status='Fully Completed'", self.doc.name) - nm = nm and nm[0][0] or '' - - if not nm: - return 'No' - def validate_fiscal_year(self): get_obj('Sales Common').validate_fiscal_year(self.doc.fiscal_year,self.doc.transaction_date,'Sales Order Date') @@ -365,9 +352,7 @@ def get_currency_and_number_format(): } @webnotes.whitelist() -def make_material_request(source_name, target_doclist=None): - from webnotes.model.mapper import get_mapped_doclist - +def make_material_request(source_name, target_doclist=None): def postprocess(source, doclist): doclist[0].material_request_type = "Purchase" @@ -391,9 +376,7 @@ def make_material_request(source_name, target_doclist=None): return [d.fields for d in doclist] @webnotes.whitelist() -def make_delivery_note(source_name, target_doclist=None): - from webnotes.model.mapper import get_mapped_doclist - +def make_delivery_note(source_name, target_doclist=None): def update_item(obj, target, source_parent): target.amount = (flt(obj.qty) - flt(obj.delivered_qty)) * flt(obj.basic_rate) target.export_amount = (flt(obj.qty) - flt(obj.delivered_qty)) * flt(obj.export_rate) @@ -433,9 +416,7 @@ def make_delivery_note(source_name, target_doclist=None): return [d.fields for d in doclist] @webnotes.whitelist() -def make_sales_invoice(source_name, target_doclist=None): - from webnotes.model.mapper import get_mapped_doclist - +def make_sales_invoice(source_name, target_doclist=None): def update_item(obj, target, source_parent): target.export_amount = flt(obj.amount) - flt(obj.billed_amt) target.amount = target.export_amount / flt(source_parent.conversion_rate) @@ -470,4 +451,60 @@ def make_sales_invoice(source_name, target_doclist=None): } }, target_doclist, update_accounts) - return [d.fields for d in doclist] \ No newline at end of file + return [d.fields for d in doclist] + +@webnotes.whitelist() +def make_maintenance_schedule(source_name, target_doclist=None): + maint_schedule = webnotes.conn.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) + + if not maint_schedule: + doclist = get_mapped_doclist("Sales Order", source_name, { + "Sales Order": { + "doctype": "Maintenance Schedule", + "field_map": { + "name": "sales_order_no" + }, + "validation": { + "docstatus": ["=", 1] + } + }, + "Sales Order Item": { + "doctype": "Maintenance Schedule Item", + "field_map": { + "parent": "prevdoc_docname" + } + } + }, target_doclist) + + return [d.fields for d in doclist] + +@webnotes.whitelist() +def make_maintenance_visit(source_name, target_doclist=None): + visit = webnotes.conn.sql("""select t1.name + from `tabMaintenance Visit` t1, `tabMaintenance Visit Purpose` t2 + where t2.parent=t1.name and t2.prevdoc_docname=%s + and t1.docstatus=1 and t1.completion_status='Fully Completed'""", source_name) + + if not visit: + doclist = get_mapped_doclist("Sales Order", source_name, { + "Sales Order": { + "doctype": "Maintenance Visit", + "field_map": { + "name": "sales_order_no" + }, + "validation": { + "docstatus": ["=", 1] + } + }, + "Sales Order Item": { + "doctype": "Maintenance Visit Purpose", + "field_map": { + "parent": "prevdoc_docname", + "parenttype": "prevdoc_doctype" + } + } + }, target_doclist) + + return [d.fields for d in doclist] \ No newline at end of file diff --git a/support/doctype/customer_issue/customer_issue.js b/support/doctype/customer_issue/customer_issue.js index 3a602b8bc9..558ef321b4 100644 --- a/support/doctype/customer_issue/customer_issue.js +++ b/support/doctype/customer_issue/customer_issue.js @@ -17,6 +17,13 @@ wn.provide("erpnext.support"); // TODO commonify this code erpnext.support.CustomerIssue = wn.ui.form.Controller.extend({ + refresh: function() { + if(cur_frm.doc.docstatus==1 && (cur_frm.doc.status=='Open' || + cur_frm.doc.status == 'Work In Progress')) { + cur_frm.add_custom_button('Make Maintenance Visit', this.make_maintenance_visit) + } + }, + customer: function() { var me = this; if(this.frm.doc.customer) { @@ -31,6 +38,13 @@ erpnext.support.CustomerIssue = wn.ui.form.Controller.extend({ // TODO shift this to depends_on unhide_field(['customer_address', 'contact_person']); } + }, + + make_maintenance_visit: function() { + wn.model.open_mapped_doc({ + method: "support.doctype.customer_issue.customer_issue.make_maintenance_visit", + source_name: cur_frm.doc.name + }) } }); @@ -44,12 +58,6 @@ cur_frm.cscript.onload = function(doc,cdt,cdn){ } } -cur_frm.cscript.refresh = function(doc,ct,cdn){ - if(doc.docstatus == 1 && (doc.status == 'Open' || doc.status == 'Work In Progress')) - cur_frm.add_custom_button('Make Maintenance Visit', - cur_frm.cscript['Make Maintenance Visit']); -} - cur_frm.cscript.customer_address = cur_frm.cscript.contact_person = function(doc,dt,dn) { if(doc.customer) get_server_fields('get_customer_address', @@ -67,34 +75,6 @@ cur_frm.fields_dict['contact_person'].get_query = function(doc, cdt, cdn) { '" AND docstatus != 2 AND name LIKE "%s" ORDER BY name ASC LIMIT 50'; } -cur_frm.cscript['Make Maintenance Visit'] = function() { - var doc = cur_frm.doc; - if (doc.docstatus == 1) { - $c_obj(make_doclist(doc.doctype, doc.name),'check_maintenance_visit','', - function(r,rt){ - if(r.message == 'No'){ - n = wn.model.make_new_doc_and_get_name("Maintenance Visit"); - $c('dt_map', args={ - 'docs':wn.model.compress([locals["Maintenance Visit"][n]]), - 'from_doctype':'Customer Issue', - 'to_doctype':'Maintenance Visit', - 'from_docname':doc.name, - 'from_to_list':"[['Customer Issue', 'Maintenance Visit'], ['Customer Issue', 'Maintenance Visit Purpose']]" - }, function(r,rt) { - loaddoc("Maintenance Visit", n); - }); - } else{ - msgprint("You have already completed maintenance against this Customer Issue"); - } - } - ); - } -} - -// ---------- -// serial no -// ---------- - cur_frm.fields_dict['serial_no'].get_query = function(doc, cdt, cdn) { var cond = ''; if(doc.item_code) cond = ' AND `tabSerial No`.item_code = "'+ doc.item_code +'"'; @@ -115,9 +95,6 @@ cur_frm.add_fetch('serial_no', 'customer', 'customer'); cur_frm.add_fetch('serial_no', 'customer_name', 'customer_name'); cur_frm.add_fetch('serial_no', 'delivery_address', 'customer_address'); -// ---------- -// item code -// ---------- cur_frm.fields_dict['item_code'].get_query = function(doc, cdt, cdn) { if(doc.serial_no) { return 'SELECT `tabSerial No`.item_code, `tabSerial No`.description \ @@ -135,9 +112,6 @@ cur_frm.fields_dict['item_code'].get_query = function(doc, cdt, cdn) { cur_frm.add_fetch('item_code', 'item_name', 'item_name'); cur_frm.add_fetch('item_code', 'description', 'description'); - -//get query select Territory -//======================================================================================================================= cur_frm.fields_dict['territory'].get_query = function(doc,cdt,cdn) { return 'SELECT `tabTerritory`.`name`,`tabTerritory`.`parent_territory` \ FROM `tabTerritory` \ diff --git a/support/doctype/customer_issue/customer_issue.py b/support/doctype/customer_issue/customer_issue.py index 3a4ffc1d0a..60887f9318 100644 --- a/support/doctype/customer_issue/customer_issue.py +++ b/support/doctype/customer_issue/customer_issue.py @@ -17,9 +17,6 @@ from __future__ import unicode_literals import webnotes - -from webnotes.model import db_exists -from webnotes.model.bean import copy_doclist from webnotes import session, msgprint from webnotes.utils import today @@ -32,13 +29,6 @@ class DocType(TransactionBase): def __init__(self, doc, doclist=[]): self.doc = doc self.doclist = doclist - - def check_maintenance_visit(self): - nm = sql("select t1.name from `tabMaintenance Visit` t1, `tabMaintenance Visit Purpose` t2 where t2.parent=t1.name and t2.prevdoc_docname=%s and t1.docstatus=1 and t1.completion_status='Fully Completed'", self.doc.name) - nm = nm and nm[0][0] or '' - - if not nm: - return 'No' def validate(self): if session['user'] != 'Guest' and not self.doc.customer: @@ -61,3 +51,26 @@ class DocType(TransactionBase): def on_update(self): pass + +@webnotes.whitelist() +def make_maintenance_visit(source_name, target_doclist=None): + from webnotes.model.mapper import get_mapped_doclist + + visit = webnotes.conn.sql("""select t1.name + from `tabMaintenance Visit` t1, `tabMaintenance Visit Purpose` t2 + where t2.parent=t1.name and t2.prevdoc_docname=%s + and t1.docstatus=1 and t1.completion_status='Fully Completed'""", source_name) + + if not visit: + doclist = get_mapped_doclist("Customer Issue", source_name, { + "Customer Issue": { + "doctype": "Maintenance Visit", + "field_map": { + "complaint": "description", + "doctype": "prevdoc_doctype", + "name": "prevdoc_docname" + } + } + }, target_doclist) + + return [d.fields for d in doclist] \ No newline at end of file diff --git a/support/doctype/maintenance_schedule/maintenance_schedule.js b/support/doctype/maintenance_schedule/maintenance_schedule.js index 6b3ce10f75..ec75289290 100644 --- a/support/doctype/maintenance_schedule/maintenance_schedule.js +++ b/support/doctype/maintenance_schedule/maintenance_schedule.js @@ -34,6 +34,15 @@ erpnext.support.MaintenanceSchedule = wn.ui.form.Controller.extend({ 'territory', 'customer_group']); } + }, + + get_items: function() { + wn.model.map_current_doc({ + method: "selling.doctype.sales_order.sales_order.make_maintenance_schedule", + source_name: cur_frm.doc.quotation_no, + }); + unhide_field(['customer_address', 'contact_person', 'customer_name', 'address_display', + 'contact_display', 'contact_mobile', 'contact_email', 'territory', 'customer_group']); } }); @@ -65,16 +74,6 @@ cur_frm.fields_dict['item_maintenance_detail'].grid.get_field('item_code').get_q return 'SELECT tabItem.name,tabItem.item_name,tabItem.description FROM tabItem WHERE tabItem.is_service_item="Yes" AND tabItem.docstatus != 2 AND tabItem.%(key)s LIKE "%s" LIMIT 50'; } -// Get Items based on SO Selected -cur_frm.cscript.get_items = function(doc, dt, dn) { - var callback = function(r,rt) { - unhide_field(['customer_address','contact_person','customer_name','address_display','contact_display','contact_mobile','contact_email','territory','customer_group']); - cur_frm.refresh(); - } - get_server_fields('pull_sales_order_detail','','',doc, dt, dn,1,callback); -} - - cur_frm.cscript.item_code = function(doc, cdt, cdn) { var fname = cur_frm.cscript.fname; var d = locals[cdt][cdn]; @@ -83,17 +82,6 @@ cur_frm.cscript.item_code = function(doc, cdt, cdn) { } } -/* -cur_frm.fields_dict['contact_person'].get_query = function(doc, cdt, cdn) { - return 'SELECT `tabContact`.contact_name FROM `tabContact` WHERE `tabContact`.is_customer = 1 AND `tabContact`.customer = "'+ doc.customer+'" AND `tabContact`.contact_name LIKE "%s" ORDER BY `tabContact`.contact_name ASC LIMIT 50'; -} - - -cur_frm.cscript.customer = function(doc, cdt, cdn) { - get_server_fields('get_customer_details','','',doc, cdt, cdn, 1); -} -*/ - cur_frm.fields_dict['sales_order_no'].get_query = function(doc) { doc = locals[this.doctype][this.docname]; var cond = ''; @@ -129,8 +117,6 @@ cur_frm.cscript.generate_schedule = function(doc, cdt, cdn) { } } -//get query select Territory -//======================================================================================================================= cur_frm.fields_dict['territory'].get_query = function(doc,cdt,cdn) { return 'SELECT `tabTerritory`.`name`,`tabTerritory`.`parent_territory` FROM `tabTerritory` WHERE `tabTerritory`.`is_group` = "No" AND `tabTerritory`.`docstatus`!= 2 AND `tabTerritory`.%(key)s LIKE "%s" ORDER BY `tabTerritory`.`name` ASC LIMIT 50'; } diff --git a/support/doctype/maintenance_schedule/maintenance_schedule.py b/support/doctype/maintenance_schedule/maintenance_schedule.py index baed6a9dbd..dad63eb3b7 100644 --- a/support/doctype/maintenance_schedule/maintenance_schedule.py +++ b/support/doctype/maintenance_schedule/maintenance_schedule.py @@ -33,15 +33,6 @@ class DocType(TransactionBase): self.doc = doc self.doclist = doclist - # pull sales order details - #-------------------------- - def pull_sales_order_detail(self): - self.doclist = self.doc.clear_table(self.doclist, 'item_maintenance_detail') - self.doclist = self.doc.clear_table(self.doclist, 'maintenance_schedule_detail') - self.doclist = get_obj('DocType Mapper', 'Sales Order-Maintenance Schedule').dt_map('Sales Order', 'Maintenance Schedule', self.doc.sales_order_no, self.doc, self.doclist, "[['Sales Order', 'Maintenance Schedule'],['Sales Order Item', 'Maintenance Schedule Item']]") - - #pull item details - #------------------- def get_item_details(self, item_code): item = sql("select item_name, description from `tabItem` where name = '%s'" %(item_code), as_dict=1) ret = { @@ -50,8 +41,6 @@ class DocType(TransactionBase): } return ret - # generate maintenance schedule - #------------------------------------- def generate_schedule(self): self.doclist = self.doc.clear_table(self.doclist, 'maintenance_schedule_detail') count = 0 @@ -75,8 +64,6 @@ class DocType(TransactionBase): self.on_update() - - def on_submit(self): if not getlist(self.doclist, 'maintenance_schedule_detail'): msgprint("Please click on 'Generate Schedule' to get schedule") @@ -149,10 +136,6 @@ class DocType(TransactionBase): msgprint("Weekly periodicity can be set for period of atleast 1 week or more") raise Exception - - - #get count on the basis of periodicity selected - #---------------------------------------------------- def get_no_of_visits(self, arg): arg1 = eval(arg) self.validate_period(arg) @@ -331,3 +314,28 @@ class DocType(TransactionBase): def on_trash(self): delete_events(self.doc.doctype, self.doc.name) + +@webnotes.whitelist() +def make_maintenance_visit(source_name, target_doclist=None): + from webnotes.model.mapper import get_mapped_doclist + + doclist = get_mapped_doclist("Maintenance Schedule", source_name, { + "Maintenance Schedule": { + "doctype": "Maintenance Visit", + "field_map": { + "name": "maintenance_schedule" + }, + "validation": { + "docstatus": ["=", 1] + } + }, + "Maintenance Schedule Item": { + "doctype": "Maintenance Visit Purpose", + "field_map": { + "parent": "prevdoc_docname", + "parenttype": "prevdoc_doctype" + } + } + }, target_doclist) + + return [d.fields for d in doclist] \ No newline at end of file diff --git a/support/doctype/maintenance_schedule/maintenance_schedule.txt b/support/doctype/maintenance_schedule/maintenance_schedule.txt index 63148dcaa0..fc95ec6dc2 100644 --- a/support/doctype/maintenance_schedule/maintenance_schedule.txt +++ b/support/doctype/maintenance_schedule/maintenance_schedule.txt @@ -2,7 +2,7 @@ { "creation": "2013-01-10 16:34:30", "docstatus": 0, - "modified": "2013-07-05 14:45:42", + "modified": "2013-07-07 12:18:51", "modified_by": "Administrator", "owner": "Administrator" }, @@ -24,19 +24,13 @@ "permlevel": 0 }, { - "amend": 1, - "cancel": 1, - "create": 1, "doctype": "DocPerm", "name": "__common__", "parent": "Maintenance Schedule", "parentfield": "permissions", "parenttype": "DocType", - "permlevel": 0, "read": 1, - "report": 1, - "submit": 1, - "write": 1 + "report": 1 }, { "doctype": "DocType", @@ -227,7 +221,6 @@ "fieldtype": "Button", "label": "Get Items", "oldfieldtype": "Button", - "options": "pull_sales_order_detail", "report_hide": 1 }, { @@ -265,11 +258,41 @@ "read_only": 1 }, { + "amend": 1, + "cancel": 1, + "create": 1, "doctype": "DocPerm", - "role": "System Manager" + "permlevel": 0, + "role": "System Manager", + "submit": 1, + "write": 1 }, { + "amend": 0, + "cancel": 0, + "create": 0, "doctype": "DocPerm", - "role": "Maintenance Manager" + "permlevel": 1, + "role": "System Manager", + "submit": 0 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "doctype": "DocPerm", + "permlevel": 0, + "role": "Maintenance Manager", + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "doctype": "DocPerm", + "permlevel": 1, + "role": "Maintenance Manager", + "submit": 0 } ] \ No newline at end of file diff --git a/support/doctype/maintenance_visit/maintenance_visit.js b/support/doctype/maintenance_visit/maintenance_visit.js index 3b8de757c9..6c282c01ad 100644 --- a/support/doctype/maintenance_visit/maintenance_visit.js +++ b/support/doctype/maintenance_visit/maintenance_visit.js @@ -31,6 +31,26 @@ erpnext.support.MaintenanceVisit = wn.ui.form.Controller.extend({ // TODO shift this to depends_on hide_contact_info(this.frm.doc); } + }, + + get_items: function() { + if(cur_frm.doc.sales_order_no) { + wn.model.map_current_doc({ + method: "selling.doctype.sales_order.sales_order.make_maintenance_visit", + source_name: cur_frm.doc.quotation_no, + }); + } else if (cur_frm.doc.customer_issue_no) { + wn.model.map_current_doc({ + method: "support.doctype.customer_issue.customer_issue.make_maintenance_visit", + source_name: cur_frm.doc.quotation_no, + }); + } else if (cur_frm.doc.maintenance_schedule) { + wn.model.map_current_doc({ + method: "support.doctype.maintenance_schedule.maintenance_schedule\ + .make_maintenance_visit", + source_name: cur_frm.doc.quotation_no, + }); + } } }); diff --git a/support/doctype/maintenance_visit/maintenance_visit.py b/support/doctype/maintenance_visit/maintenance_visit.py index cf1ddeb8cc..d87d6e97e7 100644 --- a/support/doctype/maintenance_visit/maintenance_visit.py +++ b/support/doctype/maintenance_visit/maintenance_visit.py @@ -18,8 +18,7 @@ from __future__ import unicode_literals import webnotes from webnotes.utils import cstr -from webnotes.model import db_exists -from webnotes.model.bean import getlist, copy_doclist +from webnotes.model.bean import getlist from webnotes.model.code import get_obj from webnotes import msgprint @@ -33,48 +32,20 @@ class DocType(TransactionBase): self.doc = doc self.doclist = doclist - #get item details - #------------------ def get_item_details(self, item_code): item = sql("select item_name,description from `tabItem` where name = '%s'" %(item_code), as_dict=1) ret = { 'item_name' : item and item[0]['item_name'] or '', 'description' : item and item[0]['description'] or '' } - return ret - - # fetch details of resp Sales order or customer issue - #----------------------------------------------------------- - def fetch_items(self): - if self.doc.sales_order_no and self.doc.customer_issue_no : - msgprint("You can not fetch details of both, Sales Order and Customer Issue, in same Maintenance Visit") - raise Exception - - self.doclist = self.doc.clear_table(self.doclist, 'maintenance_visit_details') - - if self.doc.sales_order_no: - self.doclist = get_obj('DocType Mapper', 'Sales Order-Maintenance Visit').dt_map('Sales Order', \ - 'Maintenance Visit', self.doc.sales_order_no, self.doc, self.doclist, "[['Sales Order', 'Maintenance Visit'],\ - ['Sales Order Item', 'Maintenance Visit Purpose']]") - elif self.doc.customer_issue_no: - self.doclist = get_obj('DocType Mapper', 'Customer Issue-Maintenance Visit').dt_map('Customer Issue', \ - 'Maintenance Visit', self.doc.customer_issue_no, self.doc, self.doclist, "[['Customer Issue', 'Maintenance Visit'],\ - ['Customer Issue', 'Maintenance Visit Purpose']]") - elif self.doc.maintenance_schedule: - self.doclist = get_obj('DocType Mapper', 'Maintenance Schedule-Maintenance Visit').dt_map('Maintenance Schedule',\ - 'Maintenance Visit', self.doc.maintenance_schedule, self.doc, self.doclist, "[['Maintenance Schedule', \ - 'Maintenance Visit'], ['Maintenance Schedule Item', 'Maintenance Visit Purpose']]") - - #validate reference value using doctype mapper - #----------------------------------------------------- + return ret + def validate_reference_value(self, check_for): if check_for == 'Sales Order': get_obj('DocType Mapper', 'Sales Order-Maintenance Visit', with_children = 1).validate_reference_value(self, self.doc.name) elif check_for == 'Customer Issue': get_obj('DocType Mapper', 'Customer Issue-Maintenance Visit', with_children = 1).validate_reference_value(self, self.doc.name) - #check if serial no exist in system - #-------------------------------------- def validate_serial_no(self): for d in getlist(self.doclist, 'maintenance_visit_details'): if d.serial_no and not sql("select name from `tabSerial No` where name = '%s' and docstatus != 2" % d.serial_no): @@ -155,4 +126,4 @@ class DocType(TransactionBase): webnotes.conn.set(self.doc, 'status', 'Cancelled') def on_update(self): - pass + pass \ No newline at end of file diff --git a/support/doctype/maintenance_visit/maintenance_visit.txt b/support/doctype/maintenance_visit/maintenance_visit.txt index 5f9bb1b3d0..c57787e4d4 100644 --- a/support/doctype/maintenance_visit/maintenance_visit.txt +++ b/support/doctype/maintenance_visit/maintenance_visit.txt @@ -2,7 +2,7 @@ { "creation": "2013-01-10 16:34:31", "docstatus": 0, - "modified": "2013-07-05 14:45:54", + "modified": "2013-07-07 12:08:12", "modified_by": "Administrator", "owner": "ashwini@webnotestech.com" }, @@ -24,19 +24,13 @@ "permlevel": 0 }, { - "amend": 1, - "cancel": 1, - "create": 1, "doctype": "DocPerm", "name": "__common__", "parent": "Maintenance Visit", "parentfield": "permissions", "parenttype": "DocType", - "permlevel": 0, "read": 1, - "report": 1, - "submit": 1, - "write": 1 + "report": 1 }, { "doctype": "DocType", @@ -213,7 +207,6 @@ "fieldtype": "Button", "label": "Get Items", "oldfieldtype": "Button", - "options": "fetch_items", "print_hide": 1, "report_hide": 1 }, @@ -348,15 +341,60 @@ "print_hide": 1 }, { + "amend": 1, + "cancel": 1, + "create": 1, "doctype": "DocPerm", - "role": "System Manager" + "permlevel": 0, + "role": "System Manager", + "submit": 1, + "write": 1 }, { + "amend": 0, + "cancel": 0, + "create": 0, "doctype": "DocPerm", - "role": "Maintenance Manager" + "permlevel": 1, + "role": "System Manager", + "submit": 0 }, { + "amend": 1, + "cancel": 1, + "create": 1, "doctype": "DocPerm", - "role": "Maintenance User" + "permlevel": 0, + "role": "Maintenance Manager", + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "doctype": "DocPerm", + "permlevel": 1, + "role": "Maintenance Manager", + "submit": 0 + }, + { + "amend": 1, + "cancel": 1, + "create": 1, + "doctype": "DocPerm", + "permlevel": 0, + "role": "Maintenance User", + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "cancel": 0, + "create": 0, + "doctype": "DocPerm", + "permlevel": 1, + "role": "Maintenance User", + "submit": 0 } ] \ No newline at end of file