Skip to content
Snippets Groups Projects
Commit 553e0cd5 authored by Thibault Delavallée's avatar Thibault Delavallée
Browse files

[MOV][IMP] (website_)event_sale: prepare views for ticket model update

PURPOSE

Integration between event and eCommerce is required only when users handle the
entire selling process online. However users may require ticketing support
while managing payments outside of Odoo. Purpose of this commit is to prepare
support of tickets directly in event application without need of sales.

SPECIFICATIONS

In this commit we prepare the ticket model split and update by

  * define views for ticket model. Currently views are directly embedded
    in o2m of event.type and event.event, leading to complex xpath to
    modify them. They are now real views;
  * split templates in website_event_sale, to have templates related to
    website_event and website_sale separated, leading to more simple diff
    comprehension;

LINKS

Task ID 2177281 (support tickets directly in event)
Prepares Community PR odoo/odoo#43488
Closes Community PR odoo/odoo#44066
parent 7caa5323
No related branches found
No related tags found
No related merge requests found
Showing
with 312 additions and 260 deletions
......@@ -21,6 +21,8 @@ this event.
'depends': ['event', 'sale_management'],
'data': [
'views/assets.xml',
'views/event_ticket_views.xml',
'views/event_registration_views.xml',
'views/event_views.xml',
'views/product_views.xml',
'views/sale_order_views.xml',
......
<?xml version="1.0" encoding="utf-8"?>
<odoo><data>
<record id="view_event_registration_ticket_search" model="ir.ui.view">
<field name="name">event.registration.search.inherit</field>
<field name="model">event.registration</field>
<field name="inherit_id" ref="event.view_registration_search" />
<field name="arch" type="xml">
<filter name="group_event" position="after">
<filter string="Ticket Type" name ="tickettype" domain="['|', ('company_id', '=', False), ('company_id', '=', parent.company_id)]" context="{'group_by':'event_ticket_id'}"/>
</filter>
</field>
</record>
<record id="view_event_registration_ticket_tree" model="ir.ui.view">
<field name="name">event.registration.tree.inherit</field>
<field name="model">event.registration</field>
<field name="inherit_id" ref="event.view_event_registration_tree" />
<field name="arch" type="xml">
<field name="event_id" position="after">
<field name="event_ticket_id"/>
<field name="origin"/>
</field>
</field>
</record>
<record id="event_registration_view_kanban" model="ir.ui.view">
<field name="name">event.registration.kanban.inherit</field>
<field name="model">event.registration</field>
<field name="inherit_id" ref="event.event_registration_view_kanban"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='event_id']" position="after">
<br/>
<field name="event_ticket_id"/>
</xpath>
</field>
</record>
<record id="view_event_registration_ticket_form" model="ir.ui.view">
<field name="name">event.registration.form.inherit</field>
<field name="model">event.registration</field>
<field name="inherit_id" ref="event.view_event_registration_form" />
<field name="arch" type="xml">
<field name="event_id" position="after">
<field
name="event_ticket_id"
domain="[
('event_id', '=', event_id),
'|', ('seats_availability', '=', 'unlimited'), ('seats_available', '>', 0)
]"
attrs="{'invisible': [('event_id', '=', False)]}"
options="{'no_open': True, 'no_create': True}"
/>
</field>
<group name="event" position="after">
<group string="Origin">
<field name="sale_order_id"/>
<field name="origin" attrs="{'invisible': [('sale_order_id', '!=', False)]}"/>
<field name="sale_order_line_id" readonly="1" attrs="{'invisible': [('sale_order_id', '=', False)]}"/>
</group>
<group string="Marketing" name="utm_link" groups="base.group_no_one">
<field name="campaign_id"/>
<field name="medium_id"/>
<field name="source_id"/>
</group>
</group>
</field>
</record>
</data></odoo>
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- EVENT.TICKET -->
<record id="event_event_ticket_view_tree_from_event" model="ir.ui.view">
<field name="name">event.event.ticket.view.tree.from_event</field>
<field name="model">event.event.ticket</field>
<field name="priority" eval="20"/>
<field name="arch" type="xml">
<tree string="Tickets" editable="bottom">
<field name="name"/>
<field name="product_id" context="{'default_event_ok':1}"/>
<field name="start_sale_date"/>
<field name="end_sale_date"/>
<field name="price"/>
<field name="seats_max"/>
<field name="seats_reserved" readonly="1"/>
<field name="seats_unconfirmed" readonly="1"/>
</tree>
</field>
</record>
<record id="event_event_ticket_view_form_from_event" model="ir.ui.view">
<field name="name">event.event.ticket.view.form.from.event</field>
<field name="model">event.event.ticket</field>
<field name="priority" eval="20"/>
<field name="arch" type="xml">
<form string="Ticket">
<group>
<group>
<field name="name"/>
<field name="product_id" context="{'default_event_ok':1}"/>
<field name="end_sale_date"/>
<field name="price"/>
</group><group>
<field name="seats_max"/>
<field name="seats_reserved" readonly="1"/>
<field name="seats_unconfirmed" readonly="1"/>
</group>
</group>
</form>
</field>
</record>
<record id="event_event_ticket_view_kanban_from_event" model="ir.ui.view">
<field name="name">event.event.ticket.view.kanban.from.event</field>
<field name="model">event.event.ticket</field>
<field name="priority" eval="20"/>
<field name="arch" type="xml">
<kanban class="o_kanban_mobile">
<field name="product_id"/>
<field name="name"/>
<field name="price"/>
<field name="seats_max"/>
<field name="seats_reserved"/>
<field name="seats_unconfirmed"/>
<templates>
<t t-name="kanban-box">
<div t-attf-class="oe_kanban_card oe_kanban_global_click">
<div class="row">
<div class="col-8">
<strong><t t-esc="record.name.value"/></strong>
</div>
<div class="col-4 text-right"><strong> <t t-esc="record.price.value"/></strong></div>
</div>
<div t-esc="record.product_id.value"/>
<div><i>
<t t-esc="record.seats_reserved.value"/> reserved + <t t-esc="record.seats_reserved.value"/> unconfirmed
</i></div>
</div>
</t>
</templates>
</kanban>
</field>
</record>
<record id="event_event_ticket_view_form" model="ir.ui.view">
<field name="name">event.event.ticket.view.form</field>
<field name="model">event.event.ticket</field>
<field name="arch" type="xml">
<form string="Event's Ticket">
<div class="oe_title">
<label for="name" class="oe_edit_only"/>
<h1><field name="name" placeholder="Event Name"/></h1>
</div>
<group>
<group>
<field name="event_id"/>
<field name="seats_availability"/>
<field name="seats_available"/>
<field name="end_sale_date"/>
<field name="price"/>
<field name="price_reduce" groups="base.group_no_one"/>
</group>
<group>
<field name="seats_max"/>
<field name="seats_reserved"/>
<field name="seats_unconfirmed"/>
<field name="seats_used"/>
<field name="product_id"/>
<field name="is_expired"/>
</group>
</group>
</form>
</field>
</record>
</odoo>
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="view_event_registration_ticket_search" model="ir.ui.view">
<field name="name">event.registration.search.inherit</field>
<field name="model">event.registration</field>
<field name="inherit_id" ref="event.view_registration_search" />
<field name="arch" type="xml">
<filter name="group_event" position="after">
<filter string="Ticket Type" name ="tickettype" domain="['|', ('company_id', '=', False), ('company_id', '=', parent.company_id)]" context="{'group_by':'event_ticket_id'}"/>
</filter>
</field>
</record>
<record id="view_event_registration_ticket_tree" model="ir.ui.view">
<field name="name">event.registration.tree.inherit</field>
<field name="model">event.registration</field>
<field name="inherit_id" ref="event.view_event_registration_tree" />
<field name="arch" type="xml">
<field name="event_id" position="after">
<field name="event_ticket_id"/>
<field name="origin"/>
</field>
</field>
</record>
<record id="event_registration_view_kanban" model="ir.ui.view">
<field name="name">event.registration.kanban.inherit</field>
<field name="model">event.registration</field>
<field name="inherit_id" ref="event.event_registration_view_kanban"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='event_id']" position="after">
<br/>
<field name="event_ticket_id"/>
</xpath>
</field>
</record>
<record id="view_event_registration_ticket_form" model="ir.ui.view">
<field name="name">event.registration.form.inherit</field>
<field name="model">event.registration</field>
<field name="inherit_id" ref="event.view_event_registration_form" />
<field name="arch" type="xml">
<field name="event_id" position="after">
<field
name="event_ticket_id"
domain="[
('event_id', '=', event_id),
'|', ('seats_availability', '=', 'unlimited'), ('seats_available', '>', 0)
]"
attrs="{'invisible': [('event_id', '=', False)]}"
options="{'no_open': True, 'no_create': True}"
/>
</field>
<group name="event" position="after">
<group string="Origin">
<field name="sale_order_id"/>
<field name="origin" attrs="{'invisible': [('sale_order_id', '!=', False)]}"/>
<field name="sale_order_line_id" readonly="1" attrs="{'invisible': [('sale_order_id', '=', False)]}"/>
</group>
<group string="Marketing" name="utm_link" groups="base.group_no_one">
<field name="campaign_id"/>
<field name="medium_id"/>
<field name="source_id"/>
</group>
</group>
</field>
</record>
<record id="event_type_view_form_inherit_sale" model="ir.ui.view">
<field name="name">event.type.view.form.inherit.sale</field>
<field name="model">event.type</field>
<field name="inherit_id" ref="event.view_event_type_form"/>
<field name="arch" type="xml">
<div name="event_type_attendees_auto_confirm" position="after">
<div class="col-12 col-lg-12 o_setting_box">
<div class="o_setting_left_pane">
<field name="use_ticketing"/>
</div>
<div class="o_setting_right_pane">
<label for="use_ticketing"/>
<div class="row mt16" attrs="{'invisible': [('use_ticketing', '=', False)]}">
<div class="col-lg-9">
<field name="event_ticket_ids">
<tree string="Tickets" editable="bottom">
<field name="name"/>
<field name="product_id"/>
<field name="price"/>
</tree>
</field>
</div>
<record id="event_type_view_form_inherit_sale" model="ir.ui.view">
<field name="name">event.type.view.form.inherit.sale</field>
<field name="model">event.type</field>
<field name="inherit_id" ref="event.view_event_type_form"/>
<field name="arch" type="xml">
<div name="event_type_attendees_auto_confirm" position="after">
<div class="col-12 col-lg-12 o_setting_box">
<div class="o_setting_left_pane">
<field name="use_ticketing"/>
</div>
<div class="o_setting_right_pane">
<label for="use_ticketing"/>
<div class="row mt16" attrs="{'invisible': [('use_ticketing', '=', False)]}">
<div class="col-lg-9">
<field name="event_ticket_ids">
<tree string="Tickets" editable="bottom">
<field name="name"/>
<field name="product_id"/>
<field name="price"/>
</tree>
</field>
</div>
</div>
</div>
</div>
</field>
</record>
</div>
</field>
</record>
<record id="view_event_form_inherit_ticket" model="ir.ui.view">
<field name="name">event.form.inherit</field>
<field name="model">event.event</field>
<field name="inherit_id" ref="event.view_event_form"/>
<field name="arch" type="xml">
<xpath expr="//div[hasclass('oe_button_box')]" position="inside">
<field name="currency_id" invisible="1"/>
<button name="action_view_linked_orders"
type="object" class="oe_stat_button" icon="fa-dollar"
help="Total sales for this event"
attrs="{'invisible': ['|', ('sale_price_subtotal', '=', 0), ('sale_price_subtotal', '=', False)]}">
<div class="o_field_widget o_stat_info">
<span class="o_stat_value">
<field string="Sales" name="sale_price_subtotal"
widget="monetary" options="{'currency_field': 'currency_id'}"/>
</span>
<span class="o_stat_text">Sales</span>
</div>
</button>
</xpath>
<page name="event_communication" position="before">
<page string="Tickets" name="tickets">
<field name="event_ticket_ids" context="{'default_name': name}" mode="tree,kanban">
<tree string="Tickets" editable="bottom">
<field name="name"/>
<field name="product_id" context="{'default_event_ok':1}"/>
<field name="start_sale_date"/>
<field name="end_sale_date"/>
<field name="price"/>
<field name="seats_max"/>
<field name="seats_reserved" readonly="1"/>
<field name="seats_unconfirmed" readonly="1"/>
</tree>
<kanban class="o_kanban_mobile">
<field name="product_id"/>
<field name="name"/>
<field name="price"/>
<field name="seats_max"/>
<field name="seats_reserved"/>
<field name="seats_unconfirmed"/>
<templates>
<t t-name="kanban-box">
<div t-attf-class="oe_kanban_card oe_kanban_global_click">
<div class="row">
<div class="col-8">
<strong><t t-esc="record.name.value"/></strong>
</div>
<div class="col-4 text-right"><strong> <t t-esc="record.price.value"/></strong></div>
</div>
<div t-esc="record.product_id.value"/>
<div><i>
<t t-esc="record.seats_reserved.value"/> reserved + <t t-esc="record.seats_reserved.value"/> unconfirmed
</i></div>
</div>
</t>
</templates>
</kanban>
<form string="Tickets">
<group>
<group>
<field name="name"/>
<field name="product_id" context="{'default_event_ok':1}"/>
<field name="end_sale_date"/>
<field name="price"/>
</group><group>
<field name="seats_max"/>
<field name="seats_reserved" readonly="1"/>
<field name="seats_unconfirmed" readonly="1"/>
</group>
</group>
</form>
</field>
</page>
</page>
</field>
</record>
<record id="event_ticket_form_view" model="ir.ui.view">
<field name="name">event.event.ticket.form</field>
<field name="model">event.event.ticket</field>
<field name="arch" type="xml">
<form string="Event's Ticket">
<div class="oe_title">
<label for="name" class="oe_edit_only"/>
<h1><field name="name" placeholder="Event Name"/></h1>
<record id="view_event_form_inherit_ticket" model="ir.ui.view">
<field name="name">event.form.inherit</field>
<field name="model">event.event</field>
<field name="inherit_id" ref="event.view_event_form"/>
<field name="arch" type="xml">
<xpath expr="//div[hasclass('oe_button_box')]" position="inside">
<field name="currency_id" invisible="1"/>
<button name="action_view_linked_orders"
type="object" class="oe_stat_button" icon="fa-dollar"
help="Total sales for this event"
attrs="{'invisible': ['|', ('sale_price_subtotal', '=', 0), ('sale_price_subtotal', '=', False)]}">
<div class="o_field_widget o_stat_info">
<span class="o_stat_value">
<field string="Sales" name="sale_price_subtotal"
widget="monetary" options="{'currency_field': 'currency_id'}"/>
</span>
<span class="o_stat_text">Sales</span>
</div>
<group>
<group>
<field name="event_id"/>
<field name="seats_availability"/>
<field name="seats_available"/>
<field name="end_sale_date"/>
<field name="price"/>
<field name="price_reduce" groups="base.group_no_one"/>
</group>
<group>
<field name="seats_max"/>
<field name="seats_reserved"/>
<field name="seats_unconfirmed"/>
<field name="seats_used"/>
<field name="product_id"/>
<field name="is_expired"/>
</group>
</group>
</form>
</field>
</record>
</button>
</xpath>
<page name="event_communication" position="before">
<page string="Tickets" name="tickets">
<field name="event_ticket_ids" context="{
'default_name': name,
'tree_view_ref': 'event_sale.event_event_ticket_view_tree_from_event',
'form_view_ref': 'event_sale.event_event_ticket_view_form_from_event',
'kanban_view_ref': 'event_sale.event_event_ticket_view_kanban_from_event'}" mode="tree,kanban"/>
</page>
</page>
</field>
</record>
</odoo>
......@@ -10,6 +10,7 @@
'depends': ['website', 'website_partner', 'website_mail', 'event'],
'data': [
'data/event_data.xml',
'views/assets.xml',
'views/res_config_settings_views.xml',
'views/event_snippets.xml',
'views/event_templates.xml',
......
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<template id="assets_frontend" inherit_id="website.assets_frontend" name="Event Assets Frontend">
<xpath expr="//link[last()]" position="after">
<link rel="stylesheet" type="text/scss" href="/website_event/static/src/scss/website_event.scss"/>
</xpath>
<xpath expr="//script[last()]" position="after">
<script type="text/javascript" src="/website_event/static/src/js/website_geolocation.js"></script>
<script type="text/javascript" src="/website_event/static/src/js/website_event.js"></script>
</xpath>
</template>
<template id="assets_editor" inherit_id="website.assets_editor" name="Event Assets Editor">
<xpath expr="." position="inside">
<script type="text/javascript" src="/website_event/static/src/js/website_event.editor.js"></script>
<script type="text/javascript" src="/website_event/static/src/js/tours/website_event.js"></script>
</xpath>
</template>
</odoo>
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<template id="assets_frontend" inherit_id="website.assets_frontend" name="Event Assets Frontend">
<xpath expr="//link[last()]" position="after">
<link rel="stylesheet" type="text/scss" href="/website_event/static/src/scss/website_event.scss"/>
</xpath>
<xpath expr="//script[last()]" position="after">
<script type="text/javascript" src="/website_event/static/src/js/website_geolocation.js"></script>
<script type="text/javascript" src="/website_event/static/src/js/website_event.js"></script>
</xpath>
</template>
<template id="assets_editor" inherit_id="website.assets_editor" name="Event Assets Editor">
<xpath expr="." position="inside">
<script type="text/javascript" src="/website_event/static/src/js/website_event.editor.js"></script>
<script type="text/javascript" src="/website_event/static/src/js/tours/website_event.js"></script>
</xpath>
</template>
<!-- Index -->
<template id="index" name="Events">
<t t-call="website.layout">
......
......@@ -11,8 +11,10 @@ Sell event tickets through eCommerce app.
'depends': ['website_event', 'event_sale', 'website_sale'],
'data': [
'data/event_data.xml',
'views/event_templates.xml',
'views/event_views.xml',
'views/assets.xml',
'views/event_event_views.xml',
'views/website_event_templates.xml',
'views/website_sale_templates.xml',
'security/ir.model.access.csv',
'security/website_event_sale_security.xml',
],
......
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<template id="assets_tests" inherit_id="web.assets_tests" name="Website Event Sale Assets Tests">
<xpath expr="." position="inside">
<script type="text/javascript" src="/website_event_sale/static/tests/tours/website_event_sale.js"></script>
</xpath>
</template>
</odoo>
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="event_form_mandatory_company" model="ir.ui.view">
<field name="name">event.event.view.form.inherit.company.mandatory</field>
......
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<template id="assets_tests" inherit_id="web.assets_tests" name="Website Event Sale Assets Tests">
<xpath expr="." position="inside">
<script type="text/javascript" src="/website_event_sale/static/tests/tours/website_event_sale.js"></script>
</xpath>
</template>
<template id="index" inherit_id="website_event.events_list" name="Event's Ticket">
<xpath expr="//div[@t-foreach='event_ids']//footer" position="inside">
<t t-if="event.event_registrations_open and event.event_ticket_ids">
......@@ -122,44 +116,6 @@
</xpath>
</template>
<!-- If the sale order line concerns an event, we want the "product" link to point to the event itself and not to the product on the ecommerce -->
<template id="cart_line_product_link_inherit_website_event_sale" inherit_id="website_sale.cart_line_product_link" name="Event Shopping Cart Line Product Link">
<xpath expr="//a" position="attributes">
<attribute name="t-attf-href"/>
<attribute name="t-att-href">
line.event_id and ('/event/%s/register' % slug(line.event_id)) or line.product_id.website_url
</attribute>
</xpath>
</template>
<!-- If the sale order line concerns an event, we want to show an additional line with the event name even on small screens -->
<template id="cart_lines_inherit_website_event_sale" inherit_id="website_sale.cart_lines" name="Event Shopping Cart Lines">
<xpath expr="//t[@t-call='website_sale.cart_line_description_following_lines']/t[@t-set='div_class']" position="after">
<t t-if="line.event_id">
<t t-set="div_class" t-value="''"/>
</t>
</xpath>
</template>
<!-- If the sale order line concerns an event, we want to show an additional line with the event name -->
<template id="cart_popover_inherit_website_event_sale" inherit_id="website_sale.cart_popover" name="Event Cart Popover">
<xpath expr="//t[@t-call='website_sale.cart_line_product_link']" position="after">
<t t-if="line.event_id" t-call="website_sale.cart_line_description_following_lines"/>
</xpath>
</template>
<!-- If the sale order line concerns an event, we want to show an additional line with the event name -->
<template id="cart_summary_inherit_website_event_sale" inherit_id="website_sale.cart_summary" name="Event Cart right column">
<xpath expr="//td[hasclass('td-product_name')]/div/strong" position="after">
<t t-if="line.event_id" t-call="website_sale.cart_line_description_following_lines"/>
</xpath>
</template>
<template id="cart_lines_inherit_website_event_sale" inherit_id="website_sale.cart_lines" name="Hide product reduction for event tickets">
<xpath expr="//del" position="attributes">
<attribute name="t-attf-class" separator=" " add="#{line.event_id and 'd-none' or ''}"/>
</xpath>
</template>
<!-- Add the ticket name on the registration complete page. -->
<template id="registration_complete_inherit_website_event_sale" inherit_id="website_event.registration_complete" name="Sale Registration Completed">
......
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- If the sale order line concerns an event, we want the "product" link to point to the event itself and not to the product on the ecommerce -->
<template id="cart_line_product_link_inherit_website_event_sale" inherit_id="website_sale.cart_line_product_link" name="Event Shopping Cart Line Product Link">
<xpath expr="//a" position="attributes">
<attribute name="t-attf-href"/>
<attribute name="t-att-href">
line.event_id and ('/event/%s/register' % slug(line.event_id)) or line.product_id.website_url
</attribute>
</xpath>
</template>
<!-- If the sale order line concerns an event, we want to show an additional line with the event name even on small screens -->
<template id="cart_lines_inherit_website_event_sale" inherit_id="website_sale.cart_lines" name="Event Shopping Cart Lines">
<xpath expr="//t[@t-call='website_sale.cart_line_description_following_lines']/t[@t-set='div_class']" position="after">
<t t-if="line.event_id">
<t t-set="div_class" t-value="''"/>
</t>
</xpath>
</template>
<!-- If the sale order line concerns an event, we want to show an additional line with the event name -->
<template id="cart_popover_inherit_website_event_sale" inherit_id="website_sale.cart_popover" name="Event Cart Popover">
<xpath expr="//t[@t-call='website_sale.cart_line_product_link']" position="after">
<t t-if="line.event_id" t-call="website_sale.cart_line_description_following_lines"/>
</xpath>
</template>
<!-- If the sale order line concerns an event, we want to show an additional line with the event name -->
<template id="cart_summary_inherit_website_event_sale" inherit_id="website_sale.cart_summary" name="Event Cart right column">
<xpath expr="//td[hasclass('td-product_name')]/div/strong" position="after">
<t t-if="line.event_id" t-call="website_sale.cart_line_description_following_lines"/>
</xpath>
</template>
<template id="cart_lines_inherit_website_event_sale" inherit_id="website_sale.cart_lines" name="Hide product reduction for event tickets">
<xpath expr="//del" position="attributes">
<attribute name="t-attf-class" separator=" " add="#{line.event_id and 'd-none' or ''}"/>
</xpath>
</template>
</odoo>
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment