[REF] (website_)event(_sale): change seats_availability field to seats_limited
PURPOSE Change seats_availability selection field into a boolean field and rename it to seats_limited for consistency. SPECIFICATION Change all the tests accordingly. Task ID : 2198660 PR : #46659
This commit is contained in:
@@ -75,7 +75,7 @@
|
||||
<field name="user_id" ref="base.user_demo"/>
|
||||
<field name="date_begin" eval="(DateTime.now() + timedelta(days=10)).strftime('%Y-%m-%d 08:00:00')"/>
|
||||
<field name="date_end" eval="(DateTime.now() + timedelta(days=14)).strftime('%Y-%m-%d 18:00:00')"/>
|
||||
<field name="seats_availability">limited</field>
|
||||
<field name="seats_limited">True</field>
|
||||
<field name="seats_max">50</field>
|
||||
<field name="address_id" ref="event.res_partner_location_2"/>
|
||||
<field name="date_tz">US/Pacific</field>
|
||||
@@ -168,7 +168,7 @@
|
||||
<field eval="(DateTime.today()+ timedelta(days=5)).strftime('%Y-%m-%d 16:30:00')" name="date_end"/>
|
||||
<field name="event_type_id" ref="event_type_data_online"/>
|
||||
<field name="address_id" ref="event.res_partner_location_2"/>
|
||||
<field name="seats_availability">limited</field>
|
||||
<field name="seats_limited">True</field>
|
||||
<field name="seats_max">200</field>
|
||||
<field name="stage_id" ref="event_stage_booked"/>
|
||||
<field name="tag_ids" eval="[(6, 0, [event_tag_category_1_tag_4,event_tag_category_2_tag_1])]"/>
|
||||
@@ -241,7 +241,7 @@
|
||||
<field name="user_id" ref="base.user_admin"/>
|
||||
<field name="date_begin" eval="(DateTime.today() - timedelta(days=5)).strftime('%Y-%m-%d 18:00:00')"/>
|
||||
<field name="date_end" eval="(DateTime.today() - timedelta(days=5)).strftime('%Y-%m-%d 22:30:00')"/>
|
||||
<field name="seats_availability">limited</field>
|
||||
<field name="seats_limited">True</field>
|
||||
<field name="seats_max">4</field>
|
||||
<field name="address_id" ref="event.res_partner_location_2"/>
|
||||
<field name="date_tz">US/Pacific</field>
|
||||
|
||||
@@ -139,10 +139,8 @@ class EventEvent(models.Model):
|
||||
string='Maximum Attendees Number',
|
||||
compute='_compute_from_event_type', copy=True, readonly=False, store=True,
|
||||
help="For each event you can define a maximum registration of seats(number of attendees), above this numbers the registrations are not accepted.")
|
||||
seats_availability = fields.Selection(
|
||||
[('unlimited', 'Unlimited'), ('limited', 'Limited')],
|
||||
string='Maximum Attendees', required=True,
|
||||
compute='_compute_seats_availability', copy=True, readonly=False, store=True)
|
||||
seats_limited = fields.Boolean('Maximum Attendees', required=True, compute='_compute_seats_limited',
|
||||
copy=True, readonly=False, store=True)
|
||||
seats_reserved = fields.Integer(
|
||||
string='Reserved Seats',
|
||||
store=True, readonly=True, compute='_compute_seats')
|
||||
@@ -227,11 +225,11 @@ class EventEvent(models.Model):
|
||||
seats_expected = event.seats_unconfirmed + event.seats_reserved + event.seats_used
|
||||
event.seats_expected = seats_expected
|
||||
|
||||
@api.depends('date_end', 'seats_available', 'seats_availability', 'event_ticket_ids.sale_available')
|
||||
@api.depends('date_end', 'seats_available', 'seats_limited', 'event_ticket_ids.sale_available')
|
||||
def _compute_event_registrations_open(self):
|
||||
for event in self:
|
||||
event.event_registrations_open = event.date_end and (event.date_end > fields.Datetime.now()) and \
|
||||
(event.seats_available or event.seats_availability == 'unlimited') and \
|
||||
(event.seats_available or not event.seats_limited) and \
|
||||
(not event.event_ticket_ids or any(ticket.sale_available for ticket in event.event_ticket_ids))
|
||||
|
||||
@api.depends('stage_id', 'kanban_state')
|
||||
@@ -306,7 +304,7 @@ class EventEvent(models.Model):
|
||||
event.date_tz = self.env.user.tz or 'UTC'
|
||||
|
||||
@api.depends('event_type_id')
|
||||
def _compute_seats_availability(self):
|
||||
def _compute_seats_limited(self):
|
||||
""" Make it separate from ``_compute_from_event_type`` because otherwise
|
||||
a value given at create (see create override) would protect all other fields
|
||||
depending on event type id from being computed as compute method will be
|
||||
@@ -314,9 +312,9 @@ class EventEvent(models.Model):
|
||||
to compute protected field from re-computation) """
|
||||
for event in self:
|
||||
if event.event_type_id.seats_max:
|
||||
event.seats_availability = 'limited'
|
||||
if not event.seats_availability:
|
||||
event.seats_availability = 'unlimited'
|
||||
event.seats_limited = True
|
||||
if not event.seats_limited:
|
||||
event.seats_limited = False
|
||||
|
||||
@api.depends('event_type_id')
|
||||
def _compute_from_event_type(self):
|
||||
@@ -328,7 +326,6 @@ class EventEvent(models.Model):
|
||||
Updated by this method
|
||||
* seats_max -> triggers _compute_seats (all seats computation)
|
||||
* auto_confirm
|
||||
* is_online -> triggers _compute_address_id (address_id computation)
|
||||
* event_mail_ids
|
||||
* event_ticket_ids -> triggers _compute_start_sale_date (start_sale_date computation)
|
||||
"""
|
||||
@@ -336,8 +333,6 @@ class EventEvent(models.Model):
|
||||
if not event.event_type_id:
|
||||
if not event.seats_max:
|
||||
event.seats_max = 0
|
||||
if not event.is_online:
|
||||
event.is_online = False
|
||||
if not event.event_ticket_ids:
|
||||
event.event_ticket_ids = False
|
||||
continue
|
||||
@@ -348,8 +343,6 @@ class EventEvent(models.Model):
|
||||
if event.event_type_id.auto_confirm:
|
||||
event.auto_confirm = event.event_type_id.auto_confirm
|
||||
|
||||
event.is_online = event.event_type_id.is_online
|
||||
|
||||
# compute mailing information (force only if activated and mailing defined)
|
||||
if event.event_type_id.use_mail_schedule and event.event_type_id.event_type_mail_ids:
|
||||
event.event_mail_ids = [(5, 0, 0)] + [
|
||||
@@ -371,9 +364,9 @@ class EventEvent(models.Model):
|
||||
if event.event_type_id.tag_ids:
|
||||
event.tag_ids = event.event_type_id.tag_ids
|
||||
|
||||
@api.constrains('seats_max', 'seats_available', 'seats_availability')
|
||||
@api.constrains('seats_max', 'seats_available', 'seats_limited')
|
||||
def _check_seats_limit(self):
|
||||
if any(event.seats_availability == 'limited' and event.seats_max and event.seats_available < 0 for event in self):
|
||||
if any(event.seats_limited and event.seats_max and event.seats_available < 0 for event in self):
|
||||
raise ValidationError(_('No more available seats.'))
|
||||
|
||||
@api.constrains('date_begin', 'date_end')
|
||||
@@ -399,7 +392,7 @@ class EventEvent(models.Model):
|
||||
|
||||
@api.model
|
||||
def create(self, vals):
|
||||
# Temporary fix for ``seats_availability`` and ``date_tz`` required fields (see ``_compute_from_event_type``
|
||||
# Temporary fix for ``seats_limited`` and ``date_tz`` required fields (see ``_compute_from_event_type``
|
||||
vals.update(self._sync_required_computed(vals))
|
||||
|
||||
res = super(EventEvent, self).create(vals)
|
||||
@@ -420,9 +413,10 @@ class EventEvent(models.Model):
|
||||
return super(EventEvent, self).copy(default)
|
||||
|
||||
def _sync_required_computed(self, values):
|
||||
# TODO: See if the change to seats_limited affects this ?
|
||||
""" Call compute fields in cache to find missing values for required fields
|
||||
(seats_availability and date_tz) in case they are not given in values """
|
||||
missing_fields = list(set(['seats_availability', 'date_tz']).difference(set(values.keys())))
|
||||
(seats_limited and date_tz) in case they are not given in values """
|
||||
missing_fields = list(set(['seats_limited', 'date_tz']).difference(set(values.keys())))
|
||||
if missing_fields and values:
|
||||
cache_event = self.new(values)
|
||||
cache_event._compute_from_event_type()
|
||||
|
||||
@@ -92,7 +92,7 @@ class EventRegistration(models.Model):
|
||||
@api.constrains('event_id', 'state')
|
||||
def _check_seats_limit(self):
|
||||
for registration in self:
|
||||
if registration.event_id.seats_availability == 'limited' and registration.event_id.seats_max and registration.event_id.seats_available < (1 if registration.state == 'draft' else 0):
|
||||
if registration.event_id.seats_limited and registration.event_id.seats_max and registration.event_id.seats_available < (1 if registration.state == 'draft' else 0):
|
||||
raise ValidationError(_('No more seats available for this event.'))
|
||||
|
||||
@api.constrains('event_ticket_id', 'state')
|
||||
@@ -151,7 +151,7 @@ class EventRegistration(models.Model):
|
||||
|
||||
def _check_auto_confirmation(self):
|
||||
if any(not registration.event_id.auto_confirm or
|
||||
(not registration.event_id.seats_available and registration.event_id.seats_availability == 'limited') for registration in self):
|
||||
(not registration.event_id.seats_available and registration.event_id.seats_limited) for registration in self):
|
||||
return False
|
||||
return True
|
||||
|
||||
|
||||
@@ -19,18 +19,17 @@ class EventTemplateTicket(models.Model):
|
||||
event_type_id = fields.Many2one(
|
||||
'event.type', string='Event Category', ondelete='cascade', required=True)
|
||||
# seats
|
||||
seats_availability = fields.Selection([
|
||||
('limited', 'Limited'), ('unlimited', 'Unlimited')], string='Seats Limit',
|
||||
readonly=True, store=True, compute='_compute_seats_availability')
|
||||
seats_limited = fields.Boolean(string='Seats Limit', readonly=True, store=True,
|
||||
compute='_compute_seats_limited')
|
||||
seats_max = fields.Integer(
|
||||
string='Maximum Seats',
|
||||
help="Define the number of available tickets. If you have too many registrations you will "
|
||||
"not be able to sell tickets anymore. Set 0 to ignore this rule set as unlimited.")
|
||||
|
||||
@api.depends('seats_max')
|
||||
def _compute_seats_availability(self):
|
||||
def _compute_seats_limited(self):
|
||||
for ticket in self:
|
||||
ticket.seats_availability = 'limited' if ticket.seats_max else 'unlimited'
|
||||
ticket.seats_limited = ticket.seats_max
|
||||
|
||||
@api.model
|
||||
def _get_event_ticket_fields_whitelist(self):
|
||||
|
||||
@@ -82,7 +82,7 @@ class TestEventFlow(TestEventCommon):
|
||||
'date_begin': datetime.datetime.now() + relativedelta(days=-1),
|
||||
'date_end': datetime.datetime.now() + relativedelta(days=1),
|
||||
'seats_max': 2,
|
||||
'seats_availability': 'limited',
|
||||
'seats_limited': True,
|
||||
})
|
||||
self.assertTrue(test_event.auto_confirm)
|
||||
|
||||
@@ -124,7 +124,7 @@ class TestEventFlow(TestEventCommon):
|
||||
'name': 'TestEvent',
|
||||
'date_begin': datetime.datetime.now() + relativedelta(days=-1),
|
||||
'date_end': datetime.datetime.now() + relativedelta(days=1),
|
||||
'seats_availability': 'limited',
|
||||
'seats_limited': True,
|
||||
'seats_max': 10,
|
||||
})
|
||||
self.assertFalse(test_event.auto_confirm)
|
||||
|
||||
@@ -61,7 +61,7 @@ class TestEventData(TestEventCommon):
|
||||
|
||||
self.assertEqual(event.address_id, self.env.user.company_id.partner_id)
|
||||
# seats: coming from event type configuration
|
||||
self.assertEqual(event.seats_availability, 'limited')
|
||||
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)
|
||||
@@ -113,7 +113,7 @@ class TestEventData(TestEventCommon):
|
||||
'date_end': FieldsDatetime.to_string(datetime.today() + timedelta(days=15)),
|
||||
})
|
||||
self.assertEqual(event.date_tz, self.env.user.tz)
|
||||
self.assertEqual(event.seats_availability, 'unlimited')
|
||||
self.assertFalse(event.seats_limited)
|
||||
self.assertFalse(event.auto_confirm)
|
||||
self.assertEqual(event.event_mail_ids, self.env['event.mail'])
|
||||
|
||||
@@ -125,7 +125,7 @@ class TestEventData(TestEventCommon):
|
||||
})
|
||||
event.write({'event_type_id': event_type.id})
|
||||
self.assertEqual(event.date_tz, 'Europe/Paris')
|
||||
self.assertEqual(event.seats_availability, 'limited')
|
||||
self.assertTrue(event.seats_limited)
|
||||
self.assertEqual(event.seats_max, event_type.seats_max)
|
||||
self.assertTrue(event.auto_confirm)
|
||||
self.assertEqual(event.event_mail_ids.interval_nbr, 1)
|
||||
@@ -162,7 +162,7 @@ class TestEventData(TestEventCommon):
|
||||
event.write({
|
||||
'date_end': datetime.now() + timedelta(days=3),
|
||||
'seats_max': 1,
|
||||
'seats_availability': 'limited',
|
||||
'seats_limited': True,
|
||||
})
|
||||
self.assertEqual(event.seats_available, 0)
|
||||
self.assertFalse(event.event_registrations_open)
|
||||
@@ -246,11 +246,11 @@ class TestEventTicketData(TestEventCommon):
|
||||
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')
|
||||
|
||||
self.assertEqual(first_ticket.seats_availability, 'limited')
|
||||
self.assertTrue(first_ticket.seats_limited)
|
||||
self.assertTrue(first_ticket.sale_available)
|
||||
self.assertFalse(first_ticket.is_expired)
|
||||
|
||||
self.assertEqual(second_ticket.seats_availability, 'unlimited')
|
||||
self.assertFalse(second_ticket.seats_limited)
|
||||
self.assertTrue(second_ticket.sale_available)
|
||||
self.assertFalse(second_ticket.is_expired)
|
||||
# sale is ended
|
||||
|
||||
@@ -26,7 +26,7 @@ class TestEventSecurity(TestEventCommon):
|
||||
'name': 'TestEvent',
|
||||
'date_begin': datetime.now() + relativedelta(days=-1),
|
||||
'date_end': datetime.now() + relativedelta(days=1),
|
||||
'seats_availability': 'limited',
|
||||
'seats_limited': True,
|
||||
'seats_max': 10,
|
||||
})
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
<field name="name"/>
|
||||
<field name="description"/>
|
||||
<field name="seats_max"/>
|
||||
<field name="seats_availability"/>
|
||||
<field name="seats_limited"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
@@ -26,7 +26,7 @@
|
||||
<group>
|
||||
<field name="name"/>
|
||||
<field name="description"/>
|
||||
<field name="seats_availability"/>
|
||||
<field name="seats_limited"/>
|
||||
<field name="seats_max"/>
|
||||
</group>
|
||||
</sheet>
|
||||
@@ -162,7 +162,7 @@
|
||||
<group>
|
||||
<group>
|
||||
<field name="event_id"/>
|
||||
<field name="seats_availability"/>
|
||||
<field name="seats_limited"/>
|
||||
<field name="seats_available"/>
|
||||
<field name="start_sale_date"/>
|
||||
<field name="end_sale_date"/>
|
||||
|
||||
@@ -222,15 +222,10 @@
|
||||
context="{'show_address': 1}"
|
||||
options='{"always_reload": True}'/>
|
||||
<field name="auto_confirm"/>
|
||||
</group>
|
||||
<group>
|
||||
<label for="seats_availability"/>
|
||||
<label for="seats_limited" string="Limit Registrations"/>
|
||||
<div>
|
||||
<field name="seats_availability" widget='radio'/>
|
||||
<span attrs="{'invisible': [('seats_availability', '=', 'unlimited')]}" class="oe_read_only">
|
||||
to
|
||||
</span>
|
||||
<field name="seats_max" attrs="{'invisible': [('seats_availability', '=', 'unlimited')], 'required': [('seats_availability', '=', 'limited')]}"/>
|
||||
<field name="seats_limited"/>
|
||||
<span attrs="{'invisible': [('seats_limited', '=', False)], 'required': [('seats_limited', '=', False)]}">to <field name="seats_max" class="oe_inline"/> Attendees</span>
|
||||
</div>
|
||||
</group>
|
||||
</group>
|
||||
@@ -535,7 +530,7 @@
|
||||
<field name="event_ticket_id"
|
||||
domain="[
|
||||
('event_id', '=', event_id),
|
||||
'|', ('seats_availability', '=', 'unlimited'), ('seats_available', '>', 0)
|
||||
'|', ('seats_limited', '=', False), ('seats_available', '>', 0)
|
||||
]"
|
||||
attrs="{'invisible': [('event_id', '=', False)]}"
|
||||
options="{'no_open': True, 'no_create': True}"/>
|
||||
|
||||
@@ -43,7 +43,7 @@ class TestEventData(TestEventSaleCommon):
|
||||
# synchronize event
|
||||
event.write({'event_type_id': event_type.id})
|
||||
self.assertEqual(event.event_ticket_ids.name, event.event_type_id.event_type_ticket_ids.name)
|
||||
self.assertEqual(event.event_ticket_ids.seats_availability, 'limited')
|
||||
self.assertTrue(event.event_ticket_ids.seats_limited)
|
||||
self.assertEqual(event.event_ticket_ids.seats_max, 5)
|
||||
self.assertEqual(event.event_ticket_ids.product_id, self.event_product)
|
||||
self.assertEqual(event.event_ticket_ids.price, self.event_product.list_price)
|
||||
@@ -120,10 +120,10 @@ class TestEventTicketData(TestEventSaleCommon):
|
||||
self.assertEqual(second_ticket.price, 8.0)
|
||||
|
||||
# default availability
|
||||
self.assertEqual(first_ticket.seats_availability, 'limited')
|
||||
self.assertTrue(first_ticket.seats_limited)
|
||||
self.assertTrue(first_ticket.sale_available)
|
||||
self.assertFalse(first_ticket.is_expired)
|
||||
self.assertEqual(second_ticket.seats_availability, 'unlimited')
|
||||
self.assertFalse(second_ticket.seats_limited)
|
||||
self.assertTrue(second_ticket.sale_available)
|
||||
self.assertFalse(second_ticket.is_expired)
|
||||
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
domain="[
|
||||
('event_id', '=', event_id),
|
||||
('product_id','=',product_id),
|
||||
'|', ('seats_availability', '=', 'unlimited'), ('seats_available', '>', 0), '|', ('company_id', '=', False), ('company_id', '=', parent.company_id)
|
||||
'|', ('seats_limited', '=', False), ('seats_available', '>', 0), '|', ('company_id', '=', False), ('company_id', '=', parent.company_id)
|
||||
]"
|
||||
attrs="{
|
||||
'invisible': ['|', ('event_ok', '=', False), ('event_id', '=', False)],
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
domain="[
|
||||
('event_id', '=', event_id),
|
||||
('product_id','=',product_id),
|
||||
'|', ('seats_availability', '=', 'unlimited'), ('seats_available', '>', 0)
|
||||
'|', ('seats_limited', '=', False), ('seats_available', '>', 0)
|
||||
]"
|
||||
attrs="{
|
||||
'invisible': [('event_id', '=', False)],
|
||||
|
||||
@@ -296,7 +296,7 @@ class WebsiteEventController(http.Controller):
|
||||
def registration_new(self, event, **post):
|
||||
tickets = self._process_tickets_form(event, post)
|
||||
availability_check = True
|
||||
if event.seats_availability == 'limited':
|
||||
if event.seats_limited:
|
||||
ordered_seats = 0
|
||||
for ticket in tickets:
|
||||
ordered_seats += ticket['quantity']
|
||||
|
||||
@@ -238,7 +238,7 @@
|
||||
<footer
|
||||
t-attf-class="small align-self-end w-100 #{opt_events_list_cards and 'card-footer' or ((not opt_events_list_columns) and 'border-top mx-4 mt-auto pt-2' or 'border-top py-2')}">
|
||||
<span class="text-danger"
|
||||
t-if="event.seats_availability == 'limited' and not event.seats_available">
|
||||
t-if="event.seats_limited and not event.seats_available">
|
||||
Sold Out
|
||||
</span>
|
||||
</footer>
|
||||
@@ -587,8 +587,8 @@
|
||||
<select t-if="not ticket.is_expired and ticket.sale_available"
|
||||
t-attf-name="nb_register-#{ticket.id}"
|
||||
class="custom-select">
|
||||
<t t-set="seats_max_ticket" t-value="(ticket.seats_availability == 'unlimited' or ticket.seats_available > 9) and 10 or ticket.seats_available + 1"/>
|
||||
<t t-set="seats_max_event" t-value="(event.seats_availability == 'unlimited' or event.seats_available > 9) and 10 or event.seats_available + 1"/>
|
||||
<t t-set="seats_max_ticket" t-value="(not ticket.seats_limited or ticket.seats_available > 9) and 10 or ticket.seats_available + 1"/>
|
||||
<t t-set="seats_max_event" t-value="(not event.seats_limited or event.seats_available > 9) and 10 or event.seats_available + 1"/>
|
||||
<t t-set="seats_max" t-value="min(seats_max_ticket, seats_max_event)"/>
|
||||
<t t-foreach="range(0, seats_max)" t-as="nb">
|
||||
<option t-esc="nb" t-att-selected="len(ticket) == 0 and nb == 0 and 'selected'"/>
|
||||
@@ -603,7 +603,7 @@
|
||||
</div>
|
||||
<div class="row no-gutters">
|
||||
<div class="col-md-4 offset-md-8 py-2 pl-md-0 pr-md-2">
|
||||
<button type="submit" class="btn btn-primary o_wait_lazy_js btn-block a-submit" disabled="" t-attf-id="#{event.id}">Register<t t-if="event.seats_availability != 'unlimited'">(Available seats: <t t-esc="event.seats_available"/>)</t></button>
|
||||
<button type="submit" class="btn btn-primary o_wait_lazy_js btn-block a-submit" disabled="" t-attf-id="#{event.id}">Register<t t-if="event.seats_limited">(Available seats: <t t-esc="event.seats_available"/>)</t></button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -620,8 +620,8 @@
|
||||
<span class="text-dark font-weight-bold align-middle pr-2">Qty</span>
|
||||
<link itemprop="availability" content="http://schema.org/InStock"/>
|
||||
<select t-att-name="'nb_register-%s' % (tickets.id if tickets else 0)" class="w-auto custom-select">
|
||||
<t t-set="seats_max_ticket" t-value="(not tickets or tickets.seats_availability == 'unlimited' or tickets.seats_available > 9) and 10 or tickets.seats_available + 1"/>
|
||||
<t t-set="seats_max_event" t-value="(event.seats_availability == 'unlimited' or event.seats_available > 9) and 10 or event.seats_available + 1"/>
|
||||
<t t-set="seats_max_ticket" t-value="(not tickets or not tickets.seats_limited or tickets.seats_available > 9) and 10 or tickets.seats_available + 1"/>
|
||||
<t t-set="seats_max_event" t-value="(not event.seats_limited or event.seats_available > 9) and 10 or event.seats_available + 1"/>
|
||||
<t t-set="seats_max" t-value="min(seats_max_ticket, seats_max_event) if tickets else seats_max_event"/>
|
||||
<t t-foreach="range(0, seats_max)" t-as="nb">
|
||||
<option t-esc="nb" t-att-selected="nb == 1 and 'selected'"/>
|
||||
|
||||
@@ -67,13 +67,13 @@ class SaleOrder(models.Model):
|
||||
|
||||
# case: buying tickets for a sold out ticket
|
||||
values = {}
|
||||
if ticket and ticket.seats_availability == 'limited' and ticket.seats_available <= 0:
|
||||
if ticket and ticket.seats_limited and ticket.seats_available <= 0:
|
||||
values['warning'] = _('Sorry, The %(ticket)s tickets for the %(event)s event are sold out.') % {
|
||||
'ticket': ticket.name,
|
||||
'event': ticket.event_id.name}
|
||||
new_qty, set_qty, add_qty = 0, 0, -old_qty
|
||||
# case: buying tickets, too much attendees
|
||||
elif ticket and ticket.seats_availability == 'limited' and new_qty > ticket.seats_available:
|
||||
elif ticket and ticket.seats_limited and new_qty > ticket.seats_available:
|
||||
values['warning'] = _('Sorry, only %(remaining_seats)d seats are still available for the %(ticket)s ticket for the %(event)s event.') % {
|
||||
'remaining_seats': ticket.seats_available,
|
||||
'ticket': ticket.name,
|
||||
|
||||
Reference in New Issue
Block a user