← Back to team overview

openerp-dev-web team mailing list archive

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:
  Mustufa Rangwala (Open ERP) (mra-tinyerp)

For more details, see:
https://code.launchpad.net/~openerp-dev/openobject-addons/trunk-payroll-quantity_salary_rule-mtr/+merge/58944

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/58944
Your team OpenERP R&D Team is subscribed to branch 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 09:57:30 +0000
@@ -532,10 +532,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 +642,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, help="It is used in computation for percentage and fixed amount.For e.g. A rule for Meal Voucher having fixed amount of 1€ can have its quantity defined in expression like worked_days['WORK100']['number_of_days']."),
         '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 +714,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 +737,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 09:57:30 +0000
@@ -52,8 +52,9 @@
         </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 09:57:30 +0000
@@ -546,7 +546,8 @@
                                 <field name="condition_range_min" colspan="2" attrs="{'invisible':[('condition_select','&lt;&gt;','range')], 'required':[('condition_select','=','range')]}"/>
                                 <field name="condition_range_max" colspan="2" attrs="{'invisible':[('condition_select','&lt;&gt;','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')], 'required':[('amount_select','!=','code')]}"/><newline/>
                                 <field name="amount_fix"  attrs="{'invisible':[('amount_select','&lt;&gt;','fix')], 'required':[('amount_select','=','fix')]}"/>
                                 <field colspan="4" name="amount_python_compute" attrs="{'invisible':[('amount_select','&lt;&gt;','code')], 'required':[('amount_select','=','code')]}"/>
 				<field name="amount_percentage_base" attrs="{'invisible':[('amount_select','&lt;&gt;','percentage')], 'required': [('amount_select','=','percentage')]}"/>


Follow ups