[IMP] hr_payroll:improved code to calculate total_payment using 'NET' rule

bzr revid: mtr@mtr-20110401133226-pbhv7xbr5n7bwwji
This commit is contained in:
mtr 2011-04-01 19:02:26 +05:30
parent a5cacc1ff7
commit c472eaafbc
1 changed files with 62 additions and 5 deletions

View File

@ -712,7 +712,7 @@ class hr_payslip(osv.osv):
resource_attendance_pool = self.pool.get('resource.calendar.attendance')
if context is None:
context = {}
for slip in self.browse(cr, uid, ids, context=context):
old_slip_ids = slip_line_pool.search(cr, uid, [('slip_id', '=', slip.id)], context=context)
if old_slip_ids:
@ -737,6 +737,8 @@ class hr_payslip(osv.osv):
})
self.write(cr, uid, [slip.id], update, context=context)
continue
net_allow = 0.0
net_deduct = 0.0
for contract in contracts:
sal_structure = []
rules = []
@ -838,7 +840,10 @@ class hr_payslip(osv.osv):
value = val
else:
value = val
if value < 0:
net_deduct += value
else:
net_allow += value
total += value
vals = {
'slip_id': slip.id,
@ -965,7 +970,10 @@ class hr_payslip(osv.osv):
value = val
else:
value = val
if value < 0:
net_deduct += value
else:
net_allow += value
res['amount'] = salary_rule.amount
res['type'] = salary_rule.type.id
leave += days
@ -980,6 +988,26 @@ class hr_payslip(osv.osv):
holiday_pool.write(cr, uid, leave_ids, {'payslip_id': slip.id}, context=context)
basic = basic - total
net_id = salary_rule_pool.search(cr, uid, [('code', '=', 'NET')])
for line in salary_rule_pool.browse(cr, uid, net_id, context=context):
dic = {'basic': amt, 'allowance': net_allow, 'deduction': net_deduct}
exec line.python_compute in dic
tot = dic['total']
vals = {
'slip_id': slip.id,
'category_id': line.category_id.id,
'name': line.name,
'sequence': line.sequence,
'type': line.type.id,
'code': line.code,
'amount_type': line.amount_type,
'amount': line.amount,
'total': tot,
'employee_id': slip.employee_id.id,
'base': line.computational_expression
}
slip_line_pool.create(cr, uid, vals, context=context)
number = sequence_obj.get(cr, uid, 'salary.slip')
update.update({
'number': number,
@ -1049,6 +1077,8 @@ class hr_payslip(osv.osv):
final_total = 0.0
all_basic = 0.0
net_allow = 0.0
net_deduct = 0.0
for contract in contracts:
lines = []
rules = []
@ -1154,6 +1184,10 @@ class hr_payslip(osv.osv):
value = val
else:
value = val
if value < 0:
net_deduct += value
else:
net_allow += value
total += value
vals = {
'category_id': line.category_id.id,
@ -1174,7 +1208,7 @@ class hr_payslip(osv.osv):
update['value']['line_ids'].append(vals)
else:
update['value']['line_ids'].append(vals)
basic = contract.wage
all_basic += basic
final_total += basic + total
@ -1298,6 +1332,10 @@ class hr_payslip(osv.osv):
value = val
else:
value = val
if value < 0:
net_deduct += value
else:
net_allow += value
res['amount'] = salary_rule.amount
res['type'] = salary_rule.type.id
leave += days
@ -1309,7 +1347,26 @@ class hr_payslip(osv.osv):
update['value']['line_ids'].append(res)
else:
update['value']['line_ids'].append(res)
net_id = salary_rule_pool.search(cr, uid, [('code', '=', 'NET')])
for line in salary_rule_pool.browse(cr, uid, net_id, context=context):
dic = {'basic': amt, 'allowance': net_allow, 'deduction': net_deduct}
exec line.python_compute in dic
tot = dic['total']
vals = {
'category_id': line.category_id.id,
'name': line.name,
'sequence': line.sequence,
'type': line.type.id,
'code': line.code,
'amount_type': line.amount_type,
'amount': line.amount,
'total': tot,
'employee_id': employee_id.id,
'base': line.computational_expression
}
update['value']['line_ids'].append(vals)
number = sequence_obj.get(cr, uid, 'salary.slip')
update['value'].update({
'number': number,