[mapper] support

This commit is contained in:
Nabin Hait 2013-07-07 12:32:01 +05:30
parent 650501526f
commit 2b3ca41450
10 changed files with 256 additions and 231 deletions

View File

@ -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;

View File

@ -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]
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]

View File

@ -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` \

View File

@ -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]

View File

@ -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';
}

View File

@ -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]

View File

@ -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
}
]

View File

@ -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,
});
}
}
});

View File

@ -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

View File

@ -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
}
]