mirror of
https://github.com/frappe/erpnext.git
synced 2026-05-31 10:49:09 +00:00
Merge branch 'shf_rename'
Conflicts: erpnext/patches/patch_list.py
This commit is contained in:
@@ -136,7 +136,7 @@ class DocType:
|
|||||||
# check if child exists
|
# check if child exists
|
||||||
# ==================================================================
|
# ==================================================================
|
||||||
def check_if_child_exists(self):
|
def check_if_child_exists(self):
|
||||||
return sql("select name from `tabAccount` where parent_account = %s and docstatus != 2", self.doc.name, debug=0)
|
return sql("select name from `tabAccount` where parent_account = %s and docstatus != 2", self.doc.name)
|
||||||
|
|
||||||
# Update balance
|
# Update balance
|
||||||
# ==================================================================
|
# ==================================================================
|
||||||
|
|||||||
@@ -98,7 +98,13 @@ class DocType(TransactionBase):
|
|||||||
# Get Account Head to which amount needs to be Debited based on Customer
|
# Get Account Head to which amount needs to be Debited based on Customer
|
||||||
# ----------------------------------------------------------------------
|
# ----------------------------------------------------------------------
|
||||||
def get_customer_account(self):
|
def get_customer_account(self):
|
||||||
acc_head = webnotes.conn.sql("select name from `tabAccount` where (name = %s or (master_name = %s and master_type = 'customer')) and docstatus != 2", (cstr(self.doc.customer) + " - " + self.get_company_abbr(),self.doc.customer))
|
if not self.doc.company:
|
||||||
|
msgprint("Please select company first and re-select the customer after doing so", raise_exception=1)
|
||||||
|
|
||||||
|
acc_head = webnotes.conn.sql("""select name from `tabAccount`
|
||||||
|
where (name = %s or (master_name = %s and master_type = 'customer')) and docstatus != 2""",
|
||||||
|
(cstr(self.doc.customer) + " - " + self.get_company_abbr(),self.doc.customer))
|
||||||
|
|
||||||
if acc_head and acc_head[0][0]:
|
if acc_head and acc_head[0][0]:
|
||||||
return acc_head[0][0]
|
return acc_head[0][0]
|
||||||
else:
|
else:
|
||||||
|
|||||||
@@ -73,7 +73,7 @@ aging_based_on = 'Aging Date'
|
|||||||
if filter_values.has_key('aging_based_on') and filter_values['aging_based_on']:
|
if filter_values.has_key('aging_based_on') and filter_values['aging_based_on']:
|
||||||
aging_based_on = filter_values['aging_based_on'].split(NEWLINE)[-1]
|
aging_based_on = filter_values['aging_based_on'].split(NEWLINE)[-1]
|
||||||
|
|
||||||
if len(res) > 600 and from_export == 0:
|
if len(res) > 2000 and from_export == 0:
|
||||||
msgprint("This is a very large report and cannot be shown in the browser as it is likely to make your browser very slow.Please select Account or click on 'Export' to open in excel")
|
msgprint("This is a very large report and cannot be shown in the browser as it is likely to make your browser very slow.Please select Account or click on 'Export' to open in excel")
|
||||||
raise Exception
|
raise Exception
|
||||||
|
|
||||||
|
|||||||
@@ -68,7 +68,7 @@ for d in data:
|
|||||||
# ageing based on
|
# ageing based on
|
||||||
aging_based_on = filter_values.get('aging_based_on') and filter_values['aging_based_on'].split(NEWLINE)[-1] or 'Aging Date'
|
aging_based_on = filter_values.get('aging_based_on') and filter_values['aging_based_on'].split(NEWLINE)[-1] or 'Aging Date'
|
||||||
|
|
||||||
if len(res) > 600 and from_export == 0:
|
if len(res) > 2000 and from_export == 0:
|
||||||
msgprint("This is a very large report and cannot be shown in the browser as it is likely to make your browser very slow.Please select Account or click on 'Export' to open in excel")
|
msgprint("This is a very large report and cannot be shown in the browser as it is likely to make your browser very slow.Please select Account or click on 'Export' to open in excel")
|
||||||
raise Exception
|
raise Exception
|
||||||
|
|
||||||
|
|||||||
@@ -130,16 +130,6 @@ cur_frm.fields_dict['indent_no'].get_query = function(doc) {
|
|||||||
return 'SELECT DISTINCT `tabPurchase Request`.`name` FROM `tabPurchase Request` WHERE `tabPurchase Request`.company = "' + doc.company + '" and `tabPurchase Request`.`docstatus` = 1 and `tabPurchase Request`.`status` != "Stopped" and ifnull(`tabPurchase Request`.`per_ordered`,0) < 100 and `tabPurchase Request`.%(key)s LIKE "%s" ORDER BY `tabPurchase Request`.`name` DESC LIMIT 50';
|
return 'SELECT DISTINCT `tabPurchase Request`.`name` FROM `tabPurchase Request` WHERE `tabPurchase Request`.company = "' + doc.company + '" and `tabPurchase Request`.`docstatus` = 1 and `tabPurchase Request`.`status` != "Stopped" and ifnull(`tabPurchase Request`.`per_ordered`,0) < 100 and `tabPurchase Request`.%(key)s LIKE "%s" ORDER BY `tabPurchase Request`.`name` DESC LIMIT 50';
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
//*********** get approved supplier quotation ********************
|
|
||||||
cur_frm.fields_dict['supplier_qtn'].get_query = function(doc) {
|
|
||||||
var cond='';
|
|
||||||
if(doc.supplier) cond = 'ifnull(`tabSupplier Quotation`.supplier, "") = "'+doc.supplier+'" and';
|
|
||||||
|
|
||||||
return repl('SELECT DISTINCT `tabSupplier Quotation`.`name` FROM `tabSupplier Quotation` WHERE `tabSupplier Quotation`.company = "%(company)s" and`tabSupplier Quotation`.`docstatus` = 1 and `tabSupplier Quotation`.`approval_status` = "Approved" and %(cond)s `tabSupplier Quotation`.%(key)s LIKE "%s" ORDER BY `tabSupplier Quotation`.`name` DESC LIMIT 50', {company:doc.company,cond:cond});
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
//========================= Get Last Purhase Rate =====================================
|
//========================= Get Last Purhase Rate =====================================
|
||||||
cur_frm.cscript.get_last_purchase_rate = function(doc, cdt, cdn){
|
cur_frm.cscript.get_last_purchase_rate = function(doc, cdt, cdn){
|
||||||
|
|||||||
@@ -8,11 +8,11 @@
|
|||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful,
|
# This program is distributed in the hope that it will be useful,
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
# GNU General Public License for more details.
|
# GNU General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
# Please edit this list and import only required elements
|
# Please edit this list and import only required elements
|
||||||
import webnotes
|
import webnotes
|
||||||
@@ -34,89 +34,85 @@ convert_to_lists = webnotes.conn.convert_to_lists
|
|||||||
|
|
||||||
|
|
||||||
class DocType:
|
class DocType:
|
||||||
def __init__(self,d,dt):
|
def __init__(self,d,dt):
|
||||||
self.doc, self.doclist = d,dt
|
self.doc, self.doclist = d,dt
|
||||||
|
|
||||||
#==========================================================================
|
#==========================================================================
|
||||||
def get_att_list(self):
|
def get_att_list(self):
|
||||||
|
lst = [['Attendance','','','Please fill columns which are Mandatory.',' Please do not modify the structure','',''],['','','','','','',''],['[Mandatory]','','[Mandatory]','[Mandatory]','[Mandatory]','[Mandatory]','[Mandatory]'],['Employee','Employee Name','Attendance Date','Status','Fiscal Year','Company','Naming Series']]
|
||||||
lst = [['Attendance','','','Please fill columns which are Mandatory.',' Please do not modify the structure','',''],['','','','','','',''],['[Mandatory]','','[Mandatory]','[Mandatory]','[Mandatory]','[Mandatory]','[Mandatory]'],['Employee','Employee Name','Attendance Date','Status','Fiscal Year','Company','Naming Series']]
|
|
||||||
|
dt = self.date_diff_list() # get date list inbetween from date and to date
|
||||||
dt = self.date_diff_list() # get date list inbetween from date and to date
|
att_dt = self.get_att_data() # get default attendance data like fiscal yr, company, naming series
|
||||||
|
|
||||||
att_dt = self.get_att_data() # get default attendance data like fiscal yr, company, naming series
|
fy, comp, sr = att_dt['fy'], att_dt['comp'], att_dt['sr']
|
||||||
|
res = sql("select name, employee_name from `tabEmployee` where status = 'Active' and docstatus !=2")
|
||||||
fy, comp, sr = att_dt['fy'], att_dt['comp'], att_dt['sr']
|
|
||||||
|
for d in dt:
|
||||||
res = sql("select name, employee_name from `tabEmployee` where status = 'Active' and docstatus !=2")
|
for r in res:
|
||||||
|
lst.append([r[0],r[1],d,'',fy,comp,sr])
|
||||||
for d in dt:
|
|
||||||
for r in res:
|
|
||||||
lst.append([r[0],r[1],d,'',fy,comp,sr])
|
|
||||||
|
|
||||||
return lst
|
return lst
|
||||||
|
|
||||||
#------------------------------------------------------------------------------
|
#------------------------------------------------------------------------------
|
||||||
# get date list inbetween from date and to date
|
# get date list inbetween from date and to date
|
||||||
def date_diff_list(self):
|
def date_diff_list(self):
|
||||||
import datetime
|
import datetime
|
||||||
#get from date
|
#get from date
|
||||||
att_fr_date = self.doc.att_fr_date and self.doc.att_fr_date or ''
|
att_fr_date = self.doc.att_fr_date and self.doc.att_fr_date or ''
|
||||||
|
|
||||||
#get to date
|
#get to date
|
||||||
att_to_date = self.doc.att_to_date and self.doc.att_to_date or ''
|
att_to_date = self.doc.att_to_date and self.doc.att_to_date or ''
|
||||||
|
|
||||||
if att_to_date:
|
if att_to_date:
|
||||||
r = (getdate(self.doc.att_to_date)+datetime.timedelta(days=1)-getdate(self.doc.att_fr_date)).days
|
r = (getdate(self.doc.att_to_date)+datetime.timedelta(days=1)-getdate(self.doc.att_fr_date)).days
|
||||||
else:
|
else:
|
||||||
r = 1
|
r = 1
|
||||||
dateList = [getdate(self.doc.att_fr_date)+datetime.timedelta(days=i) for i in range(0,r)]
|
dateList = [getdate(self.doc.att_fr_date)+datetime.timedelta(days=i) for i in range(0,r)]
|
||||||
dt=([str(date) for date in dateList])
|
dt=([str(date) for date in dateList])
|
||||||
|
|
||||||
return dt
|
return dt
|
||||||
|
|
||||||
#------------------------------------------------------------------------------
|
#------------------------------------------------------------------------------
|
||||||
def get_att_data(self):
|
def get_att_data(self):
|
||||||
|
fy = get_defaults()['fiscal_year'] #get default fiscal year
|
||||||
fy = get_defaults()['fiscal_year'] #get default fiscal year
|
comp = get_defaults()['company'] #get default company
|
||||||
|
|
||||||
|
#get naming series of attendance
|
||||||
|
import webnotes.model.doctype
|
||||||
|
docfield = webnotes.model.doctype.get('Attendance')
|
||||||
|
series = [d.options for d in docfield if d.doctype == 'DocField' and d.fieldname == 'naming_series']
|
||||||
|
if not series:
|
||||||
|
msgprint("Please create naming series for Attendance.\nGo to Setup--> Numbering Series.")
|
||||||
|
raise Exception
|
||||||
|
else:
|
||||||
|
sr = series[0][0] or ''
|
||||||
|
|
||||||
|
return {'fy':fy,'comp':comp,'sr':sr}
|
||||||
|
|
||||||
comp = get_defaults()['company'] #get default company
|
#=================================================================================
|
||||||
|
def import_att_data(self):
|
||||||
#get naming series of attendance
|
filename = self.doc.file_list.split(',')
|
||||||
#sr = sql("select series_options from `tabNaming Series Options` where doc_type='Attendance'")
|
|
||||||
sr = sql("select options from `tabDocField` where parent = 'Attendance' and fieldname = 'naming_series'")
|
|
||||||
if not sr:
|
|
||||||
msgprint("Please create naming series for Attendance.\nGo to Setup--> Manage Series.")
|
|
||||||
raise Exception
|
|
||||||
else:
|
|
||||||
sr = sr and sr[0][0]
|
|
||||||
|
|
||||||
return {'fy':fy,'comp':comp,'sr':sr}
|
|
||||||
|
|
||||||
#=================================================================================
|
if not filename:
|
||||||
def import_att_data(self):
|
msgprint("Please attach a .CSV File.")
|
||||||
filename = self.doc.file_list.split(',')
|
raise Exception
|
||||||
|
|
||||||
if not filename:
|
if filename[0].find('.csv') < 0:
|
||||||
msgprint("Please attach a .CSV File.")
|
raise Exception
|
||||||
raise Exception
|
|
||||||
|
if not filename and filename[0] and file[1]:
|
||||||
if filename[0].find('.csv') < 0:
|
msgprint("Please Attach File. ")
|
||||||
raise Exception
|
raise Exception
|
||||||
|
|
||||||
if not filename and filename[0] and file[1]:
|
from webnotes.utils import file_manager
|
||||||
msgprint("Please Attach File. ")
|
fn, content = file_manager.get_file(filename[1])
|
||||||
raise Exception
|
|
||||||
|
|
||||||
from webnotes.utils import file_manager
|
|
||||||
fn, content = file_manager.get_file(filename[1])
|
|
||||||
|
|
||||||
# NOTE: Don't know why this condition exists
|
# NOTE: Don't know why this condition exists
|
||||||
if not isinstance(content, basestring) and hasattr(content, 'tostring'):
|
if not isinstance(content, basestring) and hasattr(content, 'tostring'):
|
||||||
content = content.tostring()
|
content = content.tostring()
|
||||||
|
|
||||||
import webnotes.model.import_docs
|
import webnotes.model.import_docs
|
||||||
im = webnotes.model.import_docs.CSVImport()
|
im = webnotes.model.import_docs.CSVImport()
|
||||||
out = im.import_csv(content,self.doc.import_date_format, cint(self.doc.overwrite))
|
out = im.import_csv(content,self.doc.import_date_format, cint(self.doc.overwrite))
|
||||||
return out
|
return out
|
||||||
|
|
||||||
|
|||||||
3
erpnext/patches/may_2012/clear_session_cache.py
Normal file
3
erpnext/patches/may_2012/clear_session_cache.py
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
def execute():
|
||||||
|
import webnotes
|
||||||
|
webnotes.conn.sql("delete from __SessionCache")
|
||||||
@@ -377,5 +377,10 @@ patch_list = [
|
|||||||
'patch_file': 'cs_server_readonly',
|
'patch_file': 'cs_server_readonly',
|
||||||
'description': 'Make server custom script readonly for system manager'
|
'description': 'Make server custom script readonly for system manager'
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
'patch_module': 'patches.may_2012',
|
||||||
|
'patch_file': 'clear_session_cache',
|
||||||
|
'description': 'clears session cache as shifting to json format'
|
||||||
|
},
|
||||||
|
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -8,11 +8,11 @@
|
|||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful,
|
# This program is distributed in the hope that it will be useful,
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
# GNU General Public License for more details.
|
# GNU General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
# Please edit this list and import only required elements
|
# Please edit this list and import only required elements
|
||||||
import webnotes
|
import webnotes
|
||||||
@@ -34,195 +34,169 @@ convert_to_lists = webnotes.conn.convert_to_lists
|
|||||||
|
|
||||||
|
|
||||||
class DocType:
|
class DocType:
|
||||||
def __init__(self, doc, doclist):
|
def __init__(self, doc, doclist):
|
||||||
self.doc = doc
|
self.doc = doc
|
||||||
self.doclist = doclist
|
self.doclist = doclist
|
||||||
|
|
||||||
# Autoname
|
# Autoname
|
||||||
# ---------
|
# ---------
|
||||||
def autoname(self):
|
def autoname(self):
|
||||||
self.doc.name = make_autoname(self.doc.naming_series+'.#####')
|
self.doc.name = make_autoname(self.doc.naming_series+'.#####')
|
||||||
|
|
||||||
#check status of lead
|
#check status of lead
|
||||||
#------------------------
|
#------------------------
|
||||||
def check_status(self):
|
def check_status(self):
|
||||||
chk = sql("select status from `tabLead` where name=%s", self.doc.name)
|
chk = sql("select status from `tabLead` where name=%s", self.doc.name)
|
||||||
chk = chk and chk[0][0] or ''
|
chk = chk and chk[0][0] or ''
|
||||||
return cstr(chk)
|
return cstr(chk)
|
||||||
|
|
||||||
# Gets states belonging cto country selected
|
|
||||||
# =====================================================================
|
|
||||||
#def check_state(self):
|
|
||||||
# return "\n" + "\n".join([i[0] for i in sql("select state_name from `tabState` where `tabState`.country='%s' " % self.doc.country)])
|
|
||||||
|
|
||||||
# Get item detail (will be removed later)
|
|
||||||
#=======================================
|
|
||||||
def get_item_detail(self,item_code):
|
|
||||||
it=sql("select item_name,brand,item_group,description,stock_uom from `tabItem` where name='%s'"%item_code)
|
|
||||||
if it:
|
|
||||||
ret = {
|
|
||||||
'item_name' : it and it[0][0] or '',
|
|
||||||
'brand' : it and it[0][1] or '',
|
|
||||||
'item_group' : it and it[0][2] or '',
|
|
||||||
'description': it and it[0][3] or '',
|
|
||||||
'uom' : it and it[0][4] or ''
|
|
||||||
}
|
|
||||||
return ret
|
|
||||||
|
|
||||||
def validate(self):
|
|
||||||
import string
|
|
||||||
# Get Address
|
|
||||||
# ======================================================================
|
|
||||||
#if (self.doc.address_line1) or (self.doc.address_line2) or (self.doc.city) or (self.doc.state) or (self.doc.country) or (self.doc.pincode):
|
|
||||||
# address =["address_line1", "address_line2", "city", "state", "country", "pincode"]
|
|
||||||
# comp_address=''
|
|
||||||
# for d in address:
|
|
||||||
# if self.doc.fields[d]:
|
|
||||||
# comp_address += self.doc.fields[d] + "\n"
|
|
||||||
# if self.doc.website:
|
|
||||||
# comp_address += "Website : "+ self.doc.website
|
|
||||||
# self.doc.address = comp_address
|
|
||||||
|
|
||||||
if self.doc.status == 'Lead Lost' and not self.doc.order_lost_reason:
|
|
||||||
msgprint("Please Enter Quotation Lost Reason")
|
|
||||||
raise Exception
|
|
||||||
|
|
||||||
if self.doc.source == 'Campaign' and not self.doc.campaign_name and session['user'] != 'Guest':
|
|
||||||
msgprint("Please specify campaign name")
|
|
||||||
raise Exception
|
|
||||||
|
|
||||||
if self.doc.email_id:
|
|
||||||
if not validate_email_add(self.doc.email_id):
|
|
||||||
msgprint('Please enter valid email id.')
|
|
||||||
raise Exception
|
|
||||||
|
|
||||||
if not self.doc.naming_series:
|
|
||||||
if session['user'] == 'Guest':
|
|
||||||
so = sql("select options from `tabDocField` where parent = 'Lead' and fieldname = 'naming_series'")
|
|
||||||
#so = sql("select series_options from `tabNaming Series Options` where doc_type='Lead'")
|
|
||||||
if so:
|
|
||||||
sr = so[0][0].split("\n")
|
|
||||||
set(self.doc, 'naming_series', sr[0])
|
|
||||||
else:
|
|
||||||
msgprint("Please specify naming series")
|
|
||||||
raise Exception
|
|
||||||
|
|
||||||
def on_update(self):
|
|
||||||
# Add to calendar
|
|
||||||
# ========================================================================
|
|
||||||
if self.doc.contact_by:
|
|
||||||
self.add_calendar_event()
|
|
||||||
|
|
||||||
if session['user'] == 'Guest':
|
|
||||||
if self.doc.email_id:
|
|
||||||
self.send_email_notification()
|
|
||||||
|
|
||||||
if not self.doc.naming_series:
|
|
||||||
if session['user'] == 'Guest':
|
|
||||||
#so = sql("select series_options from `tabNaming Series Options` where doc_type='Lead'")
|
|
||||||
so = sql("select options from `tabDocField` where parent = 'Lead' and fieldname = 'naming_series'")
|
|
||||||
if so:
|
|
||||||
sr = so[0][0].split("\n")
|
|
||||||
set(self.doc, 'naming_series', sr[0])
|
|
||||||
else:
|
|
||||||
msgprint("Please specify naming series")
|
|
||||||
raise Exception
|
|
||||||
|
|
||||||
def send_email_notification(self):
|
|
||||||
if not validate_email_add(self.doc.email_id.strip(' ')):
|
|
||||||
msgprint('error:%s is not a valid email id' % self.doc.email_id.strip(' '))
|
|
||||||
raise Exception
|
|
||||||
else:
|
|
||||||
subject = 'Thank you for interest in erpnext'
|
|
||||||
|
|
||||||
sendmail([self.doc.email_id.strip(' ')], sender = sender_email[0][0], subject = subject , parts = [['text/html', self.get_notification_msg()]])
|
|
||||||
#sendmail(cc_list, sender = sender_email[0][0], subject = subject , parts = [['text/html', message]],attach=attach_list)
|
|
||||||
msgprint("Mail Sent")
|
|
||||||
|
|
||||||
def get_notification_msg(self):
|
|
||||||
t = """
|
|
||||||
<html>
|
|
||||||
<body>
|
|
||||||
Dear %s,<br><br>
|
|
||||||
|
|
||||||
Thank you for contacting us.<br><br>
|
# Get item detail (will be removed later)
|
||||||
|
#=======================================
|
||||||
|
def get_item_detail(self,item_code):
|
||||||
|
it=sql("select item_name,brand,item_group,description,stock_uom from `tabItem` where name='%s'"%item_code)
|
||||||
|
if it:
|
||||||
|
ret = {
|
||||||
|
'item_name' : it and it[0][0] or '',
|
||||||
|
'brand' : it and it[0][1] or '',
|
||||||
|
'item_group' : it and it[0][2] or '',
|
||||||
|
'description': it and it[0][3] or '',
|
||||||
|
'uom' : it and it[0][4] or ''
|
||||||
|
}
|
||||||
|
return ret
|
||||||
|
|
||||||
|
def validate(self):
|
||||||
|
import string
|
||||||
|
if self.doc.status == 'Lead Lost' and not self.doc.order_lost_reason:
|
||||||
|
msgprint("Please Enter Quotation Lost Reason")
|
||||||
|
raise Exception
|
||||||
|
|
||||||
|
if self.doc.source == 'Campaign' and not self.doc.campaign_name and session['user'] != 'Guest':
|
||||||
|
msgprint("Please specify campaign name")
|
||||||
|
raise Exception
|
||||||
|
|
||||||
|
if self.doc.email_id:
|
||||||
|
if not validate_email_add(self.doc.email_id):
|
||||||
|
msgprint('Please enter valid email id.')
|
||||||
|
raise Exception
|
||||||
|
|
||||||
|
|
||||||
|
def on_update(self):
|
||||||
|
# Add to calendar
|
||||||
|
# ========================================================================
|
||||||
|
if self.doc.contact_by:
|
||||||
|
self.add_calendar_event()
|
||||||
|
|
||||||
|
if session['user'] == 'Guest':
|
||||||
|
if self.doc.email_id:
|
||||||
|
self.send_email_notification()
|
||||||
|
|
||||||
|
if not self.doc.naming_series:
|
||||||
|
if session['user'] == 'Guest':
|
||||||
|
import webnotes.model.doctype
|
||||||
|
docfield = webnotes.model.doctype.get('Lead')
|
||||||
|
series = [d.options for d in docfield if d.doctype == 'DocField' and d.fieldname == 'naming_series']
|
||||||
|
if series:
|
||||||
|
sr = series[0].split("\n")
|
||||||
|
set(self.doc, 'naming_series', sr[0])
|
||||||
|
else:
|
||||||
|
msgprint("Please specify naming series")
|
||||||
|
raise Exception
|
||||||
|
|
||||||
|
def send_email_notification(self):
|
||||||
|
if not validate_email_add(self.doc.email_id.strip(' ')):
|
||||||
|
msgprint('error:%s is not a valid email id' % self.doc.email_id.strip(' '))
|
||||||
|
raise Exception
|
||||||
|
else:
|
||||||
|
subject = 'Thank you for interest in erpnext'
|
||||||
|
|
||||||
|
sendmail([self.doc.email_id.strip(' ')], sender = sender_email[0][0], subject = subject , parts = [['text/html', self.get_notification_msg()]])
|
||||||
|
msgprint("Mail Sent")
|
||||||
|
|
||||||
|
def get_notification_msg(self):
|
||||||
|
t = """
|
||||||
|
<html>
|
||||||
|
<body>
|
||||||
|
Dear %s,<br><br>
|
||||||
|
|
||||||
You have left following message for us,<br>
|
Thank you for contacting us.<br><br>
|
||||||
%s
|
|
||||||
<br><br>
|
|
||||||
|
|
||||||
You will receive reply on this shortly.<br><br>
|
You have left following message for us,<br>
|
||||||
|
%s
|
||||||
|
<br><br>
|
||||||
|
|
||||||
Cheers!
|
You will receive reply on this shortly.<br><br>
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
""" % (self.doc.lead_name, self.doc.remark)
|
|
||||||
|
|
||||||
return t
|
Cheers!
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
""" % (self.doc.lead_name, self.doc.remark)
|
||||||
|
|
||||||
# Add to Calendar
|
return t
|
||||||
# ===========================================================================
|
|
||||||
def add_calendar_event(self):
|
# Add to Calendar
|
||||||
# delete any earlier event by this lead
|
# ===========================================================================
|
||||||
sql("delete from tabEvent where ref_type='Lead' and ref_name=%s", self.doc.name)
|
def add_calendar_event(self):
|
||||||
|
# delete any earlier event by this lead
|
||||||
in_calendar_of = self.doc.lead_owner
|
sql("delete from tabEvent where ref_type='Lead' and ref_name=%s", self.doc.name)
|
||||||
|
|
||||||
# get profile (id) if exists for contact_by
|
in_calendar_of = self.doc.lead_owner
|
||||||
email_id = webnotes.conn.get_value('Sales Person', self.doc.contact_by, 'email_id')
|
|
||||||
if webnotes.conn.exists('Profile', email_id):
|
# get profile (id) if exists for contact_by
|
||||||
in_calendar_of = email_id
|
email_id = webnotes.conn.get_value('Sales Person', self.doc.contact_by, 'email_id')
|
||||||
|
if webnotes.conn.exists('Profile', email_id):
|
||||||
ev = Document('Event')
|
in_calendar_of = email_id
|
||||||
ev.owner = in_calendar_of
|
|
||||||
ev.description = 'Contact ' + cstr(self.doc.lead_name) + '.By : ' + cstr(self.doc.contact_by) + '.To Discuss : ' + cstr(self.doc.remark)
|
ev = Document('Event')
|
||||||
ev.event_date = self.doc.contact_date
|
ev.owner = in_calendar_of
|
||||||
ev.event_hour = '10:00'
|
ev.description = 'Contact ' + cstr(self.doc.lead_name) + '.By : ' + cstr(self.doc.contact_by) + '.To Discuss : ' + cstr(self.doc.remark)
|
||||||
ev.event_type = 'Private'
|
ev.event_date = self.doc.contact_date
|
||||||
ev.ref_type = 'Lead'
|
ev.event_hour = '10:00'
|
||||||
ev.ref_name = self.doc.name
|
ev.event_type = 'Private'
|
||||||
ev.save(1)
|
ev.ref_type = 'Lead'
|
||||||
|
ev.ref_name = self.doc.name
|
||||||
|
ev.save(1)
|
||||||
|
|
||||||
|
|
||||||
#-----------------Email--------------------------------------------
|
#-----------------Email--------------------------------------------
|
||||||
def send_emails(self, email=[], subject='', message=''):
|
def send_emails(self, email=[], subject='', message=''):
|
||||||
if email:
|
if email:
|
||||||
sendmail(email, sender = webnotes.user.name, subject = subject , parts = [['text/html', message]])
|
sendmail(email, sender = webnotes.user.name, subject = subject , parts = [['text/html', message]])
|
||||||
msgprint("Mail Sent")
|
msgprint("Mail Sent")
|
||||||
self.add_in_follow_up(message,'Email')
|
self.add_in_follow_up(message,'Email')
|
||||||
|
|
||||||
#-------------------------Checking Sent Mails Details----------------------------------------------
|
#-------------------------Checking Sent Mails Details----------------------------------------------
|
||||||
def send_mail(self):
|
def send_mail(self):
|
||||||
if not self.doc.subject or not self.doc.message:
|
if not self.doc.subject or not self.doc.message:
|
||||||
msgprint("Please enter subject & message in their respective fields.")
|
msgprint("Please enter subject & message in their respective fields.")
|
||||||
elif not self.doc.email_id:
|
elif not self.doc.email_id:
|
||||||
msgprint("Recipient not specified. Please add email id of lead in 'Email id' field provided in 'Contact Info' section.")
|
msgprint("Recipient not specified. Please add email id of lead in 'Email id' field provided in 'Contact Info' section.")
|
||||||
raise Exception
|
raise Exception
|
||||||
else :
|
else :
|
||||||
self.send_emails([self.doc.email_id.strip(' ')], subject = self.doc.subject ,message = self.doc.message)
|
self.send_emails([self.doc.email_id.strip(' ')], subject = self.doc.subject ,message = self.doc.message)
|
||||||
|
|
||||||
#---------------------- Add details in follow up table----------------
|
#---------------------- Add details in follow up table----------------
|
||||||
def add_in_follow_up(self,message,type):
|
def add_in_follow_up(self,message,type):
|
||||||
import datetime
|
import datetime
|
||||||
child = addchild( self.doc, 'follow_up', 'Communication Log', 1, self.doclist)
|
child = addchild( self.doc, 'follow_up', 'Communication Log', 1, self.doclist)
|
||||||
child.date = datetime.datetime.now().date().strftime('%Y-%m-%d')
|
child.date = datetime.datetime.now().date().strftime('%Y-%m-%d')
|
||||||
child.notes = message
|
child.notes = message
|
||||||
child.follow_up_type = type
|
child.follow_up_type = type
|
||||||
child.save()
|
child.save()
|
||||||
|
|
||||||
#-------------------SMS----------------------------------------------
|
#-------------------SMS----------------------------------------------
|
||||||
def send_sms(self):
|
def send_sms(self):
|
||||||
if not self.doc.sms_message or not self.doc.mobile_no:
|
if not self.doc.sms_message or not self.doc.mobile_no:
|
||||||
msgprint("Please enter mobile number in Basic Info Section and message in SMS Section ")
|
msgprint("Please enter mobile number in Basic Info Section and message in SMS Section ")
|
||||||
raise Exception
|
raise Exception
|
||||||
else:
|
else:
|
||||||
receiver_list = []
|
receiver_list = []
|
||||||
if self.doc.mobile_no:
|
if self.doc.mobile_no:
|
||||||
receiver_list.append(self.doc.mobile_no)
|
receiver_list.append(self.doc.mobile_no)
|
||||||
for d in getlist(self.doclist,'lead_sms_detail'):
|
for d in getlist(self.doclist,'lead_sms_detail'):
|
||||||
if d.other_mobile_no:
|
if d.other_mobile_no:
|
||||||
receiver_list.append(d.other_mobile_no)
|
receiver_list.append(d.other_mobile_no)
|
||||||
|
|
||||||
if receiver_list:
|
if receiver_list:
|
||||||
msgprint(get_obj('SMS Control', 'SMS Control').send_sms(receiver_list, self.doc.sms_message))
|
msgprint(get_obj('SMS Control', 'SMS Control').send_sms(receiver_list, self.doc.sms_message))
|
||||||
self.add_in_follow_up(self.doc.sms_message,'SMS')
|
self.add_in_follow_up(self.doc.sms_message,'SMS')
|
||||||
|
|||||||
@@ -432,6 +432,7 @@ class DocType(TransactionBase):
|
|||||||
# ------------------
|
# ------------------
|
||||||
def make_packing_list(self, obj, fname):
|
def make_packing_list(self, obj, fname):
|
||||||
self.packing_list_idx = 0
|
self.packing_list_idx = 0
|
||||||
|
parent_items = []
|
||||||
for d in getlist(obj.doclist, fname):
|
for d in getlist(obj.doclist, fname):
|
||||||
warehouse = fname == "sales_order_details" and d.reserved_warehouse or d.warehouse
|
warehouse = fname == "sales_order_details" and d.reserved_warehouse or d.warehouse
|
||||||
if self.has_sales_bom(d.item_code):
|
if self.has_sales_bom(d.item_code):
|
||||||
@@ -439,6 +440,16 @@ class DocType(TransactionBase):
|
|||||||
self.update_packing_list_item(obj, i['item_code'], flt(i['qty'])*flt(d.qty), warehouse, d)
|
self.update_packing_list_item(obj, i['item_code'], flt(i['qty'])*flt(d.qty), warehouse, d)
|
||||||
else:
|
else:
|
||||||
self.update_packing_list_item(obj, d.item_code, d.qty, warehouse, d)
|
self.update_packing_list_item(obj, d.item_code, d.qty, warehouse, d)
|
||||||
|
if d.item_code not in parent_items:
|
||||||
|
parent_items.append(d.item_code)
|
||||||
|
|
||||||
|
self.cleanup_packing_list(obj, parent_items)
|
||||||
|
|
||||||
|
def cleanup_packing_list(self, obj, parent_items):
|
||||||
|
"""Remove all those parent items which are no longer present in main item table"""
|
||||||
|
for d in getlist(obj.doclist, 'packing_details'):
|
||||||
|
if d.parent_item not in parent_items:
|
||||||
|
d.parent = ''
|
||||||
|
|
||||||
|
|
||||||
# Get total in words
|
# Get total in words
|
||||||
|
|||||||
@@ -60,6 +60,15 @@ class DocType:
|
|||||||
|
|
||||||
def on_trash(self):
|
def on_trash(self):
|
||||||
cust = sql("select name from `tabCustomer` where ifnull(customer_group, '') = %s", self.doc.name)
|
cust = sql("select name from `tabCustomer` where ifnull(customer_group, '') = %s", self.doc.name)
|
||||||
|
cust = [d[0] for d in cust]
|
||||||
|
|
||||||
if cust:
|
if cust:
|
||||||
msgprint("""Customer Group: %s can not be trashed/deleted because it is used in customer: %s.
|
msgprint("""Customer Group: %s can not be trashed/deleted because it is used in customer: %s.
|
||||||
To trash/delete this, remove/change customer group in customer master""" % (self.doc.name, cust[0][0] or ''), raise_exception=1)
|
To trash/delete this, remove/change customer group in customer master""" % (self.doc.name, cust or ''), raise_exception=1)
|
||||||
|
|
||||||
|
if sql("select name from `tabCustomer Group` where parent_customer_group = %s and docstatus != 2", self.doc.name):
|
||||||
|
msgprint("Child customer group exists for this customer group. You can not trash/cancel/delete this customer group.", raise_exception=1)
|
||||||
|
|
||||||
|
# rebuild tree
|
||||||
|
webnotes.conn.set(self.doc,'old_parent', '')
|
||||||
|
self.update_nsm_model()
|
||||||
|
|||||||
@@ -63,7 +63,17 @@ class DocType:
|
|||||||
raise Exception
|
raise Exception
|
||||||
|
|
||||||
def on_trash(self):
|
def on_trash(self):
|
||||||
ig = sql("select name from `tabItem` where ifnull(item_group, '') = %s", self.doc.name)
|
item = sql("select name from `tabItem` where ifnull(item_group, '') = %s", self.doc.name)
|
||||||
|
item = [d[0] for d in item]
|
||||||
|
|
||||||
if ig:
|
if ig:
|
||||||
msgprint("""Item Group: %s can not be trashed/deleted because it is used in item: %s.
|
msgprint("""Item Group: %s can not be trashed/deleted because it is used in item: %s.
|
||||||
To trash/delete this, remove/change item group in item master""" % (self.doc.name, ig[0][0] or ''), raise_exception=1)
|
To trash/delete this, remove/change item group in item master""" % (self.doc.name, item or ''), raise_exception=1)
|
||||||
|
|
||||||
|
if sql("select name from `tabItem Group` where parent_item_group = %s and docstatus != 2", self.doc.name):
|
||||||
|
msgprint("Child item group exists for this item group. You can not trash/cancel/delete this item group.", raise_exception=1)
|
||||||
|
|
||||||
|
|
||||||
|
# rebuild tree
|
||||||
|
set(self.doc,'old_parent', '')
|
||||||
|
self.update_nsm_model()
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ from webnotes.model.doc import Document
|
|||||||
from webnotes.model.doclist import getlist
|
from webnotes.model.doclist import getlist
|
||||||
from webnotes.model.code import get_obj
|
from webnotes.model.code import get_obj
|
||||||
from webnotes import session, form, is_testing, msgprint, errprint
|
from webnotes import session, form, is_testing, msgprint, errprint
|
||||||
from webnotes.utils import flt
|
from webnotes.utils import flt, cstr
|
||||||
|
|
||||||
sql = webnotes.conn.sql
|
sql = webnotes.conn.sql
|
||||||
convert_to_lists = webnotes.conn.convert_to_lists
|
convert_to_lists = webnotes.conn.convert_to_lists
|
||||||
@@ -77,4 +77,19 @@ class DocType:
|
|||||||
d.sales_person_id = self.doc.name
|
d.sales_person_id = self.doc.name
|
||||||
d.is_sales_person = 1
|
d.is_sales_person = 1
|
||||||
|
|
||||||
d.save(new = (not d.name))
|
d.save(new = (not d.name))
|
||||||
|
|
||||||
|
|
||||||
|
def on_trash(self):
|
||||||
|
st = sql("select parent, parenttype from `tabSales Team` where ifnull(sales_person, '') = %s and docstatus != 2", self.doc.name)
|
||||||
|
st = [(d[1] + ' : ' + d[0]) for d in st]
|
||||||
|
if st:
|
||||||
|
msgprint("""Sales Person: %s can not be trashed/deleted because it is used in %s.
|
||||||
|
To trash/delete this, remove/change sales person in %s""" % (self.doc.name, st or '', st or ''), raise_exception=1)
|
||||||
|
|
||||||
|
if sql("select name from `tabSales Person` where parent_sales_person = %s and docstatus != 2", self.doc.name):
|
||||||
|
msgprint("Child sales person exists for this sales person. You can not trash/cancel this sales person.", raise_exception=1)
|
||||||
|
|
||||||
|
# rebuild tree
|
||||||
|
webnotes.conn.set(self.doc,'old_parent', '')
|
||||||
|
self.update_nsm_model()
|
||||||
|
|||||||
@@ -78,7 +78,17 @@ class DocType:
|
|||||||
|
|
||||||
|
|
||||||
def on_trash(self):
|
def on_trash(self):
|
||||||
terr = sql("select name from `tabCustomer` where ifnull(territory, '') = %s", self.doc.name)
|
cust = sql("select name from `tabCustomer` where ifnull(territory, '') = %s", self.doc.name)
|
||||||
if terr:
|
cust = [d[0] for d in cust]
|
||||||
msgprint("""Territory: %s can not be trashed/deleted because it is used in territory: %s.
|
|
||||||
To trash/delete this, remove/change territory in customer master""" % (self.doc.name, terr[0][0] or ''), raise_exception=1)
|
if cust:
|
||||||
|
msgprint("""Territory: %s can not be trashed/deleted because it is used in customer: %s.
|
||||||
|
To trash/delete this, remove/change territory in customer master""" % (self.doc.name, cust or ''), raise_exception=1)
|
||||||
|
|
||||||
|
|
||||||
|
if sql("select name from `tabTerritory` where parent_territory = %s and docstatus != 2", self.doc.name):
|
||||||
|
msgprint("Child territory exists for this territory. You can not trash/cancel/delete this territory.", raise_exception=1)
|
||||||
|
|
||||||
|
# rebuild tree
|
||||||
|
set(self.doc,'old_parent', '')
|
||||||
|
self.update_nsm_model()
|
||||||
|
|||||||
@@ -8,85 +8,85 @@
|
|||||||
//
|
//
|
||||||
// This program is distributed in the hope that it will be useful,
|
// This program is distributed in the hope that it will be useful,
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
// GNU General Public License for more details.
|
// GNU General Public License for more details.
|
||||||
//
|
//
|
||||||
// You should have received a copy of the GNU General Public License
|
// You should have received a copy of the GNU General Public License
|
||||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
cur_frm.cscript.onload = function(doc,cdt,cdn){
|
cur_frm.cscript.onload = function(doc,cdt,cdn){
|
||||||
if(!doc.status) set_multiple(dt,dn,{status:'Open'});
|
if(!doc.status) set_multiple(dt,dn,{status:'Open'});
|
||||||
if(doc.__islocal){
|
if(doc.__islocal){
|
||||||
hide_field(['customer_address','contact_person','customer_name','address_display','contact_display','contact_mobile','contact_email','territory','customer_group']);
|
hide_field(['customer_address','contact_person']);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
cur_frm.cscript.refresh = function(doc,ct,cdn){
|
cur_frm.cscript.refresh = function(doc,ct,cdn){
|
||||||
if(!doc.docstatus) hide_field('make_maintenance_visit');
|
if(doc.docstatus == 1 && (doc.status == 'Open' || doc.status == 'Work In Progress'))
|
||||||
else if(doc.docstatus && (doc.status == 'Open' || doc.status == 'Work In Progress')) unhide_field('make_maintenance_visit');
|
cur_frm.add_custom_button('Make Maintenance Visit', cur_frm.cscript['Make Maintenance Visit']);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//customer
|
//customer
|
||||||
cur_frm.cscript.customer = function(doc,dt,dn) {
|
cur_frm.cscript.customer = function(doc,dt,dn) {
|
||||||
var callback = function(r,rt) {
|
var callback = function(r,rt) {
|
||||||
var doc = locals[cur_frm.doctype][cur_frm.docname];
|
var doc = locals[cur_frm.doctype][cur_frm.docname];
|
||||||
cur_frm.refresh();
|
cur_frm.refresh();
|
||||||
}
|
}
|
||||||
|
|
||||||
if(doc.customer) $c_obj(make_doclist(doc.doctype, doc.name), 'get_default_customer_address', '', callback);
|
if(doc.customer) $c_obj(make_doclist(doc.doctype, doc.name), 'get_default_customer_address', '', callback);
|
||||||
if(doc.customer) unhide_field(['customer_address','contact_person','customer_name','address_display','contact_display','contact_mobile','contact_email','territory','customer_group']);
|
if(doc.customer) unhide_field(['customer_address','contact_person']);
|
||||||
}
|
}
|
||||||
|
|
||||||
cur_frm.cscript.customer_address = cur_frm.cscript.contact_person = function(doc,dt,dn) {
|
cur_frm.cscript.customer_address = cur_frm.cscript.contact_person = function(doc,dt,dn) {
|
||||||
if(doc.customer) get_server_fields('get_customer_address', JSON.stringify({customer: doc.customer, address: doc.customer_address, contact: doc.contact_person}),'', doc, dt, dn, 1);
|
if(doc.customer)
|
||||||
|
get_server_fields('get_customer_address',
|
||||||
|
JSON.stringify({customer: doc.customer, address: doc.customer_address, contact: doc.contact_person}),'', doc, dt, dn, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
cur_frm.fields_dict.customer_address.on_new = function(dn) {
|
cur_frm.fields_dict.customer_address.on_new = function(dn) {
|
||||||
locals['Address'][dn].customer = locals[cur_frm.doctype][cur_frm.docname].customer;
|
locals['Address'][dn].customer = locals[cur_frm.doctype][cur_frm.docname].customer;
|
||||||
locals['Address'][dn].customer_name = locals[cur_frm.doctype][cur_frm.docname].customer_name;
|
locals['Address'][dn].customer_name = locals[cur_frm.doctype][cur_frm.docname].customer_name;
|
||||||
}
|
}
|
||||||
|
|
||||||
cur_frm.fields_dict.contact_person.on_new = function(dn) {
|
cur_frm.fields_dict.contact_person.on_new = function(dn) {
|
||||||
locals['Contact'][dn].customer = locals[cur_frm.doctype][cur_frm.docname].customer;
|
locals['Contact'][dn].customer = locals[cur_frm.doctype][cur_frm.docname].customer;
|
||||||
locals['Contact'][dn].customer_name = locals[cur_frm.doctype][cur_frm.docname].customer_name;
|
locals['Contact'][dn].customer_name = locals[cur_frm.doctype][cur_frm.docname].customer_name;
|
||||||
}
|
}
|
||||||
|
|
||||||
cur_frm.fields_dict['customer_address'].get_query = function(doc, cdt, cdn) {
|
cur_frm.fields_dict['customer_address'].get_query = function(doc, cdt, cdn) {
|
||||||
return 'SELECT name,address_line1,city FROM tabAddress WHERE customer = "'+ doc.customer +'" AND docstatus != 2 AND name LIKE "%s" ORDER BY name ASC LIMIT 50';
|
return 'SELECT name,address_line1,city FROM tabAddress WHERE customer = "'+ doc.customer +
|
||||||
|
'" AND docstatus != 2 AND name LIKE "%s" ORDER BY name ASC LIMIT 50';
|
||||||
}
|
}
|
||||||
|
|
||||||
cur_frm.fields_dict['contact_person'].get_query = function(doc, cdt, cdn) {
|
cur_frm.fields_dict['contact_person'].get_query = function(doc, cdt, cdn) {
|
||||||
return 'SELECT name,CONCAT(first_name," ",ifnull(last_name,"")) As FullName,department,designation FROM tabContact WHERE customer = "'+ doc.customer +'" AND docstatus != 2 AND name LIKE "%s" ORDER BY name ASC LIMIT 50';
|
return 'SELECT name,CONCAT(first_name," ",ifnull(last_name,"")) As FullName,department,designation \
|
||||||
|
FROM tabContact WHERE customer = "' + doc.customer +
|
||||||
|
'" 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) {
|
||||||
cur_frm.cscript.make_maintenance_visit = function(doc, cdt, cdn) {
|
$c_obj(make_doclist(doc.doctype, doc.name),'check_maintenance_visit','',
|
||||||
if (doc.docstatus == 1) {
|
function(r,rt){
|
||||||
$c_obj(make_doclist(doc.doctype, doc.name),'check_maintenance_visit','',
|
if(r.message == 'No'){
|
||||||
function(r,rt){
|
n = createLocal("Maintenance Visit");
|
||||||
if(r.message == 'No'){
|
$c('dt_map', args={
|
||||||
n = createLocal("Maintenance Visit");
|
'docs':compress_doclist([locals["Maintenance Visit"][n]]),
|
||||||
$c('dt_map', args={
|
'from_doctype':'Customer Issue',
|
||||||
'docs':compress_doclist([locals["Maintenance Visit"][n]]),
|
'to_doctype':'Maintenance Visit',
|
||||||
'from_doctype':'Customer Issue',
|
'from_docname':doc.name,
|
||||||
'to_doctype':'Maintenance Visit',
|
'from_to_list':"[['Customer Issue', 'Maintenance Visit'], ['Customer Issue', 'Maintenance Visit Purpose']]"
|
||||||
'from_docname':doc.name,
|
}, function(r,rt) {
|
||||||
'from_to_list':"[['Customer Issue', 'Maintenance Visit'], ['Customer Issue', 'Maintenance Visit Purpose']]"
|
loaddoc("Maintenance Visit", n);
|
||||||
}
|
});
|
||||||
, function(r,rt) {
|
} else{
|
||||||
loaddoc("Maintenance Visit", n);
|
msgprint("You have already completed maintenance against this Customer Issue");
|
||||||
}
|
}
|
||||||
);
|
}
|
||||||
}
|
);
|
||||||
else{
|
}
|
||||||
msgprint("You have already completed maintenance against this Customer Issue");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------
|
// ----------
|
||||||
@@ -94,9 +94,13 @@ cur_frm.cscript.make_maintenance_visit = function(doc, cdt, cdn) {
|
|||||||
// ----------
|
// ----------
|
||||||
|
|
||||||
cur_frm.fields_dict['serial_no'].get_query = function(doc, cdt, cdn) {
|
cur_frm.fields_dict['serial_no'].get_query = function(doc, cdt, cdn) {
|
||||||
var cond = '';
|
var cond = '';
|
||||||
if(doc.item_code) cond = ' AND `tabSerial No`.item_code = "'+ doc.item_code +'"';
|
if(doc.item_code) cond = ' AND `tabSerial No`.item_code = "'+ doc.item_code +'"';
|
||||||
return 'SELECT `tabSerial No`.name, `tabSerial No`.description FROM `tabSerial No` WHERE `tabSerial No`.docstatus != 2 AND `tabSerial No`.name LIKE "%s" '+cond+' ORDER BY `tabSerial No`.name ASC LIMIT 50';
|
if(doc.customer) cond += ' AND `tabSerial No`.customer = "' + doc.customer + '"';
|
||||||
|
return 'SELECT `tabSerial No`.name, `tabSerial No`.description \
|
||||||
|
FROM `tabSerial No` \
|
||||||
|
WHERE `tabSerial No`.docstatus != 2 AND `tabSerial No`.status = "Delivered" \
|
||||||
|
AND `tabSerial No`.name LIKE "%s" ' + cond + ' ORDER BY `tabSerial No`.name ASC LIMIT 50';
|
||||||
}
|
}
|
||||||
|
|
||||||
cur_frm.add_fetch('serial_no', 'item_code', 'item_code');
|
cur_frm.add_fetch('serial_no', 'item_code', 'item_code');
|
||||||
@@ -105,20 +109,27 @@ cur_frm.add_fetch('serial_no', 'description', 'description');
|
|||||||
cur_frm.add_fetch('serial_no', 'maintenance_status', 'warranty_amc_status');
|
cur_frm.add_fetch('serial_no', 'maintenance_status', 'warranty_amc_status');
|
||||||
cur_frm.add_fetch('serial_no', 'warranty_expiry_date', 'warranty_expiry_date');
|
cur_frm.add_fetch('serial_no', 'warranty_expiry_date', 'warranty_expiry_date');
|
||||||
cur_frm.add_fetch('serial_no', 'amc_expiry_date', 'amc_expiry_date');
|
cur_frm.add_fetch('serial_no', 'amc_expiry_date', 'amc_expiry_date');
|
||||||
cur_frm.add_fetch('serial_no', 'customer', 'customer');
|
if (cstr(doc.customer) == '') {
|
||||||
cur_frm.add_fetch('serial_no', 'customer_name', 'customer_name');
|
cur_frm.add_fetch('serial_no', 'customer', 'customer');
|
||||||
cur_frm.add_fetch('serial_no', 'delivery_address', 'customer_address');
|
cur_frm.add_fetch('serial_no', 'customer_name', 'customer_name');
|
||||||
|
cur_frm.add_fetch('serial_no', 'delivery_address', 'customer_address');
|
||||||
|
}
|
||||||
|
|
||||||
// ----------
|
// ----------
|
||||||
// item code
|
// item code
|
||||||
// ----------
|
// ----------
|
||||||
cur_frm.fields_dict['item_code'].get_query = function(doc, cdt, cdn) {
|
cur_frm.fields_dict['item_code'].get_query = function(doc, cdt, cdn) {
|
||||||
if(doc.serial_no){
|
if(doc.serial_no) {
|
||||||
return 'SELECT `tabSerial No`.item_code, `tabSerial No`.description FROM `tabSerial No` WHERE `tabSerial No`.docstatus != 2 AND `tabSerial No`.name = "'+ doc.serial_no +'" AND `tabSerial No`.item_code LIKE "%s" ORDER BY `tabSerial No`.item_code ASC LIMIT 50';
|
return 'SELECT `tabSerial No`.item_code, `tabSerial No`.description \
|
||||||
}
|
FROM `tabSerial No` \
|
||||||
else{
|
WHERE `tabSerial No`.docstatus != 2 AND `tabSerial No`.name = "' + doc.serial_no +
|
||||||
return 'SELECT `tabItem`.name, `tabItem`.item_name, `tabItem`.description FROM `tabItem` WHERE `tabItem`.docstatus != 2 AND `tabItem`.name LIKE "%s" ORDER BY `tabItem`.name ASC LIMIT 50';
|
'" AND `tabSerial No`.item_code LIKE "%s" ORDER BY `tabSerial No`.item_code ASC LIMIT 50';
|
||||||
}
|
}
|
||||||
|
else{
|
||||||
|
return 'SELECT `tabItem`.name, `tabItem`.item_name, `tabItem`.description \
|
||||||
|
FROM `tabItem` \
|
||||||
|
WHERE `tabItem`.docstatus != 2 AND `tabItem`.name LIKE "%s" ORDER BY `tabItem`.name ASC LIMIT 50';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
cur_frm.add_fetch('item_code', 'item_name', 'item_name');
|
cur_frm.add_fetch('item_code', 'item_name', 'item_name');
|
||||||
@@ -128,5 +139,8 @@ cur_frm.add_fetch('item_code', 'description', 'description');
|
|||||||
//get query select Territory
|
//get query select Territory
|
||||||
//=======================================================================================================================
|
//=======================================================================================================================
|
||||||
cur_frm.fields_dict['territory'].get_query = function(doc,cdt,cdn) {
|
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';
|
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';
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,11 +8,11 @@
|
|||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful,
|
# This program is distributed in the hope that it will be useful,
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
# GNU General Public License for more details.
|
# GNU General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
# Please edit this list and import only required elements
|
# Please edit this list and import only required elements
|
||||||
|
|
||||||
@@ -36,49 +36,42 @@ convert_to_lists = webnotes.conn.convert_to_lists
|
|||||||
from utilities.transaction_base import TransactionBase
|
from utilities.transaction_base import TransactionBase
|
||||||
|
|
||||||
class DocType(TransactionBase):
|
class DocType(TransactionBase):
|
||||||
def __init__(self, doc, doclist=[]):
|
def __init__(self, doc, doclist=[]):
|
||||||
self.doc = doc
|
self.doc = doc
|
||||||
self.doclist = doclist
|
self.doclist = doclist
|
||||||
self.prefix = is_testing and 'test' or 'tab'
|
|
||||||
|
def autoname(self):
|
||||||
def autoname(self):
|
self.doc.name = make_autoname(self.doc.naming_series + '.######')
|
||||||
#self.doc.name = make_autoname('CI/' + self.doc.fiscal_year + '/.######')
|
|
||||||
self.doc.name = make_autoname(self.doc.naming_series + '.######')
|
|
||||||
|
|
||||||
#check if maintenance schedule already generated
|
#check if maintenance schedule already generated
|
||||||
#============================================
|
#============================================
|
||||||
def check_maintenance_visit(self):
|
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 = 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 ''
|
nm = nm and nm[0][0] or ''
|
||||||
|
|
||||||
if not nm:
|
if not nm:
|
||||||
return 'No'
|
return 'No'
|
||||||
|
|
||||||
def on_submit(self):
|
def on_submit(self):
|
||||||
if session['user'] != 'Guest':
|
if session['user'] != 'Guest':
|
||||||
if not self.doc.allocated_to:
|
if not self.doc.allocated_to:
|
||||||
msgprint("Please select service person name whom you want to assign this issue")
|
msgprint("Please select service person name whom you want to assign this issue")
|
||||||
raise Exception
|
raise Exception
|
||||||
|
|
||||||
def validate(self):
|
def validate(self):
|
||||||
if session['user'] != 'Guest' and not self.doc.customer:
|
if session['user'] != 'Guest' and not self.doc.customer:
|
||||||
msgprint("Please select Customer from whom issue is raised")
|
msgprint("Please select Customer from whom issue is raised")
|
||||||
raise Exception
|
raise Exception
|
||||||
#if not self.doc.email_id and not self.doc.contact_no:
|
|
||||||
# msgprint("Please specify contact no. and/or email_id")
|
|
||||||
# raise Exception
|
|
||||||
#elif self.doc.email_id and not validate_email_add(self.doc.email_id.strip(' ')):
|
|
||||||
# msgprint('error:%s is not a valid email id' % self.doc.email_id)
|
|
||||||
# raise Exception
|
|
||||||
|
|
||||||
def on_cancel(self):
|
|
||||||
lst = 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!=2"%(self.doc.name))
|
|
||||||
if lst:
|
|
||||||
lst1 = ','.join([x[0] for x in lst])
|
|
||||||
msgprint("Maintenance Visit No. "+lst1+" already created against this customer issue. So can not be Cancelled")
|
|
||||||
raise Exception
|
|
||||||
else:
|
|
||||||
set(self.doc, 'status', 'Cancelled')
|
|
||||||
|
|
||||||
def on_update(self):
|
|
||||||
pass
|
def on_cancel(self):
|
||||||
|
lst = 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!=2"%(self.doc.name))
|
||||||
|
if lst:
|
||||||
|
lst1 = ','.join([x[0] for x in lst])
|
||||||
|
msgprint("Maintenance Visit No. "+lst1+" already created against this customer issue. So can not be Cancelled")
|
||||||
|
raise Exception
|
||||||
|
else:
|
||||||
|
set(self.doc, 'status', 'Cancelled')
|
||||||
|
|
||||||
|
def on_update(self):
|
||||||
|
pass
|
||||||
|
|||||||
@@ -3,9 +3,9 @@
|
|||||||
|
|
||||||
# These values are common in all dictionaries
|
# These values are common in all dictionaries
|
||||||
{
|
{
|
||||||
'creation': '2012-03-27 14:36:40',
|
'creation': '2012-04-13 11:56:39',
|
||||||
'docstatus': 0,
|
'docstatus': 0,
|
||||||
'modified': '2012-03-27 14:45:47',
|
'modified': '2012-05-18 17:04:36',
|
||||||
'modified_by': u'Administrator',
|
'modified_by': u'Administrator',
|
||||||
'owner': u'harshada@webnotestech.com'
|
'owner': u'harshada@webnotestech.com'
|
||||||
},
|
},
|
||||||
@@ -25,7 +25,7 @@
|
|||||||
'show_in_menu': 0,
|
'show_in_menu': 0,
|
||||||
'subject': u'%(complaint)s By %(complaint_raised_by)s on %(issue_date)s',
|
'subject': u'%(complaint)s By %(complaint_raised_by)s on %(issue_date)s',
|
||||||
'tag_fields': u'status',
|
'tag_fields': u'status',
|
||||||
'version': 97
|
'version': 1
|
||||||
},
|
},
|
||||||
|
|
||||||
# These values are common for all DocField
|
# These values are common for all DocField
|
||||||
@@ -53,6 +53,15 @@
|
|||||||
'name': u'Customer Issue'
|
'name': u'Customer Issue'
|
||||||
},
|
},
|
||||||
|
|
||||||
|
# DocPerm
|
||||||
|
{
|
||||||
|
'create': 1,
|
||||||
|
'doctype': u'DocPerm',
|
||||||
|
'permlevel': 0,
|
||||||
|
'role': u'Guest',
|
||||||
|
'write': 1
|
||||||
|
},
|
||||||
|
|
||||||
# DocPerm
|
# DocPerm
|
||||||
{
|
{
|
||||||
'amend': 1,
|
'amend': 1,
|
||||||
@@ -110,21 +119,12 @@
|
|||||||
'role': u'Maintenance User'
|
'role': u'Maintenance User'
|
||||||
},
|
},
|
||||||
|
|
||||||
# DocPerm
|
|
||||||
{
|
|
||||||
'create': 1,
|
|
||||||
'doctype': u'DocPerm',
|
|
||||||
'permlevel': 0,
|
|
||||||
'role': u'Guest',
|
|
||||||
'write': 1
|
|
||||||
},
|
|
||||||
|
|
||||||
# DocField
|
# DocField
|
||||||
{
|
{
|
||||||
'doctype': u'DocField',
|
'doctype': u'DocField',
|
||||||
'fieldname': u'customer_issue',
|
'fieldname': u'basic_info',
|
||||||
'fieldtype': u'Section Break',
|
'fieldtype': u'Section Break',
|
||||||
'label': u'Customer Issue',
|
'label': u'Basic Info',
|
||||||
'oldfieldtype': u'Section Break',
|
'oldfieldtype': u'Section Break',
|
||||||
'permlevel': 0
|
'permlevel': 0
|
||||||
},
|
},
|
||||||
@@ -145,24 +145,6 @@
|
|||||||
'search_index': 0
|
'search_index': 0
|
||||||
},
|
},
|
||||||
|
|
||||||
# DocField
|
|
||||||
{
|
|
||||||
'colour': u'White:FFF',
|
|
||||||
'default': u'Open',
|
|
||||||
'doctype': u'DocField',
|
|
||||||
'fieldname': u'status',
|
|
||||||
'fieldtype': u'Select',
|
|
||||||
'in_filter': 1,
|
|
||||||
'label': u'Status',
|
|
||||||
'no_copy': 1,
|
|
||||||
'oldfieldname': u'status',
|
|
||||||
'oldfieldtype': u'Select',
|
|
||||||
'options': u'\nOpen\nClosed\nWork In Progress\nCancelled',
|
|
||||||
'permlevel': 0,
|
|
||||||
'reqd': 1,
|
|
||||||
'search_index': 1
|
|
||||||
},
|
|
||||||
|
|
||||||
# DocField
|
# DocField
|
||||||
{
|
{
|
||||||
'default': u'Today',
|
'default': u'Today',
|
||||||
@@ -178,39 +160,6 @@
|
|||||||
'search_index': 1
|
'search_index': 1
|
||||||
},
|
},
|
||||||
|
|
||||||
# DocField
|
|
||||||
{
|
|
||||||
'doctype': u'DocField',
|
|
||||||
'fieldname': u'complaint_raised_by',
|
|
||||||
'fieldtype': u'Data',
|
|
||||||
'label': u'Raised By',
|
|
||||||
'oldfieldname': u'complaint_raised_by',
|
|
||||||
'oldfieldtype': u'Data',
|
|
||||||
'permlevel': 0
|
|
||||||
},
|
|
||||||
|
|
||||||
# DocField
|
|
||||||
{
|
|
||||||
'doctype': u'DocField',
|
|
||||||
'fieldname': u'from_company',
|
|
||||||
'fieldtype': u'Data',
|
|
||||||
'label': u'From Company',
|
|
||||||
'oldfieldname': u'from_company',
|
|
||||||
'oldfieldtype': u'Data',
|
|
||||||
'permlevel': 0
|
|
||||||
},
|
|
||||||
|
|
||||||
# DocField
|
|
||||||
{
|
|
||||||
'doctype': u'DocField',
|
|
||||||
'fieldname': u'service_address',
|
|
||||||
'fieldtype': u'Small Text',
|
|
||||||
'label': u'Service Address',
|
|
||||||
'oldfieldname': u'service_address',
|
|
||||||
'oldfieldtype': u'Small Text',
|
|
||||||
'permlevel': 0
|
|
||||||
},
|
|
||||||
|
|
||||||
# DocField
|
# DocField
|
||||||
{
|
{
|
||||||
'doctype': u'DocField',
|
'doctype': u'DocField',
|
||||||
@@ -261,144 +210,6 @@
|
|||||||
'print_hide': 1
|
'print_hide': 1
|
||||||
},
|
},
|
||||||
|
|
||||||
# DocField
|
|
||||||
{
|
|
||||||
'doctype': u'DocField',
|
|
||||||
'fieldname': u'customer_name',
|
|
||||||
'fieldtype': u'Data',
|
|
||||||
'label': u'Name',
|
|
||||||
'permlevel': 1
|
|
||||||
},
|
|
||||||
|
|
||||||
# DocField
|
|
||||||
{
|
|
||||||
'doctype': u'DocField',
|
|
||||||
'fieldname': u'address_display',
|
|
||||||
'fieldtype': u'Small Text',
|
|
||||||
'label': u'Address',
|
|
||||||
'permlevel': 1
|
|
||||||
},
|
|
||||||
|
|
||||||
# DocField
|
|
||||||
{
|
|
||||||
'doctype': u'DocField',
|
|
||||||
'fieldname': u'contact_display',
|
|
||||||
'fieldtype': u'Small Text',
|
|
||||||
'label': u'Contact',
|
|
||||||
'permlevel': 1
|
|
||||||
},
|
|
||||||
|
|
||||||
# DocField
|
|
||||||
{
|
|
||||||
'doctype': u'DocField',
|
|
||||||
'fieldname': u'contact_mobile',
|
|
||||||
'fieldtype': u'Data',
|
|
||||||
'label': u'Mobile No',
|
|
||||||
'permlevel': 1
|
|
||||||
},
|
|
||||||
|
|
||||||
# DocField
|
|
||||||
{
|
|
||||||
'doctype': u'DocField',
|
|
||||||
'fieldname': u'contact_email',
|
|
||||||
'fieldtype': u'Data',
|
|
||||||
'label': u'Contact Email',
|
|
||||||
'permlevel': 1
|
|
||||||
},
|
|
||||||
|
|
||||||
# DocField
|
|
||||||
{
|
|
||||||
'colour': u'White:FFF',
|
|
||||||
'doctype': u'DocField',
|
|
||||||
'fieldname': u'territory',
|
|
||||||
'fieldtype': u'Link',
|
|
||||||
'in_filter': 1,
|
|
||||||
'label': u'Territory',
|
|
||||||
'oldfieldname': u'territory',
|
|
||||||
'oldfieldtype': u'Link',
|
|
||||||
'options': u'Territory',
|
|
||||||
'permlevel': 0,
|
|
||||||
'print_hide': 1,
|
|
||||||
'reqd': 0,
|
|
||||||
'search_index': 1
|
|
||||||
},
|
|
||||||
|
|
||||||
# DocField
|
|
||||||
{
|
|
||||||
'doctype': u'DocField',
|
|
||||||
'fieldname': u'customer_group',
|
|
||||||
'fieldtype': u'Link',
|
|
||||||
'label': u'Customer Group',
|
|
||||||
'options': u'Customer Group',
|
|
||||||
'permlevel': 0,
|
|
||||||
'print_hide': 1,
|
|
||||||
'reqd': 0
|
|
||||||
},
|
|
||||||
|
|
||||||
# DocField
|
|
||||||
{
|
|
||||||
'colour': u'White:FFF',
|
|
||||||
'doctype': u'DocField',
|
|
||||||
'fieldname': u'company',
|
|
||||||
'fieldtype': u'Link',
|
|
||||||
'in_filter': 1,
|
|
||||||
'label': u'Company',
|
|
||||||
'oldfieldname': u'company',
|
|
||||||
'oldfieldtype': u'Link',
|
|
||||||
'options': u'Company',
|
|
||||||
'permlevel': 0,
|
|
||||||
'print_hide': 1,
|
|
||||||
'reqd': 1,
|
|
||||||
'search_index': 1,
|
|
||||||
'trigger': u'Client'
|
|
||||||
},
|
|
||||||
|
|
||||||
# DocField
|
|
||||||
{
|
|
||||||
'doctype': u'DocField',
|
|
||||||
'fieldname': u'fiscal_year',
|
|
||||||
'fieldtype': u'Select',
|
|
||||||
'in_filter': 1,
|
|
||||||
'label': u'Fiscal Year',
|
|
||||||
'oldfieldname': u'fiscal_year',
|
|
||||||
'oldfieldtype': u'Select',
|
|
||||||
'options': u'link:Fiscal Year',
|
|
||||||
'permlevel': 0,
|
|
||||||
'print_hide': 1,
|
|
||||||
'reqd': 1,
|
|
||||||
'search_index': 1
|
|
||||||
},
|
|
||||||
|
|
||||||
# DocField
|
|
||||||
{
|
|
||||||
'doctype': u'DocField',
|
|
||||||
'fieldname': u'amended_from',
|
|
||||||
'fieldtype': u'Data',
|
|
||||||
'hidden': 1,
|
|
||||||
'label': u'Amended From',
|
|
||||||
'no_copy': 1,
|
|
||||||
'oldfieldname': u'amended_from',
|
|
||||||
'oldfieldtype': u'Data',
|
|
||||||
'permlevel': 0,
|
|
||||||
'print_hide': 1,
|
|
||||||
'width': u'150px'
|
|
||||||
},
|
|
||||||
|
|
||||||
# DocField
|
|
||||||
{
|
|
||||||
'doctype': u'DocField',
|
|
||||||
'fieldname': u'amendment_date',
|
|
||||||
'fieldtype': u'Date',
|
|
||||||
'hidden': 1,
|
|
||||||
'label': u'Amendment Date',
|
|
||||||
'no_copy': 1,
|
|
||||||
'oldfieldname': u'amendment_date',
|
|
||||||
'oldfieldtype': u'Date',
|
|
||||||
'permlevel': 0,
|
|
||||||
'print_hide': 1,
|
|
||||||
'width': u'100px'
|
|
||||||
},
|
|
||||||
|
|
||||||
# DocField
|
# DocField
|
||||||
{
|
{
|
||||||
'doctype': u'DocField',
|
'doctype': u'DocField',
|
||||||
@@ -438,6 +249,29 @@
|
|||||||
'trigger': u'Client'
|
'trigger': u'Client'
|
||||||
},
|
},
|
||||||
|
|
||||||
|
# DocField
|
||||||
|
{
|
||||||
|
'doctype': u'DocField',
|
||||||
|
'fieldname': u'complaint',
|
||||||
|
'fieldtype': u'Small Text',
|
||||||
|
'label': u'Issue',
|
||||||
|
'no_copy': 1,
|
||||||
|
'oldfieldname': u'complaint',
|
||||||
|
'oldfieldtype': u'Small Text',
|
||||||
|
'permlevel': 0,
|
||||||
|
'reqd': 1
|
||||||
|
},
|
||||||
|
|
||||||
|
# DocField
|
||||||
|
{
|
||||||
|
'doctype': u'DocField',
|
||||||
|
'fieldname': u'column_break1',
|
||||||
|
'fieldtype': u'Column Break',
|
||||||
|
'oldfieldtype': u'Column Break',
|
||||||
|
'permlevel': 0,
|
||||||
|
'width': u'50%'
|
||||||
|
},
|
||||||
|
|
||||||
# DocField
|
# DocField
|
||||||
{
|
{
|
||||||
'colour': u'White:FFF',
|
'colour': u'White:FFF',
|
||||||
@@ -465,29 +299,6 @@
|
|||||||
'width': u'300px'
|
'width': u'300px'
|
||||||
},
|
},
|
||||||
|
|
||||||
# DocField
|
|
||||||
{
|
|
||||||
'doctype': u'DocField',
|
|
||||||
'fieldname': u'complaint',
|
|
||||||
'fieldtype': u'Small Text',
|
|
||||||
'label': u'Issue',
|
|
||||||
'no_copy': 1,
|
|
||||||
'oldfieldname': u'complaint',
|
|
||||||
'oldfieldtype': u'Small Text',
|
|
||||||
'permlevel': 0,
|
|
||||||
'reqd': 1
|
|
||||||
},
|
|
||||||
|
|
||||||
# DocField
|
|
||||||
{
|
|
||||||
'doctype': u'DocField',
|
|
||||||
'fieldname': u'column_break1',
|
|
||||||
'fieldtype': u'Column Break',
|
|
||||||
'oldfieldtype': u'Column Break',
|
|
||||||
'permlevel': 0,
|
|
||||||
'width': u'50%'
|
|
||||||
},
|
|
||||||
|
|
||||||
# DocField
|
# DocField
|
||||||
{
|
{
|
||||||
'colour': u'White:FFF',
|
'colour': u'White:FFF',
|
||||||
@@ -519,6 +330,17 @@
|
|||||||
'permlevel': 0
|
'permlevel': 0
|
||||||
},
|
},
|
||||||
|
|
||||||
|
# DocField
|
||||||
|
{
|
||||||
|
'doctype': u'DocField',
|
||||||
|
'fieldname': u'resolution_section',
|
||||||
|
'fieldtype': u'Section Break',
|
||||||
|
'label': u'Resolution',
|
||||||
|
'oldfieldtype': u'Section Break',
|
||||||
|
'options': u'Simple',
|
||||||
|
'permlevel': 0
|
||||||
|
},
|
||||||
|
|
||||||
# DocField
|
# DocField
|
||||||
{
|
{
|
||||||
'doctype': u'DocField',
|
'doctype': u'DocField',
|
||||||
@@ -546,29 +368,6 @@
|
|||||||
'search_index': 1
|
'search_index': 1
|
||||||
},
|
},
|
||||||
|
|
||||||
# DocField
|
|
||||||
{
|
|
||||||
'doctype': u'DocField',
|
|
||||||
'fieldname': u'resolution_detail',
|
|
||||||
'fieldtype': u'Section Break',
|
|
||||||
'label': u'Resolution Detail',
|
|
||||||
'oldfieldtype': u'Section Break',
|
|
||||||
'options': u'Simple',
|
|
||||||
'permlevel': 0
|
|
||||||
},
|
|
||||||
|
|
||||||
# DocField
|
|
||||||
{
|
|
||||||
'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': 0
|
|
||||||
},
|
|
||||||
|
|
||||||
# DocField
|
# DocField
|
||||||
{
|
{
|
||||||
'doctype': u'DocField',
|
'doctype': u'DocField',
|
||||||
@@ -610,27 +409,256 @@
|
|||||||
|
|
||||||
# DocField
|
# DocField
|
||||||
{
|
{
|
||||||
'allow_on_submit': 0,
|
|
||||||
'colour': u'White:FFF',
|
|
||||||
'depends_on': u'eval:!doc.__islocal',
|
|
||||||
'doctype': u'DocField',
|
'doctype': u'DocField',
|
||||||
'fieldname': u'next_steps',
|
'fieldname': u'resolution_details',
|
||||||
'fieldtype': u'Section Break',
|
'fieldtype': u'Text',
|
||||||
'label': u'Next Steps',
|
'label': u'Resolution Details',
|
||||||
'oldfieldtype': u'Section Break',
|
'no_copy': 1,
|
||||||
|
'oldfieldname': u'resolution_details',
|
||||||
|
'oldfieldtype': u'Text',
|
||||||
'permlevel': 0
|
'permlevel': 0
|
||||||
},
|
},
|
||||||
|
|
||||||
# DocField
|
# DocField
|
||||||
{
|
{
|
||||||
'allow_on_submit': 1,
|
'doctype': u'DocField',
|
||||||
|
'fieldname': u'contact_info',
|
||||||
|
'fieldtype': u'Section Break',
|
||||||
|
'label': u'Contact Info',
|
||||||
|
'permlevel': 0
|
||||||
|
},
|
||||||
|
|
||||||
|
# DocField
|
||||||
|
{
|
||||||
|
'doctype': u'DocField',
|
||||||
|
'fieldname': u'col_break3',
|
||||||
|
'fieldtype': u'Column Break',
|
||||||
|
'permlevel': 0,
|
||||||
|
'width': u'50%'
|
||||||
|
},
|
||||||
|
|
||||||
|
# DocField
|
||||||
|
{
|
||||||
|
'doctype': u'DocField',
|
||||||
|
'fieldname': u'customer_name',
|
||||||
|
'fieldtype': u'Data',
|
||||||
|
'label': u'Customer Name',
|
||||||
|
'permlevel': 1
|
||||||
|
},
|
||||||
|
|
||||||
|
# DocField
|
||||||
|
{
|
||||||
|
'doctype': u'DocField',
|
||||||
|
'fieldname': u'customer_group',
|
||||||
|
'fieldtype': u'Link',
|
||||||
|
'label': u'Customer Group',
|
||||||
|
'options': u'Customer Group',
|
||||||
|
'permlevel': 0,
|
||||||
|
'print_hide': 1,
|
||||||
|
'reqd': 0
|
||||||
|
},
|
||||||
|
|
||||||
|
# DocField
|
||||||
|
{
|
||||||
'colour': u'White:FFF',
|
'colour': u'White:FFF',
|
||||||
'doctype': u'DocField',
|
'doctype': u'DocField',
|
||||||
'fieldname': u'make_maintenance_visit',
|
'fieldname': u'territory',
|
||||||
'fieldtype': u'Button',
|
'fieldtype': u'Link',
|
||||||
'label': u'Make Maintenance Visit',
|
'in_filter': 1,
|
||||||
'oldfieldtype': u'Button',
|
'label': u'Territory',
|
||||||
|
'oldfieldname': u'territory',
|
||||||
|
'oldfieldtype': u'Link',
|
||||||
|
'options': u'Territory',
|
||||||
'permlevel': 0,
|
'permlevel': 0,
|
||||||
|
'print_hide': 1,
|
||||||
|
'reqd': 0,
|
||||||
|
'search_index': 1
|
||||||
|
},
|
||||||
|
|
||||||
|
# DocField
|
||||||
|
{
|
||||||
|
'doctype': u'DocField',
|
||||||
|
'fieldname': u'address_display',
|
||||||
|
'fieldtype': u'Small Text',
|
||||||
|
'label': u'Address',
|
||||||
|
'permlevel': 1
|
||||||
|
},
|
||||||
|
|
||||||
|
# DocField
|
||||||
|
{
|
||||||
|
'doctype': u'DocField',
|
||||||
|
'fieldname': u'col_break4',
|
||||||
|
'fieldtype': u'Column Break',
|
||||||
|
'permlevel': 0,
|
||||||
|
'width': u'50%'
|
||||||
|
},
|
||||||
|
|
||||||
|
# DocField
|
||||||
|
{
|
||||||
|
'doctype': u'DocField',
|
||||||
|
'fieldname': u'contact_display',
|
||||||
|
'fieldtype': u'Small Text',
|
||||||
|
'label': u'Contact',
|
||||||
|
'permlevel': 1
|
||||||
|
},
|
||||||
|
|
||||||
|
# DocField
|
||||||
|
{
|
||||||
|
'doctype': u'DocField',
|
||||||
|
'fieldname': u'contact_mobile',
|
||||||
|
'fieldtype': u'Data',
|
||||||
|
'label': u'Mobile No',
|
||||||
|
'permlevel': 1
|
||||||
|
},
|
||||||
|
|
||||||
|
# DocField
|
||||||
|
{
|
||||||
|
'doctype': u'DocField',
|
||||||
|
'fieldname': u'contact_email',
|
||||||
|
'fieldtype': u'Data',
|
||||||
|
'label': u'Contact Email',
|
||||||
|
'permlevel': 1
|
||||||
|
},
|
||||||
|
|
||||||
|
# DocField
|
||||||
|
{
|
||||||
|
'doctype': u'DocField',
|
||||||
|
'fieldname': u'service_address',
|
||||||
|
'fieldtype': u'Small Text',
|
||||||
|
'label': u'Service Address',
|
||||||
|
'oldfieldname': u'service_address',
|
||||||
|
'oldfieldtype': u'Small Text',
|
||||||
|
'permlevel': 0
|
||||||
|
},
|
||||||
|
|
||||||
|
# DocField
|
||||||
|
{
|
||||||
|
'doctype': u'DocField',
|
||||||
|
'fieldname': u'more_info',
|
||||||
|
'fieldtype': u'Section Break',
|
||||||
|
'label': u'More Info',
|
||||||
|
'permlevel': 0
|
||||||
|
},
|
||||||
|
|
||||||
|
# DocField
|
||||||
|
{
|
||||||
|
'doctype': u'DocField',
|
||||||
|
'fieldname': u'col_break5',
|
||||||
|
'fieldtype': u'Column Break',
|
||||||
|
'permlevel': 0,
|
||||||
|
'width': u'50%'
|
||||||
|
},
|
||||||
|
|
||||||
|
# DocField
|
||||||
|
{
|
||||||
|
'colour': u'White:FFF',
|
||||||
|
'doctype': u'DocField',
|
||||||
|
'fieldname': u'company',
|
||||||
|
'fieldtype': u'Link',
|
||||||
|
'in_filter': 1,
|
||||||
|
'label': u'Company',
|
||||||
|
'oldfieldname': u'company',
|
||||||
|
'oldfieldtype': u'Link',
|
||||||
|
'options': u'Company',
|
||||||
|
'permlevel': 0,
|
||||||
|
'print_hide': 1,
|
||||||
|
'reqd': 1,
|
||||||
|
'search_index': 1,
|
||||||
'trigger': u'Client'
|
'trigger': u'Client'
|
||||||
|
},
|
||||||
|
|
||||||
|
# DocField
|
||||||
|
{
|
||||||
|
'doctype': u'DocField',
|
||||||
|
'fieldname': u'fiscal_year',
|
||||||
|
'fieldtype': u'Select',
|
||||||
|
'in_filter': 1,
|
||||||
|
'label': u'Fiscal Year',
|
||||||
|
'oldfieldname': u'fiscal_year',
|
||||||
|
'oldfieldtype': u'Select',
|
||||||
|
'options': u'link:Fiscal Year',
|
||||||
|
'permlevel': 0,
|
||||||
|
'print_hide': 1,
|
||||||
|
'reqd': 1,
|
||||||
|
'search_index': 1
|
||||||
|
},
|
||||||
|
|
||||||
|
# DocField
|
||||||
|
{
|
||||||
|
'colour': u'White:FFF',
|
||||||
|
'default': u'Open',
|
||||||
|
'doctype': u'DocField',
|
||||||
|
'fieldname': u'status',
|
||||||
|
'fieldtype': u'Select',
|
||||||
|
'in_filter': 1,
|
||||||
|
'label': u'Status',
|
||||||
|
'no_copy': 1,
|
||||||
|
'oldfieldname': u'status',
|
||||||
|
'oldfieldtype': u'Select',
|
||||||
|
'options': u'\nOpen\nClosed\nWork In Progress\nCancelled',
|
||||||
|
'permlevel': 0,
|
||||||
|
'reqd': 1,
|
||||||
|
'search_index': 1
|
||||||
|
},
|
||||||
|
|
||||||
|
# DocField
|
||||||
|
{
|
||||||
|
'doctype': u'DocField',
|
||||||
|
'fieldname': u'col_break6',
|
||||||
|
'fieldtype': u'Column Break',
|
||||||
|
'permlevel': 0,
|
||||||
|
'width': u'50%'
|
||||||
|
},
|
||||||
|
|
||||||
|
# DocField
|
||||||
|
{
|
||||||
|
'doctype': u'DocField',
|
||||||
|
'fieldname': u'complaint_raised_by',
|
||||||
|
'fieldtype': u'Data',
|
||||||
|
'label': u'Raised By',
|
||||||
|
'oldfieldname': u'complaint_raised_by',
|
||||||
|
'oldfieldtype': u'Data',
|
||||||
|
'permlevel': 0
|
||||||
|
},
|
||||||
|
|
||||||
|
# DocField
|
||||||
|
{
|
||||||
|
'doctype': u'DocField',
|
||||||
|
'fieldname': u'from_company',
|
||||||
|
'fieldtype': u'Data',
|
||||||
|
'label': u'From Company',
|
||||||
|
'oldfieldname': u'from_company',
|
||||||
|
'oldfieldtype': u'Data',
|
||||||
|
'permlevel': 0
|
||||||
|
},
|
||||||
|
|
||||||
|
# DocField
|
||||||
|
{
|
||||||
|
'doctype': u'DocField',
|
||||||
|
'fieldname': u'amended_from',
|
||||||
|
'fieldtype': u'Data',
|
||||||
|
'hidden': 1,
|
||||||
|
'label': u'Amended From',
|
||||||
|
'no_copy': 1,
|
||||||
|
'oldfieldname': u'amended_from',
|
||||||
|
'oldfieldtype': u'Data',
|
||||||
|
'permlevel': 0,
|
||||||
|
'print_hide': 1,
|
||||||
|
'width': u'150px'
|
||||||
|
},
|
||||||
|
|
||||||
|
# DocField
|
||||||
|
{
|
||||||
|
'doctype': u'DocField',
|
||||||
|
'fieldname': u'amendment_date',
|
||||||
|
'fieldtype': u'Date',
|
||||||
|
'hidden': 1,
|
||||||
|
'label': u'Amendment Date',
|
||||||
|
'no_copy': 1,
|
||||||
|
'oldfieldname': u'amendment_date',
|
||||||
|
'oldfieldtype': u'Date',
|
||||||
|
'permlevel': 0,
|
||||||
|
'print_hide': 1,
|
||||||
|
'width': u'100px'
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
Reference in New Issue
Block a user