← Back to team overview

openerp-dev-web team mailing list archive

lp:~openerp-dev/openobject-addons/trunk-payroll-worked_days-psi into lp:~openerp-dev/openobject-addons/trunk-payroll

 

Purnendu Singh (OpenERP) has proposed merging lp:~openerp-dev/openobject-addons/trunk-payroll-worked_days-psi 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-worked_days-psi/+merge/60344

Hello,


 -> Renamed hr.payslip.input to hr.payslip.worked_days

 -> Added a new one2many: input data (same as worked days) object name is hr.payslip.input

 -> Added a new one2many in the workde_days tab, and it is quiete similar to hr.payslip.worked_days except it has quantity isntead of nb_hours and nb_days

  -> on salary rules, add a o2m editable with (input name, input code) that will fill the input data o2m on payslips

Thanks and regards,
Purnendu Singh
-- 
https://code.launchpad.net/~openerp-dev/openobject-addons/trunk-payroll-worked_days-psi/+merge/60344
Your team OpenERP R&D Team is requested to review the proposed merge of lp:~openerp-dev/openobject-addons/trunk-payroll-worked_days-psi into lp:~openerp-dev/openobject-addons/trunk-payroll.
=== modified file 'hr_payroll/hr_payroll.py'
--- hr_payroll/hr_payroll.py	2011-04-28 13:08:48 +0000
+++ hr_payroll/hr_payroll.py	2011-05-09 08:58:29 +0000
@@ -249,6 +249,7 @@
 #        'line_ids': fields.one2many('hr.payslip.line', 'slip_id', 'Payslip Line', required=False, readonly=True, states={'draft': [('readonly', False)]}),
         'line_ids': one2many_mod2('hr.payslip.line', 'slip_id', 'Payslip Line',readonly=True, states={'draft':[('readonly',False)]}),
         'company_id': fields.many2one('res.company', 'Company', required=False, readonly=True, states={'draft': [('readonly', False)]}),
+        'worked_days_line_ids': fields.one2many('hr.payslip.worked_days', 'payslip_id', 'Payslip Worked Days', required=False, readonly=True, states={'draft': [('readonly', False)]}),
         'input_line_ids': fields.one2many('hr.payslip.input', 'payslip_id', 'Payslip Inputs', required=False, readonly=True, states={'draft': [('readonly', False)]}),
         'paid': fields.boolean('Made Payment Order ? ', required=False, readonly=True, states={'draft': [('readonly', False)]}),
         'note': fields.text('Description'),
@@ -415,7 +416,7 @@
             self.write(cr, uid, [payslip.id], {'line_ids': lines}, context=context)
         return True
 
