mirror of
https://github.com/OCA/account-financial-tools.git
synced 2025-02-02 12:47:26 +02:00
55 lines
2.0 KiB
Python
55 lines
2.0 KiB
Python
# Copyright 2020 ACSONE SA/NV
|
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
|
|
|
from odoo import _, api, models
|
|
from odoo.exceptions import UserError
|
|
|
|
|
|
class AccountMove(models.Model):
|
|
_inherit = "account.move"
|
|
|
|
@api.onchange("fiscal_position_id")
|
|
def _onchange_fiscal_position_allowed_journal(self):
|
|
self.ensure_one()
|
|
journal_domain = [
|
|
("company_id", "=", self.company_id.id),
|
|
("type", "=?", self.invoice_filter_type_domain),
|
|
]
|
|
if self.fiscal_position_id:
|
|
journal_type = "sale" if self.is_sale_document() else "purchase"
|
|
allowed_journal = self.fiscal_position_id._get_allowed_journal(journal_type)
|
|
if allowed_journal:
|
|
self.journal_id = allowed_journal
|
|
journal_domain.append(
|
|
("id", "in", self.fiscal_position_id.allowed_journal_ids.ids)
|
|
)
|
|
return {"domain": {"journal_id": journal_domain}}
|
|
|
|
def _check_journal_allowed_fiscal_position(self):
|
|
"""
|
|
This method checks whether the journal of the invoice is allowed for the
|
|
selected fiscal position.
|
|
If no fiscal position or no allowed journal on the fiscal position, always OK.
|
|
:raise: UserError if not allowed
|
|
"""
|
|
for rec in self:
|
|
if (
|
|
rec.is_invoice(include_receipts=True)
|
|
and self.fiscal_position_id
|
|
and self.fiscal_position_id.allowed_journal_ids
|
|
and rec.journal_id not in self.fiscal_position_id.allowed_journal_ids
|
|
):
|
|
raise UserError(
|
|
_(
|
|
"Journal {journal_name} is not allowed for fiscal position "
|
|
"{fp_name}."
|
|
).format(
|
|
journal_name=rec.journal_id.display_name,
|
|
fp_name=rec.fiscal_position_id.display_name,
|
|
)
|
|
)
|
|
|
|
def post(self):
|
|
self._check_journal_allowed_fiscal_position()
|
|
return super().post()
|