99 lines
3.2 KiB
Text
99 lines
3.2 KiB
Text
Server Side Cookbook
|
|
====================
|
|
|
|
Standard Patterns for server side scripts
|
|
|
|
Create a name by using a prefix selected by the user
|
|
----------------------------------------------------
|
|
|
|
You can create a field "naming_series" of type Select and give Options. Then you can write the autoname function
|
|
as follows::
|
|
|
|
# Autoname
|
|
def autoname(self):
|
|
self.doc.name = make_autoname(self.doc.naming_series+'.#####')
|
|
|
|
|
|
|
|
Stop duplicate entries in a child table based on a key
|
|
------------------------------------------------------
|
|
|
|
For example, your key is item_code. Call this method from the validate method::
|
|
|
|
# Does not allow same item code to be entered twice
|
|
def validate_for_items(self):
|
|
check_list=[]
|
|
for d in getlist(self.doclist,'quotation_details'):
|
|
if d.item_code in check_list:
|
|
msgprint("Oops! Item %s has been entered twice." % d.item_code)
|
|
raise Exception
|
|
else:
|
|
check_list.append(cstr(d.item_code))
|
|
|
|
|
|
|
|
Add an event to the calendar
|
|
----------------------------
|
|
|
|
Add an event to the calendar on saving::
|
|
|
|
# Add to Calendar
|
|
def add_calendar_event(self):
|
|
ev = Document('Event')
|
|
ev.description = self.doc.description
|
|
ev.event_date = self.doc.contact_date
|
|
ev.event_hour = '10:00'
|
|
ev.event_type = 'Private'
|
|
ev.ref_type = 'Enquiry'
|
|
ev.ref_name = self.doc.name
|
|
ev.save(1)
|
|
|
|
# invite users (Sales People) to the event
|
|
user_lst.append(self.doc.owner)
|
|
|
|
chk = sql("select t1.name from `tabProfile` t1, `tabSales Person` t2 where t2.email_id = t1.name and t2.name=%s",self.doc.contact_by)
|
|
if chk:
|
|
user_lst.append(chk[0][0])
|
|
|
|
for d in user_lst:
|
|
ch = addchild(ev, 'event_individuals', 'Event User', 0)
|
|
ch.person = d
|
|
ch.save(1)
|
|
|
|
# on_udpate method
|
|
def on_update(self):
|
|
# Add to calendar
|
|
if self.doc.contact_date and self.doc.contact_date_ref != self.doc.contact_date:
|
|
if self.doc.contact_by:
|
|
self.add_calendar_event()
|
|
set(self.doc, 'contact_date_ref',self.doc.contact_date)
|
|
|
|
|
|
|
|
Send HTML Email based on certain condition
|
|
------------------------------------------
|
|
|
|
Email can be sent using the sendmail method. In this message, we send an email when the
|
|
quantity of a certain item falls below the minimum inventory level::
|
|
|
|
def check_min_inventory_level(self):
|
|
if self.doc.minimum_inventory_level:
|
|
total_qty = sql("select sum(projected_qty) from tabBin where item_code = %s",self.doc.name)
|
|
if flt(total_qty) < flt(self.doc.minimum_inventory_level):
|
|
msgprint("Minimum inventory level for item %s is reached", self.doc.name)
|
|
send_to = []
|
|
send = sql("select t1.email from `tabProfile` t1,`tabUserRole` t2 where t2.role IN ('Material Master Manager','Purchase Manager') and t2.parent = t1.name")
|
|
for d in send:
|
|
send_to.append(d[0])
|
|
msg = '''Minimum Inventory Level Reached
|
|
|
|
Item Code: %s
|
|
Item Name: %s
|
|
Minimum Inventory Level: %s
|
|
Total Available Qty: %s
|
|
|
|
''' % (self.doc.item_code, self.doc.item_name, self.doc.minimum_inventory_level, total_qty)
|
|
|
|
sendmail(send_to, sender='automail@webnotestech.com', subject='Minimum Inventory Level Reached', parts=[['text/plain', msg]])
|
|
|
|
|