Skip to content

Commit

Permalink
[IMP] event_session: black, isort, prettier
Browse files Browse the repository at this point in the history
  • Loading branch information
dalonsod committed Apr 5, 2021
1 parent 9d42e24 commit 3f8f65c
Show file tree
Hide file tree
Showing 12 changed files with 792 additions and 733 deletions.
29 changes: 14 additions & 15 deletions event_session/__manifest__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,21 +2,20 @@
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).

{
'name': 'Event Sessions',
'version': '12.0.1.0.3',
'author': 'Tecnativa, '
'Odoo Community Association (OCA)',
"name": "Event Sessions",
"version": "12.0.1.0.3",
"author": "Tecnativa, " "Odoo Community Association (OCA)",
"license": "AGPL-3",
'website': 'https://github.com/oca/event.git',
'category': 'Marketing',
'summary': 'Sessions in events',
'depends': ['event_mail'],
'data': [
'security/ir.model.access.csv',
'security/event_session_security.xml',
'views/event_session_view.xml',
'views/event_view.xml',
'wizards/wizard_event_session_view.xml',
"website": "https://github.com/oca/event.git",
"category": "Marketing",
"summary": "Sessions in events",
"depends": ["event_mail"],
"data": [
"security/ir.model.access.csv",
"security/event_session_security.xml",
"views/event_session_view.xml",
"views/event_view.xml",
"wizards/wizard_event_session_view.xml",
],
'installable': True,
"installable": True,
}
86 changes: 40 additions & 46 deletions event_session/models/event.py
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()
98 changes: 54 additions & 44 deletions event_session/models/event_mail.py
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)
Loading

0 comments on commit 3f8f65c

Please sign in to comment.