[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:
@@ -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 -->
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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"/>
|
||||
|
||||
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user