-
-
Notifications
You must be signed in to change notification settings - Fork 161
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[IMP] event_session: black, isort, prettier
- Loading branch information
Showing
12 changed files
with
792 additions
and
733 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,110 +1,104 @@ | ||
# Copyright 2017 David Vidal<david.vidal@tecnativa.com> | ||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). | ||
|
||
from odoo import api, fields, models, _ | ||
from odoo import _, api, fields, models | ||
from odoo.exceptions import ValidationError | ||
|
||
|
||
class EventEvent(models.Model): | ||
_inherit = 'event.event' | ||
_inherit = "event.event" | ||
|
||
session_ids = fields.One2many( | ||
comodel_name='event.session', | ||
inverse_name='event_id', | ||
string='Sessions', | ||
comodel_name="event.session", inverse_name="event_id", string="Sessions", | ||
) | ||
sessions_count = fields.Integer( | ||
compute='_compute_sessions_count', | ||
string='Total event sessions', | ||
store=True, | ||
compute="_compute_sessions_count", string="Total event sessions", store=True, | ||
) | ||
seats_available_expected = fields.Integer( | ||
compute='_compute_seats_available_expected', | ||
string='Available expected seats', | ||
compute="_compute_seats_available_expected", | ||
string="Available expected seats", | ||
readonly=True, | ||
store=True, | ||
) | ||
draft_state = fields.Integer( | ||
compute='_compute_state_numbers', | ||
string=' # No of Draft Registrations', | ||
compute="_compute_state_numbers", | ||
string=" # No of Draft Registrations", | ||
store=True, | ||
) | ||
cancel_state = fields.Integer( | ||
compute='_compute_state_numbers', | ||
string=' # No of Cancelled Registrations', | ||
compute="_compute_state_numbers", | ||
string=" # No of Cancelled Registrations", | ||
store=True, | ||
) | ||
confirm_state = fields.Integer( | ||
compute='_compute_state_numbers', | ||
string=' # No of Confirmed Registrations', | ||
compute="_compute_state_numbers", | ||
string=" # No of Confirmed Registrations", | ||
store=True, | ||
) | ||
|
||
@api.multi | ||
@api.depends('session_ids') | ||
@api.depends("session_ids") | ||
def _compute_sessions_count(self): | ||
for event in self: | ||
event.sessions_count = len(event.session_ids) | ||
|
||
@api.multi | ||
@api.constrains('seats_max', 'seats_available') | ||
@api.constrains("seats_max", "seats_available") | ||
def _check_seats_limit(self): | ||
for event in self: | ||
if not event.session_ids: | ||
return super(EventEvent, event)._check_seats_limit() | ||
|
||
@api.multi | ||
@api.depends('seats_max', 'seats_expected') | ||
@api.depends("seats_max", "seats_expected") | ||
def _compute_seats_available_expected(self): | ||
for this in self: | ||
seats = this.seats_max - this.seats_expected | ||
this.seats_available_expected = seats | ||
|
||
@api.multi | ||
@api.depends('registration_ids.state') | ||
@api.depends("registration_ids.state") | ||
def _compute_state_numbers(self): | ||
for this in self: | ||
this.draft_state = len(this.registration_ids.filtered( | ||
lambda x: x.state == 'draft' | ||
)) | ||
this.cancel_state = len(this.registration_ids.filtered( | ||
lambda x: x.state == 'cancel' | ||
)) | ||
this.confirm_state = len(this.registration_ids.filtered( | ||
lambda x: x.state == 'confirm' | ||
)) | ||
this.draft_state = len( | ||
this.registration_ids.filtered(lambda x: x.state == "draft") | ||
) | ||
this.cancel_state = len( | ||
this.registration_ids.filtered(lambda x: x.state == "cancel") | ||
) | ||
this.confirm_state = len( | ||
this.registration_ids.filtered(lambda x: x.state == "confirm") | ||
) | ||
|
||
|
||
class EventRegistration(models.Model): | ||
_inherit = 'event.registration' | ||
_inherit = "event.registration" | ||
|
||
event_sessions_count = fields.Integer( | ||
related='event_id.sessions_count', | ||
readonly=True, | ||
related="event_id.sessions_count", readonly=True, | ||
) | ||
session_id = fields.Many2one( | ||
comodel_name='event.session', | ||
string='Session', | ||
ondelete='restrict', | ||
comodel_name="event.session", string="Session", ondelete="restrict", | ||
) | ||
|
||
@api.multi | ||
@api.constrains('event_id', 'session_id', 'state') | ||
@api.constrains("event_id", "session_id", "state") | ||
def _check_seats_limit(self): | ||
for registration in self.filtered('session_id'): | ||
if (registration.session_id.seats_availability == 'limited' and | ||
registration.session_id.seats_available < 1 and | ||
registration.state == 'open'): | ||
raise ValidationError( | ||
_('No more seats available for this event.')) | ||
for registration in self.filtered("session_id"): | ||
if ( | ||
registration.session_id.seats_availability == "limited" | ||
and registration.session_id.seats_available < 1 | ||
and registration.state == "open" | ||
): | ||
raise ValidationError(_("No more seats available for this event.")) | ||
|
||
@api.multi | ||
def confirm_registration(self): | ||
for reg in self: | ||
if not reg.event_id.session_ids: | ||
super(EventRegistration, reg).confirm_registration() | ||
reg.state = 'open' | ||
onsubscribe_schedulers = \ | ||
reg.session_id.event_mail_ids.filtered( | ||
lambda s: s.interval_type == 'after_sub') | ||
reg.state = "open" | ||
onsubscribe_schedulers = reg.session_id.event_mail_ids.filtered( | ||
lambda s: s.interval_type == "after_sub" | ||
) | ||
onsubscribe_schedulers.execute() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,91 +1,101 @@ | ||
# Copyright 2017 David Vidal<david.vidal@tecnativa.com> | ||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). | ||
|
||
from odoo import api, fields, models | ||
import logging | ||
|
||
from odoo import api, fields, models | ||
|
||
_logger = logging.getLogger(__name__) | ||
|
||
try: | ||
from odoo.addons.event.models.event_mail import _INTERVALS | ||
except ImportError: | ||
_logger.debug('Can not import events module.') | ||
_logger.debug("Can not import events module.") | ||
|
||
|
||
class EventMailScheduler(models.Model): | ||
_inherit = 'event.mail' | ||
_inherit = "event.mail" | ||
|
||
event_id = fields.Many2one( | ||
required=False, | ||
) | ||
event_id = fields.Many2one(required=False,) | ||
session_id = fields.Many2one( | ||
comodel_name='event.session', | ||
string='Session', | ||
ondelete='cascade', | ||
comodel_name="event.session", string="Session", ondelete="cascade", | ||
) | ||
event_mail_template_id = fields.Many2one( | ||
comodel_name='event.mail.template', | ||
string='Event Mail Template', | ||
ondelete='cascade', | ||
comodel_name="event.mail.template", | ||
string="Event Mail Template", | ||
ondelete="cascade", | ||
) | ||
|
||
@api.multi | ||
@api.depends('mail_sent', 'interval_type', 'event_id.registration_ids', | ||
'mail_registration_ids') | ||
@api.depends( | ||
"mail_sent", | ||
"interval_type", | ||
"event_id.registration_ids", | ||
"mail_registration_ids", | ||
) | ||
def _compute_done(self): | ||
super(EventMailScheduler, self)._compute_done() | ||
for event_mail in self: | ||
if (event_mail.session_id and | ||
event_mail.interval_type not in | ||
['before_event', 'after_event']): | ||
if event_mail.session_id and event_mail.interval_type not in [ | ||
"before_event", | ||
"after_event", | ||
]: | ||
event_mail.done = ( | ||
True if event_mail.event_id.sessions_count > 0 and | ||
not event_mail.session_id else | ||
len(event_mail.mail_registration_ids) == len( | ||
event_mail.session_id.registration_ids) and | ||
all(line.mail_sent for line in | ||
event_mail.mail_registration_ids) | ||
True | ||
if event_mail.event_id.sessions_count > 0 | ||
and not event_mail.session_id | ||
else len(event_mail.mail_registration_ids) | ||
== len(event_mail.session_id.registration_ids) | ||
and all(line.mail_sent for line in event_mail.mail_registration_ids) | ||
) | ||
|
||
@api.multi | ||
@api.depends('event_id.state', 'event_id.date_begin', 'interval_type', | ||
'interval_unit', 'interval_nbr') | ||
@api.depends( | ||
"event_id.state", | ||
"event_id.date_begin", | ||
"interval_type", | ||
"interval_unit", | ||
"interval_nbr", | ||
) | ||
def _compute_scheduled_date(self): | ||
super(EventMailScheduler, self)._compute_scheduled_date() | ||
for event_mail in self: | ||
if not event_mail.session_id: | ||
continue | ||
if event_mail.event_id.state not in ['confirm', 'done']: | ||
if event_mail.event_id.state not in ["confirm", "done"]: | ||
event_mail.scheduled_date = False | ||
else: | ||
if event_mail.interval_type == 'after_sub': | ||
if event_mail.interval_type == "after_sub": | ||
date, sign = event_mail.session_id.create_date, 1 | ||
elif event_mail.interval_type == 'before_event': | ||
elif event_mail.interval_type == "before_event": | ||
date, sign = event_mail.session_id.date_begin, -1 | ||
else: | ||
date, sign = event_mail.session_id.date_end, 1 | ||
event_mail.scheduled_date = ( | ||
fields.Datetime.from_string(date) + _INTERVALS[ | ||
event_mail.interval_unit | ||
](sign * event_mail.interval_nbr) | ||
) | ||
event_mail.scheduled_date = fields.Datetime.from_string( | ||
date | ||
) + _INTERVALS[event_mail.interval_unit](sign * event_mail.interval_nbr) | ||
|
||
|
||
class EventMailRegistration(models.Model): | ||
_inherit = 'event.mail.registration' | ||
_inherit = "event.mail.registration" | ||
|
||
@api.multi | ||
@api.depends('registration_id', 'scheduler_id.interval_unit', | ||
'scheduler_id.interval_type') | ||
@api.depends( | ||
"registration_id", "scheduler_id.interval_unit", "scheduler_id.interval_type" | ||
) | ||
def _compute_scheduled_date(self): | ||
super(EventMailRegistration, self)._compute_scheduled_date() | ||
for event_mail_reg in self: | ||
if (event_mail_reg.registration_id and | ||
event_mail_reg.registration_id.session_id): | ||
if ( | ||
event_mail_reg.registration_id | ||
and event_mail_reg.registration_id.session_id | ||
): | ||
date_open = event_mail_reg.registration_id.date_open | ||
date_open_datetime = date_open and fields.Datetime.from_string( | ||
date_open) or fields.datetime.now() | ||
event_mail_reg.scheduled_date = ( | ||
date_open_datetime + | ||
_INTERVALS[event_mail_reg.scheduler_id.interval_unit]( | ||
event_mail_reg.scheduler_id.interval_nbr)) | ||
date_open_datetime = ( | ||
date_open | ||
and fields.Datetime.from_string(date_open) | ||
or fields.datetime.now() | ||
) | ||
event_mail_reg.scheduled_date = date_open_datetime + _INTERVALS[ | ||
event_mail_reg.scheduler_id.interval_unit | ||
](event_mail_reg.scheduler_id.interval_nbr) |
Oops, something went wrong.