[IMP] event{_sale}: add sequence to tickets (and templates)

When the price and the event are the same, nothing allows
ordering tickets in event_sale. Therefore, add a sequence
number and handle widget to the tickets (in data as well).
Also do it for ticket templates. Also, order the tickets
(on events and templates) by name before id.

Since event type tickets are not linked to any event, the
order does not include the event_id. However, event event
tickets are, and if they appear in the same list / reporting
someday, it makes sense to order them by event_id first.

In event_sale, we make sure the price is also in the order.
As the price is in the copied fields on the event when
using an event template, we add the price on the event
type tickets ordering to align with the event event tickets.

Add default value to sequence and sequence number to data
for event.type model. They were sequenced but demo data had
none, hence not really ordered.

We also add the id in the event.event _order value, otherwise
when ordering on the event (for instance ordering on event_id
for event.event.tickets), the order is random for events
having the same date_begin. We prevent this from happening.

Also make description optional hide on event types.

Task-2997391

closes odoo/odoo#101384

Signed-off-by: David Beguin (dbe) <dbe@odoo.com>
This commit is contained in:
Noe Antoine
2022-11-17 14:56:42 +01:00
parent 2fb1ed9175
commit a340443177
7 changed files with 26 additions and 5 deletions
+2
View File
@@ -5,10 +5,12 @@
<record id="event_type_data_ticket" model="event.type">
<field name="name">Ticketing</field>
<field name="auto_confirm" eval="False"/>
<field name="sequence">1</field>
</record>
<record id="event_type_data_conference" model="event.type">
<field name="name">Conference</field>
<field name="auto_confirm" eval="True"/>
<field name="sequence">2</field>
</record>
<!-- Event stages -->
+10
View File
@@ -30,6 +30,7 @@
<field name="start_sale_datetime" eval="(DateTime.today() + timedelta(days=5)).strftime('%Y-%m-%d 00:00:00')"/>
<field name="end_sale_datetime" eval="(DateTime.today() + timedelta(days=10)).strftime('%Y-%m-%d 23:00:00')"/>
<field name="seats_max">0</field>
<field name="sequence">1</field>
</record>
<record id="event_0_ticket_1" model="event.event.ticket">
<field name="name">Standard</field>
@@ -38,6 +39,7 @@
<field name="start_sale_datetime" eval="(DateTime.today() + timedelta(days=5)).strftime('%Y-%m-%d 00:00:00')"/>
<field name="end_sale_datetime" eval="(DateTime.today() + timedelta(days=10)).strftime('%Y-%m-%d 23:00:00')"/>
<field name="seats_max">50</field>
<field name="sequence">2</field>
</record>
<record id="event_0_ticket_2" model="event.event.ticket">
<field name="name">VIP</field>
@@ -46,6 +48,7 @@
<field name="start_sale_datetime" eval="(DateTime.today() + timedelta(days=5)).strftime('%Y-%m-%d 00:00:00')"/>
<field name="end_sale_datetime" eval="(DateTime.today() + timedelta(days=10)).strftime('%Y-%m-%d 23:00:00')"/>
<field name="seats_max">10</field>
<field name="sequence">3</field>
</record>
<record id="event.event_1" model="event.event">
@@ -118,12 +121,14 @@
<field name="event_id" ref="event.event_2"/>
<field name="end_sale_datetime" eval="(DateTime.today() + timedelta(90)).strftime('%Y-%m-%d 23:00:00')"/>
<field name="seats_max">50</field>
<field name="sequence">4</field>
</record>
<record id="event_2_ticket_2" model="event.event.ticket">
<field name="name">VIP</field>
<field name="event_id" ref="event.event_2"/>
<field name="end_sale_datetime" eval="(DateTime.today() + timedelta(60)).strftime('%Y-%m-%d 23:00:00')"/>
<field name="seats_max">5</field>
<field name="sequence">5</field>
</record>
<record id="activity_event_2_0" model="mail.activity">
<field name="res_id" ref="event.event_2" />
@@ -155,12 +160,14 @@
<field name="event_id" ref="event.event_3"/>
<field name="end_sale_datetime" eval="(DateTime.today() + timedelta(days=20)).strftime('%Y-%m-%d 23:00:00')"/>
<field name="seats_max">1200</field>
<field name="sequence">6</field>
</record>
<record id="event_3_ticket_1" model="event.event.ticket">
<field name="name">VIP</field>
<field name="event_id" ref="event.event_3"/>
<field name="end_sale_datetime" eval="(DateTime.today() + timedelta(days=20)).strftime('%Y-%m-%d 23:00:00')"/>
<field name="seats_max">50</field>
<field name="sequence">7</field>
</record>
<record id="activity_event_3_0" model="mail.activity">
<field name="res_id" ref="event.event_3" />
@@ -196,6 +203,7 @@
<field name="event_id" ref="event.event_4"/>
<field name="end_sale_datetime" eval="(DateTime.today() - timedelta(30)).strftime('%Y-%m-%d 23:00:00')"/>
<field name="seats_max">4</field>
<field name="sequence">8</field>
</record>
<record id="activity_event_4_0" model="mail.activity">
<field name="res_id" ref="event.event_4" />
@@ -254,12 +262,14 @@
<field name="name">Standard</field>
<field name="event_id" ref="event.event_7"/>
<field name="end_sale_datetime" eval="(DateTime.now() + timedelta(days=2)).strftime('%Y-%m-%d 15:00:00')"/>
<field name="sequence">9</field>
</record>
<record id="event_7_ticket_2" model="event.event.ticket">
<field name="name">VIP</field>
<field name="event_id" ref="event.event_7"/>
<field name="end_sale_datetime" eval="(DateTime.now() + timedelta(days=2)).strftime('%Y-%m-%d 15:00:00')"/>
<field name="seats_max">10</field>
<field name="sequence">10</field>
</record>
</data></odoo>
+3
View File
@@ -5,15 +5,18 @@
<record id="event_type_0" model="event.type">
<field name="name">Exhibition</field>
<field name="auto_confirm" eval="False"/>
<field name="sequence">3</field>
</record>
<record id="event_type_1" model="event.type">
<field name="name">Training</field>
<field name="auto_confirm" eval="False"/>
<field name="sequence">4</field>
</record>
<record id="event_type_2" model="event.type">
<field name="name">Sport</field>
<field name="auto_confirm" eval="False"/>
<field name="default_timezone">US/Pacific</field>
<field name="sequence">5</field>
</record>
<record id="event_type_data_conference" model="event.type">
<field name="default_timezone">Europe/Brussels</field>
+2 -2
View File
@@ -52,7 +52,7 @@ class EventType(models.Model):
name = fields.Char('Event Template', required=True, translate=True)
note = fields.Html(string='Note')
sequence = fields.Integer()
sequence = fields.Integer(default=10)
# tickets
event_type_ticket_ids = fields.One2many('event.type.ticket', 'event_type_id', string='Tickets')
tag_ids = fields.Many2many('event.tag', string="Tags")
@@ -88,7 +88,7 @@ class EventEvent(models.Model):
_name = 'event.event'
_description = 'Event'
_inherit = ['mail.thread', 'mail.activity.mixin']
_order = 'date_begin'
_order = 'date_begin, id'
@api.model
def default_get(self, fields_list):
+4 -1
View File
@@ -9,7 +9,9 @@ from odoo.tools.misc import formatLang
class EventTemplateTicket(models.Model):
_name = 'event.type.ticket'
_description = 'Event Template Ticket'
_order = 'sequence, name, id'
sequence = fields.Integer('Sequence', default=10)
# description
name = fields.Char(
string='Name', default=lambda self: _('Registration'),
@@ -36,7 +38,7 @@ class EventTemplateTicket(models.Model):
def _get_event_ticket_fields_whitelist(self):
""" Whitelist of fields that are copied from event_type_ticket_ids to event_ticket_ids when
changing the event_type_id field of event.event """
return ['name', 'description', 'seats_max']
return ['sequence', 'name', 'description', 'seats_max']
class EventTicket(models.Model):
@@ -47,6 +49,7 @@ class EventTicket(models.Model):
_name = 'event.event.ticket'
_inherit = 'event.type.ticket'
_description = 'Event Ticket'
_order = "event_id, sequence, name, id"
@api.model
def default_get(self, fields):
+3 -1
View File
@@ -8,8 +8,9 @@
<field name="priority" eval="20"/>
<field name="arch" type="xml">
<tree string="Event Template Tickets" editable="bottom">
<field name="sequence" widget="handle"/>
<field name="name"/>
<field name="description"/>
<field name="description" optional="hide"/>
<field name="seats_max"/>
<field name="seats_limited"/>
</tree>
@@ -70,6 +71,7 @@
<field name="priority" eval="20"/>
<field name="arch" type="xml">
<tree string="Tickets" editable="bottom">
<field name="sequence" widget="handle"/>
<field name="name"/>
<field name="description" optional="hide"/>
<field name="start_sale_datetime" optional="show"/>
+2 -1
View File
@@ -10,6 +10,7 @@ _logger = logging.getLogger(__name__)
class EventTemplateTicket(models.Model):
_inherit = 'event.type.ticket'
_order = "sequence, price, name, id"
def _default_product_id(self):
return self.env.ref('event_sale.product_product_event', raise_if_not_found=False)
@@ -101,7 +102,7 @@ class EventTemplateTicket(models.Model):
class EventTicket(models.Model):
_inherit = 'event.event.ticket'
_order = "event_id, price"
_order = "event_id, sequence, price, name, id"
# product
price_reduce_taxinc = fields.Float(