Files
Odoo-18.0-20251222/account_lock_to_date/models/account_lock_exception.py
tocmo0nlord adbe430761
Some checks failed
pre-commit / pre-commit (push) Has been cancelled
tests / Detect unreleased dependencies (push) Has been cancelled
tests / test with OCB (push) Has been cancelled
tests / test with Odoo (push) Has been cancelled
Initial commit: Odoo 18.0-20251222 extra-addons
2026-03-13 20:43:25 +00:00

91 lines
3.3 KiB
Python
Executable File

# Copyright 2025 ForgeFlow S.L.
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import _, api, fields, models
from odoo.exceptions import UserError
from odoo.osv import expression
from .res_company import SOFT_LOCK_TO_DATE_FIELDS
class AccountLockException(models.Model):
_inherit = "account.lock_exception"
# The changed lock date
lock_date_field = fields.Selection(
selection_add=[
("fiscalyear_lock_to_date", "Global Lock To Date"),
("sale_lock_to_date", "Sales Lock To Date"),
("purchase_lock_to_date", "Purchase Lock To Date"),
],
ondelete={
"fiscalyear_lock_to_date": "cascade",
"sale_lock_to_date": "cascade",
"purchase_lock_to_date": "cascade",
},
)
# (Non-stored) computed lock to date fields; c.f. res.company
fiscalyear_lock_to_date = fields.Date(
string="Global Lock To Date",
compute="_compute_lock_dates",
search="_search_fiscalyear_lock_to_date",
help="The date the Global Lock To Date is set to by this exception. "
"If the lock to date is not changed it is set to False.",
)
sale_lock_to_date = fields.Date(
string="Sales Lock To Date",
compute="_compute_lock_dates",
search="_search_sale_lock_to_date",
help="The date the Sale Lock To Date is set to by this exception. "
"If the lock to date is not changed it is set to False.",
)
purchase_lock_to_date = fields.Date(
compute="_compute_lock_dates",
search="_search_purchase_lock_to_date",
help="The date the Purchase Lock To Date is set to by this exception. "
"If the lock to date is not changed it is set to False.",
)
@api.depends("lock_date_field", "lock_date")
def _compute_lock_dates(self):
res = super()._compute_lock_dates()
for exception in self:
for field in SOFT_LOCK_TO_DATE_FIELDS:
if field == exception.lock_date_field:
exception[field] = exception.lock_date
else:
exception[field] = False
return res
def _search_lock_to_date(self, field, operator, value):
if operator not in [">", ">="] or not value:
raise UserError(_("Operation not supported"))
return [
"&",
("lock_date_field", "=", field),
"|",
("lock_date", "=", False),
("lock_date", operator, value),
]
def _search_fiscalyear_lock_to_date(self, operator, value):
return self._search_lock_to_date("fiscalyear_lock_to_date", operator, value)
def _search_sale_lock_to_date(self, operator, value):
return self._search_lock_to_date("sale_lock_to_date", operator, value)
def _search_purchase_lock_to_date(self, operator, value):
return self._search_lock_to_date("purchase_lock_to_date", operator, value)
@api.model
def _get_active_exceptions_to_domain(self, company, soft_lock_to_date_fields):
return [
*expression.OR(
[(field, ">", company[field])]
for field in soft_lock_to_date_fields
if company[field]
),
("company_id", "=", company.id),
("state", "=", "active"), # checks the datetime
]