Merge pull request #34 from nabinhait/master
considered half day lwp in sal slip
This commit is contained in:
commit
6013016ab6
@ -455,7 +455,8 @@
|
|||||||
'description': "Don't delete this field at any cost",
|
'description': "Don't delete this field at any cost",
|
||||||
'doctype': 'DocField',
|
'doctype': 'DocField',
|
||||||
'fieldname': 'old_parent',
|
'fieldname': 'old_parent',
|
||||||
'fieldtype': 'Data',
|
'fieldtype': 'Link',
|
||||||
|
'options': 'Account',
|
||||||
'hidden': 1,
|
'hidden': 1,
|
||||||
'idx': 24,
|
'idx': 24,
|
||||||
'label': 'Old Parent',
|
'label': 'Old Parent',
|
||||||
|
@ -51,7 +51,6 @@ for r in res:
|
|||||||
q1 = "select sum(t1.budget_allocated) from `tabBudget Detail` t1, `tab%s` t2, `tabAccount` t3 where "
|
q1 = "select sum(t1.budget_allocated) from `tabBudget Detail` t1, `tab%s` t2, `tabAccount` t3 where "
|
||||||
cond2 = " t3.is_pl_account = 'Yes' and t3.debit_or_credit = 'Debit' and t3.name = t1.account and t1.docstatus != 2 and "
|
cond2 = " t3.is_pl_account = 'Yes' and t3.debit_or_credit = 'Debit' and t3.name = t1.account and t1.docstatus != 2 and "
|
||||||
if ch:
|
if ch:
|
||||||
|
|
||||||
qur = q1+cond2+cond1+" and t2.name = '%s'"
|
qur = q1+cond2+cond1+" and t2.name = '%s'"
|
||||||
ret_amt = sql(qur%(based_on,fiscal_year,based_on,r[0].strip()))
|
ret_amt = sql(qur%(based_on,fiscal_year,based_on,r[0].strip()))
|
||||||
|
|
||||||
|
@ -52,12 +52,12 @@ cur_frm.cscript.from_date = function(doc, dt, dn) {
|
|||||||
// to date
|
// to date
|
||||||
// --------
|
// --------
|
||||||
cur_frm.cscript.to_date = function(doc, dt, dn) {
|
cur_frm.cscript.to_date = function(doc, dt, dn) {
|
||||||
if(cint(doc.half_day) == 1 && doc.from_date && doc.from_date != doc.to_date){
|
if(cint(doc.half_day) == 1 && cstr(doc.from_date) && doc.from_date != doc.to_date){
|
||||||
msgprint("To Date should be same as From Date for Half Day leave");
|
msgprint("To Date should be same as From Date for Half Day leave");
|
||||||
return;
|
set_multiple(dt,dn,{to_date:doc.from_date});
|
||||||
}
|
}
|
||||||
if(cint(doc.half_day) == 1){
|
if(cint(doc.half_day) == 1){
|
||||||
set_multiple(dt,dn,{to_date:doc.from_date});
|
|
||||||
}
|
}
|
||||||
calculate_total_days(doc, dt, dn);
|
calculate_total_days(doc, dt, dn);
|
||||||
}
|
}
|
||||||
|
@ -29,7 +29,7 @@ cur_frm.cscript.month = cur_frm.cscript.employee = cur_frm.cscript.fiscal_year;
|
|||||||
// Calculate total if lwp exists
|
// Calculate total if lwp exists
|
||||||
// ------------------------------------------------------------------------
|
// ------------------------------------------------------------------------
|
||||||
cur_frm.cscript.leave_without_pay = function(doc,dt,dn){
|
cur_frm.cscript.leave_without_pay = function(doc,dt,dn){
|
||||||
doc.payment_days = cint(doc.total_days_in_month) - cint(doc.leave_without_pay);
|
doc.payment_days = flt(doc.total_days_in_month) - flt(doc.leave_without_pay);
|
||||||
refresh_field('payment_days');
|
refresh_field('payment_days');
|
||||||
calculate_all(doc, dt, dn);
|
calculate_all(doc, dt, dn);
|
||||||
}
|
}
|
||||||
|
@ -18,210 +18,219 @@ convert_to_lists = webnotes.conn.convert_to_lists
|
|||||||
from utilities.transaction_base import TransactionBase
|
from utilities.transaction_base import TransactionBase
|
||||||
|
|
||||||
class DocType(TransactionBase):
|
class DocType(TransactionBase):
|
||||||
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('Sal Slip/' +self.doc.employee + '/.#####')
|
self.doc.name = make_autoname('Sal Slip/' +self.doc.employee + '/.#####')
|
||||||
|
|
||||||
# Get employee details
|
# Get employee details
|
||||||
#=======================================================
|
#=======================================================
|
||||||
def get_emp_and_leave_details(self):
|
def get_emp_and_leave_details(self):
|
||||||
# Get payment days
|
# Get payment days
|
||||||
if self.doc.fiscal_year and self.doc.month:
|
if self.doc.fiscal_year and self.doc.month:
|
||||||
self.get_leave_details()
|
self.get_leave_details()
|
||||||
|
|
||||||
# check sal structure
|
# check sal structure
|
||||||
if self.doc.employee:
|
if self.doc.employee:
|
||||||
struct = self.check_sal_struct()
|
struct = self.check_sal_struct()
|
||||||
if struct:
|
if struct:
|
||||||
self.pull_sal_struct(struct)
|
self.pull_sal_struct(struct)
|
||||||
|
|
||||||
|
|
||||||
# Check sal structure
|
# Check sal structure
|
||||||
#=======================================================
|
#=======================================================
|
||||||
def check_sal_struct(self):
|
def check_sal_struct(self):
|
||||||
struct = sql("select name from `tabSalary Structure` where employee ='%s' and is_active = 'Yes' "%self.doc.employee)
|
struct = sql("select name from `tabSalary Structure` where employee ='%s' and is_active = 'Yes' "%self.doc.employee)
|
||||||
if not struct:
|
if not struct:
|
||||||
msgprint("Please create Salary Structure for employee '%s'"%self.doc.employee)
|
msgprint("Please create Salary Structure for employee '%s'"%self.doc.employee)
|
||||||
self.doc.employee = ''
|
self.doc.employee = ''
|
||||||
return struct and struct[0][0] or ''
|
return struct and struct[0][0] or ''
|
||||||
|
|
||||||
# Pull struct details
|
# Pull struct details
|
||||||
#=======================================================
|
#=======================================================
|
||||||
def pull_sal_struct(self, struct):
|
def pull_sal_struct(self, struct):
|
||||||
self.doc.clear_table(self.doclist, 'earning_details')
|
self.doc.clear_table(self.doclist, 'earning_details')
|
||||||
self.doc.clear_table(self.doclist, 'deduction_details')
|
self.doc.clear_table(self.doclist, 'deduction_details')
|
||||||
|
|
||||||
get_obj('DocType Mapper', 'Salary Structure-Salary Slip').dt_map('Salary Structure', 'Salary Slip', struct, self.doc, self.doclist, "[['Salary Structure', 'Salary Slip'],['Earning Detail', 'SS Earning Detail'],['Deduction Detail','SS Deduction Detail']]")
|
get_obj('DocType Mapper', 'Salary Structure-Salary Slip').dt_map('Salary Structure', 'Salary Slip', struct, self.doc, self.doclist, "[['Salary Structure', 'Salary Slip'],['Earning Detail', 'SS Earning Detail'],['Deduction Detail','SS Deduction Detail']]")
|
||||||
|
|
||||||
basic_info = sql("select bank_name, bank_ac_no, esic_card_no, pf_number from `tabEmployee` where name ='%s'" % self.doc.employee)
|
basic_info = sql("select bank_name, bank_ac_no, esic_card_no, pf_number from `tabEmployee` where name ='%s'" % self.doc.employee)
|
||||||
self.doc.bank_name = basic_info[0][0]
|
self.doc.bank_name = basic_info[0][0]
|
||||||
self.doc.bank_account_no = basic_info[0][1]
|
self.doc.bank_account_no = basic_info[0][1]
|
||||||
self.doc.esic_no = basic_info[0][2]
|
self.doc.esic_no = basic_info[0][2]
|
||||||
self.doc.pf_no = basic_info[0][3]
|
self.doc.pf_no = basic_info[0][3]
|
||||||
|
|
||||||
# Get leave details
|
# Get leave details
|
||||||
#=======================================================
|
#=======================================================
|
||||||
def get_leave_details(self):
|
def get_leave_details(self):
|
||||||
m = self.get_month_details()
|
m = self.get_month_details()
|
||||||
lwp = self.calculate_lwp(m)
|
lwp = self.calculate_lwp(m)
|
||||||
self.doc.total_days_in_month = m[3]
|
self.doc.total_days_in_month = m[3]
|
||||||
self.doc.leave_without_pay = lwp
|
self.doc.leave_without_pay = lwp
|
||||||
self.doc.payment_days = flt(m[3]) - flt(lwp)
|
self.doc.payment_days = flt(m[3]) - flt(lwp)
|
||||||
|
|
||||||
# Get month details
|
# Get month details
|
||||||
#=======================================================
|
#=======================================================
|
||||||
def get_month_details(self):
|
def get_month_details(self):
|
||||||
ysd = sql("select year_start_date from `tabFiscal Year` where name ='%s'"%self.doc.fiscal_year)[0][0]
|
ysd = sql("select year_start_date from `tabFiscal Year` where name ='%s'"%self.doc.fiscal_year)[0][0]
|
||||||
if ysd:
|
if ysd:
|
||||||
from dateutil.relativedelta import relativedelta
|
from dateutil.relativedelta import relativedelta
|
||||||
import calendar, datetime
|
import calendar, datetime
|
||||||
mnt = int(self.doc.month)
|
mnt = int(self.doc.month)
|
||||||
diff_mnt = int(mnt)-int(ysd.month)
|
diff_mnt = int(mnt)-int(ysd.month)
|
||||||
if diff_mnt<0:
|
if diff_mnt<0:
|
||||||
diff_mnt = 12-int(ysd.month)+int(mnt)
|
diff_mnt = 12-int(ysd.month)+int(mnt)
|
||||||
msd = ysd + relativedelta(months=diff_mnt) # month start date
|
msd = ysd + relativedelta(months=diff_mnt) # month start date
|
||||||
month_days = cint(calendar.monthrange(cint(msd.year) ,cint(self.doc.month))[1]) # days in month
|
month_days = cint(calendar.monthrange(cint(msd.year) ,cint(self.doc.month))[1]) # days in month
|
||||||
med = datetime.date(msd.year, cint(self.doc.month), month_days) # month end date
|
med = datetime.date(msd.year, cint(self.doc.month), month_days) # month end date
|
||||||
return msd.year, msd, med, month_days
|
return msd.year, msd, med, month_days
|
||||||
|
|
||||||
# Calculate LWP
|
# Calculate LWP
|
||||||
#=======================================================
|
#=======================================================
|
||||||
def calculate_lwp(self, m):
|
def calculate_lwp(self, m):
|
||||||
holidays = sql("select t1.holiday_date from `tabHoliday List Detail` t1, tabEmployee t2 where t1.parent = t2.holiday_list and t2.name = '%s' and t1.holiday_date between '%s' and '%s'" % (self.doc.employee, m[1], m[2]))
|
holidays = sql("select t1.holiday_date from `tabHoliday List Detail` t1, tabEmployee t2 where t1.parent = t2.holiday_list and t2.name = '%s' and t1.holiday_date between '%s' and '%s'" % (self.doc.employee, m[1], m[2]))
|
||||||
if not holidays:
|
if not holidays:
|
||||||
holidays = sql("select t1.holiday_date from `tabHoliday List Detail` t1, `tabHoliday List` t2 where t1.parent = t2.name and ifnull(t2.is_default, 0) = 1 and t2.fiscal_year = '%s'" % self.doc.fiscal_year)
|
holidays = sql("select t1.holiday_date from `tabHoliday List Detail` t1, `tabHoliday List` t2 where t1.parent = t2.name and ifnull(t2.is_default, 0) = 1 and t2.fiscal_year = '%s'" % self.doc.fiscal_year)
|
||||||
holidays = [cstr(i[0]) for i in holidays]
|
holidays = [cstr(i[0]) for i in holidays]
|
||||||
lwp = 0
|
lwp = 0
|
||||||
for d in range(m[3]):
|
for d in range(m[3]):
|
||||||
dt = add_days(cstr(m[1]), d)
|
dt = add_days(cstr(m[1]), d)
|
||||||
if dt not in holidays:
|
if dt not in holidays:
|
||||||
if sql("select t1.name from `tabLeave Application` t1, `tabLeave Type` t2 where t2.name = t1.leave_type and ifnull(t2.is_lwp, 0) = 1 and t1.docstatus = 1 and t1.employee = '%s' and '%s' between from_date and to_date"%(self.doc.employee, dt)):
|
leave = sql("""
|
||||||
lwp += 1
|
select t1.name, t1.half_day
|
||||||
return lwp
|
from `tabLeave Application` t1, `tabLeave Type` t2
|
||||||
|
where t2.name = t1.leave_type
|
||||||
|
and ifnull(t2.is_lwp, 0) = 1
|
||||||
|
and t1.docstatus = 1
|
||||||
|
and t1.employee = '%s'
|
||||||
|
and '%s' between from_date and to_date
|
||||||
|
"""%(self.doc.employee, dt))
|
||||||
|
if leave:
|
||||||
|
lwp = cint(leave[0][1]) and lwp + 0.5 or lwp + 1
|
||||||
|
return lwp
|
||||||
|
|
||||||
# Check existing
|
# Check existing
|
||||||
#=======================================================
|
#=======================================================
|
||||||
def check_existing(self):
|
def check_existing(self):
|
||||||
ret_exist = sql("select name from `tabSalary Slip` where month = '%s' and fiscal_year = '%s' and docstatus != 2 and employee = '%s' and name !='%s'" % (self.doc.month,self.doc.fiscal_year,self.doc.employee,self.doc.name))
|
ret_exist = sql("select name from `tabSalary Slip` where month = '%s' and fiscal_year = '%s' and docstatus != 2 and employee = '%s' and name !='%s'" % (self.doc.month,self.doc.fiscal_year,self.doc.employee,self.doc.name))
|
||||||
if ret_exist:
|
if ret_exist:
|
||||||
msgprint("Salary Slip of employee '%s' already created for this month" % self.doc.employee)
|
msgprint("Salary Slip of employee '%s' already created for this month" % self.doc.employee)
|
||||||
self.doc.employee = ''
|
self.doc.employee = ''
|
||||||
raise Exception
|
raise Exception
|
||||||
|
|
||||||
# Validate
|
# Validate
|
||||||
#=======================================================
|
#=======================================================
|
||||||
def validate(self):
|
def validate(self):
|
||||||
self.check_existing()
|
self.check_existing()
|
||||||
dcc = TransactionBase().get_company_currency(self.doc.company)
|
dcc = TransactionBase().get_company_currency(self.doc.company)
|
||||||
self.doc.total_in_words = get_obj('Sales Common').get_total_in_words(dcc, self.doc.rounded_total)
|
self.doc.total_in_words = get_obj('Sales Common').get_total_in_words(dcc, self.doc.rounded_total)
|
||||||
|
|
||||||
# ON SUBMIT
|
# ON SUBMIT
|
||||||
#=======================================================
|
#=======================================================
|
||||||
def on_submit(self):
|
def on_submit(self):
|
||||||
if(self.doc.email_check == 1):
|
if(self.doc.email_check == 1):
|
||||||
self.send_mail_funct()
|
self.send_mail_funct()
|
||||||
|
|
||||||
# Send mail
|
# Send mail
|
||||||
#=======================================================
|
#=======================================================
|
||||||
def send_mail_funct(self):
|
def send_mail_funct(self):
|
||||||
emailid_ret=sql("select company_email from `tabEmployee` where name = '%s'"%self.doc.employee)
|
emailid_ret=sql("select company_email from `tabEmployee` where name = '%s'"%self.doc.employee)
|
||||||
if emailid_ret:
|
if emailid_ret:
|
||||||
receiver = cstr(emailid_ret[0][0])
|
receiver = cstr(emailid_ret[0][0])
|
||||||
subj = 'Salary Slip ' + cstr(self.doc.month) +' '+cstr(self.doc.year)
|
subj = 'Salary Slip ' + cstr(self.doc.month) +' '+cstr(self.doc.year)
|
||||||
earn_ret=sql("select e_type,e_amount from `tabSS Earning Detail` where parent = '%s'"%self.doc.name)
|
earn_ret=sql("select e_type,e_amount from `tabSS Earning Detail` where parent = '%s'"%self.doc.name)
|
||||||
ded_ret=sql("select d_type,d_amount from `tabSS Deduction Detail` where parent = '%s'"%self.doc.name)
|
ded_ret=sql("select d_type,d_amount from `tabSS Deduction Detail` where parent = '%s'"%self.doc.name)
|
||||||
|
|
||||||
earn_table = ''
|
earn_table = ''
|
||||||
ded_table = ''
|
ded_table = ''
|
||||||
if earn_ret:
|
if earn_ret:
|
||||||
|
|
||||||
earn_table += "<table cellspacing= '5' cellpadding='5' >"
|
earn_table += "<table cellspacing= '5' cellpadding='5' >"
|
||||||
|
|
||||||
for e in earn_ret:
|
for e in earn_ret:
|
||||||
if not e[1]:
|
if not e[1]:
|
||||||
earn_table +='<tr><td>%s</td><td>0.00</td></tr>'%(cstr(e[0]))
|
earn_table +='<tr><td>%s</td><td>0.00</td></tr>'%(cstr(e[0]))
|
||||||
else:
|
else:
|
||||||
earn_table +='<tr><td>%s</td><td>%s</td></tr>'%(cstr(e[0]),cstr(e[1]))
|
earn_table +='<tr><td>%s</td><td>%s</td></tr>'%(cstr(e[0]),cstr(e[1]))
|
||||||
earn_table += '</table>'
|
earn_table += '</table>'
|
||||||
|
|
||||||
if ded_ret:
|
if ded_ret:
|
||||||
|
|
||||||
ded_table += "<table cellspacing= '5' cellpadding='5' >"
|
ded_table += "<table cellspacing= '5' cellpadding='5' >"
|
||||||
|
|
||||||
for d in ded_ret:
|
for d in ded_ret:
|
||||||
if not d[1]:
|
if not d[1]:
|
||||||
ded_table +='<tr><td>%s</td><td>0.00</td></tr>'%(cstr(d[0]))
|
ded_table +='<tr><td>%s</td><td>0.00</td></tr>'%(cstr(d[0]))
|
||||||
else:
|
else:
|
||||||
ded_table +='<tr><td>%s</td><td>%s</td></tr>'%(cstr(d[0]),cstr(d[1]))
|
ded_table +='<tr><td>%s</td><td>%s</td></tr>'%(cstr(d[0]),cstr(d[1]))
|
||||||
ded_table += '</table>'
|
ded_table += '</table>'
|
||||||
|
|
||||||
letter_head = sql("select value from `tabSingles` where field = 'letter_head' and doctype = 'Control Panel'")
|
letter_head = sql("select value from `tabSingles` where field = 'letter_head' and doctype = 'Control Panel'")
|
||||||
|
|
||||||
if not letter_head:
|
if not letter_head:
|
||||||
letter_head = ''
|
letter_head = ''
|
||||||
|
|
||||||
msg = ''' %s <br>
|
msg = ''' %s <br>
|
||||||
<table cellspacing= "5" cellpadding="5" >
|
<table cellspacing= "5" cellpadding="5" >
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan = 4><h4>Salary Slip</h4></td>
|
<td colspan = 4><h4>Salary Slip</h4></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan = 2><b>Employee Code : %s</b></td>
|
<td colspan = 2><b>Employee Code : %s</b></td>
|
||||||
<td colspan = 2><b>Employee Name : %s</b></td>
|
<td colspan = 2><b>Employee Name : %s</b></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>Month : %s</td>
|
<td>Month : %s</td>
|
||||||
<td>Year : %s</td>
|
<td>Year : %s</td>
|
||||||
<td colspan = 2>Fiscal Year : %s</td>
|
<td colspan = 2>Fiscal Year : %s</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>Department : %s</td>
|
<td>Department : %s</td>
|
||||||
<td>Branch : %s</td>
|
<td>Branch : %s</td>
|
||||||
<td colspan = 2>Designation : %s</td>
|
<td colspan = 2>Designation : %s</td>
|
||||||
|
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>Grade : %s</td>
|
<td>Grade : %s</td>
|
||||||
<td>Bank Account No. : %s</td>
|
<td>Bank Account No. : %s</td>
|
||||||
<td colspan = 2>Bank Name : %s</td>
|
<td colspan = 2>Bank Name : %s</td>
|
||||||
|
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>PF No. : %s</td>
|
<td>PF No. : %s</td>
|
||||||
<td>ESIC No. : %s</td>
|
<td>ESIC No. : %s</td>
|
||||||
<td colspan = 2>Arrear Amount : <b>%s</b></td>
|
<td colspan = 2>Arrear Amount : <b>%s</b></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>Total days in month : %s</td>
|
<td>Total days in month : %s</td>
|
||||||
<td>Leave Without Pay : %s</td>
|
<td>Leave Without Pay : %s</td>
|
||||||
<td colspan = 2>Payment days : %s</td>
|
<td colspan = 2>Payment days : %s</td>
|
||||||
|
|
||||||
</tr>
|
</tr>
|
||||||
<br><br>
|
<br><br>
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan = 2><b>Earning</b></td>
|
<td colspan = 2><b>Earning</b></td>
|
||||||
<td colspan = 2><b>Deduction</b></td>
|
<td colspan = 2><b>Deduction</b></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan = 2>%s</td>
|
<td colspan = 2>%s</td>
|
||||||
<td colspan = 2>%s</td>
|
<td colspan = 2>%s</td>
|
||||||
</tr>
|
</tr>
|
||||||
<br>
|
<br>
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan = 2><b>Gross Pay :</b> %s</td>
|
<td colspan = 2><b>Gross Pay :</b> %s</td>
|
||||||
<td colspan = 2><b>Total Deduction :</b> %s</td>
|
<td colspan = 2><b>Total Deduction :</b> %s</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><b>Net Pay : %s</b></td>
|
<td><b>Net Pay : %s</b></td>
|
||||||
<td colspan = 3><b>Net Pay (in words) : %s</b></td>
|
<td colspan = 3><b>Net Pay (in words) : %s</b></td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>'''%(cstr(letter_head[0][0]),cstr(self.doc.employee),self.doc.employee_name,cstr(self.doc.month),cstr(self.doc.year),cstr(self.doc.fiscal_year),self.doc.department,self.doc.branch,self.doc.designation,self.doc.grade,cstr(self.doc.bank_account_no),self.doc.bank_name,cstr(self.doc.pf_no),cstr(self.doc.esic_no),cstr(self.doc.arrear_amount),cstr(self.doc.total_days_in_month),cstr(self.doc.leave_without_pay),cstr(self.doc.payment_days),earn_table,ded_table,cstr(self.doc.gross_pay),cstr(self.doc.total_deduction),cstr(self.doc.net_pay),cstr(self.doc.net_pay_in_words))
|
</table>'''%(cstr(letter_head[0][0]),cstr(self.doc.employee),self.doc.employee_name,cstr(self.doc.month),cstr(self.doc.year),cstr(self.doc.fiscal_year),self.doc.department,self.doc.branch,self.doc.designation,self.doc.grade,cstr(self.doc.bank_account_no),self.doc.bank_name,cstr(self.doc.pf_no),cstr(self.doc.esic_no),cstr(self.doc.arrear_amount),cstr(self.doc.total_days_in_month),cstr(self.doc.leave_without_pay),cstr(self.doc.payment_days),earn_table,ded_table,cstr(self.doc.gross_pay),cstr(self.doc.total_deduction),cstr(self.doc.net_pay),cstr(self.doc.net_pay_in_words))
|
||||||
sendmail([receiver], sender='automail@webnotestech.com', subject=subj, parts=[['text/plain', msg]])
|
sendmail([receiver], sender='automail@webnotestech.com', subject=subj, parts=[['text/plain', msg]])
|
||||||
else:
|
else:
|
||||||
msgprint("Company Email ID not found.")
|
msgprint("Company Email ID not found.")
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
# REMEMBER to update this
|
# REMEMBER to update this
|
||||||
# ========================
|
# ========================
|
||||||
|
|
||||||
last_patch = 334
|
last_patch = 335
|
||||||
|
|
||||||
#-------------------------------------------
|
#-------------------------------------------
|
||||||
|
|
||||||
@ -1352,3 +1352,6 @@ def execute(patch_no):
|
|||||||
p.add_permission('Print Format', 'System Manager', 0, read = 1, write=1, create=1)
|
p.add_permission('Print Format', 'System Manager', 0, read = 1, write=1, create=1)
|
||||||
elif patch_no == 334:
|
elif patch_no == 334:
|
||||||
reload_doc('knowledge_base', 'doctype', 'answer')
|
reload_doc('knowledge_base', 'doctype', 'answer')
|
||||||
|
elif patch_no == 335:
|
||||||
|
for dt in ['Account', 'Cost Center', 'Territory', 'Item Group', 'Customer Group']:
|
||||||
|
sql("update `tabDocField` set fieldtype = 'Link', options = %s where fieldname = 'old_parent' and parent = %s", (dt, dt))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user