Initial commit

This commit is contained in:
gsinghpal
2026-02-22 01:22:18 -05:00
commit 5200d5baf0
2394 changed files with 386834 additions and 0 deletions

View File

@@ -0,0 +1,202 @@
import ast
from odoo import models
# Journal types that represent liquidity accounts (bank, cash, credit card)
LIQUIDITY_JOURNAL_TYPES = ('bank', 'cash', 'credit')
class AccountJournal(models.Model):
"""Extends account.journal to add bank reconciliation dashboard actions.
Provides methods that link the journal dashboard cards to the
bank reconciliation widget and related views, enabling quick
navigation from the Accounting dashboard.
"""
_inherit = 'account.journal'
# -------------------------------------------------------------------------
# Reconciliation actions
# -------------------------------------------------------------------------
def action_open_reconcile(self):
"""Open the appropriate reconciliation view for this journal.
For liquidity journals (bank / cash / credit), opens the bank
reconciliation widget filtered to show only unmatched statement
lines belonging to this journal.
For all other journal types (sale, purchase, general …), opens
the list of posted but unreconciled journal items so the user
can manually reconcile them.
Returns:
dict: A window action descriptor.
"""
self.ensure_one()
if self.type in LIQUIDITY_JOURNAL_TYPES:
reconcile_ctx = {
'default_journal_id': self.id,
'search_default_journal_id': self.id,
'search_default_not_matched': True,
}
stmt_line_model = self.env['account.bank.statement.line']
return stmt_line_model._action_open_bank_reconciliation_widget(
default_context=reconcile_ctx,
)
# Non-liquidity journals: show unreconciled move lines
xml_ref = 'fusion_accounting.action_move_line_posted_unreconciled'
return self.env['ir.actions.act_window']._for_xml_id(xml_ref)
def action_open_to_check(self):
"""Open bank reconciliation showing only items flagged for review.
Navigates to the bank reconciliation widget with the
*to check* search filter enabled so the user sees only
statement lines that were flagged during import or matching.
Returns:
dict: A window action descriptor.
"""
self.ensure_one()
review_ctx = {
'default_journal_id': self.id,
'search_default_journal_id': self.id,
'search_default_to_check': True,
}
stmt_line_model = self.env['account.bank.statement.line']
return stmt_line_model._action_open_bank_reconciliation_widget(
default_context=review_ctx,
)
def action_open_bank_transactions(self):
"""Open a flat list of all bank transactions for this journal.
Unlike the default kanban-first reconciliation view, this
method forces the list view to appear first, giving the user
a tabular overview of every transaction.
Returns:
dict: A window action descriptor.
"""
self.ensure_one()
txn_ctx = {
'default_journal_id': self.id,
'search_default_journal_id': self.id,
}
stmt_line_model = self.env['account.bank.statement.line']
return stmt_line_model._action_open_bank_reconciliation_widget(
default_context=txn_ctx,
kanban_first=False,
)
def action_open_reconcile_statement(self):
"""Open bank reconciliation for a single statement.
The target statement id is expected in the environment context
under the key ``statement_id``. This is typically set by a
button on the bank statement form or dashboard.
Returns:
dict: A window action descriptor.
"""
target_statement_id = self.env.context.get('statement_id')
stmt_ctx = {
'search_default_statement_id': target_statement_id,
}
stmt_line_model = self.env['account.bank.statement.line']
return stmt_line_model._action_open_bank_reconciliation_widget(
default_context=stmt_ctx,
)
# -------------------------------------------------------------------------
# Dashboard open_action override
# -------------------------------------------------------------------------
def open_action(self):
"""Route the dashboard click to the bank reconciliation widget.
When the user clicks on a liquidity journal card in the
Accounting dashboard and no specific ``action_name`` has been
provided in the context, redirect to the bank reconciliation
widget filtered for this journal's default account.
For every other case the standard behaviour is preserved by
delegating to ``super()``.
Returns:
dict: A window action descriptor.
"""
is_liquidity = self.type in LIQUIDITY_JOURNAL_TYPES
has_explicit_action = self.env.context.get('action_name')
if is_liquidity and not has_explicit_action:
self.ensure_one()
account_filter = [
('line_ids.account_id', '=', self.default_account_id.id),
]
widget_ctx = {
'default_journal_id': self.id,
'search_default_journal_id': self.id,
}
stmt_line_model = self.env['account.bank.statement.line']
return stmt_line_model._action_open_bank_reconciliation_widget(
extra_domain=account_filter,
default_context=widget_ctx,
)
return super().open_action()
# -------------------------------------------------------------------------
# Dashboard data helpers
# -------------------------------------------------------------------------
def _fill_general_dashboard_data(self, dashboard_data):
"""Augment general-journal dashboard data with tax periodicity flag.
For journals of type *general*, adds the boolean key
``is_account_tax_periodicity_journal`` that indicates whether
the journal is the company's designated tax-closing journal.
Args:
dashboard_data (dict): Mapping of journal id -> dashboard
data dict, mutated in place.
"""
super()._fill_general_dashboard_data(dashboard_data)
general_journals = self.filtered(lambda j: j.type == 'general')
for jrnl in general_journals:
tax_journal = jrnl.company_id._get_tax_closing_journal()
is_tax_periodicity = jrnl == tax_journal
dashboard_data[jrnl.id]['is_account_tax_periodicity_journal'] = is_tax_periodicity
# -------------------------------------------------------------------------
# General Ledger shortcut
# -------------------------------------------------------------------------
def action_open_bank_balance_in_gl(self):
"""Open the General Ledger report pre-filtered to this journal's bank account.
Loads the General Ledger action and injects the default
account code filter so the report immediately displays
only the lines relevant to the journal's primary account.
Returns:
dict: A window action descriptor for the General Ledger report.
"""
self.ensure_one()
gl_action_ref = 'fusion_accounting.action_account_report_general_ledger'
gl_action = self.env['ir.actions.actions']._for_xml_id(gl_action_ref)
# Merge the account filter into the existing action context
existing_ctx = ast.literal_eval(gl_action.get('context', '{}'))
existing_ctx['default_filter_accounts'] = self.default_account_id.code
gl_action['context'] = existing_ctx
return gl_action