Initial commit
This commit is contained in:
156
Fusion Accounting/__init__.py
Normal file
156
Fusion Accounting/__init__.py
Normal file
@@ -0,0 +1,156 @@
|
||||
from . import models
|
||||
from . import wizard
|
||||
from . import controllers
|
||||
|
||||
from odoo import Command
|
||||
|
||||
import logging
|
||||
|
||||
_logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def _fusion_accounting_post_init(env):
|
||||
"""Post-installation hook for Fusion Accounting module.
|
||||
|
||||
Sets up SEPA-related modules for applicable countries,
|
||||
configures chart of accounts data, and initiates onboarding.
|
||||
"""
|
||||
_install_regional_modules(env)
|
||||
_load_chart_template_data(env)
|
||||
_configure_tax_journals(env)
|
||||
|
||||
|
||||
def _install_regional_modules(env):
|
||||
"""Install region-specific modules based on company country."""
|
||||
country_code = env.company.country_id.code
|
||||
if not country_code:
|
||||
return
|
||||
|
||||
modules_to_install = []
|
||||
|
||||
sepa_zone = env.ref('base.sepa_zone', raise_if_not_found=False)
|
||||
if sepa_zone:
|
||||
sepa_countries = sepa_zone.mapped('country_ids.code')
|
||||
if country_code in sepa_countries:
|
||||
modules_to_install.extend([
|
||||
'account_iso20022',
|
||||
'account_bank_statement_import_camt',
|
||||
])
|
||||
|
||||
if country_code in ('AU', 'CA', 'US'):
|
||||
modules_to_install.append('account_reports_cash_basis')
|
||||
|
||||
pending = env['ir.module.module'].search([
|
||||
('name', 'in', modules_to_install),
|
||||
('state', '=', 'uninstalled'),
|
||||
])
|
||||
if pending:
|
||||
pending.sudo().button_install()
|
||||
|
||||
|
||||
def _load_chart_template_data(env):
|
||||
"""Load Fusion Accounting company data for existing chart templates."""
|
||||
companies = env['res.company'].search(
|
||||
[('chart_template', '!=', False)],
|
||||
order='parent_path',
|
||||
)
|
||||
for company in companies:
|
||||
chart = env['account.chart.template'].with_company(company)
|
||||
chart._load_data({
|
||||
'res.company': chart._get_fusion_accounting_res_company(
|
||||
company.chart_template
|
||||
),
|
||||
})
|
||||
|
||||
|
||||
def _configure_tax_journals(env):
|
||||
"""Set up default tax periodicity journal and enable onboarding."""
|
||||
for company in env['res.company'].search([]):
|
||||
misc_journal = company._get_default_misc_journal()
|
||||
company.account_tax_periodicity_journal_id = misc_journal
|
||||
if misc_journal:
|
||||
misc_journal.show_on_dashboard = True
|
||||
company._initiate_account_onboardings()
|
||||
|
||||
|
||||
def uninstall_hook(env):
|
||||
"""Clean up accounting groups and menus when uninstalling."""
|
||||
_reset_account_groups(env)
|
||||
_restore_invoicing_menus(env)
|
||||
|
||||
|
||||
def _reset_account_groups(env):
|
||||
"""Reset account security groups to their pre-install state."""
|
||||
hidden_category = env.ref('base.module_category_hidden')
|
||||
|
||||
basic_group = env.ref('account.group_account_basic', raise_if_not_found=False)
|
||||
manager_group = env.ref('account.group_account_manager', raise_if_not_found=False)
|
||||
|
||||
if basic_group and manager_group:
|
||||
basic_group.write({
|
||||
'users': [Command.clear()],
|
||||
'category_id': hidden_category.id,
|
||||
})
|
||||
manager_group.write({
|
||||
'implied_ids': [Command.unlink(basic_group.id)],
|
||||
})
|
||||
|
||||
try:
|
||||
user_group = env.ref('account.group_account_user')
|
||||
user_group.write({
|
||||
'name': 'Show Full Accounting Features',
|
||||
'implied_ids': [(3, env.ref('account.group_account_invoice').id)],
|
||||
'category_id': hidden_category.id,
|
||||
})
|
||||
readonly_group = env.ref('account.group_account_readonly')
|
||||
readonly_group.write({
|
||||
'name': 'Show Full Accounting Features - Readonly',
|
||||
'category_id': hidden_category.id,
|
||||
})
|
||||
except ValueError as exc:
|
||||
_logger.warning('Could not reset account user/readonly groups: %s', exc)
|
||||
|
||||
try:
|
||||
manager = env.ref('account.group_account_manager')
|
||||
invoice_group = env.ref('account.group_account_invoice')
|
||||
readonly = env.ref('account.group_account_readonly')
|
||||
user = env.ref('account.group_account_user')
|
||||
manager.write({
|
||||
'name': 'Billing Manager',
|
||||
'implied_ids': [
|
||||
(4, invoice_group.id),
|
||||
(3, readonly.id),
|
||||
(3, user.id),
|
||||
],
|
||||
})
|
||||
except ValueError as exc:
|
||||
_logger.warning('Could not reset account manager group: %s', exc)
|
||||
|
||||
# Remove advanced accounting feature visibility
|
||||
user_ref = env.ref('account.group_account_user', raise_if_not_found=False)
|
||||
readonly_ref = env.ref('account.group_account_readonly', raise_if_not_found=False)
|
||||
if user_ref:
|
||||
user_ref.write({'users': [(5, False, False)]})
|
||||
if readonly_ref:
|
||||
readonly_ref.write({'users': [(5, False, False)]})
|
||||
|
||||
|
||||
def _restore_invoicing_menus(env):
|
||||
"""Move accounting menus back under the Invoicing parent menu."""
|
||||
invoicing_menu = env.ref('account.menu_finance', raise_if_not_found=False)
|
||||
if not invoicing_menu:
|
||||
return
|
||||
|
||||
menu_refs = [
|
||||
'account.menu_finance_receivables',
|
||||
'account.menu_finance_payables',
|
||||
'account.menu_finance_entries',
|
||||
'account.menu_finance_reports',
|
||||
'account.menu_finance_configuration',
|
||||
'account.menu_board_journal_1',
|
||||
]
|
||||
for ref in menu_refs:
|
||||
try:
|
||||
env.ref(ref).parent_id = invoicing_menu
|
||||
except ValueError as exc:
|
||||
_logger.warning('Could not restore menu %s: %s', ref, exc)
|
||||
Reference in New Issue
Block a user