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 @@
- True200
@@ -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
- 3Training
- 4Sport
- US/Pacific5
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">
-
+