[IMP] website_event: round default datetime

Add default date_begin and date_end when creating an event.
To avoid having weird time (like 11:23) we round date_begin
to the nearest 30 minutes range and the date_end is set to
the next day of date_begin.

So for example if now is "2022-06-30 10:12" then:
date_begin = "2022-06-30 10:30" and date_end = "2022-07-01 10:30"

task-2845417

Part-of: odoo/odoo#91883
This commit is contained in:
Jérémy Hennecart (jeh)
2022-09-06 22:31:04 +02:00
parent 8285c2a6d1
commit 4fa73dc531
3 changed files with 42 additions and 0 deletions
+13
View File
@@ -4,6 +4,8 @@
import logging
import pytz
from datetime import timedelta
from odoo import _, api, Command, fields, models
from odoo.addons.base.models.res_partner import _tz_get
from odoo.tools import format_datetime, is_html_empty
@@ -88,6 +90,17 @@ class EventEvent(models.Model):
_inherit = ['mail.thread', 'mail.activity.mixin']
_order = 'date_begin'
@api.model
def default_get(self, fields_list):
result = super().default_get(fields_list)
if 'date_begin' in fields_list and 'date_begin' not in result:
now = fields.Datetime.now()
# Round the datetime to the nearest half hour (e.g. 08:17 => 08:30 and 08:37 => 09:00)
result['date_begin'] = now.replace(second=0, microsecond=0) + timedelta(minutes=-now.minute % 30)
if 'date_end' in fields_list and 'date_end' not in result and result.get('date_begin'):
result['date_end'] = result['date_begin'] + timedelta(days=1)
return result
def _get_default_stage_id(self):
return self.env['event.stage'].search([], limit=1)
+1
View File
@@ -90,6 +90,7 @@ class EventCase(common.TransactionCase):
'phone': '0456987654',
'mobile': '0456654321',
})
cls.reference_now = fields.Datetime.from_string('2022-09-05 15:11:34')
@classmethod
def _create_registrations(cls, event, reg_count):
+28
View File
@@ -4,9 +4,11 @@
import datetime
from dateutil.relativedelta import relativedelta
from freezegun import freeze_time
from odoo.addons.event.tests.common import EventCase
from odoo.exceptions import ValidationError
from odoo.tests.common import users
from odoo.tools import mute_logger
@@ -55,6 +57,32 @@ class TestEventFlow(EventCase):
self.assertEqual(test_reg1.state, 'done', 'Event: wrong state of attended registration')
self.assertEqual(test_event.seats_used, 2, 'Event: incorrect number of attendees after closing registration')
@users('user_eventmanager')
def test_event_default_datetime(self):
""" Check that the default date_begin and date_end are correctly set """
# Should apply default datetimes
with freeze_time(self.reference_now):
default_event = self.env['event.event'].create({
'name': 'Test Default Event',
})
self.assertEqual(default_event.date_begin, datetime.datetime.strptime('2022-09-05 15:30:00', '%Y-%m-%d %H:%M:%S'))
self.assertEqual(default_event.date_end, datetime.datetime.strptime('2022-09-06 15:30:00', '%Y-%m-%d %H:%M:%S'))
specific_datetimes = {
'date_begin': self.reference_now + relativedelta(days=1),
'date_end': self.reference_now + relativedelta(days=3),
}
# Should not apply default datetimes if values are set manually
with freeze_time(self.reference_now):
event = self.env['event.event'].create({
'name': 'Test Event',
**specific_datetimes,
})
self.assertEqual(event.date_begin, specific_datetimes['date_begin'])
self.assertEqual(event.date_end, specific_datetimes['date_end'])
@mute_logger('odoo.addons.base.models.ir_model', 'odoo.models')
def test_event_flow(self):
""" Advanced event flow: no auto confirmation, manage minimum / maximum