[IMP] hr_payroll: misc improvements among
* remove typo in hr.contribution.register object name * fix engine: a rule with same code must overwrite the previous value * improved demo data: set same code for Conveyance Allowance for Paolino and parent rule * improved tree/search views bzr revid: qdp-launchpad@openerp.com-20110412170128-xlf1r1tfsm8ke7e5
This commit is contained in:
@@ -147,7 +147,7 @@ class contrib_register(osv.osv):
|
||||
Contribution Register
|
||||
'''
|
||||
|
||||
_name = 'hr.contibution.register'
|
||||
_name = 'hr.contribution.register'
|
||||
_description = 'Contribution Register'
|
||||
|
||||
_columns = {
|
||||
@@ -479,7 +479,8 @@ class hr_payslip(osv.osv):
|
||||
localdict['heads'][head.code] = head.code in localdict['heads'] and localdict['heads'][head.code] + amount or amount
|
||||
return localdict
|
||||
|
||||
result = []
|
||||
#we keep a dict with the result because a value can be overwritten by another rule with the same code
|
||||
result_dict = {}
|
||||
blacklist = []
|
||||
payslip = self.pool.get('hr.payslip').browse(cr, uid, payslip_id, context=context)
|
||||
worked_days = {}
|
||||
@@ -497,16 +498,22 @@ class hr_payslip(osv.osv):
|
||||
employee = contract.employee_id
|
||||
localdict.update({'employee': employee, 'contract': contract})
|
||||
for rule in self.pool.get('hr.salary.rule').browse(cr, uid, sorted_rule_ids, context=context):
|
||||
key = rule.code + '-' + str(contract.id)
|
||||
localdict['result'] = None
|
||||
#check if the rule can be applied
|
||||
if self.pool.get('hr.salary.rule').satisfy_condition(cr, uid, rule.id, localdict, context=context) and rule.id not in blacklist:
|
||||
#compute the amount of the rule
|
||||
amount = self.pool.get('hr.salary.rule').compute_rule(cr, uid, rule.id, localdict, context=context)
|
||||
#check if there is already a rule computed with that code
|
||||
previous_amount = rule.code in localdict['rules'] and localdict['rules'][rule.code] or 0.0
|
||||
#set/overwrite the amount computed for this rule in the localdict
|
||||
localdict['rules'][rule.code] = amount
|
||||
#sum the amount for its salary head
|
||||
localdict = _sum_salary_head(localdict, rule.category_id, amount)
|
||||
vals = {
|
||||
localdict = _sum_salary_head(localdict, rule.category_id, amount - previous_amount)
|
||||
#create/overwrite the rule in the temporary results
|
||||
result_dict[key] = {
|
||||
'salary_rule_id': rule.id,
|
||||
'contract_id': contract.id,
|
||||
'name': rule.name,
|
||||
'code': rule.code,
|
||||
'category_id': rule.category_id.id,
|
||||
@@ -526,11 +533,10 @@ class hr_payslip(osv.osv):
|
||||
'total': amount,
|
||||
'employee_id': contract.employee_id.id,
|
||||
}
|
||||
result.append(vals)
|
||||
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
|
||||
|
||||
def onchange_employee_id(self, cr, uid, ids, date_from, date_to, employee_id=False, contract_id=False, context=None):
|
||||
@@ -655,9 +661,9 @@ class hr_salary_rule(osv.osv):
|
||||
'amount_percentage_base':fields.char('Percentage based on',size=1024, required=False, readonly=False, help='result will be affected to a variable'), #old name = expressiont
|
||||
'child_ids':fields.one2many('hr.salary.rule', 'parent_rule_id', 'Child Salary Rule'),
|
||||
'register_id':fields.property(
|
||||
'hr.contibution.register',
|
||||
'hr.contribution.register',
|
||||
type='many2one',
|
||||
relation='hr.contibution.register',
|
||||
relation='hr.contribution.register',
|
||||
string="Contribution Register",
|
||||
method=True,
|
||||
view_load=True,
|
||||
@@ -773,12 +779,13 @@ class hr_payslip_line(osv.osv):
|
||||
_name = 'hr.payslip.line'
|
||||
_inherit = 'hr.salary.rule'
|
||||
_description = 'Payslip Line'
|
||||
_order = 'sequence'
|
||||
_order = 'contract_id, sequence'
|
||||
|
||||
_columns = {
|
||||
'slip_id':fields.many2one('hr.payslip', 'Pay Slip', required=True),
|
||||
'salary_rule_id':fields.many2one('hr.salary.rule', 'Rule', required=True),
|
||||
'employee_id':fields.many2one('hr.employee', 'Employee', required=True),
|
||||
'contract_id':fields.many2one('hr.contract', 'Contract', required=True),
|
||||
'total': fields.float('Amount', digits_compute=dp.get_precision('Account')),
|
||||
'company_contrib': fields.float('Company Contribution', readonly=True, digits_compute=dp.get_precision('Account')),
|
||||
}
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
<record id="hr_salary_rule_ca_paolino" model="hr.salary.rule">
|
||||
<field name="amount_select">fix</field>
|
||||
<field eval="600.0" name="amount_fix"/>
|
||||
<field name="code">CAP</field>
|
||||
<field name="code">CA</field>
|
||||
<field name="category_id" ref="hr_payroll.ALW"/>
|
||||
<field name="name">Conveyance Allowance For Paolino</field>
|
||||
<field name="sequence" eval="15"/>
|
||||
|
||||
@@ -71,6 +71,21 @@
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_hr_payroll_structure_filter" model="ir.ui.view">
|
||||
<field name="name">hr.payroll.structure.select</field>
|
||||
<field name="model">hr.payroll.structure</field>
|
||||
<field name="type">search</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Payroll Structures">
|
||||
<group col="8" colspan="4">
|
||||
<field name="name"/>
|
||||
<field name="code"/>
|
||||
</group>
|
||||
<newline/>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_hr_employee_grade_form" model="ir.ui.view">
|
||||
<field name="name">hr.payroll.structure.form</field>
|
||||
<field name="model">hr.payroll.structure</field>
|
||||
@@ -226,7 +241,7 @@
|
||||
</group>
|
||||
<notebook colspan="4">
|
||||
<page string="Salary Computation" >
|
||||
<field name="line_ids" colspan="4" nolabel="1" domain="[('appears_on_payslip','<>',False)]">
|
||||
<field name="line_ids" colspan="4" nolabel="1">
|
||||
<tree string="Salary Structure" editable="bottom">
|
||||
<field name="name"/>
|
||||
<field name="code"/>
|
||||
@@ -267,7 +282,6 @@
|
||||
<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"/>
|
||||
@@ -388,15 +402,8 @@
|
||||
<field name="type">search</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Salary Heads">
|
||||
<filter icon="terp-document-new" string="Allowance" domain="[('type','=','allowance')]"/>
|
||||
<filter icon="terp-check" string="Deduction" domain="[('type','=','deduction')]"/>
|
||||
<separator orientation="vertical"/>
|
||||
<field name="name" select="1"/>
|
||||
<field name="code" select="1"/>
|
||||
<newline/>
|
||||
<group expand="0" string="Group By..." colspan="4" col="4" groups="base.group_extended">
|
||||
<filter string="Type" icon="terp-stock_symbol-selection" domain="[]" context="{'group_by':'type'}"/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
@@ -419,9 +426,9 @@
|
||||
<!--
|
||||
Contribution Register
|
||||
-->
|
||||
<record id="hr_contibution_register_tree" model="ir.ui.view">
|
||||
<field name="name">hr.contibution.register.tree</field>
|
||||
<field name="model">hr.contibution.register</field>
|
||||
<record id="hr_contribution_register_tree" model="ir.ui.view">
|
||||
<field name="name">hr.contribution.register.tree</field>
|
||||
<field name="model">hr.contribution.register</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Contribution Registers">
|
||||
@@ -430,9 +437,20 @@
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
<record id="hr_contibution_register_form" model="ir.ui.view">
|
||||
<field name="name">hr.contibution.register.form</field>
|
||||
<field name="model">hr.contibution.register</field>
|
||||
<record id="hr_contribution_register_filter" model="ir.ui.view">
|
||||
<field name="name">hr.contribution.register.search</field>
|
||||
<field name="model">hr.contribution.register</field>
|
||||
<field name="type">search</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Contribution Registers">
|
||||
<field name="name"/>
|
||||
<field name="company_id" groups="base.group_multi_company" widget="selection"/>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
<record id="hr_contribution_register_form" model="ir.ui.view">
|
||||
<field name="name">hr.contribution.register.form</field>
|
||||
<field name="model">hr.contribution.register</field>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Contribution">
|
||||
@@ -447,15 +465,15 @@
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
<record id="action_contibution_register_form" model="ir.actions.act_window">
|
||||
<record id="action_contribution_register_form" model="ir.actions.act_window">
|
||||
<field name="name">Contribution Registers</field>
|
||||
<field name="res_model">hr.contibution.register</field>
|
||||
<field name="res_model">hr.contribution.register</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_id" ref="hr_contibution_register_tree"/>
|
||||
<field name="view_id" ref="hr_contribution_register_tree"/>
|
||||
</record>
|
||||
<menuitem
|
||||
id="menu_action_hr_contibution_register_form"
|
||||
action="action_contibution_register_form"
|
||||
id="menu_action_hr_contribution_register_form"
|
||||
action="action_contribution_register_form"
|
||||
parent="payroll_configure"
|
||||
sequence="14"
|
||||
/>
|
||||
@@ -558,12 +576,13 @@
|
||||
<search string="Search Salary Rule">
|
||||
<group col="8" colspan="4">
|
||||
<field name="name"/>
|
||||
<field name="code" select="1"/>
|
||||
<field name="category_id"/>
|
||||
<field name="condition_range_min"/>
|
||||
</group>
|
||||
<newline/>
|
||||
|
||||
<group col="8" colspan="4" expand="0" string="Group By...">
|
||||
<filter string="Name" icon="terp-folder-yellow" name="name" context="{'group_by':'name'}"/>
|
||||
<filter string="Head" icon="terp-folder-yellow" name="head" context="{'group_by':'category_id'}"/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
|
||||
"access_hr_payroll_structure","hr.payroll.structure","model_hr_payroll_structure","base.group_hr_user",1,1,1,1
|
||||
"access_hr_contibution_register","hr.contibution.register","model_hr_contibution_register","base.group_hr_user",1,1,1,1
|
||||
"access_hr_contribution_register","hr.contribution.register","model_hr_contribution_register","base.group_hr_user",1,1,1,1
|
||||
"access_hr_salary_head","hr.salary.head","model_hr_salary_head","base.group_hr_user",1,1,1,1
|
||||
"access_hr_payslip","hr.payslip","model_hr_payslip","base.group_hr_user",1,1,1,1
|
||||
"access_hr_payslip_line","hr.payslip.line","model_hr_payslip_line","base.group_hr_user",1,1,1,1
|
||||
|
||||
|
Reference in New Issue
Block a user