From a730942d247bef216530e7f7b51c23beb1485c10 Mon Sep 17 00:00:00 2001 From: gsinghpal Date: Mon, 20 Apr 2026 00:18:08 -0400 Subject: [PATCH] feat(fusion_accounting_hr_payroll): payroll -> GL bridge Replaces Enterprise's hr_payroll_account with a Fusion-native bridge: - Adds account_debit / account_credit / fusion_analytic_account_id / not_computed_in_net to hr.salary.rule (company-dependent GL mapping) - Adds move_id + move_state + journal_id + _fusion_create_account_move to hr.payslip (validated payslip -> balanced account.move) - Adds move_id + move_state + action_open_move to hr.payslip.run - Adds journal_id (company-dependent) to hr.payroll.structure - Adds is_payroll_journal flag to account.journal - Adds payslip_ids / payslip_count + action_open_payslip on account.move - Adds payslip_id reverse link on account.move.line - Adds move_line_id reverse link on hr.payslip.line - Adds fusion_payroll_journal_id + fusion_payroll_auto_post to res.company (with res.config.settings exposure) Coexistence: detects Enterprise hr_payroll_account at runtime via ir.module.module and yields move creation to it while both modules are installed, so payslips do not get duplicate entries. Once the Enterprise module is uninstalled, this module owns the bridge. Auto-installs whenever both hr_payroll and fusion_accounting_core are present on the database. 10 smoke tests verifying field surface + bridge entrypoints all pass on westin-v19. Full payslip-to-move integration test deferred (needs seeded payroll structure). Removes Westin's last payroll-accounting dependency on Enterprise's accountant umbrella module (Phase 6b of the Fusion Accounting suite). Made-with: Cursor --- fusion_accounting_hr_payroll/__init__.py | 1 + fusion_accounting_hr_payroll/__manifest__.py | 59 +++++ .../data/hr_salary_rule_data.xml | 34 +++ .../models/__init__.py | 10 + .../models/account_journal.py | 12 + .../models/account_move.py | 41 +++ .../models/account_move_line.py | 16 ++ .../models/hr_payroll_structure.py | 26 ++ .../models/hr_payslip.py | 242 ++++++++++++++++++ .../models/hr_payslip_line.py | 16 ++ .../models/hr_payslip_run.py | 29 +++ .../models/hr_salary_rule.py | 35 +++ .../models/res_company.py | 19 ++ .../models/res_config_settings.py | 16 ++ .../static/description/icon.png | Bin 0 -> 73585 bytes .../tests/__init__.py | 1 + .../tests/test_payslip_to_move.py | 108 ++++++++ .../views/account_move_views.xml | 24 ++ .../views/hr_payroll_structure_views.xml | 15 ++ .../views/hr_payslip_views.xml | 26 ++ .../views/hr_salary_rule_views.xml | 26 ++ .../views/res_config_settings_views.xml | 24 ++ 22 files changed, 780 insertions(+) create mode 100644 fusion_accounting_hr_payroll/__init__.py create mode 100644 fusion_accounting_hr_payroll/__manifest__.py create mode 100644 fusion_accounting_hr_payroll/data/hr_salary_rule_data.xml create mode 100644 fusion_accounting_hr_payroll/models/__init__.py create mode 100644 fusion_accounting_hr_payroll/models/account_journal.py create mode 100644 fusion_accounting_hr_payroll/models/account_move.py create mode 100644 fusion_accounting_hr_payroll/models/account_move_line.py create mode 100644 fusion_accounting_hr_payroll/models/hr_payroll_structure.py create mode 100644 fusion_accounting_hr_payroll/models/hr_payslip.py create mode 100644 fusion_accounting_hr_payroll/models/hr_payslip_line.py create mode 100644 fusion_accounting_hr_payroll/models/hr_payslip_run.py create mode 100644 fusion_accounting_hr_payroll/models/hr_salary_rule.py create mode 100644 fusion_accounting_hr_payroll/models/res_company.py create mode 100644 fusion_accounting_hr_payroll/models/res_config_settings.py create mode 100644 fusion_accounting_hr_payroll/static/description/icon.png create mode 100644 fusion_accounting_hr_payroll/tests/__init__.py create mode 100644 fusion_accounting_hr_payroll/tests/test_payslip_to_move.py create mode 100644 fusion_accounting_hr_payroll/views/account_move_views.xml create mode 100644 fusion_accounting_hr_payroll/views/hr_payroll_structure_views.xml create mode 100644 fusion_accounting_hr_payroll/views/hr_payslip_views.xml create mode 100644 fusion_accounting_hr_payroll/views/hr_salary_rule_views.xml create mode 100644 fusion_accounting_hr_payroll/views/res_config_settings_views.xml diff --git a/fusion_accounting_hr_payroll/__init__.py b/fusion_accounting_hr_payroll/__init__.py new file mode 100644 index 00000000..0650744f --- /dev/null +++ b/fusion_accounting_hr_payroll/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/fusion_accounting_hr_payroll/__manifest__.py b/fusion_accounting_hr_payroll/__manifest__.py new file mode 100644 index 00000000..c890e584 --- /dev/null +++ b/fusion_accounting_hr_payroll/__manifest__.py @@ -0,0 +1,59 @@ +{ + 'name': 'Fusion Accounting - HR Payroll Bridge', + 'version': '19.0.1.0.0', + 'category': 'Human Resources/Payroll', + 'summary': 'Bridges payroll (hr_payroll) to accounting via account.move creation when payslips are validated.', + 'description': """ +Fusion Accounting - HR Payroll Bridge +===================================== + +A Fusion-native replacement for Odoo Enterprise's ``hr_payroll_account`` +module. Removes Westin's last payroll-accounting dependency on the +Enterprise ``accountant`` umbrella. + +Scope +----- +- Adds ``account_debit`` / ``account_credit`` / ``analytic_distribution`` to + ``hr.salary.rule`` (company-dependent GL mapping per rule). +- Adds ``move_id`` + ``journal_id`` + ``_fusion_create_account_move`` to + ``hr.payslip``: when a payslip is validated, generates a balanced + ``account.move`` from the salary rule mapping. +- Adds ``fusion_payroll_journal_id`` + ``fusion_payroll_auto_post`` to + ``res.company`` (fallback journal + auto-post toggle). +- Reverse links ``payslip_ids`` / ``payslip_count`` on ``account.move`` + for traceability and reporting. + +Coexistence +----------- +When Odoo Enterprise's ``hr_payroll_account`` is also installed, this +module yields move-creation to it (detected at runtime via +``ir.module.module``) so payslips don't get duplicate entries. After +``hr_payroll_account`` is uninstalled, this module owns the bridge. + +Auto-install +------------ +Auto-installs whenever both ``hr_payroll`` and ``fusion_accounting_core`` +are present. +""", + 'author': 'Nexa Systems Inc.', + 'website': 'https://nexasystems.ca', + 'license': 'LGPL-3', + 'depends': [ + 'fusion_accounting_core', + 'account', + 'hr_payroll', + 'base_iban', + ], + 'data': [ + 'data/hr_salary_rule_data.xml', + 'views/hr_salary_rule_views.xml', + 'views/hr_payslip_views.xml', + 'views/hr_payroll_structure_views.xml', + 'views/res_config_settings_views.xml', + 'views/account_move_views.xml', + ], + 'auto_install': ['hr_payroll', 'fusion_accounting_core'], + 'installable': True, + 'application': False, + 'icon': '/fusion_accounting_hr_payroll/static/description/icon.png', +} diff --git a/fusion_accounting_hr_payroll/data/hr_salary_rule_data.xml b/fusion_accounting_hr_payroll/data/hr_salary_rule_data.xml new file mode 100644 index 00000000..224a0d77 --- /dev/null +++ b/fusion_accounting_hr_payroll/data/hr_salary_rule_data.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/fusion_accounting_hr_payroll/models/__init__.py b/fusion_accounting_hr_payroll/models/__init__.py new file mode 100644 index 00000000..7aa9d70e --- /dev/null +++ b/fusion_accounting_hr_payroll/models/__init__.py @@ -0,0 +1,10 @@ +from . import hr_salary_rule +from . import hr_payslip +from . import hr_payslip_line +from . import hr_payslip_run +from . import hr_payroll_structure +from . import account_journal +from . import account_move +from . import account_move_line +from . import res_company +from . import res_config_settings diff --git a/fusion_accounting_hr_payroll/models/account_journal.py b/fusion_accounting_hr_payroll/models/account_journal.py new file mode 100644 index 00000000..951ed690 --- /dev/null +++ b/fusion_accounting_hr_payroll/models/account_journal.py @@ -0,0 +1,12 @@ +from odoo import fields, models + + +class AccountJournal(models.Model): + _inherit = 'account.journal' + + is_payroll_journal = fields.Boolean( + string='Used for Payroll', + help="Marks this journal as the salary / payroll posting journal " + "for the company. Informational; the actual fallback is set " + "on res.company.fusion_payroll_journal_id.", + ) diff --git a/fusion_accounting_hr_payroll/models/account_move.py b/fusion_accounting_hr_payroll/models/account_move.py new file mode 100644 index 00000000..e44bde12 --- /dev/null +++ b/fusion_accounting_hr_payroll/models/account_move.py @@ -0,0 +1,41 @@ +from odoo import _, fields, models + + +class AccountMove(models.Model): + _inherit = 'account.move' + + payslip_ids = fields.One2many( + comodel_name='hr.payslip', + inverse_name='move_id', + string='Payslips', + readonly=True, + copy=False, + ) + payslip_count = fields.Integer( + string='# of Payslips', + compute='_compute_payslip_count', + compute_sudo=True, + ) + + def _compute_payslip_count(self): + for move in self: + move.payslip_count = len(move.payslip_ids) + + def action_open_payslip(self): + self.ensure_one() + action = { + 'name': _('Payslips'), + 'type': 'ir.actions.act_window', + 'res_model': 'hr.payslip', + } + if self.payslip_count == 1: + action.update({ + 'view_mode': 'form', + 'res_id': self.payslip_ids.id, + }) + else: + action.update({ + 'view_mode': 'list,form', + 'domain': [('id', 'in', self.payslip_ids.ids)], + }) + return action diff --git a/fusion_accounting_hr_payroll/models/account_move_line.py b/fusion_accounting_hr_payroll/models/account_move_line.py new file mode 100644 index 00000000..d02a0be0 --- /dev/null +++ b/fusion_accounting_hr_payroll/models/account_move_line.py @@ -0,0 +1,16 @@ +from odoo import fields, models + + +class AccountMoveLine(models.Model): + _inherit = 'account.move.line' + + payslip_id = fields.Many2one( + 'hr.payslip', + string='Source Payslip', + readonly=True, + copy=False, + ondelete='set null', + index='btree_not_null', + help="Payslip this journal item was generated from " + "(populated by the Fusion payroll bridge for reporting).", + ) diff --git a/fusion_accounting_hr_payroll/models/hr_payroll_structure.py b/fusion_accounting_hr_payroll/models/hr_payroll_structure.py new file mode 100644 index 00000000..e78e5bb6 --- /dev/null +++ b/fusion_accounting_hr_payroll/models/hr_payroll_structure.py @@ -0,0 +1,26 @@ +from odoo import api, fields, models, _ +from odoo.exceptions import ValidationError + + +class HrPayrollStructure(models.Model): + _inherit = 'hr.payroll.structure' + + journal_id = fields.Many2one( + 'account.journal', + string='Salary Journal', + company_dependent=True, + domain="[('type', '=', 'general')]", + help="Default journal used when generating payroll accounting " + "entries for payslips that follow this structure.", + ) + + @api.constrains('journal_id') + def _check_journal_currency(self): + for record in self.sudo(): + journal = record.journal_id + if journal and journal.currency_id and journal.company_id \ + and journal.currency_id != journal.company_id.currency_id: + raise ValidationError(_( + "The salary journal must be in the same currency as " + "the company.", + )) diff --git a/fusion_accounting_hr_payroll/models/hr_payslip.py b/fusion_accounting_hr_payroll/models/hr_payslip.py new file mode 100644 index 00000000..30b623d8 --- /dev/null +++ b/fusion_accounting_hr_payroll/models/hr_payslip.py @@ -0,0 +1,242 @@ +import logging +from collections import defaultdict + +from odoo import _, api, fields, models +from odoo.exceptions import UserError + +_logger = logging.getLogger(__name__) + + +class HrPayslip(models.Model): + _inherit = 'hr.payslip' + + move_id = fields.Many2one( + 'account.move', + string='Accounting Entry', + readonly=True, + copy=False, + index='btree_not_null', + ) + move_state = fields.Selection( + related='move_id.state', + string='Move State', + export_string_translation=False, + ) + journal_id = fields.Many2one( + 'account.journal', + string='Salary Journal', + domain="[('type', '=', 'general')]", + ) + + @api.model + def _fusion_enterprise_bridge_active(self): + """Return True when the Enterprise hr_payroll_account module is the + authoritative payslip - GL bridge on this database. Used to avoid + duplicate move creation while both modules coexist.""" + module = self.env['ir.module.module'].sudo().search( + [('name', '=', 'hr_payroll_account')], limit=1, + ) + return bool(module) and module.state == 'installed' + + def _fusion_resolve_journal(self): + """Pick the journal for this payslip's bridge move.""" + self.ensure_one() + if self.journal_id: + return self.journal_id + struct = self.struct_id + if struct and 'journal_id' in struct._fields and struct.journal_id: + return struct.journal_id + company = self.company_id or self.env.company + return company.fusion_payroll_journal_id or False + + def _fusion_resolve_partner(self): + """Pick the best partner reference for the move lines of this payslip.""" + self.ensure_one() + employee = self.employee_id + if not employee: + return False + if 'work_contact_id' in employee._fields and employee.work_contact_id: + return employee.work_contact_id.id + if 'address_home_id' in employee._fields and employee.address_home_id: + return employee.address_home_id.id + return False + + def _fusion_get_line_amount(self, line): + """Hook so a localisation can override which payslip-line value is + posted. Defaults to ``line.total``.""" + return line.total or 0.0 + + def action_payslip_done(self): + res = super().action_payslip_done() + if self._fusion_enterprise_bridge_active(): + return res + for slip in self: + if slip.move_id: + continue + journal = slip._fusion_resolve_journal() + if not journal: + continue + try: + slip._fusion_create_account_move(journal=journal) + except UserError as err: + _logger.warning( + "Fusion payroll bridge: GL move skipped for slip %s: %s", + slip.id, err, + ) + slip.message_post(body=_( + "Fusion Payroll bridge could not create the journal " + "entry: %s", + ) % err) + except Exception: + _logger.exception( + "Fusion payroll bridge: unexpected failure for slip %s", + slip.id, + ) + return res + + def action_payslip_cancel(self): + if hasattr(super(), 'action_payslip_cancel'): + res = super().action_payslip_cancel() + else: + res = True + if self._fusion_enterprise_bridge_active(): + return res + for slip in self: + move = slip.move_id + if not move: + continue + try: + if move.state == 'posted': + move.button_draft() + move.with_context(force_delete=True).unlink() + except Exception: + _logger.exception( + "Fusion payroll bridge: cannot reverse move %s for slip %s", + move.id, slip.id, + ) + return res + + def _fusion_create_account_move(self, journal=None): + """Build a balanced ``account.move`` from this payslip using the + ``account_debit`` / ``account_credit`` mapping on each salary rule. + Returns the created move (or False if there is nothing to post).""" + self.ensure_one() + if not self.line_ids: + return False + journal = journal or self._fusion_resolve_journal() + if not journal: + raise UserError(_( + "No salary journal configured for company %s. " + "Set a fallback journal under Accounting Settings - " + "Fusion Payroll Bridge.", + ) % (self.company_id.display_name if self.company_id else '')) + + debit_per_account = defaultdict(float) + credit_per_account = defaultdict(float) + analytic_per_account = {} + + for line in self.line_ids: + rule = line.salary_rule_id + amount = self._fusion_get_line_amount(line) + if not amount: + continue + debit_account = rule.account_debit + credit_account = rule.account_credit + analytic = ( + rule.fusion_analytic_account_id + if 'fusion_analytic_account_id' in rule._fields + else False + ) + + if amount > 0: + if debit_account: + debit_per_account[debit_account.id] += amount + if credit_account: + credit_per_account[credit_account.id] += amount + else: + pos = -amount + if debit_account: + credit_per_account[debit_account.id] += pos + if credit_account: + debit_per_account[credit_account.id] += pos + + if analytic: + for acc in (debit_account, credit_account): + if acc and acc.id not in analytic_per_account: + analytic_per_account[acc.id] = analytic.id + + partner_id = self._fusion_resolve_partner() + line_label = self.display_name or self.number or _('Payslip') + move_lines = [] + all_accounts = set(debit_per_account) | set(credit_per_account) + + for account_id in all_accounts: + net = ( + debit_per_account.get(account_id, 0.0) + - credit_per_account.get(account_id, 0.0) + ) + if abs(net) < 0.005: + continue + vals = { + 'account_id': account_id, + 'name': line_label, + 'partner_id': partner_id, + } + if net > 0: + vals['debit'] = round(net, 2) + vals['credit'] = 0.0 + else: + vals['debit'] = 0.0 + vals['credit'] = round(-net, 2) + analytic_id = analytic_per_account.get(account_id) + if analytic_id: + vals['analytic_distribution'] = {str(analytic_id): 100.0} + move_lines.append((0, 0, vals)) + + if not move_lines: + return False + + total_debit = sum(vals[2]['debit'] for vals in move_lines) + total_credit = sum(vals[2]['credit'] for vals in move_lines) + if abs(total_debit - total_credit) > 0.01: + raise UserError(_( + "Payroll move not balanced: debit=%(d).2f, credit=%(c).2f. " + "Check the account_debit / account_credit mapping on the " + "salary rules of payslip %(name)s.", + ) % { + 'd': total_debit, + 'c': total_credit, + 'name': self.display_name, + }) + + move_vals = { + 'journal_id': journal.id, + 'date': self.date_to or fields.Date.context_today(self), + 'ref': self.number or self.display_name, + 'line_ids': move_lines, + 'move_type': 'entry', + } + move = self.env['account.move'].sudo().create(move_vals) + if self.company_id and self.company_id.fusion_payroll_auto_post: + try: + move.action_post() + except Exception: + _logger.exception( + "Fusion payroll bridge: auto-post failed for move %s; " + "leaving in draft.", + move.id, + ) + self.move_id = move.id + return move + + def action_open_move(self): + self.ensure_one() + if not self.move_id: + return False + return { + 'type': 'ir.actions.act_window', + 'name': _('Journal Entry'), + 'res_model': 'account.move', + 'view_mode': 'form', + 'res_id': self.move_id.id, + } diff --git a/fusion_accounting_hr_payroll/models/hr_payslip_line.py b/fusion_accounting_hr_payroll/models/hr_payslip_line.py new file mode 100644 index 00000000..eef19da6 --- /dev/null +++ b/fusion_accounting_hr_payroll/models/hr_payslip_line.py @@ -0,0 +1,16 @@ +from odoo import fields, models + + +class HrPayslipLine(models.Model): + _inherit = 'hr.payslip.line' + + move_line_id = fields.Many2one( + 'account.move.line', + string='Journal Item', + readonly=True, + copy=False, + ondelete='set null', + index='btree_not_null', + help="Account move line this payslip line was rolled up into " + "(set by the Fusion payroll bridge for traceability).", + ) diff --git a/fusion_accounting_hr_payroll/models/hr_payslip_run.py b/fusion_accounting_hr_payroll/models/hr_payslip_run.py new file mode 100644 index 00000000..ec688847 --- /dev/null +++ b/fusion_accounting_hr_payroll/models/hr_payslip_run.py @@ -0,0 +1,29 @@ +from odoo import _, fields, models + + +class HrPayslipRun(models.Model): + _inherit = 'hr.payslip.run' + + move_id = fields.Many2one( + 'account.move', + string='Batch Accounting Entry', + readonly=True, + copy=False, + ondelete='set null', + ) + move_state = fields.Selection( + related='move_id.state', + string='Move State', + ) + + def action_open_move(self): + self.ensure_one() + if not self.move_id: + return False + return { + 'type': 'ir.actions.act_window', + 'name': _('Journal Entry'), + 'res_model': 'account.move', + 'view_mode': 'form', + 'res_id': self.move_id.id, + } diff --git a/fusion_accounting_hr_payroll/models/hr_salary_rule.py b/fusion_accounting_hr_payroll/models/hr_salary_rule.py new file mode 100644 index 00000000..5f7ad978 --- /dev/null +++ b/fusion_accounting_hr_payroll/models/hr_salary_rule.py @@ -0,0 +1,35 @@ +from odoo import fields, models + + +class HrSalaryRule(models.Model): + _inherit = 'hr.salary.rule' + + account_debit = fields.Many2one( + 'account.account', + string='Debit Account', + company_dependent=True, + ondelete='restrict', + help="GL account debited when this rule's amount is posted " + "(typically expense or asset).", + ) + account_credit = fields.Many2one( + 'account.account', + string='Credit Account', + company_dependent=True, + ondelete='restrict', + help="GL account credited when this rule's amount is posted " + "(typically liability).", + ) + fusion_analytic_account_id = fields.Many2one( + 'account.analytic.account', + string='Analytic Account', + company_dependent=True, + help="Optional analytic account applied to both legs of the move.", + ) + not_computed_in_net = fields.Boolean( + string="Excluded from Net", + default=False, + help="If checked, the result of this rule is excluded from the " + "Net salary line in the journal entry. Set a dedicated " + "debit/credit account so the amount is posted independently.", + ) diff --git a/fusion_accounting_hr_payroll/models/res_company.py b/fusion_accounting_hr_payroll/models/res_company.py new file mode 100644 index 00000000..d221f657 --- /dev/null +++ b/fusion_accounting_hr_payroll/models/res_company.py @@ -0,0 +1,19 @@ +from odoo import fields, models + + +class ResCompany(models.Model): + _inherit = 'res.company' + + fusion_payroll_journal_id = fields.Many2one( + 'account.journal', + string='Default Payroll Journal', + domain="[('type', '=', 'general'), ('company_id', '=', id)]", + help="Fallback journal used by the Fusion payroll bridge when a " + "payslip's structure does not define one.", + ) + fusion_payroll_auto_post = fields.Boolean( + string='Auto-post Payroll Entries', + default=False, + help="When enabled, payroll-generated journal entries are posted " + "immediately. Otherwise they remain in draft for review.", + ) diff --git a/fusion_accounting_hr_payroll/models/res_config_settings.py b/fusion_accounting_hr_payroll/models/res_config_settings.py new file mode 100644 index 00000000..53c6b1c3 --- /dev/null +++ b/fusion_accounting_hr_payroll/models/res_config_settings.py @@ -0,0 +1,16 @@ +from odoo import fields, models + + +class ResConfigSettings(models.TransientModel): + _inherit = 'res.config.settings' + + fusion_payroll_journal_id = fields.Many2one( + related='company_id.fusion_payroll_journal_id', + string='Default Payroll Journal', + readonly=False, + ) + fusion_payroll_auto_post = fields.Boolean( + related='company_id.fusion_payroll_auto_post', + string='Auto-post Payroll Entries', + readonly=False, + ) diff --git a/fusion_accounting_hr_payroll/static/description/icon.png b/fusion_accounting_hr_payroll/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..6773c627dc8ca783b5414766fdbd486de33247d0 GIT binary patch literal 73585 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

