summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormtr <mtr@mtr>2011-03-14 12:05:11 +0530
committermtr <mtr@mtr>2011-03-14 12:05:11 +0530
commit46f2aac28fa6e5ba8e3fdba13ecd5e927ffbf481 (patch)
treefe035b8f50bfd99fbaa08bbaaf6a1870b3e85b6d
parent62ff4c00d61a57dc9181f333856549fded1c1932 (diff)
parent743a6fe8eee57bc11884849f84b75a2976f16bb6 (diff)
[MERGE] branch merged with trunk-payroll-salary_rules-psi
bzr revid: mtr@mtr-20110314063511-owhz4ewy6o3a0pla
-rw-r--r--addons/hr_contract/hr_contract.py1
-rw-r--r--addons/hr_payroll/hr_payroll.py141
2 files changed, 70 insertions, 72 deletions
diff --git a/addons/hr_contract/hr_contract.py b/addons/hr_contract/hr_contract.py
index 8a54b89627d..0169e4e8a8a 100644
--- a/addons/hr_contract/hr_contract.py
+++ b/addons/hr_contract/hr_contract.py
@@ -75,6 +75,7 @@ class hr_passport(osv.osv):
hr_passport()
#Contract wage type period name
+#psi@Fix me: i think we shoul remove this object as we need not the hr.contract.wage.type object
class hr_contract_wage_type_period(osv.osv):
_name='hr.contract.wage.type.period'
_description='Wage Period'
diff --git a/addons/hr_payroll/hr_payroll.py b/addons/hr_payroll/hr_payroll.py
index f59c47467fb..ebd4e1eea43 100644
--- a/addons/hr_payroll/hr_payroll.py
+++ b/addons/hr_payroll/hr_payroll.py
@@ -368,61 +368,48 @@ class hr_payslip(osv.osv):
def _calculate(self, cr, uid, ids, field_names, arg, context=None):
if not ids: return {}
- slip_line_obj = self.pool.get('hr.payslip.line')
- payroll_struct_obj = self.pool.get('hr.payroll.structure')
- salary_rule_pool = self.pool.get('hr.salary.rule')
res = {}
for rs in self.browse(cr, uid, ids, context=context):
allow = 0.0
deduct = 0.0
others = 0.0
- tot_amount = 0.0
-
- contract = rs.employee_id.contract_id
- obj = {'basic': contract.wage}
- if not contract.struct_id:
- raise osv.except_osv(_('Warning!'), _('Please define Salary Structure on Contract for %s.') % (rs.employee_id.name))
- function = contract.struct_id.id
- lines = []
- if function:
- func = payroll_struct_obj.read(cr, uid, function, ['rule_ids'], context=context)
- lines = salary_rule_pool.browse(cr, uid, func['rule_ids'], context=context)
- for line in lines:
- amount = 0.0
- if line.amount_type == 'per':
- try:
- amount = line.amount * eval(str(line.computational_expression), obj)
- except Exception, e:
- raise osv.except_osv(_('Variable Error !'), _('Variable Error: %s ') % (e))
- elif line.amount_type in ('fix'):
- amount = line.amount
- cd = line.category_id.code.lower()
- obj[cd] = amount
+ for line in rs.line_ids:
contrib = 0.0
- if amount < 0:
- deduct += amount
+ if line.total < 0:
+ deduct += line.total
others += contrib
- amount -= contrib
+# amount -= contrib
else:
- allow += amount
+ allow += line.total
others -= contrib
- amount += contrib
-
- tot_amount += amount
-
- salary_rule_pool.write(cr, uid, [line.id], {'total': amount}, context=context)
+# amount += contrib
record = {
'allounce': allow,
'deduction': deduct,
- 'gross_amount': rs.basic_amount + allow,
- 'net_amount': rs.basic_amount + tot_amount,
+ 'grows_amount': rs.basic_amount + allow,
+ 'net_amount': rs.basic_amount + allow + deduct,
'other_pay': others,
'state': 'draft',
- 'total_pay': abs(contract.wage + allow + deduct)
+ 'total_pay': rs.basic_amount + allow + deduct
}
res[rs.id] = record
return res
+ def _get_holidays(self, cr, uid, ids, field_name, arg, context=None):
+ result = {}
+ for record in self.browse(cr, uid, ids, context=context):
+ result[record.id] = []
+ dates = prev_bounds(record.date)
+ sql = '''SELECT id FROM hr_holidays
+ WHERE date_from >= '%s' AND date_to <= '%s'
+ AND employee_id = %s
+ ''' % (dates[0], dates[1], record.employee_id.id)
+ cr.execute(sql)
+ res = cr.fetchall()
+ if res:
+ result[record.id] = [x[0] for x in res]
+ return result
+
_columns = {
'struct_id':fields.many2one('hr.payroll.structure', 'Designation', readonly=True, states={'new': [('readonly', False)], 'draft': [('readonly', False)]}),
'register_id':fields.many2one('hr.payroll.register', 'Register', required=False, readonly=True, states={'new': [('readonly', False)]}),
@@ -459,7 +446,7 @@ class hr_payslip(osv.osv):
'contract_id':fields.many2one('hr.contract', 'Contract', required=False, readonly=True, states={'new': [('readonly', False)],'draft': [('readonly', False)]}),
'igross': fields.float('Calculaton Field', readonly=True, digits=(16, 2), help="Calculation field used for internal calculation, do not place this on form"),
'inet': fields.float('Calculaton Field', readonly=True, digits=(16, 2), help="Calculation field used for internal calculation, do not place this on form"),
- 'holiday_ids':fields.one2many('hr.holidays', 'payslip_id', 'Payslip', required=False),
+ 'holiday_ids': fields.function(_get_holidays, method=True, type='one2many', relation='hr.holidays', string='Holiday Lines', required=False),
}
_defaults = {
'date': lambda *a: time.strftime('%Y-%m-%d'),
@@ -573,33 +560,31 @@ class hr_payslip(osv.osv):
'''
cr.execute(sql_req, (employee.id, date, date))
contract = cr.dictfetchone()
+ return contract and contract or {}
- contract = contract and contract or {}
- return contract
-
- def _get_leaves(self, cr, user, slip, employee, context=None):
- """
- Compute leaves for an employee
-
- @param cr: cursor to database
- @param user: id of current user
- @param slip: object of the hr.payroll.slip model
- @param employee: object of the hr.employee model
- @param context: context arguments, like lang, time zone
-
- @return: return a result
- """
- result = []
- dates = prev_bounds(slip.date)
- sql = '''select id from hr_holidays
- where date_from >= '%s' and date_to <= '%s'
- and employee_id = %s
- and state = 'validate' ''' % (dates[0], dates[1], slip.employee_id.id)
- cr.execute(sql)
- res = cr.fetchall()
- if res:
- result = [x[0] for x in res]
- return result
+# def _get_leaves(self, cr, user, slip, employee, context=None):
+# """
+# Compute leaves for an employee
+#
+# @param cr: cursor to database
+# @param user: id of current user
+# @param slip: object of the hr.payroll.slip model
+# @param employee: object of the hr.employee model
+# @param context: context arguments, like lang, time zone
+#
+# @return: return a result
+# """
+# result = []
+# dates = prev_bounds(slip.date)
+# sql = '''select id from hr_holidays
+# where date_from >= '%s' and date_to <= '%s'
+# and employee_id = %s
+# and state = 'validate' ''' % (dates[0], dates[1], slip.employee_id.id)
+# cr.execute(sql)
+# res = cr.fetchall()
+# if res:
+# result = [x[0] for x in res]
+# return result
def _get_leaves1(self, cr, user, ddate, employee, context=None):
"""
@@ -616,10 +601,10 @@ class hr_payslip(osv.osv):
result = []
dates = prev_bounds(ddate)
- sql = '''select id from hr_holidays
- where date_from >= '%s' and date_to <= '%s'
- and employee_id = %s
- ''' % (dates[0], dates[1], employee.id)
+ sql = '''SELECT id FROM hr_holidays
+ WHERE date_from >= '%s' AND date_to <= '%s'
+ AND employee_id = %s
+ AND state = 'validate' ''' % (dates[0], dates[1], employee.id)
cr.execute(sql)
res = cr.fetchall()
if res:
@@ -877,7 +862,7 @@ class hr_payslip(osv.osv):
if parent:
parent = self._get_parent_structure(cr, uid, parent, context)
return struct_id + parent
-
+
def onchange_employee_id(self, cr, uid, ids, ddate, employee_id, context=None):
func_pool = self.pool.get('hr.payroll.structure')
slip_line_pool = self.pool.get('hr.payslip.line')
@@ -934,7 +919,7 @@ class hr_payslip(osv.osv):
function = contract.struct_id.id
if function:
sal_structure = self._get_parent_structure(cr, uid, [function], context=context)
-
+
lines = []
rules = []
if function:
@@ -943,7 +928,7 @@ class hr_payslip(osv.osv):
lines = salary_rule_pool.browse(cr, uid, func['rule_ids'], context=context)
for rl in lines:
rules.append(rl)
-
+
ad = []
total = 0.0
obj = {'basic':contract.wage}
@@ -1096,6 +1081,18 @@ class hr_payslip(osv.osv):
'employee_id': employee_id.id,
'base': base
}
+# test = {
+# 'name': hday.name,
+# 'holiday_type': hday.holiday_type,
+# 'employee_id': hday.employee_id.id,
+# 'holiday_status_id': hday.holiday_status_id.id,
+# 'date_from': hday.date_from,
+# 'date_to': hday.date_to,
+# 'number_of_days_temp': hday.number_of_days_temp,
+# 'state': hday.state,
+# 'number_of_days': hday.number_of_days,
+# 'type': hday.type
+# }
days = hday.number_of_days
if hday.number_of_days < 0:
days = hday.number_of_days * -1
@@ -1118,7 +1115,7 @@ class hr_payslip(osv.osv):
total += value
res['total'] = value
update['value']['line_ids'].append(res)
-
+# update['value']['holiday_ids'].append(test)
basic = basic + total
# leaves = total