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