[IMP] hr_payroll: improved code

bzr revid: mtr@mtr-20110330084832-t4iuqxrl2l2le3b9
This commit is contained in:
mtr
2011-03-30 14:18:32 +05:30
parent b8bdd54fe1
commit 8663c434a4
+154 -104
View File
@@ -751,7 +751,18 @@ class hr_payslip(osv.osv):
obj = {'basic': contract.wage}
for line in rules:
cd = line.code
obj[cd] = line.amount or 0.0
base = line.computational_expression
amt = eval(base, obj)
if line.amount_type == 'per':
al = line.amount * amt
obj[cd] = al
elif line.amount_type == 'code':
localdict = {'basic': amt, 'employee': slip.employee_id, 'contract': contract}
exec line.python_compute in localdict
val = localdict['result']
obj[cd] = val
else:
obj[cd] = line.amount or 0.0
for line in rules:
if line.category_id.code in ad:
@@ -777,34 +788,34 @@ class hr_payslip(osv.osv):
raise osv.except_osv(_('Variable Error !'), _('Variable Error: %s ') % (e))
if line.amount_type == 'per':
try:
if line.child_depend == False:
if line.parent_rule_id:
for rul in [line.parent_rule_id]:
val = rul.amount * amt
amt = val
value = line.amount * amt
if line.condition_range_min or line.condition_range_max:
if ((value < line.condition_range_min) or (value > line.condition_range_max)):
value = 0.0
else:
value = value
# if line.child_depend == False:
if line.parent_rule_id:
for rul in [line.parent_rule_id]:
val = rul.amount * amt
amt = val
value = line.amount * amt
if line.condition_range_min or line.condition_range_max:
if ((value < line.condition_range_min) or (value > line.condition_range_max)):
value = 0.0
else:
value = value
else:
value = value
except Exception, e:
raise osv.except_osv(_('Variable Error !'), _('Variable Error: %s ') % (e))
elif line.amount_type == 'fix':
if line.child_depend == False:
if line.parent_rule_id:
for rul in [line.parent_rule_id]:
value = value
if line.condition_range_min or line.condition_range_max:
if ((line.amount < line.condition_range_min) or (line.amount > line.condition_range_max)):
value = value
else:
value = line.amount
# if line.child_depend == False:
if line.parent_rule_id:
for rul in [line.parent_rule_id]:
value = value
if line.condition_range_min or line.condition_range_max:
if ((line.amount < line.condition_range_min) or (line.amount > line.condition_range_max)):
value = value
else:
value = line.amount
else:
value = line.amount
elif line.amount_type=='code':
localdict = {'basic': amt, 'employee': slip.employee_id, 'contract': contract}
exec line.python_compute in localdict
@@ -824,15 +835,11 @@ class hr_payslip(osv.osv):
'base': line.computational_expression
}
if line.appears_on_payslip:
if line.parent_rule_id:
for l in salary_rule_pool.browse(cr, uid, [line.parent_rule_id.id], context=context):
if line.condition_range_min or line.condition_range_max:
if not ((value < line.condition_range_min) or (value > line.condition_range_max)):
slip_line_pool.create(cr, uid, vals, {})
else:
if line.condition_range_min or line.condition_range_max:
if not ((value < line.condition_range_min) or (value > line.condition_range_max)):
slip_line_pool.create(cr, uid, vals, {})
else:
slip_line_pool.create(cr, uid, vals, {})
slip_line_pool.create(cr, uid, vals, {})
basic = contract.wage
number = sequence_obj.get(cr, uid, 'salary.slip')
@@ -902,22 +909,66 @@ class hr_payslip(osv.osv):
raise osv.except_osv(_('Variable Error !'), _('Variable Error: %s ') % (e))
if salary_rule.amount_type == 'per':
try:
# if salary_rule.child_depend == False:
if salary_rule.parent_rule_id:
for rul in [salary_rule.parent_rule_id]:
val = rul.amount * amt
amt = val
value = salary_rule.amount * amt * days
if salary_rule.condition_select == 'range':
if salary_rule.condition_range_min or salary_rule.condition_range_max:
if ((value < salary_rule.condition_range_min) or (value > salary_rule.condition_range_max)):
value = 0.0
else:
value = value
else:
value = value
except Exception, e:
raise osv.except_osv(_('Variable Error !'), _('Variable Error: %s ') % (e))
elif salary_rule.amount_type == 'fix':
value = salary_rule.amount * days
elif salary_rule.amount_type=='code':
# if salary_rule.child_depend == False:
if salary_rule.parent_rule_id:
for rul in [salary_rule.parent_rule_id]:
value = salary_rule.amount * days
elif salary_rule.condition_select == 'range':
if salary_rule.condition_range_min or salary_rule.condition_range_max:
if ((salary_rule.amount < salary_rule.condition_range_min) or (salary_rule.amount > salary_rule.condition_range_max)):
value = 0.0
else:
value = salary_rule.amount * days
else:
value = salary_rule.amount * days
elif salary_rule.amount_type == 'code':
localdict = {'basic': amt, 'employee': slip.employee_id, 'contract': contract}
exec salary_rule.python_compute in localdict
value = localdict['result'] * days
val = localdict['result'] * days
# if salary_rule.child_depend == False:
if salary_rule.parent_rule_id:
for rul in [salary_rule.parent_rule_id]:
value = val
if salary_rule.condition_select == 'range':
if salary_rule.condition_range_min or salary_rule.condition_range_max:
if ((salary_rule.amount < salary_rule.condition_range_min) or (salary_rule.amount > salary_rule.condition_range_max)):
value = value
else:
value = val
else:
value = val
res['amount'] = salary_rule.amount
res['type'] = salary_rule.type.id
leave += days
total += value
res['total'] = value
if salary_rule.appears_on_payslip:
if salary_rule.condition_range_min or salary_rule.condition_range_max:
if not ((value < salary_rule.condition_range_min) or (value > salary_rule.condition_range_max)):
slip_line_pool.create(cr, uid, res, context=context)
else:
slip_line_pool.create(cr, uid, res, context=context)
slip_line_pool.create(cr, uid, res, context=context)
holiday_pool.write(cr, uid, leave_ids, {'payslip_id': slip.id}, context=context)
basic = basic - total
update.update({
@@ -1034,53 +1085,53 @@ class hr_payslip(osv.osv):
raise osv.except_osv(_('Variable Error !'), _('Variable Error: %s ') % (e))
if line.amount_type == 'per':
try:
if line.child_depend == False:
if line.parent_rule_id:
for rul in [line.parent_rule_id]:
val = rul.amount * amt
amt = val
value = line.amount * amt
if line.condition_select == 'range':
if line.condition_range_min or line.condition_range_max:
if ((value < line.condition_range_min) or (value > line.condition_range_max)):
value = 0.0
else:
value = value
else:
value = value
# if line.child_depend == False:
if line.parent_rule_id:
for rul in [line.parent_rule_id]:
val = rul.amount * amt
amt = val
value = line.amount * amt
if line.condition_select == 'range':
if line.condition_range_min or line.condition_range_max:
if ((value < line.condition_range_min) or (value > line.condition_range_max)):
value = 0.0
else:
value = value
else:
value = value
except Exception, e:
raise osv.except_osv(_('Variable Error !'), _('Variable Error: %s ') % (e))
elif line.amount_type == 'fix':
if line.child_depend == False:
if line.parent_rule_id:
for rul in [line.parent_rule_id]:
# if line.child_depend == False:
if line.parent_rule_id:
for rul in [line.parent_rule_id]:
value = value
if line.condition_select == 'range':
if line.condition_range_min or line.condition_range_max:
if ((line.amount < line.condition_range_min) or (line.amount > line.condition_range_max)):
value = value
if line.condition_select == 'range':
if line.condition_range_min or line.condition_range_max:
if ((line.amount < line.condition_range_min) or (line.amount > line.condition_range_max)):
value = value
else:
value = line.amount
else:
else:
value = line.amount
else:
value = line.amount
elif line.amount_type=='code':
localdict = {'basic':amt, 'employee':employee_id, 'contract':contract}
exec line.python_compute in localdict
val = localdict['result']
if line.child_depend == False:
if line.parent_rule_id:
for rul in [line.parent_rule_id]:
value = val
if line.condition_select == 'range':
if line.condition_range_min or line.condition_range_max:
if ((line.amount < line.condition_range_min) or (line.amount > line.condition_range_max)):
value = value
else:
value = val
else:
# if line.child_depend == False:
if line.parent_rule_id:
for rul in [line.parent_rule_id]:
value = val
if line.condition_select == 'range':
if line.condition_range_min or line.condition_range_max:
if ((line.amount < line.condition_range_min) or (line.amount > line.condition_range_max)):
value = value
else:
value = val
else:
value = val
total += value
vals = {
'category_id': line.category_id.id,
@@ -1177,54 +1228,53 @@ class hr_payslip(osv.osv):
raise osv.except_osv(_('Variable Error !'), _('Variable Error: %s ') % (e))
if salary_rule.amount_type == 'per':
try:
if salary_rule.child_depend == False:
if salary_rule.parent_rule_id:
for rul in [line.parent_rule_id]:
val = rul.amount * amt
amt = val
value = salary_rule.amount * amt * days
if line.condition_select == 'range':
if salary_rule.condition_range_min or salary_rule.condition_range_max:
if ((value < salary_rule.condition_range_min) or (value > salary_rule.condition_range_max)):
value = 0.0
else:
value = value
else:
value = value
# if salary_rule.child_depend == False:
if salary_rule.parent_rule_id:
for rul in [salary_rule.parent_rule_id]:
val = rul.amount * amt
amt = val
value = salary_rule.amount * amt * days
if salary_rule.condition_select == 'range':
if salary_rule.condition_range_min or salary_rule.condition_range_max:
if ((value < salary_rule.condition_range_min) or (value > salary_rule.condition_range_max)):
value = 0.0
else:
value = value
else:
value = value
except Exception, e:
raise osv.except_osv(_('Variable Error !'), _('Variable Error: %s ') % (e))
elif salary_rule.amount_type == 'fix':
if salary_rule.child_depend == False:
if salary_rule.parent_rule_id:
for rul in [salary_rule.parent_rule_id]:
value = salary_rule.amount * days
if line.condition_select == 'range':
if salary_rule.condition_range_min or salary_rule.condition_range_max:
if ((salary_rule.amount < salary_rule.condition_range_min) or (salary_rule.amount > salary_rule.condition_range_max)):
value = 0.0
else:
value = salary_rule.amount * days
else:
# if salary_rule.child_depend == False:
if salary_rule.parent_rule_id:
for rul in [salary_rule.parent_rule_id]:
value = salary_rule.amount * days
if salary_rule.condition_select == 'range':
if salary_rule.condition_range_min or salary_rule.condition_range_max:
if ((salary_rule.amount < salary_rule.condition_range_min) or (salary_rule.amount > salary_rule.condition_range_max)):
value = 0.0
else:
value = salary_rule.amount * days
else:
value = salary_rule.amount * days
elif salary_rule.amount_type=='code':
localdict = {'basic':amt, 'employee':employee_id, 'contract':contract_id}
exec salary_rule.python_compute in localdict
val = localdict['result'] * days
if salary_rule.child_depend == False:
if salary_rule.parent_rule_id:
for rul in [salary_rule.parent_rule_id]:
value = val
if line.condition_select == 'range':
if salary_rule.condition_range_min or salary_rule.condition_range_max:
if ((salary_rule.amount < salary_rule.condition_range_min) or (salary_rule.amount > salary_rule.condition_range_max)):
value = value
else:
value = val
else:
# if salary_rule.child_depend == False:
if salary_rule.parent_rule_id:
for rul in [salary_rule.parent_rule_id]:
value = val
if salary_rule.condition_select == 'range':
if salary_rule.condition_range_min or salary_rule.condition_range_max:
if ((salary_rule.amount < salary_rule.condition_range_min) or (salary_rule.amount > salary_rule.condition_range_max)):
value = value
else:
value = val
else:
value = val
res['amount'] = salary_rule.amount
res['type'] = salary_rule.type.id
leave += days