feat: add search method override to include asset cash accounts in reconciliation candidates
This commit is contained in:
parent
964e180fea
commit
afbcb4d052
@ -32,6 +32,11 @@ Solves Odoo's restrictive `Access to unauthorized or invalid companies` error/wa
|
|||||||
- **Environment & Session Sanitization**: Overrides `ir.http._pre_dispatch` and `_dispatch` to safely query the cashier's authorized companies using `sudo()`, and dynamically filters out unauthorized or parent company IDs (such as parent company `2`) from `allowed_company_ids` in request parameters (`request.params`), HTTP sessions (`request.session.context`), and environment context (`request.env.context`).
|
- **Environment & Session Sanitization**: Overrides `ir.http._pre_dispatch` and `_dispatch` to safely query the cashier's authorized companies using `sudo()`, and dynamically filters out unauthorized or parent company IDs (such as parent company `2`) from `allowed_company_ids` in request parameters (`request.params`), HTTP sessions (`request.session.context`), and environment context (`request.env.context`).
|
||||||
- **Sudo Order Post-Processing**: Inherits `pos.order` to run post-processing (`_process_saved_order`, including picking generation, cost/method computation, and payment posting) under `sudo()`. This allows Odoo to safely read company-dependent properties (like `cost_method` or `property_cost_method`) and generate inventory pickings without triggering security warnings in `environments.py`.
|
- **Sudo Order Post-Processing**: Inherits `pos.order` to run post-processing (`_process_saved_order`, including picking generation, cost/method computation, and payment posting) under `sudo()`. This allows Odoo to safely read company-dependent properties (like `cost_method` or `property_cost_method`) and generate inventory pickings without triggering security warnings in `environments.py`.
|
||||||
|
|
||||||
|
### 5. Centralized Cash Bank Reconciliation Patch
|
||||||
|
Enables matching of cash journal entries (e.g. from the centralized cash journal) in Odoo's standard bank reconciliation widget:
|
||||||
|
- **Reconciliation Candidate Expansion**: Patches the standard `account.move.line` search method (`_search_account_id`) to automatically include `asset_cash` accounts when filtering candidate line searches. This allows users to reconcile bank statement lines in the parent company directly against mirror/clearing cash entries.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## Configuration
|
## Configuration
|
||||||
### 1. POS Inter-Company Clearing
|
### 1. POS Inter-Company Clearing
|
||||||
|
|||||||
@ -139,6 +139,39 @@ class AccountMove(models.Model):
|
|||||||
class AccountMoveLine(models.Model):
|
class AccountMoveLine(models.Model):
|
||||||
_inherit = 'account.move.line'
|
_inherit = 'account.move.line'
|
||||||
|
|
||||||
|
@api.model
|
||||||
|
def _search_account_id(self, operator, value):
|
||||||
|
res = super()._search_account_id(operator, value)
|
||||||
|
if res and isinstance(res, list) and len(res) == 1:
|
||||||
|
term = res[0]
|
||||||
|
if len(term) == 3 and term[0] == 'account_id' and term[1] in ('in', 'not in') and isinstance(term[2], (list, tuple, set)):
|
||||||
|
resolved_ids = list(term[2])
|
||||||
|
reconcile_accounts = self.env['account.account'].sudo().browse(resolved_ids).filtered('reconcile')
|
||||||
|
if reconcile_accounts:
|
||||||
|
cash_accounts = self.env['account.account'].sudo().search([('account_type', '=', 'asset_cash')])
|
||||||
|
if cash_accounts:
|
||||||
|
if term[1] == 'in':
|
||||||
|
res = [
|
||||||
|
'|',
|
||||||
|
('account_id', 'in', tuple(reconcile_accounts.ids)),
|
||||||
|
'&',
|
||||||
|
'&',
|
||||||
|
('account_id', 'in', tuple(cash_accounts.ids)),
|
||||||
|
('journal_id.type', '=', 'cash'),
|
||||||
|
('journal_id.company_id', '=', self.env.company.id)
|
||||||
|
]
|
||||||
|
elif term[1] == 'not in':
|
||||||
|
res = [
|
||||||
|
'&',
|
||||||
|
('account_id', 'not in', tuple(reconcile_accounts.ids)),
|
||||||
|
'|',
|
||||||
|
'|',
|
||||||
|
('account_id', 'not in', tuple(cash_accounts.ids)),
|
||||||
|
('journal_id.type', '!=', 'cash'),
|
||||||
|
('journal_id.company_id', '!=', self.env.company.id)
|
||||||
|
]
|
||||||
|
return res
|
||||||
|
|
||||||
def _related_analytic_distribution(self):
|
def _related_analytic_distribution(self):
|
||||||
res = super()._related_analytic_distribution()
|
res = super()._related_analytic_distribution()
|
||||||
if res:
|
if res:
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user