73 lines
2.6 KiB
Python
73 lines
2.6 KiB
Python
# -*- coding: utf-8 -*-
|
|
from odoo import api, fields, models
|
|
|
|
|
|
class EventEvent(models.Model):
|
|
_name = 'event.event'
|
|
_inherit = ['event.event', 'image.mixin']
|
|
|
|
registration_status = fields.Selection([
|
|
('open', 'Open for Registration'),
|
|
('closed', 'Registrations Closed'),
|
|
('sold_out', 'Sold Out'),
|
|
('ongoing', 'Happening Now'),
|
|
], string='Registration Status', compute='_compute_registration_status', compute_sudo=True)
|
|
|
|
is_registration_open = fields.Boolean(
|
|
string='Is Registration Open',
|
|
compute='_compute_registration_status',
|
|
compute_sudo=True,
|
|
)
|
|
|
|
stage_display_name = fields.Char(
|
|
string='Stage Display Name',
|
|
compute='_compute_stage_display_name',
|
|
compute_sudo=True,
|
|
)
|
|
|
|
@api.depends('stage_id', 'stage_id.name')
|
|
def _compute_stage_display_name(self):
|
|
for ev in self:
|
|
ev_sudo = ev.sudo()
|
|
ev.stage_display_name = ev_sudo.stage_id.name if ev_sudo.stage_id else 'Festival'
|
|
|
|
@api.depends(
|
|
'event_registrations_open',
|
|
'event_registrations_sold_out',
|
|
'is_done',
|
|
'is_ongoing',
|
|
'stage_id',
|
|
'stage_id.name',
|
|
'date_end',
|
|
'kanban_state',
|
|
)
|
|
def _compute_registration_status(self):
|
|
now = fields.Datetime.now()
|
|
for ev in self:
|
|
ev_sudo = ev.sudo()
|
|
stage_name = (ev_sudo.stage_id.name or '').lower() if ev_sudo.stage_id else ''
|
|
is_ended = bool(
|
|
ev_sudo.is_done
|
|
or stage_name in ['ended', 'done', 'cancelled', 'concluded']
|
|
or (ev_sudo.date_end and ev_sudo.date_end < now)
|
|
or (ev_sudo.kanban_state == 'cancel')
|
|
)
|
|
if ev_sudo.kanban_state == 'cancel':
|
|
ev.registration_status = 'closed'
|
|
ev.is_registration_open = False
|
|
elif is_ended:
|
|
ev.registration_status = 'closed'
|
|
ev.is_registration_open = False
|
|
elif ev_sudo.event_registrations_sold_out:
|
|
ev.registration_status = 'sold_out'
|
|
ev.is_registration_open = False
|
|
elif ev_sudo.is_ongoing and not ev_sudo.event_registrations_open:
|
|
ev.registration_status = 'ongoing'
|
|
ev.is_registration_open = False
|
|
elif ev_sudo.event_registrations_open:
|
|
ev.registration_status = 'open'
|
|
ev.is_registration_open = True
|
|
else:
|
|
ev.registration_status = 'closed'
|
|
ev.is_registration_open = False
|