Initial commit: Odoo 18.0-20251222 extra-addons
This commit is contained in:
90
account_lock_to_date/models/account_lock_exception.py
Executable file
90
account_lock_to_date/models/account_lock_exception.py
Executable file
@@ -0,0 +1,90 @@
|
||||
# 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
|
||||
]
|
||||
Reference in New Issue
Block a user