← Back to team overview

openerp-dev-web team mailing list archive

lp:~openerp-dev/openobject-addons/trunk-payroll-payslip-on-payslip-mtr into lp:~openerp-dev/openobject-addons/trunk-payroll

 

Meera Trambadia (OpenERP) has proposed merging lp:~openerp-dev/openobject-addons/trunk-payroll-payslip-on-payslip-mtr into lp:~openerp-dev/openobject-addons/trunk-payroll.

Requested reviews:
  qdp (OpenERP) (qdp)
  Mustufa Rangwala (Open ERP) (mra-tinyerp)

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

*Added following methods to compute 'payslip' on 'other payslip'(based on some criteria) through a rule.
- payslip_sum()
- worked_days_sum()

-- 
https://code.launchpad.net/~openerp-dev/openobject-addons/trunk-payroll-payslip-on-payslip-mtr/+merge/60793
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-05-12 11:57:19 +0000
+++ hr_payroll/hr_payroll.py	2011-05-12 14:02:46 +0000
@@ -21,6 +21,7 @@
 ##############################################################################
 
 import time
+import pooler
 from datetime import date
 from datetime import datetime
 from datetime import timedelta
@@ -233,6 +234,10 @@
     _name = 'hr.payslip'
     _description = 'Pay Slip'
 
+    def __init__(self, pool, cr):
+        super(hr_payslip, self).__init__(pool, cr)
+        self.cr = cr
+
     def _get_lines_salary_rule_category(self, cr, uid, ids, field_names, arg=None, context=None):
         result = {}
         if not ids: return result
@@ -476,15 +481,17 @@
         #we keep a dict with the result because a value can be overwritten by another rule with the same code
         result_dict = {}
         blacklist = []
+        payslip_obj = self.pool.get('hr.payslip')
+        inputs_obj = self.pool.get('hr.payslip.worked_days')
         obj_rule = self.pool.get('hr.salary.rule')
-        payslip = self.pool.get('hr.payslip').browse(cr, uid, payslip_id, context=context)
+        payslip = payslip_obj.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
         inputs = {}
         for input_line in payslip.input_line_ids:
             inputs[input_line.code] = input_line
-        localdict = {'categories': {}, 'payslip': payslip, 'worked_days': worked_days, 'inputs': inputs}
+        localdict = {'categories': {}, 'payslip': payslip, 'worked_days': worked_days, 'inputs': inputs, 'payslip_obj': payslip_obj, 'inputs_obj':inputs_obj}
         #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
@@ -624,6 +631,26 @@
             res['value'].update({'struct_id': False})
         return self.onchange_employee_id(cr, uid, ids, date_from=date_from, date_to=date_to, employee_id=employee_id, contract_id=contract_id, context=context)
 
+    def sum(self, code, from_date, to_date=None, employee=False, context=None):
+        sum = 0.0
+        if not employee:
+            return 0.0
+        if to_date is None:
+            to_date = datetime.now().strftime('%Y-%m-%d')
+        cr = pooler.get_db(self.cr.dbname).cursor()
+        cr.execute("SELECT pl.total, hp.credit_note\
+                    FROM hr_payslip as hp, hr_payslip_line as pl \
+                    WHERE hp.employee_id = %s AND hp.state in ('confirm','done') \
+                    AND hp.date_from >= %s AND hp.date_to <= %s AND hp.id = pl.slip_id AND pl.code = %s",
+                    (employee, from_date, to_date, code))
+        for r in cr.dictfetchall():
+            if r['credit_note'] == False:
+                sum += r['total']
+            else:
+                sum -= r['total']
+        cr.close()
+        return sum
+
 hr_payslip()
 
 class hr_payslip_worked_days(osv.osv):
@@ -646,6 +673,35 @@
     _defaults = {
         'sequence': 10,
     }
+    def __init__(self, pool, cr):
+        super(hr_payslip_worked_days, self).__init__(pool, cr)
+        self.cr = cr
+
+    def sum(self, code, field, from_date, to_date=None, employee=False, context=None):
+        if not employee:
+            return 0.0
+        if to_date is None:
+            to_date = datetime.now().strftime('%Y-%m-%d')
+        result = 0.0
+        cr = pooler.get_db(self.cr.dbname).cursor()
+        cr.execute("SELECT pi.id\
+                    FROM hr_payslip as hp, hr_payslip_worked_days as pi \
+                    WHERE hp.employee_id = %s AND hp.state in ('confirm','done') \
+                    AND hp.date_from >= %s AND hp.date_to <= %s AND hp.id = pi.payslip_id AND pi.code = %s",
+                   (employee, from_date, to_date, code))
+        input_ids = [r[0] for r in cr.fetchall()]
+        if len(input_ids) == 1:
+            input_ids = tuple(input_ids[0],)
+        else:
+            input_ids = tuple(input_ids)
+#        input_data = self.read(cr, uid, input_ids, [field], context=context)
+        cr = pooler.get_db(self.cr.dbname).cursor()
+        cr.execute("select %s from hr_payslip_worked_days as wd where wd.id in %s"%(field, input_ids))
+        input_data = cr.dictfetchall()
+        for input in input_data:
+           result += input.get(field)
+        cr.close()
+        return result
 hr_payslip_worked_days()
 
 class hr_payslip_input(osv.osv):
@@ -668,6 +724,7 @@
         'sequence': 10,
         'quantity': 0.0,
     }
+    
 hr_payslip_input()
 
 class hr_salary_rule(osv.osv):


Follow ups