openerp-dev-web team mailing list archive
-
openerp-dev-web team
-
Mailing list archive
-
Message #05865
lp:~openerp-dev/openobject-addons/trunk-payroll-quantity_salary_rule-mtr into lp:~openerp-dev/openobject-addons/trunk-payroll
Meera Trambadia (OpenERP) has proposed merging lp:~openerp-dev/openobject-addons/trunk-payroll-quantity_salary_rule-mtr into lp:~openerp-dev/openobject-addons/trunk-payroll.
Requested reviews:
OpenERP R&D Team (openerp-dev)
For more details, see:
https://code.launchpad.net/~openerp-dev/openobject-addons/trunk-payroll-quantity_salary_rule-mtr/+merge/58932
hr_payroll:-
*added a field 'quantity' on salary rule object.
*modified computation engine.
*improved demo data.
--
https://code.launchpad.net/~openerp-dev/openobject-addons/trunk-payroll-quantity_salary_rule-mtr/+merge/58932
Your team OpenERP R&D Team is requested to review the proposed merge of lp:~openerp-dev/openobject-addons/trunk-payroll-quantity_salary_rule-mtr into lp:~openerp-dev/openobject-addons/trunk-payroll.
=== modified file 'hr_payroll/hr_payroll.py'
--- hr_payroll/hr_payroll.py 2011-04-12 17:01:28 +0000
+++ hr_payroll/hr_payroll.py 2011-04-25 07:29:31 +0000
@@ -500,6 +500,7 @@
for rule in self.pool.get('hr.salary.rule').browse(cr, uid, sorted_rule_ids, context=context):
key = rule.code + '-' + str(contract.id)
localdict['result'] = None
+ localdict.update({'quantity': rule.quantity or None})
#check if the rule can be applied
if self.pool.get('hr.salary.rule').satisfy_condition(cr, uid, rule.id, localdict, context=context) and rule.id not in blacklist:
#compute the amount of the rule
@@ -532,10 +533,12 @@
'register_id': rule.register_id.id,
'total': amount,
'employee_id': contract.employee_id.id,
+ 'quantity': rule.quantity,
}
else:
#blacklist this rule and its children
blacklist += [id for id, seq in self.pool.get('hr.salary.rule')._recursive_search_of_rules(cr, uid, [rule], context=context)]
+
result = [value for code, value in result_dict.items()]
return result
@@ -640,6 +643,7 @@
'name':fields.char('Name', size=256, required=True, readonly=False),
'code':fields.char('Code', size=64, required=True),
'sequence': fields.integer('Sequence', required=True, help='Use to arrange calculation sequence'),
+ 'quantity': fields.char('Quantity', size=256),
'category_id':fields.many2one('hr.salary.head', 'Salary Head', required=True),
'active':fields.boolean('Active', help="If the active field is set to false, it will allow you to hide the salary rule without removing it."),
'appears_on_payslip': fields.boolean('Appears on Payslip', help="Used for the display of rule on payslip"),
@@ -711,6 +715,7 @@
'amount_select': 'fix',
'amount_fix': 0.0,
'amount_percentage': 0.0,
+ 'quantity': 1,
}
def _recursive_search_of_rules(self, cr, uid, rule_ids, context=None):
@@ -733,10 +738,14 @@
"""
rule = self.browse(cr, uid, rule_id, context=context)
if rule.amount_select == 'fix':
- return rule.amount_fix
+ try:
+ return rule.amount_fix * eval(rule.quantity, localdict)
+ except:
+ raise osv.except_osv(_('Error'), _('Wrong quantity defined for salary rule %s (%s)')% (rule.name, rule.code))
elif rule.amount_select == 'percentage':
try:
- return rule.amount_percentage * eval(rule.amount_percentage_base, localdict) / 100
+ amount = rule.amount_percentage * eval(rule.amount_percentage_base, localdict) / 100
+ return amount * eval(rule.quantity, localdict)
except:
raise osv.except_osv(_('Error'), _('Wrong percentage base defined for salary rule %s (%s)')% (rule.name, rule.code))
else:
=== modified file 'hr_payroll/hr_payroll_demo.xml'
--- hr_payroll/hr_payroll_demo.xml 2011-04-12 17:01:28 +0000
+++ hr_payroll/hr_payroll_demo.xml 2011-04-25 07:29:31 +0000
@@ -12,6 +12,7 @@
<field name="category_id" ref="hr_payroll.ALW"/>
<field name="name">House Rent Allowance</field>
<field name="sequence" eval="5"/>
+ <field name="quantity">1</field>
</record>
<record id="hr_payslip_line_convanceallowance1" model="hr.salary.rule">
@@ -21,6 +22,7 @@
<field name="category_id" ref="hr_payroll.ALW"/>
<field name="name">Conveyance Allowance</field>
<field name="sequence" eval="10"/>
+ <field name="quantity">1</field>
</record>
<record id="hr_payslip_line_professionaltax1" model="hr.salary.rule">
@@ -30,6 +32,7 @@
<field name="code">PT</field>
<field name="category_id" ref="hr_payroll.DED"/>
<field name="name">Professional Tax</field>
+ <field name="quantity">1</field>
</record>
<record id="hr_payslip_line_providentfund1" model="hr.salary.rule">
@@ -40,6 +43,7 @@
<field name="code">PF</field>
<field name="category_id" ref="hr_payroll.DED"/>
<field name="name">Provident Fund</field>
+ <field name="quantity">1</field>
</record>
<record id="hr_salary_rule_ca_paolino" model="hr.salary.rule">
@@ -49,11 +53,13 @@
<field name="category_id" ref="hr_payroll.ALW"/>
<field name="name">Conveyance Allowance For Paolino</field>
<field name="sequence" eval="15"/>
+ <field name="quantity">1</field>
</record>
<record id="hr_salary_rule_meal_voucher" model="hr.salary.rule">
- <field name="amount_select">code</field>
- <field name="amount_python_compute">result = worked_days['WORK100']['number_of_days'] * 1</field>
+ <field name="amount_select">fix</field>
+ <field eval="1" name="amount_fix"/>
+ <field name="quantity">worked_days['WORK100']['number_of_days']</field>
<field name="code">MA</field>
<field name="category_id" ref="hr_payroll.ALW"/>
<field name="name">Meal Voucher</field>
=== modified file 'hr_payroll/hr_payroll_view.xml'
--- hr_payroll/hr_payroll_view.xml 2011-04-12 17:01:28 +0000
+++ hr_payroll/hr_payroll_view.xml 2011-04-25 07:29:31 +0000
@@ -546,7 +546,8 @@
<field name="condition_range_min" colspan="2" attrs="{'invisible':[('condition_select','<>','range')], 'required':[('condition_select','=','range')]}"/>
<field name="condition_range_max" colspan="2" attrs="{'invisible':[('condition_select','<>','range')], 'required':[('condition_select','=','range')]}"/>
<separator colspan="4" string="Computation"/>
- <field name="amount_select"/><newline/>
+ <field name="amount_select"/>
+ <field name="quantity" attrs="{'invisible':[('amount_select','=','code')]}"/><newline/>
<field name="amount_fix" attrs="{'invisible':[('amount_select','<>','fix')], 'required':[('amount_select','=','fix')]}"/>
<field colspan="4" name="amount_python_compute" attrs="{'invisible':[('amount_select','<>','code')], 'required':[('amount_select','=','code')]}"/>
<field name="amount_percentage_base" attrs="{'invisible':[('amount_select','<>','percentage')], 'required': [('amount_select','=','percentage')]}"/>
Follow ups