-    def get_input_lines(self, cr, uid, contract_ids, date_from, date_to, context=None):
+    def get_worked_day_lines(self, cr, uid, contract_ids, date_from, date_to, context=None):
         """
         @param contract_ids: list of contract id
         @return: returns a list of dict containing the input that should be applied for the given contract between date_from and date_to
@@ -472,6 +473,28 @@
             res += [attendances] + leaves
         return res
 
+    def get_input_lines(self, cr, uid, contract_ids, date_from, date_to, context=None):
+        res = []
+        contract_obj = self.pool.get('hr.contract')
+        rule_obj = self.pool.get('hr.salary.rule')
+
+        structure_ids = contract_obj.get_all_structures(cr, uid, contract_ids, context=context)
+        rule_ids = self.pool.get('hr.payroll.structure').get_all_rules(cr, uid, structure_ids, context=context)
+        sorted_rule_ids = [id for id, sequence in sorted(rule_ids, key=lambda x:x[1])]
+
+        for contract in contract_obj.browse(cr, uid, contract_ids, context=context):
+            for rule in rule_obj.browse(cr, uid, sorted_rule_ids, context=context):
+                if rule.input_ids:
+                    for input in rule.input_ids:
+                        inputs = {
+                             'name': input.name,
+                             'sequence': 5,
+                             'code': input.code,
+                             'contract_id': contract.id,
+                        }
+                        res += [inputs]
+        return res
+
     def get_payslip_lines(self, cr, uid, contract_ids, payslip_id, context):
         def _sum_salary_head(localdict, head, amount):
             if head.parent_id:
@@ -485,9 +508,12 @@
         obj_rule = self.pool.get('hr.salary.rule')
         payslip = self.pool.get('hr.payslip').browse(cr, uid, payslip_id, context=context)
         worked_days = {}
+        for worked_days_line in payslip.worked_days_line_ids:
+            worked_days[worked_days_line.code] = worked_days_line
+        input_lines = {}
         for input_line in payslip.input_line_ids:
-            worked_days[input_line.code] = input_line
-        localdict = {'heads': {}, 'payslip': payslip, 'worked_days': worked_days}
+            input_lines[input_line.code] = input_line
+        localdict = {'heads': {}, 'payslip': payslip, 'worked_days': worked_days, 'input_lines': input_lines}
         #get the ids of the structures on the contracts and their parent id as well
         structure_ids = self.pool.get('hr.contract').get_all_structures(cr, uid, contract_ids, context=context)
         #get the rules of the structure and thier children
@@ -545,15 +571,22 @@
     def onchange_employee_id(self, cr, uid, ids, date_from, date_to, employee_id=False, contract_id=False, context=None):
         empolyee_obj = self.pool.get('hr.employee')
         contract_obj = self.pool.get('hr.contract')
+        worked_days_obj = self.pool.get('hr.payslip.worked_days')
         input_obj = self.pool.get('hr.payslip.input')
 
         if context is None:
             context = {}
+        #delete old worked days lines
+        old_worked_days_ids = ids and worked_days_obj.search(cr, uid, [('payslip_id', '=', ids[0])], context=context) or False
+        if old_worked_days_ids:
+            worked_days_obj.unlink(cr, uid, old_worked_days_ids, context=context)
+
         #delete old input lines
         old_input_ids = ids and input_obj.search(cr, uid, [('payslip_id', '=', ids[0])], context=context) or False
         if old_input_ids:
             input_obj.unlink(cr, uid, old_input_ids, context=context)
 
+
         #defaults
         res = {'value':{
                       'line_ids':[],
@@ -593,8 +626,10 @@
                     return res
 
         #computation of the salary input
+        worked_days_line_ids = self.get_worked_day_lines(cr, uid, contract_ids, date_from, date_to, context=context)
         input_line_ids = self.get_input_lines(cr, uid, contract_ids, date_from, date_to, context=context)
         res['value'].update({
+                    'worked_days_line_ids': worked_days_line_ids,
                     'input_line_ids': input_line_ids,
             })
         return res
@@ -614,6 +649,28 @@
 
 hr_payslip()
 
+class hr_payslip_worked_days(osv.osv):
+    '''
+    Payslip Worked Days
+    '''
+
+    _name = 'hr.payslip.worked_days'
+    _description = 'Payslip Worked Days'
+    _columns = {
+        'name': fields.char('Description', size=256, required=True),
+        'payslip_id': fields.many2one('hr.payslip', 'Pay Slip', required=True),
+        'sequence': fields.integer('Sequence', required=True,),
+        'code': fields.char('Code', size=52, required=True, help="The code that can be used in the salary rules"),
+        'number_of_days': fields.float('Number of Days'),
+        'number_of_hours': fields.float('Number of Hours'),
+        'contract_id': fields.many2one('hr.contract', 'Contract', required=True, help="The contract for which applied this input"),
+    }
+    _order = 'payslip_id, sequence'
+    _defaults = {
+        'sequence': 10,
+    }
+hr_payslip_worked_days()
+
 class hr_payslip_input(osv.osv):
     '''
     Payslip Input
@@ -626,13 +683,13 @@
         'payslip_id': fields.many2one('hr.payslip', 'Pay Slip', required=True),
         'sequence': fields.integer('Sequence', required=True,),
         'code': fields.char('Code', size=52, required=True, help="The code that can be used in the salary rules"),
-        'number_of_days': fields.float('Number of Days'),
-        'number_of_hours': fields.float('Number of Hours'),
+        'quantity': fields.float('Quantity'),
         'contract_id': fields.many2one('hr.contract', 'Contract', required=True, help="The contract for which applied this input"),
     }
-    _order = 'payslip_id,sequence'
+    _order = 'payslip_id, sequence'
     _defaults = {
         'sequence': 10,
+        'quantity': 0.0,
     }
 hr_payslip_input()
 
@@ -674,6 +731,7 @@
             help="Contribution register based on company",
             required=False
         ),
+        'input_ids': fields.one2many('hr.rule.input', 'input_id', 'Inputs'),
         'note':fields.text('Description'),
      }
     _defaults = {
@@ -780,6 +838,21 @@
 
 hr_salary_rule()
 
+class hr_rule_input(osv.osv):
+    '''
+    Salary Rule Input
+    '''
+
+    _name = 'hr.rule.input'
+    _description = 'Salary Rule Input'
+    _columns = {
+        'name': fields.char('Description', size=256, required=True),
+        'code': fields.char('Code', size=52, required=True, help="The code that can be used in the salary rules"),
+        'input_id': fields.many2one('hr.salary.rule', 'Salary Rule Input', required=True)
+    }
+
+hr_rule_input()
+
 class hr_payslip_line(osv.osv):
     '''
     Payslip Line

=== modified file 'hr_payroll/hr_payroll_view.xml'
--- hr_payroll/hr_payroll_view.xml	2011-05-03 09:12:02 +0000
+++ hr_payroll/hr_payroll_view.xml	2011-05-09 08:58:29 +0000
@@ -186,8 +186,8 @@
             <field name="arch" type="xml">
                 <search string="Search Payslip Lines">
                     <group col="8" colspan="4">
-                    	<field name="name"/>
-                    	<field name="code"/>
+                        <field name="name"/>
+                        <field name="code"/>
                         <field name="slip_id"/>
                         <field name="amount_select"/>
                     </group>
@@ -249,18 +249,18 @@
                                 </tree>
                                 <form string="Payslip Line">
                                     <group>
-	                                    <field name="name" select="1"/>
-	                                    <field name="code" select="1"/>
-	                                    <field name="category_id"/>
-	                                    <field name="sequence" groups="base.group_extended"/>
-	                                    <field name="total"/>
-	                                    <field name="salary_rule_id" groups="base.group_extended"/>
+                                        <field name="name" select="1"/>
+                                        <field name="code" select="1"/>
+                                        <field name="category_id"/>
+                                        <field name="sequence" groups="base.group_extended"/>
+                                        <field name="total"/>
+                                        <field name="salary_rule_id" groups="base.group_extended"/>
                                     </group>
                                 </form>
                             </field>
                         </page>
 <!-- TODO: put me back -->
-	                    <page string="Details By Salary Head">
+                        <page string="Details By Salary Head">
                             <field name="details_by_salary_head" context="{'group_by':'category_id'}" domain="[('appears_on_payslip', '=', True)]" nolabel="1">
                                 <tree string="Payslip Lines" colors="blue:total == 0">
                                     <field name="category_id"/>
@@ -272,7 +272,7 @@
                        </page>
 
                        <page string="Worked Days">
-                            <field name="input_line_ids" colspan="4" nolabel="1" mode="tree">
+                            <field name="worked_days_line_ids" colspan="4" nolabel="1" mode="tree">
                                 <tree string="Worked Days" editable="bottom">
                                     <field name="name"/>
                                     <field name="code"/>
@@ -282,6 +282,15 @@
                                     <field name="sequence" invisible="True"/>
                                 </tree>
                             </field>
+                            <field name="input_line_ids" colspan="4" nolabel="1" mode="tree">
+                                <tree string="Input Data" editable="bottom">
+                                    <field name="name"/>
+                                    <field name="code"/>
+                                    <field name="quantity"/>
+                                    <field name="contract_id" groups="base.group_extended"/>
+                                    <field name="sequence" invisible="True"/>
+                                </tree>
+                            </field>
                        </page>
 
                        <page string="Other Information">
@@ -533,17 +542,25 @@
                                 <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')]}"/>
+                                <field name="amount_percentage_base" attrs="{'invisible':[('amount_select','&lt;&gt;','percentage')], 'required': [('amount_select','=','percentage')]}"/>
                                 <field name="amount_percentage" attrs="{'invisible':[('amount_select','&lt;&gt;','percentage')], 'required':[('amount_select','=','percentage')]}"/>
                                 <separator colspan="4" string="Company contribution"/>
                                 <field name="register_id"/>
                             </group>
                     </page>
                     <page string="Child Rules">
-		       <field name="parent_rule_id"/>
+                       <field name="parent_rule_id"/>
                        <separator colspan="4" string="Children definition"/>
                        <field colspan="4" name="child_ids" nolabel="1"/>
                     </page>
+                       <page string="Inputs">
+                            <field name="input_ids" colspan="4" nolabel="1" mode="tree">
+                                <tree string="Input Data" editable="bottom">
+                                    <field name="name"/>
+                                    <field name="code"/>
+                                </tree>
+                            </field>
+                       </page>
                     <page string="Description">
                         <field name="note" colspan="4" nolabel="1"/>
                     </page>

=== modified file 'hr_payroll/security/ir.model.access.csv'
--- hr_payroll/security/ir.model.access.csv	2011-04-12 17:01:28 +0000
+++ hr_payroll/security/ir.model.access.csv	2011-05-09 08:58:29 +0000
@@ -8,5 +8,6 @@
 "access_hr_payslip_manager","hr.payslip.manager","model_hr_payslip","base.group_hr_manager",1,1,1,1
 "access_hr_payslip_line_manager","hr.payslip.line.manager","model_hr_payslip_line","base.group_hr_manager",1,1,1,1
 "access_hr_payroll_structure_manager","hr.payroll.structure.manager","model_hr_payroll_structure","base.group_hr_manager",1,1,1,1
-"access_hr_payslip_input ","hr.payslip.input","model_hr_payslip_input","base.group_hr_manager",1,1,1,1
+"access_hr_payslip_worked_days ","hr.payslip.worked_days","model_hr_payslip_worked_days","base.group_hr_manager",1,1,1,1
 "access_hr_salary_rule","hr.salary.rule","model_hr_salary_rule","base.group_hr_manager",1,1,1,1
+"access_hr_payslip_input","hr.payslip.input","model_hr_payslip_input","base.group_hr_manager",1,1,1,1


Follow ups