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

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)
#=======================================
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')