[MERGE] branch merged with lp:~openerp-dev/openobject-addons/trunk-payroll

bzr revid: mtr@mtr-20110412085111-f47gcnu21e2s6433
This commit is contained in:
mtr
2011-04-12 14:21:11 +05:30
5 changed files with 41 additions and 43 deletions
+24 -33
View File
@@ -51,10 +51,20 @@ class hr_payroll_structure(osv.osv):
'note': fields.text('Description'),
'parent_id':fields.many2one('hr.payroll.structure', 'Parent'),
}
def _get_parent(self, cr, uid, context=None):
obj_model = self.pool.get('ir.model.data')
res = False
data_id = obj_model.search(cr, uid, [('model', '=', 'hr.payroll.structure'), ('name', '=', 'structure_base')])
if data_id:
res = obj_model.browse(cr, uid, data_id[0], context=context).res_id
return res
_defaults = {
'company_id': lambda self, cr, uid, context: \
self.pool.get('res.users').browse(cr, uid, uid,
context=context).company_id.id,
'parent_id': _get_parent,
}
def copy(self, cr, uid, id, default=None, context=None):
@@ -187,37 +197,18 @@ class hr_payslip(osv.osv):
_name = 'hr.payslip'
_description = 'Pay Slip'
#TODO unused for now, cause the field is commented but we want to put it back
# def _get_salary_rules(self, cr, uid, ids, field_names, arg=None, context=None):
# structure_obj = self.pool.get('hr.payroll.structure')
# contract_obj = self.pool.get('hr.contract')
# res = {}
# rules = []
# contracts = []
# structures = []
# rule_ids = []
# sorted_salary_heads = []
# for record in self.browse(cr, uid, ids, context=context):
# if record.contract_id:
# contracts.append(record.contract_id.id)
# else:
# contracts = self.get_contract(cr, uid, record.employee_id, record.date, context=context)
# for contract in contracts:
# structures = contract_obj.get_all_structures(cr, uid, [contract], context)
# res[record.id] = {}
# for struct in structures:
# rule_ids = structure_obj.get_all_rules(cr, uid, [struct], context=None)
# for rl in rule_ids:
# if rl[0] not in rules:
# rules.append(rl[0])
# cr.execute('''SELECT sr.id FROM hr_salary_rule as sr, hr_salary_head as sh
# WHERE sr.category_id = sh.id AND sr.id in %s ORDER BY sh.sequence''',(tuple(rules),))
# for x in cr.fetchall():
# sorted_salary_heads.append(x[0])
# for fn in field_names:
# if fn == 'details_by_salary_head':
# res[record.id] = {fn: sorted_salary_heads}
# return res
def _get_lines_salary_head(self, cr, uid, ids, field_names, arg=None, context=None):
result = {}
if not ids: return result
cr.execute('''SELECT pl.slip_id, pl.id FROM hr_payslip_line AS pl \
LEFT JOIN hr_salary_head AS sh on (pl.category_id = sh.id) \
WHERE pl.slip_id in %s \
GROUP BY pl.slip_id, sh.sequence, pl.sequence, pl.id ORDER BY sh.sequence, pl.sequence''',(tuple(ids),))
res = cr.fetchall()
for r in res:
result.setdefault(r[0], [])
result[r[0]].append(r[1])
return result
_columns = {
'struct_id': fields.many2one('hr.payroll.structure', 'Structure', help='Defines the rules that have to be applied to this payslip, accordingly to the contract chosen. If you let empty the field contract, this field isn\'t mandatory anymore and thus the rules applied will be all the rules set on the structure of all contracts of the employee valid for the chosen period'),
@@ -246,9 +237,8 @@ class hr_payslip(osv.osv):
'paid': fields.boolean('Made Payment Order ? ', required=False, readonly=True, states={'draft': [('readonly', False)]}),
'note': fields.text('Description'),
'contract_id': fields.many2one('hr.contract', 'Contract', required=False, readonly=True, states={'draft': [('readonly', False)]}),
'details_by_salary_head': fields.function(_get_lines_salary_head, method=True, type='one2many', relation='hr.payslip.line', string='Details by Salary Head'),
'credit_note': fields.boolean('Credit Note', help="Indicates this payslip has a refund of another"),
#TODO put me back
# 'details_by_salary_head': fields.function(_get_salary_rules, method=True, type='one2many', relation='hr.salary.rule', string='Details by Salary Head', multi='details_by_salary_head'),
}
_defaults = {
'date_from': lambda *a: time.strftime('%Y-%m-01'),
@@ -524,6 +514,7 @@ class hr_payslip(osv.osv):
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)]
return result
def onchange_employee_id(self, cr, uid, ids, date_from, date_to, employee_id=False, contract_id=False, context=None):
+5
View File
@@ -27,6 +27,11 @@
<field name="code">NET</field>
</record>
<record id="COMP" model="hr.salary.head">
<field name="name">Company Contribution</field>
<field name="code">COMP</field>
</record>
<!-- <record id="HRA" model="hr.salary.head">
<field name="code">HRA</field>
<field name="parent_id" ref="AL"/>
+5 -5
View File
@@ -41,7 +41,7 @@
<field name="category_id" ref="hr_payroll.DED"/>
<field name="name">Provident Fund</field>
</record>
<record id="hr_salary_rule_ca_paolino" model="hr.salary.rule">
<field name="amount_select">fix</field>
<field eval="600.0" name="amount_fix"/>
@@ -50,14 +50,14 @@
<field name="name">Conveyance Allowance For Paolino</field>
<field name="sequence" eval="15"/>
</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="code">MA</field>
<field name="category_id" ref="hr_payroll.ALW"/>
<field name="name">Meal Voucher</field>
<field name="sequence" eval="170"/>
<field name="sequence" eval="16"/>
</record>
<!-- Salary Structure -->
@@ -68,7 +68,7 @@
<field name="company_id" ref="base.main_company"/>
<field name="parent_id" ref="structure_base"/>
</record>
<record id="structure_002" model="hr.payroll.structure">
<field name="code">MEQP</field>
<field name="name">Marketing Executive for Quentin Paolino</field>
@@ -99,7 +99,7 @@
<field eval="4000.0" name="wage"/>
<field eval="5" name="working_days_per_week"/>
</record>
<record id="hr_contract_quentin_paolino" model="hr.contract">
<field name="name">Contract For Quentin Paolino</field>
<field name="type_id" ref="hr_contract.hr_contract_type_emp"/>
+5 -5
View File
@@ -237,17 +237,17 @@
</field>
</page>
<!-- TODO: put me back -->
<!-- <page string="Details By Salary Head">
<field name="details_by_salary_head" nolabel="1">
<tree string="Salary Rules">
<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">
<field name="category_id"/>
<field name="sequence" groups="base.group_extended"/>
<field name="name"/>
<field name="code"/>
<field name="total"/>
<field name="total"/>
</tree>
</field>
</page>-->
</page>
<page string="Worked Days">
<field name="input_line_ids" colspan="4" nolabel="1" mode="tree">
@@ -8,3 +8,5 @@
"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_salary_rule","hr.salary.rule","model_hr_salary_rule","base.group_hr_manager",1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
8 access_hr_payslip_manager hr.payslip.manager model_hr_payslip base.group_hr_manager 1 1 1 1
9 access_hr_payslip_line_manager hr.payslip.line.manager model_hr_payslip_line base.group_hr_manager 1 1 1 1
10 access_hr_payroll_structure_manager hr.payroll.structure.manager model_hr_payroll_structure base.group_hr_manager 1 1 1 1
11 access_hr_payslip_input hr.payslip.input model_hr_payslip_input base.group_hr_manager 1 1 1 1
12 access_hr_salary_rule hr.salary.rule model_hr_salary_rule base.group_hr_manager 1 1 1 1