[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:
Quentin (OpenERP)
2011-04-12 19:01:28 +02:00
parent e4f4d851b8
commit 2dad28d4fd
4 changed files with 59 additions and 33 deletions
+16 -9
View File
@@ -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')),
}
+1 -1
View File
@@ -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"/>
+41 -22
View File
@@ -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','&lt;&gt;',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
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_hr_payroll_structure hr.payroll.structure model_hr_payroll_structure base.group_hr_user 1 1 1 1
3 access_hr_contibution_register access_hr_contribution_register hr.contibution.register hr.contribution.register model_hr_contibution_register model_hr_contribution_register base.group_hr_user 1 1 1 1
4 access_hr_salary_head hr.salary.head model_hr_salary_head base.group_hr_user 1 1 1 1
5 access_hr_payslip hr.payslip model_hr_payslip base.group_hr_user 1 1 1 1
6 access_hr_payslip_line hr.payslip.line model_hr_payslip_line base.group_hr_user 1 1 1 1