custom field included in docfield query

This commit is contained in:
Nabin Hait 2012-05-21 14:40:25 +05:30
parent d9742a6a58
commit fec3f783af
3 changed files with 229 additions and 269 deletions

View File

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

View File

@ -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
att_dt = self.get_att_data() # get default attendance data like fiscal yr, company, naming series
dt = self.date_diff_list() # get date list inbetween from date and to date 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")
att_dt = self.get_att_data() # get default attendance data like fiscal yr, company, naming series for d in dt:
for r in res:
lst.append([r[0],r[1],d,'',fy,comp,sr])
fy, comp, sr = att_dt['fy'], att_dt['comp'], att_dt['sr'] return lst
res = sql("select name, employee_name from `tabEmployee` where status = 'Active' and docstatus !=2") #------------------------------------------------------------------------------
# get date list inbetween from date and to date
def date_diff_list(self):
import datetime
#get from date
att_fr_date = self.doc.att_fr_date and self.doc.att_fr_date or ''
for d in dt: #get to date
for r in res: att_to_date = self.doc.att_to_date and self.doc.att_to_date or ''
lst.append([r[0],r[1],d,'',fy,comp,sr])
return lst if att_to_date:
r = (getdate(self.doc.att_to_date)+datetime.timedelta(days=1)-getdate(self.doc.att_fr_date)).days
else:
r = 1
dateList = [getdate(self.doc.att_fr_date)+datetime.timedelta(days=i) for i in range(0,r)]
dt=([str(date) for date in dateList])
#------------------------------------------------------------------------------ return dt
# get date list inbetween from date and to date
def date_diff_list(self):
import datetime
#get from date
att_fr_date = self.doc.att_fr_date and self.doc.att_fr_date or ''
#get to date #------------------------------------------------------------------------------
att_to_date = self.doc.att_to_date and self.doc.att_to_date or '' def get_att_data(self):
fy = get_defaults()['fiscal_year'] #get default fiscal year
comp = get_defaults()['company'] #get default company
if att_to_date: #get naming series of attendance
r = (getdate(self.doc.att_to_date)+datetime.timedelta(days=1)-getdate(self.doc.att_fr_date)).days import webnotes.model.doctype
else: docfield = webnotes.model.doctype.get('Attendance')
r = 1 series = [d.options for d in docfield if d.doctype == 'DocField' and d.fieldname == 'naming_series']
dateList = [getdate(self.doc.att_fr_date)+datetime.timedelta(days=i) for i in range(0,r)] if not series:
dt=([str(date) for date in dateList]) msgprint("Please create naming series for Attendance.\nGo to Setup--> Numbering Series.")
raise Exception
else:
sr = series[0][0] or ''
return dt return {'fy':fy,'comp':comp,'sr':sr}
#------------------------------------------------------------------------------ #=================================================================================
def get_att_data(self): def import_att_data(self):
filename = self.doc.file_list.split(',')
fy = get_defaults()['fiscal_year'] #get default fiscal year if not filename:
msgprint("Please attach a .CSV File.")
raise Exception
comp = get_defaults()['company'] #get default company if filename[0].find('.csv') < 0:
raise Exception
#get naming series of attendance if not filename and filename[0] and file[1]:
#sr = sql("select series_options from `tabNaming Series Options` where doc_type='Attendance'") msgprint("Please Attach File. ")
sr = sql("select options from `tabDocField` where parent = 'Attendance' and fieldname = 'naming_series'") raise Exception
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} from webnotes.utils import file_manager
fn, content = file_manager.get_file(filename[1])
#=================================================================================
def import_att_data(self):
filename = self.doc.file_list.split(',')
if not filename:
msgprint("Please attach a .CSV File.")
raise Exception
if filename[0].find('.csv') < 0:
raise Exception
if not filename and filename[0] and file[1]:
msgprint("Please Attach File. ")
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

View File

