Files
Odoo-18.0-20251222/sale_partner_primeship/models/sale_primeship.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

78 lines
2.5 KiB
Python
Executable File

# Copyright 2021 Akretion France (http://www.akretion.com/)
# Copyright 2024 Akretion France (http://www.akretion.com/)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import _, api, fields, models
from odoo.exceptions import ValidationError
class SalePrimeship(models.Model):
_name = "sale.primeship"
_description = "Sale Prime Memberships"
active = fields.Boolean(default=True)
name = fields.Char(compute="_compute_name")
start_date = fields.Date(required=True)
# End date day is not included in primeship date range
end_date = fields.Date(required=True)
partner_id = fields.Many2one(
comodel_name="res.partner",
required=True,
ondelete="cascade",
index=True,
)
order_line_id = fields.Many2one(
comodel_name="sale.order.line",
string="Sale Order Line",
)
order_id = fields.Many2one(string="Sale Order", related="order_line_id.order_id")
current = fields.Boolean(string="Currently Active", compute="_compute_current")
_sql_constraints = [
# Constraint for One2one impl of "sale.order.line".primeship_id
(
"unique_order_line",
"UNIQUE(order_line_id)",
"A sale order line can only have one primeship!",
)
]
@api.depends("start_date", "end_date")
def _compute_name(self):
for record in self:
record.name = (
f"{record.start_date} - {record.end_date} Primeship"
if record
else "New Primeship"
)
@api.depends("active", "start_date", "end_date")
def _compute_current(self):
for record in self:
record.current = (
record.active
and record.start_date
<= fields.Date.context_today(record)
< record.end_date
)
@api.constrains("end_date")
def _check_end_date(self):
for record in self:
if record.end_date < record.start_date:
raise ValidationError(_("The end date cannot be before start date"))
if any(
primeship.overlaps(record.start_date, record.end_date)
for primeship in record.partner_id.primeship_ids
if primeship.id != record.id
):
raise ValidationError(_("Primeships cannot overlaps"))
def overlaps(self, start, end):
self.ensure_one()
return self.start_date < end and self.end_date > start