diff --git a/addons/website_event_online/models/event_event.py b/addons/website_event_online/models/event_event.py index 1419d63f786..05064c3b929 100644 --- a/addons/website_event_online/models/event_event.py +++ b/addons/website_event_online/models/event_event.py @@ -1,8 +1,12 @@ # -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. +from datetime import datetime +from pytz import timezone, utc + from odoo import api, fields, models, _ from odoo.addons.http_routing.models.ir_http import slug +from odoo.addons.resource.models.resource import float_to_time from odoo.osv import expression @@ -14,12 +18,42 @@ class Event(models.Model): menu_register_cta = fields.Boolean( 'Add Register Button', compute='_compute_menu_register_cta', readonly=False, store=True) + # live information + is_ongoing = fields.Boolean( + 'Is Ongoing', compute='_compute_time_data', search='_search_is_ongoing', + help="Whether event has begun") + is_done = fields.Boolean( + 'Is Done', compute='_compute_time_data', + help="Whether event is finished") + start_today = fields.Boolean( + 'Start Today', compute='_compute_time_data', + help="Whether event is going to start today if still not ongoing") + start_remaining = fields.Integer( + 'Remaining before start', compute='_compute_time_data', + help="Remaining time before event starts (minutes)") @api.depends('website_menu') def _compute_menu_register_cta(self): for event in self: event.menu_register_cta = event.website_menu + @api.depends('date_begin', 'date_end') + def _compute_time_data(self): + """ Compute start and remaining time. Do everything in UTC as we compute only + time deltas here. """ + now_utc = utc.localize(fields.Datetime.now().replace(microsecond=0)) + for event in self: + date_begin_utc = utc.localize(event.date_begin, is_dst=False) + date_end_utc = utc.localize(event.date_end, is_dst=False) + event.is_ongoing = date_begin_utc <= now_utc <= date_end_utc + event.is_done = now_utc > date_end_utc + event.start_today = date_begin_utc.date() == now_utc.date() + if date_begin_utc >= now_utc: + td = date_begin_utc - now_utc + event.start_remaining = int(td.total_seconds() / 60) + else: + event.start_remaining = 0 + def _compute_is_participating(self): """ Override is_participating to improve heuristic that is now