# -*- 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