diff --git a/addons/event/data/event_demo.xml b/addons/event/data/event_demo.xml index 78ce824265f..f886c125289 100644 --- a/addons/event/data/event_demo.xml +++ b/addons/event/data/event_demo.xml @@ -109,7 +109,6 @@ - True 200 @@ -240,7 +239,6 @@ - diff --git a/addons/event/data/event_demo_misc.xml b/addons/event/data/event_demo_misc.xml index 132a6f3b53c..f5248677ea4 100644 --- a/addons/event/data/event_demo_misc.xml +++ b/addons/event/data/event_demo_misc.xml @@ -4,17 +4,14 @@ Exhibition - 3 Training - 4 Sport - US/Pacific 5 diff --git a/addons/event/data/event_registration_demo.xml b/addons/event/data/event_registration_demo.xml index 094517d7a63..1bb26b15c1f 100644 --- a/addons/event/data/event_registration_demo.xml +++ b/addons/event/data/event_registration_demo.xml @@ -158,15 +158,6 @@ - - 0: event.seats_available = event.seats_max - (event.seats_reserved + event.seats_used) - event.seats_expected = event.seats_unconfirmed + event.seats_reserved + event.seats_used + event.seats_taken = event.seats_reserved + event.seats_used @api.depends('date_tz', 'start_sale_datetime') def _compute_event_registrations_started(self): @@ -463,15 +452,6 @@ class EventEvent(models.Model): if not event.seats_limited: event.seats_limited = False - @api.depends('event_type_id') - def _compute_auto_confirm(self): - """ Update event configuration from its event type. Depends are set only - on event_type_id itself, not its sub fields. Purpose is to emulate an - onchange: if event type is changed, update event configuration. Changing - event type content itself should not trigger this method. """ - for event in self: - event.auto_confirm = event.event_type_id.auto_confirm - @api.depends('event_type_id') def _compute_event_mail_ids(self): """ Update event configuration from its event type. Depends are set only diff --git a/addons/event/models/event_registration.py b/addons/event/models/event_registration.py index f319038088f..f431617d363 100644 --- a/addons/event/models/event_registration.py +++ b/addons/event/models/event_registration.py @@ -38,7 +38,7 @@ class EventRegistration(models.Model): active = fields.Boolean(default=True) barcode = fields.Char(string='Barcode', default=lambda self: self._get_random_barcode(), readonly=True, copy=False) # utm informations - utm_campaign_id = fields.Many2one('utm.campaign', 'Campaign', index=True, ondelete='set null') + utm_campaign_id = fields.Many2one('utm.campaign', 'Campaign', index=True, ondelete='set null') utm_source_id = fields.Many2one('utm.source', 'Source', index=True, ondelete='set null') utm_medium_id = fields.Many2one('utm.medium', 'Medium', index=True, ondelete='set null') # attendee @@ -62,9 +62,16 @@ class EventRegistration(models.Model): 'res.company', string='Company', related='event_id.company_id', store=True, readonly=False) state = fields.Selection([ - ('draft', 'Unconfirmed'), ('cancel', 'Cancelled'), - ('open', 'Confirmed'), ('done', 'Attended')], - string='Status', default='draft', readonly=True, copy=False, tracking=6) + ('draft', 'Unconfirmed'), + ('open', 'Registered'), + ('done', 'Attended'), + ('cancel', 'Cancelled')], + string='Status', default='open', + readonly=True, copy=False, tracking=6, + help='Unconfirmed: registrations in a pending state waiting for an action (specific case, notably with sale status)\n' + 'Registered: registrations considered taken by a client\n' + 'Attended: registrations for which the attendee attended the event\n' + 'Cancelled: registrations cancelled manually') # properties registration_properties = fields.Properties( 'Properties', definition='event_id.registration_properties_definition', copy=True) @@ -73,6 +80,12 @@ class EventRegistration(models.Model): ('barcode_event_uniq', 'unique(barcode)', "Barcode should be unique") ] + @api.constrains('state', 'event_id', 'event_ticket_id') + def _check_seats_availability(self): + registrations_confirmed = self.filtered(lambda registration: registration.state in ('open', 'done')) + registrations_confirmed.event_id._check_seats_availability() + registrations_confirmed.event_ticket_id._check_seats_availability() + @api.depends('partner_id') def _compute_name(self): for registration in self: @@ -185,11 +198,7 @@ class EventRegistration(models.Model): registrations = super(EventRegistration, self).create(vals_list) - # auto_confirm if possible; if not automatically confirmed, call mail schedulers in case - # some were created already open - if registrations._check_auto_confirmation(): - registrations.sudo().action_confirm() - elif not self.env.context.get('install_mode', False): + if not self.env.context.get('install_mode', False): # running the scheduler for demo data can cause an issue where wkhtmltopdf runs during # server start and hangs indefinitely, leading to serious crashes # we currently avoid this by not running the scheduler, would be best to find the actual @@ -202,19 +211,12 @@ class EventRegistration(models.Model): to_confirm = (self.filtered(lambda registration: registration.state in {'draft', 'cancel'}) if confirming else None) ret = super(EventRegistration, self).write(vals) - # As these Event(Ticket) methods are model constraints, it is not necessary to call them - # explicitly when creating new registrations. However, it is necessary to trigger them here - # as changes in registration states cannot be used as constraints triggers. - if confirming: - to_confirm.event_id._check_seats_availability() - to_confirm.event_ticket_id._check_seats_availability() - - if not self.env.context.get('install_mode', False): - # running the scheduler for demo data can cause an issue where wkhtmltopdf runs - # during server start and hangs indefinitely, leading to serious crashes we - # currently avoid this by not running the scheduler, would be best to find the - # actual reason for this issue and fix it so we can remove this check - to_confirm._update_mail_schedulers() + if confirming and not self.env.context.get('install_mode', False): + # running the scheduler for demo data can cause an issue where wkhtmltopdf runs + # during server start and hangs indefinitely, leading to serious crashes we + # currently avoid this by not running the scheduler, would be best to find the + # actual reason for this issue and fix it so we can remove this check + to_confirm._update_mail_schedulers() return ret @@ -233,10 +235,6 @@ class EventRegistration(models.Model): pre_inactive.event_id._check_seats_availability() pre_inactive.event_ticket_id._check_seats_availability() - def _check_auto_confirmation(self): - """ Checks that all registrations are for `auto-confirm` events. """ - return all(event.auto_confirm for event in self.event_id) - # ------------------------------------------------------------ # ACTIONS / BUSINESS # ------------------------------------------------------------ diff --git a/addons/event/models/event_ticket.py b/addons/event/models/event_ticket.py index aa80c732079..24a7a1175da 100644 --- a/addons/event/models/event_ticket.py +++ b/addons/event/models/event_ticket.py @@ -42,7 +42,7 @@ class EventTemplateTicket(models.Model): class EventTicket(models.Model): - """ Ticket model allowing to have differnt kind of registrations for a given + """ Ticket model allowing to have different kind of registrations for a given event. Ticket are based on ticket type as they share some common fields and behavior. Those models come from <= v13 Odoo event.event.ticket that modeled both concept: tickets for event templates, and tickets for events. """ @@ -76,8 +76,8 @@ class EventTicket(models.Model): # seats seats_reserved = fields.Integer(string='Reserved Seats', compute='_compute_seats', store=False) seats_available = fields.Integer(string='Available Seats', compute='_compute_seats', store=False) - seats_unconfirmed = fields.Integer(string='Unconfirmed Seats', compute='_compute_seats', store=False) seats_used = fields.Integer(string='Used Seats', compute='_compute_seats', store=False) + seats_taken = fields.Integer(string="Taken Seats", compute="_compute_seats", store=False) is_sold_out = fields.Boolean( 'Sold Out', compute='_compute_is_sold_out', help='Whether seats are not available for this ticket.') # reports @@ -113,21 +113,20 @@ class EventTicket(models.Model): @api.depends('seats_max', 'registration_ids.state', 'registration_ids.active') def _compute_seats(self): - """ Determine reserved, available, reserved but unconfirmed and used seats. """ + """ Determine available, reserved, used and taken seats. """ # initialize fields to 0 + compute seats availability for ticket in self: - ticket.seats_unconfirmed = ticket.seats_reserved = ticket.seats_used = ticket.seats_available = 0 + ticket.seats_reserved = ticket.seats_used = ticket.seats_available = 0 # aggregate registrations by ticket and by state results = {} if self.ids: state_field = { - 'draft': 'seats_unconfirmed', 'open': 'seats_reserved', 'done': 'seats_used', } query = """ SELECT event_ticket_id, state, count(event_id) FROM event_registration - WHERE event_ticket_id IN %s AND state IN ('draft', 'open', 'done') AND active = true + WHERE event_ticket_id IN %s AND state IN ('open', 'done') AND active = true GROUP BY event_ticket_id, state """ self.env['event.registration'].flush_model(['event_id', 'event_ticket_id', 'state', 'active']) @@ -140,6 +139,7 @@ class EventTicket(models.Model): ticket.update(results.get(ticket._origin.id or ticket.id, {})) if ticket.seats_max > 0: ticket.seats_available = ticket.seats_max - (ticket.seats_reserved + ticket.seats_used) + ticket.seats_taken = ticket.seats_reserved + ticket.seats_used @api.depends('seats_limited', 'seats_available') def _compute_is_sold_out(self): diff --git a/addons/event/static/src/client_action/event_registration_summary_dialog.xml b/addons/event/static/src/client_action/event_registration_summary_dialog.xml index 2a5df67371e..2190b50700e 100644 --- a/addons/event/static/src/client_action/event_registration_summary_dialog.xml +++ b/addons/event/static/src/client_action/event_registration_summary_dialog.xml @@ -39,7 +39,7 @@ Company Name Ticket - Payment + Payment Answers diff --git a/addons/event/tests/test_event_flow.py b/addons/event/tests/test_event_flow.py index 9edcc2e8496..9815c789b15 100644 --- a/addons/event/tests/test_event_flow.py +++ b/addons/event/tests/test_event_flow.py @@ -7,62 +7,12 @@ 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 class TestEventFlow(EventCase): - @mute_logger('odoo.addons.base.models.ir_model', 'odoo.models') - def test_event_auto_confirm(self): - """ Basic event management with auto confirmation """ - # EventUser creates a new event: ok - test_event = self.env['event.event'].with_user(self.user_eventmanager).create({ - 'name': 'TestEvent', - 'auto_confirm': True, - 'date_begin': datetime.datetime.now() + relativedelta(days=-1), - 'date_end': datetime.datetime.now() + relativedelta(days=1), - 'seats_max': 2, - 'seats_limited': True, - }) - self.assertTrue(test_event.auto_confirm) - - # EventUser create registrations for this event - test_reg1 = self.env['event.registration'].with_user(self.user_eventuser).create({ - 'name': 'TestReg1', - 'event_id': test_event.id, - }) - scheduler = self.env['event.mail'].sudo().search([ - ('event_id', '=', test_event.id), - ('interval_type', '=', 'after_sub') - ]) - self.assertTrue(scheduler.mail_registration_ids.mail_sent) - - self.assertEqual(test_reg1.state, 'open', 'Event: auto_confirmation of registration failed') - self.assertEqual(test_event.seats_reserved, 1, 'Event: wrong number of reserved seats after confirmed registration') - test_reg2 = self.env['event.registration'].with_user(self.user_eventuser).create({ - 'name': 'TestReg2', - 'event_id': test_event.id, - }) - self.assertEqual(test_reg2.state, 'open', 'Event: auto_confirmation of registration failed') - self.assertEqual(test_event.seats_reserved, 2, 'Event: wrong number of reserved seats after confirmed registration') - - # EventUser create registrations for this event: too much registrations - with self.assertRaises(ValidationError): - self.env['event.registration'].with_user(self.user_eventuser).create({ - 'name': 'TestReg3', - 'event_id': test_event.id, - }) - - # EventUser validates registrations - test_reg1.action_set_done() - self.assertEqual(test_reg1.state, 'done', 'Event: wrong state of attended registration') - self.assertEqual(test_event.seats_used, 1, 'Event: incorrect number of attendees after closing registration') - test_reg2.action_set_done() - 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 """ @@ -89,29 +39,6 @@ class TestEventFlow(EventCase): 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 - seats, ... """ - # EventUser creates a new event: ok - test_event = self.env['event.event'].with_user(self.user_eventmanager).create({ - 'name': 'TestEvent', - 'date_begin': datetime.datetime.now() + relativedelta(days=-1), - 'date_end': datetime.datetime.now() + relativedelta(days=1), - 'seats_limited': True, - 'seats_max': 10, - }) - self.assertFalse(test_event.auto_confirm) - - # EventUser create registrations for this event -> no auto confirmation - test_reg1 = self.env['event.registration'].with_user(self.user_eventuser).create({ - 'name': 'TestReg1', - 'event_id': test_event.id, - }) - self.assertEqual( - test_reg1.state, 'draft', - 'Event: new registration should not be confirmed with auto_confirmation parameter being False') - @mute_logger('odoo.addons.event.models.event_mail') def test_event_missed_mail_template(self): """ Check that error on mail sending is ignored if corresponding mail template was deleted """ @@ -122,13 +49,6 @@ class TestEventFlow(EventCase): 'seats_max': 2, 'seats_limited': True, }) - self.assertFalse(test_event.auto_confirm) - - # EventUser create registrations for this event - test_reg = self.env['event.registration'].with_user(self.user_eventuser).create({ - 'name': 'TestReg1', - 'event_id': test_event.id, - }) scheduler = self.env['event.mail'].sudo().search([ ('event_id', '=', test_event.id), @@ -138,6 +58,11 @@ class TestEventFlow(EventCase): # Imagine user deletes mail template for whatever reason scheduler.template_ref.unlink() + # EventUser create registrations for this event + self.env['event.registration'].with_user(self.user_eventuser).create({ + 'name': 'TestReg1', + 'event_id': test_event.id, + }) + # Mails should not be sent - test_reg.action_confirm() self.assertFalse(scheduler.mail_registration_ids.mail_sent) diff --git a/addons/event/tests/test_event_internals.py b/addons/event/tests/test_event_internals.py index 5bad5b385f0..56baf026e8f 100644 --- a/addons/event/tests/test_event_internals.py +++ b/addons/event/tests/test_event_internals.py @@ -20,7 +20,6 @@ class TestEventInternalsCommon(EventCase): cls.event_type_complex = cls.env['event.type'].create({ 'name': 'Update Type', - 'auto_confirm': True, 'has_seats_limitation': True, 'seats_max': 30, 'default_timezone': 'Europe/Paris', @@ -47,7 +46,6 @@ class TestEventInternalsCommon(EventCase): cls.reference_end = datetime(2020, 2, 4, 18, 45, 0) cls.event_0 = cls.env['event.event'].create({ - 'auto_confirm': True, 'date_begin': cls.reference_beg, 'date_end': cls.reference_end, 'date_tz': 'Europe/Brussels', @@ -123,12 +121,10 @@ class TestEventData(TestEventInternalsCommon): }) self.assertEqual(event.date_tz, self.env.user.tz) self.assertFalse(event.seats_limited) - self.assertFalse(event.auto_confirm) self.assertEqual(event.event_mail_ids, self.env['event.mail']) self.assertEqual(event.event_ticket_ids, self.env['event.event.ticket']) registration = self._create_registrations(event, 1) - self.assertEqual(registration.state, 'draft') # event is not auto confirm # ------------------------------------------------------------ # FILL SYNC TEST @@ -146,7 +142,6 @@ class TestEventData(TestEventInternalsCommon): self.assertEqual(event.date_tz, 'Europe/Paris') self.assertTrue(event.seats_limited) self.assertEqual(event.seats_max, event_type.seats_max) - self.assertTrue(event.auto_confirm) # check 2many fields being populated self.assertEqual(len(event.event_mail_ids), 1) self.assertEqual(event.event_mail_ids.interval_nbr, 1) @@ -182,12 +177,10 @@ class TestEventData(TestEventInternalsCommon): # setup test records event_type_default = self.env['event.type'].create({ 'name': 'Type Default', - 'auto_confirm': True, 'event_type_mail_ids': False, }) event_type_mails = self.env['event.type'].create({ 'name': 'Type Mails', - 'auto_confirm': False, 'event_type_mail_ids': [ Command.clear(), Command.create({ @@ -218,7 +211,7 @@ class TestEventData(TestEventInternalsCommon): }) mail = event.event_mail_ids[0] registration = self._create_registrations(event, 1) - self.assertEqual(registration.state, 'open') # event auto confirms + self.assertEqual(registration.state, 'open') # verify that mail is linked to the registration self.assertEqual( set(mail.mapped('mail_registration_ids.registration_id.id')), @@ -284,11 +277,9 @@ class TestEventData(TestEventInternalsCommon): # setup test records event_type_default = self.env['event.type'].create({ 'name': 'Type Default', - 'auto_confirm': True }) event_type_tickets = self.env['event.type'].create({ 'name': 'Type Tickets', - 'auto_confirm': False }) event_type_tickets.write({ 'event_type_ticket_ids': [ @@ -349,7 +340,6 @@ class TestEventData(TestEventInternalsCommon): }) self.assertEqual(event.date_tz, self.env.user.tz) self.assertFalse(event.seats_limited) - self.assertFalse(event.auto_confirm) #Event Communications: when no event type, default configuration self.assertEqual(len(event.event_mail_ids), 3) @@ -416,7 +406,6 @@ class TestEventData(TestEventInternalsCommon): 'name': 'Albert Test', 'event_id': event.id, }) - registration.action_confirm() event.write({ 'date_end': datetime(2020, 2, 1, 15, 0, 0), 'seats_max': 1, @@ -480,13 +469,11 @@ class TestEventData(TestEventInternalsCommon): # seats: coming from event type configuration self.assertTrue(event.seats_limited) self.assertEqual(event.seats_available, event.event_type_id.seats_max) - self.assertEqual(event.seats_unconfirmed, 0) self.assertEqual(event.seats_reserved, 0) self.assertEqual(event.seats_used, 0) - self.assertEqual(event.seats_expected, 0) + self.assertEqual(event.seats_taken, 0) # create registration in order to check the seats computation - self.assertTrue(event.auto_confirm) reg_open_multiple = self.env['event.registration'].create([{ 'event_id': event.id, 'name': 'reg_open', @@ -505,10 +492,9 @@ class TestEventData(TestEventInternalsCommon): }) reg_done.write({'state': 'done'}) self.assertEqual(event.seats_available, event.event_type_id.seats_max - 6) - self.assertEqual(event.seats_unconfirmed, 1) self.assertEqual(event.seats_reserved, 5) self.assertEqual(event.seats_used, 1) - self.assertEqual(event.seats_expected, 7) + self.assertEqual(event.seats_taken, 6) # ------------------------------------------------------------ # SEATS AVAILABILITY AND (UN-)ARCHIVING REGISTRATIONS @@ -518,23 +504,21 @@ class TestEventData(TestEventInternalsCommon): reg_open.action_archive() self.assertEqual(event.seats_reserved, 4) self.assertEqual(event.seats_available, event.event_type_id.seats_max - 5) - self.assertEqual(event.seats_expected, 6) + self.assertEqual(event.seats_taken, 5) reg_draft.action_archive() - self.assertEqual(event.seats_unconfirmed, 0) self.assertEqual(event.seats_available, event.event_type_id.seats_max - 5) - self.assertEqual(event.seats_expected, 5) + self.assertEqual(event.seats_taken, 5) # Un-archiving confirmed seats requires available seat(s) reg_open.action_unarchive() self.assertEqual(event.seats_reserved, 5) self.assertEqual(event.seats_available, event.event_type_id.seats_max - 6) - self.assertEqual(event.seats_expected, 6) + self.assertEqual(event.seats_taken, 6) reg_draft.action_unarchive() - self.assertEqual(event.seats_unconfirmed, 1) self.assertEqual(event.seats_available, event.event_type_id.seats_max - 6) - self.assertEqual(event.seats_expected, 7) + self.assertEqual(event.seats_taken, 6) reg_open.action_archive() self.assertEqual(event.seats_reserved, 4) @@ -560,18 +544,19 @@ class TestEventData(TestEventInternalsCommon): with self.assertRaises(exceptions.ValidationError): reg_draft.write({'state': 'open'}) - # With auto-confirm, it is also impossible to create a draft - # registration when the event is full - new_draft_to_autoconfirm = { + # It is not possible to create an open registration (default value) + # when the event is full + new_open_registration = { 'event_id': event.id, - 'name': 'New registration with auto confirm' + 'name': 'reg_open', } with self.assertRaises(exceptions.ValidationError): - self.env['event.registration'].create(new_draft_to_autoconfirm) + self.env['event.registration'].create(new_open_registration) # If the seats limitation is removed, it becomes possible of course event.write({'seats_limited': 0}) - self.env['event.registration'].create(new_draft_to_autoconfirm) + self.env['event.registration'].create(new_open_registration) + reg_draft.write({'state': 'open'}) @tagged('event_registration') @@ -803,7 +788,6 @@ class TestEventTicketData(TestEventInternalsCommon): 'end_sale_datetime': datetime(2020, 2, 10, 23, 59, 59), }) ], - 'auto_confirm': False # to interact with registrations states }) first_ticket = event.event_ticket_ids.filtered(lambda t: t.name == 'First Ticket') second_ticket = event.event_ticket_ids.filtered(lambda t: t.name == 'Second Ticket') @@ -869,23 +853,23 @@ class TestEventTicketData(TestEventInternalsCommon): 'name': f'reg_draft #{idx}', 'event_ticket_id': first_ticket.id, } for idx in range(3)]) + # Draft registrations should not impact seats + reg_draft_multiple.state = 'draft' reg_draft = reg_draft_multiple[0] reg_open = self.env['event.registration'].create({ 'event_id': event.id, 'name': 'reg_open', 'event_ticket_id': first_ticket.id, - 'state': 'open' }) reg_done = self.env['event.registration'].create({ 'event_id': event.id, 'name': 'reg_done', 'event_ticket_id': first_ticket.id, - 'state': 'done' }) + reg_done.action_set_done() - self.assertEqual(first_ticket.seats_unconfirmed, 3) self.assertEqual(first_ticket.seats_reserved, 1) self.assertEqual(first_ticket.seats_used, 1) self.assertEqual(first_ticket.seats_available, INITIAL_TICKET_SEATS_MAX - 2) @@ -898,9 +882,6 @@ class TestEventTicketData(TestEventInternalsCommon): self.assertEqual(first_ticket.seats_reserved, 0) self.assertEqual(first_ticket.seats_available, INITIAL_TICKET_SEATS_MAX) - reg_draft.action_archive() - self.assertEqual(first_ticket.seats_unconfirmed, 2) - # Un-archiving confirmed/done seats requires available seat(s) reg_open.action_unarchive() self.assertEqual(first_ticket.seats_reserved, 1) @@ -910,10 +891,6 @@ class TestEventTicketData(TestEventInternalsCommon): self.assertEqual(first_ticket.seats_used, 1) self.assertEqual(first_ticket.seats_available, INITIAL_TICKET_SEATS_MAX - 2) - reg_draft.action_unarchive() - self.assertEqual(first_ticket.seats_unconfirmed, 3) - self.assertEqual(first_ticket.seats_available, INITIAL_TICKET_SEATS_MAX - 2) - # It is not possible to set a seats_max value below the current number of confirmed # registrations. (There is still 1 "used" seat too) with self.assertRaises(exceptions.ValidationError): @@ -928,10 +905,9 @@ class TestEventTicketData(TestEventInternalsCommon): # SEATS AVAILABILITY - # With auto-confirm, it is impossible to create a draft - # registration when the ticket is fully booked (1 used + 1 reserved) + # It is impossible to create an open registration when the + # ticket is fully booked (1 used + 1 reserved) self.assertEqual(event.seats_available, 0) - first_ticket.event_id.auto_confirm = True with self.assertRaises(exceptions.ValidationError): self.env['event.registration'].create({ 'event_id': event.id, diff --git a/addons/event/tests/test_event_mail_schedule.py b/addons/event/tests/test_event_mail_schedule.py index 15b16afa5e2..d34a540ba4f 100644 --- a/addons/event/tests/test_event_mail_schedule.py +++ b/addons/event/tests/test_event_mail_schedule.py @@ -36,7 +36,6 @@ class TestMailSchedule(EventCase, MockEmail): 'name': 'TestEventMail', 'create_date': now, 'user_id': self.user_eventmanager.id, - 'auto_confirm': True, 'date_begin': event_date_begin, 'date_end': event_date_end, 'event_mail_ids': [ @@ -44,7 +43,7 @@ class TestMailSchedule(EventCase, MockEmail): 'interval_unit': 'now', 'interval_type': 'after_sub', 'template_ref': 'mail.template,%i' % self.env['ir.model.data']._xmlid_to_res_id('event.event_subscription')}), - (0, 0, { # one day after subscription + (0, 0, { # one hour after subscription 'interval_nbr': 1, 'interval_unit': 'hours', 'interval_type': 'after_sub', @@ -208,13 +207,13 @@ class TestMailSchedule(EventCase, MockEmail): # NEW REGISTRATION EFFECT ON SCHEDULERS # -------------------------------------------------- - test_event.write({'auto_confirm': False}) with freeze_time(now_start), self.mock_mail_gateway(): reg3 = self.env['event.registration'].create({ 'create_date': now_start, 'event_id': test_event.id, 'name': 'Reg3', 'email': 'reg3@example.com', + 'state': 'draft', }) # no more seats @@ -286,7 +285,6 @@ class TestMailSchedule(EventCase, MockEmail): # create event with default event_mail_ids lines test_event = self.env['event.event'].with_user(self.user_eventmanager).create({ 'name': "TestEvent", - 'auto_confirm': True, 'date_begin': datetime.now(), 'date_end': datetime.now() + relativedelta(days=1), 'seats_max': 2, @@ -354,7 +352,6 @@ class TestMailSchedule(EventCase, MockEmail): with freeze_time(now): test_event = self.env['event.event'].with_user(self.user_eventmanager).create({ 'name': 'TestEventMail', - 'auto_confirm': True, 'date_begin': event_date_begin, 'date_end': event_date_end, 'event_mail_ids': [ diff --git a/addons/event/views/event_event_views.xml b/addons/event/views/event_event_views.xml index 6f695d0188d..84a250aef8d 100644 --- a/addons/event/views/event_event_views.xml +++ b/addons/event/views/event_event_views.xml @@ -35,7 +35,7 @@ class="oe_stat_button" icon="fa-users" help="Total Registrations for this Event"> - +