From c472eaafbcb868b9fad4a5f7d0c0fd1372c40db9 Mon Sep 17 00:00:00 2001 From: mtr Date: Fri, 1 Apr 2011 19:02:26 +0530 Subject: [PATCH] [IMP] hr_payroll:improved code to calculate total_payment using 'NET' rule bzr revid: mtr@mtr-20110401133226-pbhv7xbr5n7bwwji --- addons/hr_payroll/hr_payroll.py | 67 ++++++++++++++++++++++++++++++--- 1 file changed, 62 insertions(+), 5 deletions(-) diff --git a/addons/hr_payroll/hr_payroll.py b/addons/hr_payroll/hr_payroll.py index 9d16a4dc87e..7fae641a2d5 100644 --- a/addons/hr_payroll/hr_payroll.py +++ b/addons/hr_payroll/hr_payroll.py @@ -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,