33 lines
1.7 KiB
Python
33 lines
1.7 KiB
Python
# -*- coding: utf-8 -*-
|
|
from odoo import models, api
|
|
|
|
class AccountPayment(models.Model):
|
|
_inherit = 'account.payment'
|
|
|
|
@api.depends('company_id', 'partner_id')
|
|
def _compute_journal_id(self):
|
|
# Call the parent method first to compute standard default journal
|
|
super(AccountPayment, self)._compute_journal_id()
|
|
|
|
# Override default journal if the user has specific allowed journals
|
|
user = self.env.user
|
|
allowed_journals = user.sudo().allowed_journal_ids
|
|
if allowed_journals:
|
|
for payment in self:
|
|
# If the currently selected journal is not in user's allowed journals
|
|
if not payment.journal_id or payment.journal_id not in allowed_journals:
|
|
# Try to select from intersection of allowed journals and available journals
|
|
allowed_available = allowed_journals & payment.available_journal_ids
|
|
if allowed_available:
|
|
payment.journal_id = allowed_available[0]
|
|
else:
|
|
# Fallback to the first allowed journal matching payment company
|
|
company = payment.company_id or self.env.company
|
|
company_journals = allowed_journals.filtered(
|
|
lambda j: j.company_id.id in [company.id, False] or j.company_id in company.parent_ids or j.company_id in company.child_ids
|
|
)
|
|
if company_journals:
|
|
payment.journal_id = company_journals[0]
|
|
else:
|
|
payment.journal_id = allowed_journals[0]
|