diff --git a/addons/event/models/event_event.py b/addons/event/models/event_event.py
index b272dd6e1b5..dfddcc21bf2 100644
--- a/addons/event/models/event_event.py
+++ b/addons/event/models/event_event.py
@@ -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)
diff --git a/addons/event/tests/common.py b/addons/event/tests/common.py
index 4713aa09716..147e24c9c85 100644
--- a/addons/event/tests/common.py
+++ b/addons/event/tests/common.py
@@ -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):
diff --git a/addons/event/tests/test_event_flow.py b/addons/event/tests/test_event_flow.py
index dd021b25e73..ea18ac57a89 100644
--- a/addons/event/tests/test_event_flow.py
+++ b/addons/event/tests/test_event_flow.py
@@ -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
diff --git a/addons/event/views/event_event_views.xml b/addons/event/views/event_event_views.xml
index faafbbc9b44..d95b628fbc5 100644
--- a/addons/event/views/event_event_views.xml
+++ b/addons/event/views/event_event_views.xml
@@ -35,7 +35,7 @@