diff --git a/addons/website_event_track_exhibitor/models/event_sponsor.py b/addons/website_event_track_exhibitor/models/event_sponsor.py index 878938f739a227227445e1a94fc04724f5fadb59..462c1be4533237c8e90036682d428faa84208c9b 100644 --- a/addons/website_event_track_exhibitor/models/event_sponsor.py +++ b/addons/website_event_track_exhibitor/models/event_sponsor.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. -from datetime import datetime +from datetime import datetime, timedelta from pytz import timezone, utc from odoo import api, fields, models @@ -73,7 +73,7 @@ class EventSponsor(models.Model): for sponsor in self: if not sponsor.event_id.is_ongoing: sponsor.is_in_opening_hours = False - elif not sponsor.hour_from or not sponsor.hour_to: + elif sponsor.hour_from is False or sponsor.hour_to is False: sponsor.is_in_opening_hours = True else: event_tz = timezone(sponsor.event_id.date_tz) @@ -86,6 +86,9 @@ class EventSponsor(models.Model): # compute opening hours opening_from_tz = event_tz.localize(datetime.combine(now_tz.date(), float_to_time(sponsor.hour_from))) opening_to_tz = event_tz.localize(datetime.combine(now_tz.date(), float_to_time(sponsor.hour_to))) + if sponsor.hour_to == 0: + # when closing 'at midnight', we consider it's at midnight the next day + opening_to_tz = opening_to_tz + timedelta(days=1) opening_from = max([dt_begin, opening_from_tz]) opening_to = min([dt_end, opening_to_tz]) diff --git a/addons/website_event_track_exhibitor/tests/test_sponsor_internals.py b/addons/website_event_track_exhibitor/tests/test_sponsor_internals.py index e011510662d1aa585f43095d68ac0ee968655a1e..39458072f6d41d3e38bcc2f58e84833f1d335f83 100644 --- a/addons/website_event_track_exhibitor/tests/test_sponsor_internals.py +++ b/addons/website_event_track_exhibitor/tests/test_sponsor_internals.py @@ -31,7 +31,7 @@ class TestSponsorData(TestEventTrackOnlineCommon): @users('user_eventmanager') def test_event_date_computation(self): """ Test date computation. Pay attention that mocks returns UTC values, meaning - we have to take into account Europe/Brussels offset """ + we have to take into account Europe/Brussels offset (+2 in July) """ event = self.env['event.event'].browse(self.event_0.id) sponsor = self.env['event.sponsor'].browse(self.sponsor_0.id) event.invalidate_cache(fnames=['is_ongoing']) @@ -85,3 +85,36 @@ class TestSponsorData(TestEventTrackOnlineCommon): sponsor.invalidate_cache(fnames=['is_in_opening_hours']) self.assertFalse(sponsor.is_in_opening_hours) self.assertFalse(event.is_ongoing) + + # Use "00:00" as opening hours for sponsor -> should still work + event.invalidate_cache(fnames=['is_ongoing']) + sponsor.hour_from = 0.0 # 0 -> 18 + + # Inside opening hours (17 < 18) + self.mock_wevent_dt.now.return_value = datetime(2020, 7, 6, 15, 0, 1) + self.mock_wevent_exhib_dt.now.return_value = datetime(2020, 7, 6, 15, 0, 1) + sponsor.invalidate_cache(fnames=['is_in_opening_hours']) + self.assertTrue(sponsor.is_in_opening_hours) + + # Outside opening hours (21 > 18) + self.mock_wevent_dt.now.return_value = datetime(2020, 7, 6, 19, 0, 1) + self.mock_wevent_exhib_dt.now.return_value = datetime(2020, 7, 6, 19, 0, 1) + sponsor.invalidate_cache(fnames=['is_in_opening_hours']) + self.assertFalse(sponsor.is_in_opening_hours) + + # Use "00:00" as closing hours for sponsor -> should still work + # (considered 'at midnight the next day') + sponsor.hour_from = 10.0 + sponsor.hour_to = 0.0 + + # Inside opening hours (11 > 10) + self.mock_wevent_dt.now.return_value = datetime(2020, 7, 6, 9, 0, 1) + self.mock_wevent_exhib_dt.now.return_value = datetime(2020, 7, 6, 9, 0, 1) + sponsor.invalidate_cache(fnames=['is_in_opening_hours']) + self.assertTrue(sponsor.is_in_opening_hours) + + # Outside opening hours (7 < 10) + self.mock_wevent_dt.now.return_value = datetime(2020, 7, 6, 5, 0, 1) + self.mock_wevent_exhib_dt.now.return_value = datetime(2020, 7, 6, 5, 0, 1) + sponsor.invalidate_cache(fnames=['is_in_opening_hours']) + self.assertFalse(sponsor.is_in_opening_hours)