tIeyo-Gt$vj&yQ?ibyigSLLN~9+ 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∾̳|J{VR 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 bzK{MFeb>Wk^o&W(00000NkvXXu0mjfpW3^6 literal 0 HcmV?d00001 diff --git a/fusion_accounting_hr_payroll/tests/__init__.py b/fusion_accounting_hr_payroll/tests/__init__.py new file mode 100644 index 00000000..6c249f5f --- /dev/null +++ b/fusion_accounting_hr_payroll/tests/__init__.py @@ -0,0 +1 @@ +from . import test_payslip_to_move diff --git a/fusion_accounting_hr_payroll/tests/test_payslip_to_move.py b/fusion_accounting_hr_payroll/tests/test_payslip_to_move.py new file mode 100644 index 00000000..b656af0e --- /dev/null +++ b/fusion_accounting_hr_payroll/tests/test_payslip_to_move.py @@ -0,0 +1,108 @@ +from odoo.tests import tagged +from odoo.tests.common import TransactionCase + + +@tagged('post_install', '-at_install') +class TestFusionPayrollBridge(TransactionCase): + """Smoke tests for the Fusion payroll bridge. + + Verifies that the field surface required to replace Enterprise's + ``hr_payroll_account`` is present after the module installs. + Full payslip-to-move integration is exercised in a separate + integration test that needs a seeded payroll structure. + """ + + def test_module_installed(self): + module = self.env['ir.module.module'].sudo().search( + [('name', '=', 'fusion_accounting_hr_payroll')], limit=1, + ) + self.assertTrue(module, "Module record must exist") + self.assertEqual( + module.state, 'installed', + "Module should be in 'installed' state for these tests to run", + ) + + def test_salary_rule_has_account_fields(self): + rule_model = self.env['hr.salary.rule'] + for fname in ( + 'account_debit', + 'account_credit', + 'fusion_analytic_account_id', + 'not_computed_in_net', + ): + self.assertIn( + fname, rule_model._fields, + f"hr.salary.rule must expose '{fname}'", + ) + + def test_payslip_has_move_link(self): + slip_model = self.env['hr.payslip'] + for fname in ('move_id', 'move_state', 'journal_id'): + self.assertIn( + fname, slip_model._fields, + f"hr.payslip must expose '{fname}'", + ) + self.assertTrue( + hasattr(slip_model, '_fusion_create_account_move'), + "hr.payslip must expose the _fusion_create_account_move bridge", + ) + self.assertTrue( + hasattr(slip_model, '_fusion_enterprise_bridge_active'), + "hr.payslip must expose the Enterprise-bridge detector", + ) + + def test_payslip_run_has_move_link(self): + run_model = self.env['hr.payslip.run'] + for fname in ('move_id', 'move_state'): + self.assertIn( + fname, run_model._fields, + f"hr.payslip.run must expose '{fname}'", + ) + + def test_company_payroll_journal_field(self): + co_model = self.env['res.company'] + for fname in ('fusion_payroll_journal_id', 'fusion_payroll_auto_post'): + self.assertIn( + fname, co_model._fields, + f"res.company must expose '{fname}'", + ) + + def test_account_move_back_links(self): + move_model = self.env['account.move'] + for fname in ('payslip_ids', 'payslip_count'): + self.assertIn( + fname, move_model._fields, + f"account.move must expose '{fname}'", + ) + line_model = self.env['account.move.line'] + self.assertIn( + 'payslip_id', line_model._fields, + "account.move.line must expose 'payslip_id'", + ) + + def test_payslip_line_has_move_line_link(self): + line_model = self.env['hr.payslip.line'] + self.assertIn( + 'move_line_id', line_model._fields, + "hr.payslip.line must expose 'move_line_id'", + ) + + def test_enterprise_bridge_detector_returns_bool(self): + slip_model = self.env['hr.payslip'] + self.assertIsInstance( + slip_model._fusion_enterprise_bridge_active(), bool, + ) + + def test_account_journal_payroll_flag(self): + journal_model = self.env['account.journal'] + self.assertIn( + 'is_payroll_journal', journal_model._fields, + "account.journal must expose 'is_payroll_journal'", + ) + + def test_payroll_structure_journal_field(self): + struct_model = self.env['hr.payroll.structure'] + self.assertIn( + 'journal_id', struct_model._fields, + "hr.payroll.structure must expose 'journal_id'", + ) diff --git a/fusion_accounting_hr_payroll/views/account_move_views.xml b/fusion_accounting_hr_payroll/views/account_move_views.xml new file mode 100644 index 00000000..53f98074 --- /dev/null +++ b/fusion_accounting_hr_payroll/views/account_move_views.xml @@ -0,0 +1,24 @@ + + + + account.move.form.fusion.payroll.bridge + account.move + + +

+ + +
+ + + diff --git a/fusion_accounting_hr_payroll/views/hr_payroll_structure_views.xml b/fusion_accounting_hr_payroll/views/hr_payroll_structure_views.xml new file mode 100644 index 00000000..d07c7475 --- /dev/null +++ b/fusion_accounting_hr_payroll/views/hr_payroll_structure_views.xml @@ -0,0 +1,15 @@ + + + + hr.payroll.structure.form.fusion.payroll.bridge + hr.payroll.structure + + + + + + + + + + diff --git a/fusion_accounting_hr_payroll/views/hr_payslip_views.xml b/fusion_accounting_hr_payroll/views/hr_payslip_views.xml new file mode 100644 index 00000000..dc5ae527 --- /dev/null +++ b/fusion_accounting_hr_payroll/views/hr_payslip_views.xml @@ -0,0 +1,26 @@ + + + + hr.payslip.form.fusion.payroll.bridge + hr.payslip + + +
+ + + +
+
+
+
diff --git a/fusion_accounting_hr_payroll/views/hr_salary_rule_views.xml b/fusion_accounting_hr_payroll/views/hr_salary_rule_views.xml new file mode 100644 index 00000000..1fe9d49e --- /dev/null +++ b/fusion_accounting_hr_payroll/views/hr_salary_rule_views.xml @@ -0,0 +1,26 @@ + + + + hr.salary.rule.form.fusion.payroll.bridge + hr.salary.rule + + + + + + + + + + + + + + + + + + + diff --git a/fusion_accounting_hr_payroll/views/res_config_settings_views.xml b/fusion_accounting_hr_payroll/views/res_config_settings_views.xml new file mode 100644 index 00000000..97782324 --- /dev/null +++ b/fusion_accounting_hr_payroll/views/res_config_settings_views.xml @@ -0,0 +1,24 @@ + + + + res.config.settings.form.fusion.payroll.bridge + res.config.settings + + + + + + + + + + + + + + +