mirror of
https://gitlab.com/hibou-io/hibou-odoo/suite.git
synced 2025-01-20 12:37:31 +02:00
[IMP] l10n_us_hr_payroll_account: add record rules to reset accounting on selected rules
This commit is contained in:
@@ -1,5 +1,34 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<odoo>
|
<odoo>
|
||||||
<!-- Rules that shouldn't contribute to net like WAGE rules -->
|
<data noupdate="1">
|
||||||
|
|
||||||
|
<record model="ir.actions.server" id="action_us_salary_rule_account_set">
|
||||||
|
<field name="name">US Default Accounting</field>
|
||||||
|
<field name="model_id" ref="hr_payroll.model_hr_salary_rule"/>
|
||||||
|
<field name="binding_model_id" ref="hr_payroll.model_hr_salary_rule" />
|
||||||
|
<field name="state">code</field>
|
||||||
|
<field name="code">
|
||||||
|
if records:
|
||||||
|
companies = env.user.company_ids
|
||||||
|
# You can override the account codes with kwargs like
|
||||||
|
# ap_code='2111', salary_exp_code='6111'
|
||||||
|
env['account.chart.template']._us_configure_payroll_account_data(companies, salary_rules=records, full_reset=False)
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record model="ir.actions.server" id="action_us_salary_rule_account_reset">
|
||||||
|
<field name="name">US Default Accounting (Reset)</field>
|
||||||
|
<field name="model_id" ref="hr_payroll.model_hr_salary_rule"/>
|
||||||
|
<field name="binding_model_id" ref="hr_payroll.model_hr_salary_rule" />
|
||||||
|
<field name="state">code</field>
|
||||||
|
<field name="code">
|
||||||
|
if records:
|
||||||
|
companies = env.user.company_ids
|
||||||
|
# You can override the account codes with kwargs like
|
||||||
|
# ap_code='2111', salary_exp_code='6111'
|
||||||
|
env['account.chart.template']._us_configure_payroll_account_data(companies, salary_rules=records, full_reset=True)
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</data>
|
||||||
</odoo>
|
</odoo>
|
||||||
|
|||||||
@@ -17,7 +17,8 @@ class AccountChartTemplate(models.Model):
|
|||||||
self._us_configure_payroll_account_data(company)
|
self._us_configure_payroll_account_data(company)
|
||||||
return res
|
return res
|
||||||
|
|
||||||
def _us_configure_payroll_account_data(self, companies, ap_code=ACCOUNT_PAYABLE, salary_exp_code=SALARY_EXPENSES):
|
def _us_configure_payroll_account_data(self, companies, ap_code=ACCOUNT_PAYABLE, salary_exp_code=SALARY_EXPENSES,
|
||||||
|
salary_rules=None, full_reset=False):
|
||||||
account_codes = (
|
account_codes = (
|
||||||
ap_code,
|
ap_code,
|
||||||
salary_exp_code,
|
salary_exp_code,
|
||||||
@@ -34,19 +35,33 @@ class AccountChartTemplate(models.Model):
|
|||||||
[('company_id', '=', company.id), ('code', '=like', '%s%%' % code)], limit=1)
|
[('company_id', '=', company.id), ('code', '=like', '%s%%' % code)], limit=1)
|
||||||
for code in account_codes
|
for code in account_codes
|
||||||
}
|
}
|
||||||
|
accounts['none'] = self.env['account.account'].browse()
|
||||||
|
|
||||||
def set_rule_accounts(code, account_debit, account_credit):
|
def set_rule_accounts(code, account_debit, account_credit):
|
||||||
rule_domain = [
|
rule_domain = [
|
||||||
('struct_id', 'in', us_structures.ids),
|
('struct_id', 'in', us_structures.ids),
|
||||||
('code', '=like', code),
|
('code', '=like', code),
|
||||||
]
|
]
|
||||||
|
if salary_rules:
|
||||||
|
rule_domain.append(('id', 'in', salary_rules.ids))
|
||||||
rules = self.env['hr.salary.rule'].search(rule_domain)
|
rules = self.env['hr.salary.rule'].search(rule_domain)
|
||||||
values = {}
|
if full_reset:
|
||||||
if account_debit:
|
values = {
|
||||||
values['account_debit'] = account_debit.id
|
'account_debit': account_debit.id,
|
||||||
if account_credit:
|
'account_credit': account_credit.id,
|
||||||
values['account_credit'] = account_credit.id
|
}
|
||||||
rules.write(values)
|
rules.write(values)
|
||||||
|
else:
|
||||||
|
# we need to ensure we do not update an account that is already set
|
||||||
|
for rule in rules:
|
||||||
|
values = {}
|
||||||
|
if account_debit and not rule.account_debit:
|
||||||
|
values['account_debit'] = account_debit.id
|
||||||
|
if account_credit and not rule.account_credit:
|
||||||
|
values['account_credit'] = account_credit.id
|
||||||
|
if values:
|
||||||
|
# save a write if no values to write
|
||||||
|
rule.write(values)
|
||||||
|
|
||||||
journal = self.env['account.journal'].search([
|
journal = self.env['account.journal'].search([
|
||||||
('code', '=', 'PAYR'),
|
('code', '=', 'PAYR'),
|
||||||
@@ -84,10 +99,12 @@ class AccountChartTemplate(models.Model):
|
|||||||
# Find all rules that are ...
|
# Find all rules that are ...
|
||||||
|
|
||||||
# BASIC* -> SALARY_EXPENSE debit account
|
# BASIC* -> SALARY_EXPENSE debit account
|
||||||
set_rule_accounts('BASIC%', accounts[salary_exp_code], None)
|
set_rule_accounts('BASIC%', accounts[salary_exp_code], accounts['none'])
|
||||||
|
# ALW* -> SALARY_EXPENSE debit account
|
||||||
|
set_rule_accounts('ALW%', accounts[salary_exp_code], accounts['none'])
|
||||||
# EE_* -> AP debit
|
# EE_* -> AP debit
|
||||||
set_rule_accounts('EE_%', accounts[ap_code], None)
|
set_rule_accounts('EE_%', accounts[ap_code], accounts['none'])
|
||||||
# ER_* -> AP debit, SE credit
|
# ER_* -> AP debit, SE credit
|
||||||
set_rule_accounts('ER_%', accounts[ap_code], accounts[salary_exp_code])
|
set_rule_accounts('ER_%', accounts[ap_code], accounts[salary_exp_code])
|
||||||
# NET* -> AP credit
|
# NET* -> AP credit
|
||||||
set_rule_accounts('NET%', None, accounts[ap_code])
|
set_rule_accounts('NET%', accounts['none'], accounts[ap_code])
|
||||||
|
|||||||
Reference in New Issue
Block a user