Initial commit
This commit is contained in:
86
Fusion Accounting/models/account_account.py
Normal file
86
Fusion Accounting/models/account_account.py
Normal file
@@ -0,0 +1,86 @@
|
||||
# Fusion Accounting - Account extensions
|
||||
# Provides reconciliation actions, asset automation, and budget linkage
|
||||
|
||||
import ast
|
||||
|
||||
from odoo import api, fields, models, _
|
||||
|
||||
|
||||
class FusionAccountAccount(models.Model):
|
||||
"""Augments the standard chart of accounts with asset management
|
||||
and reconciliation capabilities for Fusion Accounting."""
|
||||
|
||||
_inherit = "account.account"
|
||||
|
||||
# ---- Relational Fields ----
|
||||
exclude_provision_currency_ids = fields.Many2many(
|
||||
comodel_name='res.currency',
|
||||
relation='account_account_exclude_res_currency_provision',
|
||||
help="Currencies excluded from foreign exchange provision calculations.",
|
||||
)
|
||||
budget_item_ids = fields.One2many(
|
||||
comodel_name='account.report.budget.item',
|
||||
inverse_name='account_id',
|
||||
)
|
||||
asset_model_ids = fields.Many2many(
|
||||
comodel_name='account.asset',
|
||||
domain=[('state', '=', 'model')],
|
||||
help="When this account appears on a vendor bill or credit note, "
|
||||
"an asset record is generated per linked model.",
|
||||
tracking=True,
|
||||
)
|
||||
|
||||
# ---- Selection & Computed ----
|
||||
create_asset = fields.Selection(
|
||||
selection=[
|
||||
('no', 'No'),
|
||||
('draft', 'Create in draft'),
|
||||
('validate', 'Create and validate'),
|
||||
],
|
||||
required=True,
|
||||
default='no',
|
||||
tracking=True,
|
||||
)
|
||||
can_create_asset = fields.Boolean(
|
||||
compute="_compute_asset_creation_eligible",
|
||||
)
|
||||
form_view_ref = fields.Char(
|
||||
compute='_compute_asset_creation_eligible',
|
||||
)
|
||||
multiple_assets_per_line = fields.Boolean(
|
||||
string='Multiple Assets per Line',
|
||||
default=False,
|
||||
tracking=True,
|
||||
help="Generate individual asset records per unit quantity on "
|
||||
"the bill line rather than a single consolidated asset.",
|
||||
)
|
||||
|
||||
# ---- Compute Methods ----
|
||||
@api.depends('account_type')
|
||||
def _compute_asset_creation_eligible(self):
|
||||
"""Determine whether the account type supports automatic
|
||||
asset creation and set the appropriate form view reference."""
|
||||
eligible_types = ('asset_fixed', 'asset_non_current')
|
||||
for acct in self:
|
||||
acct.can_create_asset = acct.account_type in eligible_types
|
||||
acct.form_view_ref = 'fusion_accountingview_account_asset_form'
|
||||
|
||||
# ---- Onchange ----
|
||||
@api.onchange('create_asset')
|
||||
def _onchange_reset_multiple_assets(self):
|
||||
"""Disable per-line asset splitting when asset creation is turned off."""
|
||||
for acct in self:
|
||||
if acct.create_asset == 'no':
|
||||
acct.multiple_assets_per_line = False
|
||||
|
||||
# ---- Actions ----
|
||||
def action_open_reconcile(self):
|
||||
"""Navigate to unreconciled journal items filtered by this account."""
|
||||
self.ensure_one()
|
||||
act_data = self.env['ir.actions.act_window']._for_xml_id(
|
||||
'fusion_accounting.action_move_line_posted_unreconciled'
|
||||
)
|
||||
parsed_domain = ast.literal_eval(act_data.get('domain', '[]'))
|
||||
parsed_domain.append(('account_id', '=', self.id))
|
||||
act_data['domain'] = parsed_domain
|
||||
return act_data
|
||||
Reference in New Issue
Block a user