Standard Patterns for server side scripts
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+'.#####')
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 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)
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]])