@ -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) # Get item detail (will be removed later)
#======================================= #=======================================
def get_item_detail(self,item_code): 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) it=sql("select item_name,brand,item_group,description,stock_uom from `tabItem` where name='%s'"%item_code)
if it: if it:
ret = { ret = {
'item_name' : it and it[0][0] or '', 'item_name' : it and it[0][0] or '',
'brand' : it and it[0][1] or '', 'brand' : it and it[0][1] or '',
'item_group' : it and it[0][2] or '', 'item_group' : it and it[0][2] or '',
'description': it and it[0][3] or '', 'description': it and it[0][3] or '',
'uom' : it and it[0][4] or '' 'uom' : it and it[0][4] or ''
} }
return ret return ret
def validate(self): def validate(self):
import string import string
# Get Address if self.doc.status == 'Lead Lost' and not self.doc.order_lost_reason:
# ====================================================================== msgprint("Please Enter Quotation Lost Reason")
#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): raise Exception
# 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: if self.doc.source == 'Campaign' and not self.doc.campaign_name and session['user'] != 'Guest':
msgprint("Please Enter Quotation Lost Reason") msgprint("Please specify campaign name")
raise Exception raise Exception
if self.doc.source == 'Campaign' and not self.doc.campaign_name and session['user'] != 'Guest': if self.doc.email_id:
msgprint("Please specify campaign name") if not validate_email_add(self.doc.email_id):
raise Exception msgprint('Please enter valid email id.')
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: def on_update(self):
if session['user'] == 'Guest': # Add to calendar
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 self.doc.contact_by:
if so: self.add_calendar_event()
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): if session['user'] == 'Guest':
# Add to calendar if self.doc.email_id:
# ======================================================================== self.send_email_notification()
if self.doc.contact_by:
self.add_calendar_event()
if session['user'] == 'Guest': if not self.doc.naming_series:
if self.doc.email_id: if session['user'] == 'Guest':
self.send_email_notification() 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
if not self.doc.naming_series: def send_email_notification(self):
if session['user'] == 'Guest': if not validate_email_add(self.doc.email_id.strip(' ')):
#so = sql("select series_options from `tabNaming Series Options` where doc_type='Lead'") msgprint('error:%s is not a valid email id' % self.doc.email_id.strip(' '))
so = sql("select options from `tabDocField` where parent = 'Lead' and fieldname = 'naming_series'") raise Exception
if so: else:
sr = so[0][0].split("\n") subject = 'Thank you for interest in erpnext'
set(self.doc, 'naming_series', sr[0])
else:
msgprint("Please specify naming series")
raise Exception
def send_email_notification(self): sendmail([self.doc.email_id.strip(' ')], sender = sender_email[0][0], subject = subject , parts = [['text/html', self.get_notification_msg()]])
if not validate_email_add(self.doc.email_id.strip(' ')): msgprint("Mail Sent")
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()]]) def get_notification_msg(self):
#sendmail(cc_list, sender = sender_email[0][0], subject = subject , parts = [['text/html', message]],attach=attach_list) t = """
msgprint("Mail Sent") <html>
<body>
Dear %s,<br><br>
def get_notification_msg(self): Thank you for contacting us.<br><br>
t = """
<html>
<body>
Dear %s,<br><br>
Thank you for contacting us.<br><br> You have left following message for us,<br>
%s
<br><br>
You have left following message for us,<br> You will receive reply on this shortly.<br><br>
%s
<br><br>
You will receive reply on this shortly.<br><br> Cheers!
</body>
</html>
""" % (self.doc.lead_name, self.doc.remark)
Cheers! return t
</body>
</html>
""" % (self.doc.lead_name, self.doc.remark)
return t # Add to Calendar
# ===========================================================================
def add_calendar_event(self):
# delete any earlier event by this lead
sql("delete from tabEvent where ref_type='Lead' and ref_name=%s", self.doc.name)
# Add to Calendar in_calendar_of = self.doc.lead_owner
# ===========================================================================
def add_calendar_event(self):
# delete any earlier event by this lead
sql("delete from tabEvent where ref_type='Lead' and ref_name=%s", self.doc.name)
in_calendar_of = self.doc.lead_owner # get profile (id) if exists for contact_by
email_id = webnotes.conn.get_value('Sales Person', self.doc.contact_by, 'email_id')
if webnotes.conn.exists('Profile', email_id):
in_calendar_of = email_id
# get profile (id) if exists for contact_by ev = Document('Event')
email_id = webnotes.conn.get_value('Sales Person', self.doc.contact_by, 'email_id') ev.owner = in_calendar_of
if webnotes.conn.exists('Profile', email_id): ev.description = 'Contact ' + cstr(self.doc.lead_name) + '.By : ' + cstr(self.doc.contact_by) + '.To Discuss : ' + cstr(self.doc.remark)
in_calendar_of = email_id ev.event_date = self.doc.contact_date
ev.event_hour = '10:00'
ev = Document('Event') ev.event_type = 'Private'
ev.owner = in_calendar_of ev.ref_type = 'Lead'
ev.description = 'Contact ' + cstr(self.doc.lead_name) + '.By : ' + cstr(self.doc.contact_by) + '.To Discuss : ' + cstr(self.doc.remark) ev.ref_name = self.doc.name
ev.event_date = self.doc.contact_date ev.save(1)
ev.event_hour = '10:00'
ev.event_type = 'Private'
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')