mirror of
https://github.com/bringout/oca-mrp.git
synced 2026-04-20 18:12:00 +02:00
80 lines
3.1 KiB
Python
80 lines
3.1 KiB
Python
# Copyright 2017 David Vidal<david.vidal@tecnativa.com>
|
|
# Copyright 2021 Moka Tourisme (https://www.mokatourisme.fr).
|
|
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
|
|
|
|
from odoo import SUPERUSER_ID, _, api, fields, models
|
|
from odoo.exceptions import ValidationError
|
|
|
|
|
|
class EventRegistration(models.Model):
|
|
_inherit = "event.registration"
|
|
|
|
use_sessions = fields.Boolean(
|
|
related="event_id.use_sessions",
|
|
)
|
|
session_id = fields.Many2one(
|
|
comodel_name="event.session",
|
|
string="Session",
|
|
ondelete="restrict",
|
|
)
|
|
# NOTE: Originally these fields are related to event_id.
|
|
# We make them computed to get the date from the session if needed.
|
|
event_begin_date = fields.Datetime(
|
|
related=None, compute="_compute_event_begin_date"
|
|
)
|
|
event_end_date = fields.Datetime(related=None, compute="_compute_event_end_date")
|
|
|
|
@api.depends("event_id.date_begin", "session_id.date_begin", "use_sessions")
|
|
def _compute_event_begin_date(self):
|
|
for rec in self:
|
|
if rec.use_sessions:
|
|
rec.event_begin_date = rec.session_id.date_begin
|
|
else:
|
|
rec.event_begin_date = rec.event_id.date_begin
|
|
|
|
@api.depends("event_id.date_end", "session_id.date_end", "use_sessions")
|
|
def _compute_event_end_date(self):
|
|
for rec in self:
|
|
if rec.use_sessions:
|
|
rec.event_end_date = rec.session_id.date_end
|
|
else:
|
|
rec.event_end_date = rec.event_id.date_end
|
|
|
|
@api.constrains("session_id")
|
|
def _check_seats_limit(self):
|
|
# Needed to check if the registration can be created
|
|
# when we try to save it.
|
|
session_records = self.filtered("session_id")
|
|
for rec in session_records:
|
|
session = rec.session_id
|
|
if (
|
|
session.seats_limited
|
|
and session.seats_max
|
|
and session.seats_available < (1 if rec.state == "draft" else 0)
|
|
):
|
|
raise ValidationError(_("No more seats available for this session."))
|
|
|
|
def _update_mail_schedulers(self):
|
|
# OVERRIDE to handle sessions' mail scheduler, not event ones.
|
|
session_records = self.filtered("session_id")
|
|
regular_records = self - session_records
|
|
res = super(EventRegistration, regular_records)._update_mail_schedulers()
|
|
# Similar to super, only we find the schedulers linked to the session
|
|
open_registrations = session_records.filtered(lambda r: r.state == "open")
|
|
if not open_registrations:
|
|
return res
|
|
onsubscribe_schedulers = (
|
|
self.env["event.mail.session"]
|
|
.sudo()
|
|
.search(
|
|
[
|
|
("session_id", "in", open_registrations.session_id.ids),
|
|
("interval_type", "=", "after_sub"),
|
|
]
|
|
)
|
|
)
|
|
if not onsubscribe_schedulers:
|
|
return res
|
|
onsubscribe_schedulers.mail_done = False
|
|
onsubscribe_schedulers.with_user(SUPERUSER_ID).execute()
|
|
return res
|