From a3054062670ca04877e8313cb7253fd807801785 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Mon, 22 Apr 2013 14:30:30 +0530 Subject: [PATCH 1/2] [salary structure] added a validation --- .../salary_structure/salary_structure.py | 67 +++++++------------ 1 file changed, 25 insertions(+), 42 deletions(-) diff --git a/hr/doctype/salary_structure/salary_structure.py b/hr/doctype/salary_structure/salary_structure.py index 22789e3f49..e70dc05568 100644 --- a/hr/doctype/salary_structure/salary_structure.py +++ b/hr/doctype/salary_structure/salary_structure.py @@ -18,31 +18,25 @@ from __future__ import unicode_literals import webnotes from webnotes.utils import cstr, flt -from webnotes.model import db_exists from webnotes.model.doc import addchild, make_autoname -from webnotes.model.bean import copy_doclist -from webnotes import msgprint +from webnotes import msgprint, _ sql = webnotes.conn.sql class DocType: - #init function def __init__(self,doc,doclist=[]): self.doc = doc self.doclist = doclist - - #autoname function - #--------------------------------------------------------- + def autoname(self): self.doc.name = make_autoname(self.doc.employee + '/.SST' + '/.#####') - - #get employee details - #--------------------------------------------------------- + def get_employee_details(self): ret = {} - det = sql("select employee_name, branch, designation, department, grade from `tabEmployee` where name = '%s'" %self.doc.employee) + det = sql("""select employee_name, branch, designation, department, grade + from `tabEmployee` where name = '%s'""", self.doc.employee) if det: ret = { 'employee_name': cstr(det[0][0]), @@ -53,20 +47,16 @@ class DocType: 'backup_employee': cstr(self.doc.employee) } return ret - - # Set Salary structure field values - #--------------------------------------------------------- def get_ss_values(self,employee): - basic_info = sql("select bank_name, bank_ac_no, esic_card_no, pf_number from `tabEmployee` where name ='%s'" % employee) + basic_info = sql("""select bank_name, bank_ac_no, esic_card_no, pf_number + from `tabEmployee` where name ='%s'""", employee) ret = {'bank_name': basic_info and basic_info[0][0] or '', 'bank_ac_no': basic_info and basic_info[0][1] or '', 'esic_no': basic_info and basic_info[0][2] or '', 'pf_no': basic_info and basic_info[0][3] or ''} return ret - - # Make earning and deduction table - #--------------------------------------------------------- + def make_table(self, doct_name, tab_fname, tab_name): list1 = sql("select name from `tab%s` where docstatus != 2" % doct_name) for li in list1: @@ -77,37 +67,30 @@ class DocType: elif(tab_fname == 'deduction_details'): child.d_type = cstr(li[0]) child.d_modified_amt = 0 - - # add earning & deduction types to table - #--------------------------------------------------------- + def make_earn_ded_table(self): - #Earning List self.make_table('Earning Type','earning_details','Salary Structure Earning') - - #Deduction List - self.make_table('Deduction Type','deduction_details', - 'Salary Structure Deduction') - + self.make_table('Deduction Type','deduction_details', 'Salary Structure Deduction') - # Check if another active ss exists - #--------------------------------------------------------- def check_existing(self): - ret = sql("select name from `tabSalary Structure` where is_active = 'Yes' and employee = '%s' and name!='%s'" %(self.doc.employee,self.doc.name)) + ret = sql("""select name from `tabSalary Structure` where is_active = 'Yes' + and employee = '%s' and name!='%s'""", (self.doc.employee,self.doc.name)) if ret and self.doc.is_active=='Yes': - msgprint("Another Salary Structure '%s' is active for employee '%s'. Please make its status 'Inactive' to proceed."%(cstr(ret), self.doc.employee)) - raise Exception + msgprint(_("""Another Salary Structure '%s' is active for employee '%s'. + Please make its status 'Inactive' to proceed.""") % + (cstr(ret), self.doc.employee), raise_exception=1) - # Validate net pay - #--------------------------------------------------------- - def validate_net_pay(self): + def validate_amount(self): if flt(self.doc.net_pay) < 0: - msgprint("Net pay can not be negative") - raise Exception - elif flt(self.doc.net_pay) > flt(self.doc.ctc): - msgprint("Net pay can not be greater than CTC") - raise Exception + msgprint(_("Net pay can not be negative"), raise_exception=1) + elif flt(self.doc.net_pay)*12 > flt(self.doc.ctc): + msgprint(_("Net pay can not be greater than 1/12th of Annual Cost To Company"), + raise_exception=1) + + if flt(self.doc.ctc) < 12*flt(self.doc.total_earning): + msgprint(_("Annual Cost To Company can not be less than 12 months of Total Earning"), + raise_exception=1) def validate(self): self.check_existing() - self.validate_net_pay() - + self.validate_amount() \ No newline at end of file From d16cae113aa41787e068abdcbf317016e6475d03 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Mon, 22 Apr 2013 15:15:47 +0530 Subject: [PATCH 2/2] [salary structure] added a validation --- hr/doctype/salary_structure/salary_structure.py | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/hr/doctype/salary_structure/salary_structure.py b/hr/doctype/salary_structure/salary_structure.py index e70dc05568..018aab7e7c 100644 --- a/hr/doctype/salary_structure/salary_structure.py +++ b/hr/doctype/salary_structure/salary_structure.py @@ -36,7 +36,7 @@ class DocType: def get_employee_details(self): ret = {} det = sql("""select employee_name, branch, designation, department, grade - from `tabEmployee` where name = '%s'""", self.doc.employee) + from `tabEmployee` where name = %s""", self.doc.employee) if det: ret = { 'employee_name': cstr(det[0][0]), @@ -50,7 +50,7 @@ class DocType: def get_ss_values(self,employee): basic_info = sql("""select bank_name, bank_ac_no, esic_card_no, pf_number - from `tabEmployee` where name ='%s'""", employee) + from `tabEmployee` where name =%s""", employee) ret = {'bank_name': basic_info and basic_info[0][0] or '', 'bank_ac_no': basic_info and basic_info[0][1] or '', 'esic_no': basic_info and basic_info[0][2] or '', @@ -74,22 +74,23 @@ class DocType: def check_existing(self): ret = sql("""select name from `tabSalary Structure` where is_active = 'Yes' - and employee = '%s' and name!='%s'""", (self.doc.employee,self.doc.name)) + and employee = %s and name!=%s""", (self.doc.employee,self.doc.name)) if ret and self.doc.is_active=='Yes': msgprint(_("""Another Salary Structure '%s' is active for employee '%s'. Please make its status 'Inactive' to proceed.""") % (cstr(ret), self.doc.employee), raise_exception=1) def validate_amount(self): + if flt(self.doc.ctc) < 12*flt(self.doc.total_earning): + msgprint(_("Annual Cost To Company can not be less than 12 months of Total Earning"), + raise_exception=1) + if flt(self.doc.net_pay) < 0: msgprint(_("Net pay can not be negative"), raise_exception=1) elif flt(self.doc.net_pay)*12 > flt(self.doc.ctc): msgprint(_("Net pay can not be greater than 1/12th of Annual Cost To Company"), raise_exception=1) - - if flt(self.doc.ctc) < 12*flt(self.doc.total_earning): - msgprint(_("Annual Cost To Company can not be less than 12 months of Total Earning"), - raise_exception=1) + def validate(self): self.check_existing()