diff --git a/support/doctype/support_ticket/support_ticket.css b/support/doctype/support_ticket/support_ticket.css index 8d563a726b..370d99c851 100644 --- a/support/doctype/support_ticket/support_ticket.css +++ b/support/doctype/support_ticket/support_ticket.css @@ -1,3 +1,18 @@ +.communication { + border: 1px solid #aaa; + border-top: 0px; + padding: 7px; + background-color: #f2f2f2 +} + +.communication:hover { + background-color: #fffff0; +} + +.communication:first-child { + border-top: 1px solid #aaa; +} + .support-ticket-wrapper { margin-top: 10px; } diff --git a/support/doctype/support_ticket/support_ticket.js b/support/doctype/support_ticket/support_ticket.js index ddb288e40a..b70ff4f998 100644 --- a/support/doctype/support_ticket/support_ticket.js +++ b/support/doctype/support_ticket/support_ticket.js @@ -22,26 +22,15 @@ // xoxoxoxo // -------- new reply -------- -var cs = cur_frm.cscript; $.extend(cur_frm.cscript, { onload: function(doc, dt, dn) { // // help area // if(in_list(user_roles,'System Manager')) { - cur_frm.page_layout.footer.help_area.innerHTML = ''; - new wn.widgets.Footer({ - parent:cur_frm.page_layout.footer.help_area, - columns:2, - items: [ - { - column: 0, - label:'Email Settings', - description:'Integrate your incoming support emails to support ticket', - onclick: function() { loaddoc('Email Settings','Email Settings'); } - }, - ] - }) + cur_frm.page_layout.footer.help_area.innerHTML = '
\ +

Email Settings
\ + Integrate incoming support emails to Support Ticket

'; } if(!doc.customer) hide_field(['customer_name','address_display','contact_display','contact_mobile','contact_email']); @@ -71,30 +60,30 @@ $.extend(cur_frm.cscript, { // make thread listing // make_listing: function(doc) { - cur_frm.fields_dict['thread_html'].wrapper.innerHTML = ''; + var wrapper = cur_frm.fields_dict['thread_html'].wrapper; + $(wrapper) + .html("") + .css({"margin":"10px 0px"}); - // render first message - new EmailMessage($a(cur_frm.fields_dict['thread_html'].wrapper, 'div'), { - email_address: doc.raised_by, - creation: doc.creation, - content: doc.description, - }, null, -1) - - // render thread - cur_frm.cscript.thread_list = new wn.ui.Listing({ - parent: $a(cur_frm.fields_dict['thread_html'].wrapper, 'div'), - no_result_message: 'No responses yet', - get_query: function() { - return 'select content, email_address, creation '+ - 'from `tabCommunication` where support_ticket="'+doc.name+'" order by creation asc' - }, - as_dict: 1, - render_row: function(parent, data, list, idx) { - new EmailMessage(parent, data, list, idx); + var comm_list = wn.model.get("Communication", {"support_ticket": doc.name}) + comm_list.push({ + "email_address": doc.raised_by, + "modified": doc.creation, + "content": doc.description}); + + comm_list.sort(function(a, b) { return new Date(a.modified) > new Date(b.modified) + ? -1 : 1 }) + + $.each(comm_list, function(i, c) { + var comm = new erpnext.CommunicationView({ + doc: c, + support_ticket: doc, + parent: wrapper + }); + if(i==0) { + comm.toggle(); } }); - cur_frm.cscript.thread_list.run(); - }, send: function(doc, dt, dn) { @@ -140,55 +129,39 @@ $.extend(cur_frm.cscript, { }) - - -EmailMessage = function(parent, args, list, idx) { - var me = this; - $.extend(this, args); - this.make = function() { - this.creation = wn.datetime.str_to_user(this.creation); - if(this.email_address) - this.email_address = this.email_address.replace('<', '<').replace('>', '>'); - - // main wrapper - w = $a(parent, 'div', 'support-ticket-wrapper well'); - //$(w).addClass('support-ticket-wrapper'); - - // sender and timestamp - $a($a(w, 'div', 'support-ticket-title'), - 'span', 'link_type', {}, repl('By %(email_address)s on %(creation)s:', this), - function() { - // toggle message display on timestamp - if(me.message.style.display.toLowerCase()=='none') { - $ds(me.message); - } else { - $dh(me.message); - } - } - ); - - // email text - this.message = $a(w, 'div', '', - // style - {lineHeight:'1.7em', display:'none', padding: '7px', width: '575px', - wordWrap: 'break-word', textWrap: 'normal', overflowX: 'auto'}, - - // newlines for text email - (this.content.indexOf("
")== -1 && this.content.indexOf("

")== -1) - ? this.content.replace(/\n[ ]*\n[\n\t ]*/g, '\n') // excess whitespace - .replace(/\n/g, '
') - : this.content - ); - - // show only first and last message - if(idx==-1 || list && list.data.length-1==idx) { - $ds(this.message) +erpnext.CommunicationView = Class.extend({ + init: function(opts) { + $.extend(this, opts); + this.prepare(); + this.make(); + this.toggle(); + }, + prepare: function() { + //this.doc.when = comment_when(this.doc.modified); + this.doc.when = this.doc.modified; + if(this.doc.content.indexOf("
")== -1 && this.doc.content.indexOf("

")== -1) { + this.doc.content = this.doc.content.replace(/\n/g, "
"); } - + this.doc.content = this.doc.content.split("=== In response to ===")[0]; + this.doc.content = this.doc.content.split("-----Original Message-----")[0]; + }, + make: function() { + var me = this; + this.body = $(repl('

\ +

%(email_address)s on %(when)s

\ +

%(content)s

\ +
', this.doc)) + .appendTo(this.parent) + .css({"cursor":"pointer"}) + .click(function() { + $(this).find(".comm-content").toggle(); + }); + }, + toggle: function() { + this.body.find(".comm-content").toggle(); } - this.make(); -} +}) + cur_frm.fields_dict.allocated_to.get_query = erpnext.utils.profile_query; - cur_frm.fields_dict.customer.get_query = erpnext.utils.customer_query; \ No newline at end of file diff --git a/support/doctype/support_ticket/support_ticket.py b/support/doctype/support_ticket/support_ticket.py index f48ba9fd83..8e5d7f2d0c 100644 --- a/support/doctype/support_ticket/support_ticket.py +++ b/support/doctype/support_ticket/support_ticket.py @@ -29,6 +29,21 @@ class DocType(TransactionBase): def autoname(self): self.doc.name = make_autoname(self.doc.naming_series+'.#####') + def onload(self): + self.add_communication_list() + + def add_communication_list(self): + # remove communications if present + self.doclist = self.doclist.get({"doctype": ["!=", "Communcation"]}) + + comm_list = webnotes.conn.sql("""select * from tabCommunication + where support_ticket=%s order by modified desc limit 20""", self.doc.name, as_dict=1) + + [d.update({"doctype":"Communication"}) for d in comm_list] + + self.doclist.extend(webnotes.doclist([webnotes.doc(fielddata=d) \ + for d in comm_list])) + def send_response(self): """ Adds a new response to the ticket and sends an email to the sender @@ -61,6 +76,7 @@ class DocType(TransactionBase): self.doc.new_response = None webnotes.conn.set(self.doc, 'status', 'Waiting for Customer') self.make_response_record(response) + self.add_communication_list() def last_response(self): """return last response""" diff --git a/support/doctype/support_ticket/support_ticket.txt b/support/doctype/support_ticket/support_ticket.txt index c1622abb40..d261c164e0 100644 --- a/support/doctype/support_ticket/support_ticket.txt +++ b/support/doctype/support_ticket/support_ticket.txt @@ -1,411 +1,335 @@ -# DocType, Support Ticket [ - - # These values are common in all dictionaries - { - 'creation': '2012-04-02 16:02:42', - 'docstatus': 0, - 'modified': '2012-05-02 11:33:24', - 'modified_by': u'Administrator', - 'owner': u'Administrator' - }, - - # These values are common for all DocType - { - '_last_update': u'1311584009', - 'allow_attach': 1, - 'allow_trash': 1, - 'colour': u'White:FFF', - 'default_print_format': u'Standard', - 'doctype': 'DocType', - 'module': u'Support', - 'name': '__common__', - 'search_fields': u'status,customer,allocated_to,subject,raised_by', - 'section_style': u'Tray', - 'server_code_error': u' ', - 'show_in_menu': 0, - 'subject': u'%(subject)s', - 'tag_fields': u'status,allocated_to', - 'version': 1 - }, - - # These values are common for all DocField - { - 'doctype': u'DocField', - 'name': '__common__', - 'parent': u'Support Ticket', - 'parentfield': u'fields', - 'parenttype': u'DocType' - }, - - # These values are common for all DocPerm - { - 'amend': 0, - 'cancel': 0, - 'doctype': u'DocPerm', - 'name': '__common__', - 'parent': u'Support Ticket', - 'parentfield': u'permissions', - 'parenttype': u'DocType', - 'read': 1, - 'submit': 0 - }, - - # DocType, Support Ticket - { - 'doctype': 'DocType', - 'name': u'Support Ticket' - }, - - # DocPerm - { - 'create': 1, - 'doctype': u'DocPerm', - 'permlevel': 0, - 'role': u'Guest', - 'write': 1 - }, - - # DocPerm - { - 'create': 1, - 'doctype': u'DocPerm', - 'permlevel': 0, - 'role': u'Customer', - 'write': 1 - }, - - # DocPerm - { - 'create': 1, - 'doctype': u'DocPerm', - 'permlevel': 0, - 'role': u'Support Team', - 'write': 1 - }, - - # DocPerm - { - 'create': 0, - 'doctype': u'DocPerm', - 'permlevel': 1, - 'role': u'Support Team', - 'write': 1 - }, - - # DocPerm - { - 'create': 0, - 'doctype': u'DocPerm', - 'permlevel': 2, - 'role': u'Support Team', - 'write': 0 - }, - - # DocField - { - 'doctype': u'DocField', - 'fieldname': u'naming_series', - 'fieldtype': u'Select', - 'hidden': 0, - 'label': u'Naming Series', - 'no_copy': 1, - 'options': u'SUP', - 'permlevel': 0, - 'print_hide': 1, - 'reqd': 0, - 'search_index': 0 - }, - - # DocField - { - 'colour': u'White:FFF', - 'default': u'Open', - 'doctype': u'DocField', - 'fieldname': u'status', - 'fieldtype': u'Select', - 'in_filter': 0, - 'label': u'Status', - 'no_copy': 1, - 'oldfieldname': u'status', - 'oldfieldtype': u'Select', - 'options': u'\nOpen\nTo Reply\nWaiting for Customer\nHold\nClosed', - 'permlevel': 1, - 'reqd': 0, - 'search_index': 1 - }, - - # DocField - { - 'doctype': u'DocField', - 'fieldname': u'subject', - 'fieldtype': u'Text', - 'in_filter': 1, - 'label': u'Subject', - 'permlevel': 0, - 'reqd': 1 - }, - - # DocField - { - 'depends_on': u'eval:doc.__islocal', - 'doctype': u'DocField', - 'fieldname': u'raised_by', - 'fieldtype': u'Data', - 'in_filter': 1, - 'label': u'Raised By (Email)', - 'oldfieldname': u'raised_by', - 'oldfieldtype': u'Data', - 'permlevel': 0, - 'reqd': 1 - }, - - # DocField - { - 'depends_on': u'eval:doc.__islocal', - 'doctype': u'DocField', - 'fieldname': u'description', - 'fieldtype': u'Text', - 'label': u'Description', - 'oldfieldname': u'problem_description', - 'oldfieldtype': u'Text', - 'permlevel': 0, - 'reqd': 0 - }, - - # DocField - { - 'depends_on': u'eval:!doc.__islocal', - 'doctype': u'DocField', - 'fieldname': u'thread_html', - 'fieldtype': u'HTML', - 'label': u'Thread HTML', - 'permlevel': 1 - }, - - # DocField - { - 'depends_on': u'eval:!doc.__islocal', - 'doctype': u'DocField', - 'fieldname': u'new_response', - 'fieldtype': u'Text', - 'label': u'New Response', - 'permlevel': 0 - }, - - # DocField - { - 'depends_on': u'eval:!doc.__islocal', - 'doctype': u'DocField', - 'fieldname': u'send', - 'fieldtype': u'Button', - 'label': u'Send', - 'permlevel': 0 - }, - - # DocField - { - 'colour': u'White:FFF', - 'doctype': u'DocField', - 'fieldname': u'additional_info', - 'fieldtype': u'Section Break', - 'label': u'Additional Info', - 'permlevel': 1 - }, - - # DocField - { - 'depends_on': u'eval:!doc.__islocal', - 'doctype': u'DocField', - 'fieldname': u'column_break0', - 'fieldtype': u'Column Break', - 'oldfieldtype': u'Column Break', - 'permlevel': 1, - 'width': u'50%' - }, - - # DocField - { - 'colour': u'White:FFF', - 'doctype': u'DocField', - 'fieldname': u'customer', - 'fieldtype': u'Link', - 'in_filter': 1, - 'label': u'Customer', - 'oldfieldname': u'customer', - 'oldfieldtype': u'Link', - 'options': u'Customer', - 'permlevel': 1, - 'print_hide': 1, - 'reqd': 0, - 'search_index': 1, - 'trigger': u'Client' - }, - - # DocField - { - 'doctype': u'DocField', - 'fieldname': u'customer_name', - 'fieldtype': u'Data', - 'in_filter': 1, - 'label': u'Customer Name', - 'oldfieldname': u'customer_name', - 'oldfieldtype': u'Data', - 'permlevel': 2, - 'reqd': 0, - 'search_index': 0 - }, - - # DocField - { - 'doctype': u'DocField', - 'fieldname': u'address_display', - 'fieldtype': u'Small Text', - 'label': u'Address', - 'permlevel': 2 - }, - - # DocField - { - 'doctype': u'DocField', - 'fieldname': u'contact_display', - 'fieldtype': u'Data', - 'label': u'Contact Name', - 'permlevel': 2 - }, - - # DocField - { - 'doctype': u'DocField', - 'fieldname': u'contact_mobile', - 'fieldtype': u'Data', - 'label': u'Mobile No', - 'permlevel': 2 - }, - - # DocField - { - 'doctype': u'DocField', - 'fieldname': u'contact_email', - 'fieldtype': u'Data', - 'label': u'Contact Email', - 'oldfieldname': u'contact_no', - 'oldfieldtype': u'Data', - 'permlevel': 2 - }, - - # DocField - { - 'default': u'Today', - 'doctype': u'DocField', - 'fieldname': u'opening_date', - 'fieldtype': u'Date', - 'label': u'Opening Date', - 'no_copy': 1, - 'oldfieldname': u'opening_date', - 'oldfieldtype': u'Date', - 'permlevel': 1 - }, - - # DocField - { - 'doctype': u'DocField', - 'fieldname': u'opening_time', - 'fieldtype': u'Time', - 'label': u'Opening Time', - 'no_copy': 1, - 'oldfieldname': u'opening_time', - 'oldfieldtype': u'Time', - 'permlevel': 1 - }, - - # DocField - { - 'depends_on': u'eval:!doc.__islocal', - 'doctype': u'DocField', - 'fieldname': u'column_break1', - 'fieldtype': u'Column Break', - 'oldfieldtype': u'Column Break', - 'permlevel': 1 - }, - - # DocField - { - 'colour': u'White:FFF', - 'depends_on': u'eval:!doc.__islocal', - 'doctype': u'DocField', - 'fieldname': u'allocated_to', - 'fieldtype': u'Link', - 'in_filter': 1, - 'label': u'Allocated To', - 'oldfieldname': u'allocated_to', - 'oldfieldtype': u'Link', - 'options': u'Profile', - 'permlevel': 1, - 'search_index': 1 - }, - - # DocField - { - 'depends_on': u'eval:!doc.__islocal', - 'doctype': u'DocField', - 'fieldname': u'resolution_details', - 'fieldtype': u'Text', - 'label': u'Resolution Details', - 'no_copy': 1, - 'oldfieldname': u'resolution_details', - 'oldfieldtype': u'Text', - 'permlevel': 1 - }, - - # DocField - { - 'colour': u'White:FFF', - 'depends_on': u'eval:!doc.__islocal', - 'doctype': u'DocField', - 'fieldname': u'resolution_date', - 'fieldtype': u'Date', - 'in_filter': 0, - 'label': u'Resolution Date', - 'no_copy': 1, - 'oldfieldname': u'resolution_date', - 'oldfieldtype': u'Date', - 'permlevel': 1, - 'search_index': 0 - }, - - # DocField - { - 'depends_on': u'eval:!doc.__islocal', - 'doctype': u'DocField', - 'fieldname': u'resolution_time', - 'fieldtype': u'Time', - 'label': u'Resolution Time', - 'oldfieldname': u'resolution_time', - 'oldfieldtype': u'Time', - 'permlevel': 1 - }, - - # DocField - { - 'colour': u'White:FFF', - 'doctype': u'DocField', - 'fieldname': u'content_type', - 'fieldtype': u'Data', - 'hidden': 1, - 'label': u'Content Type', - 'permlevel': 0 - }, - - # DocField - { - 'doctype': u'DocField', - 'fieldname': u'file_list', - 'fieldtype': u'Text', - 'hidden': 1, - 'label': u'File List', - 'no_copy': 1, - 'permlevel': 0, - 'print_hide': 1 - } + { + "owner": "Administrator", + "docstatus": 0, + "creation": "2012-11-02 17:17:05", + "modified_by": "Administrator", + "modified": "2012-11-24 16:41:45" + }, + { + "allow_attach": 1, + "default_print_format": "Standard", + "search_fields": "status,customer,allocated_to,subject,raised_by", + "module": "Support", + "doctype": "DocType", + "name": "__common__" + }, + { + "name": "__common__", + "parent": "Support Ticket", + "doctype": "DocField", + "parenttype": "DocType", + "parentfield": "fields" + }, + { + "name": "__common__", + "parent": "Support Ticket", + "amend": 0, + "submit": 0, + "doctype": "DocPerm", + "read": 1, + "parenttype": "DocType", + "parentfield": "permissions" + }, + { + "name": "Support Ticket", + "doctype": "DocType" + }, + { + "print_hide": 1, + "no_copy": 1, + "search_index": 0, + "doctype": "DocField", + "label": "Naming Series", + "options": "SUP", + "fieldname": "naming_series", + "fieldtype": "Select", + "reqd": 0, + "hidden": 0, + "permlevel": 0 + }, + { + "permlevel": 1, + "no_copy": 1, + "oldfieldtype": "Select", + "colour": "White:FFF", + "doctype": "DocField", + "label": "Status", + "oldfieldname": "status", + "default": "Open", + "fieldname": "status", + "fieldtype": "Select", + "search_index": 1, + "reqd": 0, + "options": "\nOpen\nTo Reply\nWaiting for Customer\nHold\nClosed", + "in_filter": 0 + }, + { + "doctype": "DocField", + "label": "Subject", + "fieldname": "subject", + "fieldtype": "Text", + "reqd": 1, + "permlevel": 0, + "in_filter": 1 + }, + { + "oldfieldtype": "Data", + "doctype": "DocField", + "label": "Raised By (Email)", + "oldfieldname": "raised_by", + "fieldname": "raised_by", + "fieldtype": "Data", + "depends_on": "eval:doc.__islocal", + "reqd": 1, + "permlevel": 0, + "in_filter": 1 + }, + { + "oldfieldtype": "Text", + "doctype": "DocField", + "label": "Description", + "oldfieldname": "problem_description", + "fieldname": "description", + "fieldtype": "Text", + "depends_on": "eval:doc.__islocal", + "reqd": 0, + "permlevel": 0 + }, + { + "depends_on": "eval:!doc.__islocal", + "doctype": "DocField", + "label": "New Response", + "fieldname": "new_response", + "fieldtype": "Text", + "permlevel": 0 + }, + { + "depends_on": "eval:!doc.__islocal", + "doctype": "DocField", + "label": "Send", + "fieldname": "send", + "fieldtype": "Button", + "permlevel": 0 + }, + { + "depends_on": "eval:!doc.__islocal", + "doctype": "DocField", + "label": "Thread HTML", + "fieldname": "thread_html", + "fieldtype": "HTML", + "permlevel": 1 + }, + { + "colour": "White:FFF", + "doctype": "DocField", + "label": "Additional Info", + "fieldname": "additional_info", + "fieldtype": "Section Break", + "permlevel": 1 + }, + { + "oldfieldtype": "Column Break", + "doctype": "DocField", + "width": "50%", + "fieldname": "column_break0", + "fieldtype": "Column Break", + "depends_on": "eval:!doc.__islocal", + "permlevel": 1 + }, + { + "print_hide": 1, + "oldfieldtype": "Link", + "colour": "White:FFF", + "doctype": "DocField", + "label": "Customer", + "oldfieldname": "customer", + "permlevel": 1, + "trigger": "Client", + "fieldname": "customer", + "fieldtype": "Link", + "search_index": 1, + "reqd": 0, + "options": "Customer", + "in_filter": 1 + }, + { + "oldfieldtype": "Data", + "doctype": "DocField", + "label": "Customer Name", + "oldfieldname": "customer_name", + "fieldname": "customer_name", + "fieldtype": "Data", + "search_index": 0, + "reqd": 0, + "permlevel": 2, + "in_filter": 1 + }, + { + "doctype": "DocField", + "label": "Address", + "fieldname": "address_display", + "fieldtype": "Small Text", + "permlevel": 2 + }, + { + "doctype": "DocField", + "label": "Contact Name", + "fieldname": "contact_display", + "fieldtype": "Data", + "permlevel": 2 + }, + { + "doctype": "DocField", + "label": "Mobile No", + "fieldname": "contact_mobile", + "fieldtype": "Data", + "permlevel": 2 + }, + { + "oldfieldtype": "Data", + "doctype": "DocField", + "label": "Contact Email", + "oldfieldname": "contact_no", + "fieldname": "contact_email", + "fieldtype": "Data", + "permlevel": 2 + }, + { + "default": "Today", + "oldfieldtype": "Date", + "doctype": "DocField", + "label": "Opening Date", + "oldfieldname": "opening_date", + "no_copy": 1, + "fieldname": "opening_date", + "fieldtype": "Date", + "permlevel": 1 + }, + { + "no_copy": 1, + "oldfieldtype": "Time", + "doctype": "DocField", + "label": "Opening Time", + "oldfieldname": "opening_time", + "fieldname": "opening_time", + "fieldtype": "Time", + "permlevel": 1 + }, + { + "oldfieldtype": "Column Break", + "doctype": "DocField", + "fieldname": "column_break1", + "fieldtype": "Column Break", + "depends_on": "eval:!doc.__islocal", + "permlevel": 1 + }, + { + "depends_on": "eval:!doc.__islocal", + "search_index": 1, + "colour": "White:FFF", + "doctype": "DocField", + "label": "Allocated To", + "oldfieldname": "allocated_to", + "permlevel": 1, + "fieldname": "allocated_to", + "fieldtype": "Link", + "oldfieldtype": "Link", + "options": "Profile", + "in_filter": 1 + }, + { + "no_copy": 1, + "oldfieldtype": "Text", + "doctype": "DocField", + "label": "Resolution Details", + "oldfieldname": "resolution_details", + "fieldname": "resolution_details", + "fieldtype": "Text", + "depends_on": "eval:!doc.__islocal", + "permlevel": 1 + }, + { + "depends_on": "eval:!doc.__islocal", + "no_copy": 1, + "search_index": 0, + "colour": "White:FFF", + "doctype": "DocField", + "label": "Resolution Date", + "oldfieldname": "resolution_date", + "fieldname": "resolution_date", + "fieldtype": "Date", + "oldfieldtype": "Date", + "permlevel": 1, + "in_filter": 0 + }, + { + "oldfieldtype": "Time", + "doctype": "DocField", + "label": "Resolution Time", + "oldfieldname": "resolution_time", + "fieldname": "resolution_time", + "fieldtype": "Time", + "depends_on": "eval:!doc.__islocal", + "permlevel": 1 + }, + { + "colour": "White:FFF", + "doctype": "DocField", + "label": "Content Type", + "fieldname": "content_type", + "fieldtype": "Data", + "hidden": 1, + "permlevel": 0 + }, + { + "print_hide": 1, + "no_copy": 1, + "doctype": "DocField", + "label": "File List", + "fieldname": "file_list", + "fieldtype": "Text", + "hidden": 1, + "permlevel": 0 + }, + { + "create": 1, + "doctype": "DocPerm", + "write": 1, + "role": "Guest", + "cancel": 0, + "permlevel": 0 + }, + { + "create": 1, + "doctype": "DocPerm", + "write": 1, + "role": "Customer", + "cancel": 0, + "permlevel": 0 + }, + { + "create": 1, + "doctype": "DocPerm", + "write": 1, + "role": "Support Team", + "cancel": 1, + "permlevel": 0 + }, + { + "create": 0, + "doctype": "DocPerm", + "write": 1, + "role": "Support Team", + "cancel": 0, + "permlevel": 1 + }, + { + "create": 0, + "doctype": "DocPerm", + "write": 0, + "role": "Support Team", + "cancel": 0, + "permlevel": 2 + } ] \ No newline at end of file