[IMP] l10n_be_hr_payroll: Introduce a new 'Intellectual Property' advantage

Intellectual property rights guarantee their holders a temporary and territorially
restricted, exclusive exploitation of their intellectual property. This monopoly
stimulates innovations that are indispensable for economic growth, but can go against
the right of free competition which is indispensable for the free market economy.
This commit is contained in:
Yannick Tivisse
2018-05-04 09:40:44 +02:00
parent f9b7079b95
commit 0e7828151d
3 changed files with 85 additions and 1 deletions
@@ -84,6 +84,18 @@
<field name="code">SSC</field>
<field name="parent_id" ref="hr_payroll.DED"/>
</record>
<record id="hr_salary_rule_category_ip_part" model="hr.salary.rule.category">
<field name="name">IP. Part.</field>
<field name="code">IP. PART</field>
<field name="parent_id" ref="hr_payroll.ALW"/>
</record>
<record id="hr_salary_rule_category_gross_with_ip" model="hr.salary.rule.category">
<field name="name">Total Gross</field>
<field name="code">GROSSIP</field>
</record>
<!-- HR SALARY RULES-->
<record id="hr_payroll_rules_maj" model="hr.salary.rule">
<field name="category_id" ref="hr_payroll_head_salary"/>
@@ -152,6 +164,33 @@ elif salary &lt;= 2510.47:
result = 213.48 - (0.2369 * (salary - 1609.47))
</field>
</record>
<record id="hr_salary_rule_gross_with_ip" model="hr.salary.rule">
<field name="name">Total Gross</field>
<field name="sequence">90</field>
<field name="code">GROSSIP</field>
<field name="category_id" ref="l10n_be_hr_payroll.hr_salary_rule_category_gross_with_ip"/>
<field name="condition_select">python</field>
<field name="condition_python">result = bool(contract.ip)</field>
<field name="amount_select">code</field>
<field name="amount_python_compute">result = categories.BASIC + categories.ALW</field>
</record>
<record id="hr_salary_rule_ip_part" model="hr.salary.rule">
<field name="category_id" ref="hr_salary_rule_category_ip_part"/>
<field name="name">Intellectual Property</field>
<field name="code">IP.PART</field>
<field name="sequence">91</field>
<field name="condition_select">python</field>
<field name="condition_python">
result = bool(contract.ip)
</field>
<field name="amount_select">code</field>
<field name="amount_python_compute">
result = - categories.GROSSIP * contract.ip_wage_rate / 100.0
</field>
</record>
<record id="hr_payroll_rules_mis_ex_onss_1" model="hr.salary.rule">
<field name="category_id" ref="hr_salary_rule_category_spec_soc_contribution"/>
<field name="name">Special social cotisation</field>
@@ -500,6 +539,34 @@ result = -contract.car_atn
<field name="condition_python">result = bool(contract.representation_fees)</field>
<field name="amount_python_compute">result = contract.representation_fees</field>
</record>
<record id="hr_salary_rule_ip" model="hr.salary.rule">
<field name="category_id" ref="l10n_be_hr_payroll.hr_payroll_head_div_net"/>
<field name="name">Intellectual Property</field>
<field name="code">IP</field>
<field name="amount_select">code</field>
<field name="sequence">172</field>
<field name="condition_select">python</field>
<field name="condition_python">result = bool(contract.ip)</field>
<field name="amount_python_compute">result = categories.GROSSIP * contract.ip_wage_rate / 100.0</field>
</record>
<record id="hr_salary_rule_ip_deduction" model="hr.salary.rule">
<field name="category_id" ref="l10n_be_hr_payroll.hr_payroll_head_div_net"/>
<field name="name">Intellectual Property Income Deduction</field>
<field name="code">IP.DED</field>
<field name="amount_select">code</field>
<field name="sequence">173</field>
<field name="condition_select">python</field>
<field name="condition_python">result = bool(contract.ip)</field>
<field name="amount_python_compute">
tax_rate = 0.15
ip_amount = categories.GROSSIP * contract.ip_wage_rate / 100.0
if ip_amount &gt;= 0.0 and ip_amount &lt;= 15660:
tax_rate = tax_rate / 2.0
elif ip_amount &gt; 15660 and ip_amount &lt;=31320:
tax_rate = tax_rate * 3.0 / 4.0
result = -min(ip_amount * tax_rate, 11745)
</field>
</record>
<record id="hr_payroll_rules_suppl_net" model="hr.salary.rule">
<field name="category_id" ref="hr_payroll_head_div_net"/>
<field name="name">Net Supplement</field>
@@ -546,7 +613,10 @@ result = -contract.car_atn
ref('hr_payroll_rules_suppl_net'),
ref('hr_payroll_rules_retained_net'),
ref('hr_salary_rule_pp_reduction_employees'),
ref('hr_salary_rule_ip'),
ref('hr_salary_rule_ip_deduction'),
ref('hr_salary_rule_ip_part'),
ref('hr_salary_rule_gross_with_ip')
])]" name="rule_ids"/>
<field name="company_id" ref="base.main_company"/>
<field name="parent_id" ref="hr_payroll.structure_base"/>
@@ -85,6 +85,13 @@ class HrContract(models.Model):
eco_checks = fields.Monetary("Eco Vouchers",
default=lambda self: self.get_attribute('eco_checks', 'default_value'),
help="Yearly amount the employee receives in the form of eco vouchers.")
ip = fields.Boolean(default=False, track_visibility="onchange")
ip_wage_rate = fields.Float(string="IP percentage", help="Should be between 0 and 100 %")
@api.constrains('ip_wage_rate')
def _check_ip_wage_rate(self):
if self.filtered(lambda contract: contract.ip_wage_rate < 0 or contract.ip_wage_rate > 100):
raise ValidationError(_('The IP rate on wage should be between 0 and 100'))
@api.depends('holidays', 'wage', 'final_yearly_costs')
def _compute_wage_with_holidays(self):
@@ -117,6 +117,13 @@
</div>
<field name="holidays_compensation" invisible="1"/>
</group>
<group name="salary_and_advantages" position="inside">
<field name="ip_wage_rate"/>
<label for="ip" attrs="{'invisible': [('ip_wage_rate', '=', 0.0)]}"/>
<div class="o_row" attrs="{'invisible': [('ip_wage_rate', '=', 0.0)]}">
<field name="ip" nolabel="1"/>
</div>
</group>
</xpath>
</field>
</record>