summaryrefslogtreecommitdiff
path: root/addons/website_event_track/views
diff options
context:
space:
mode:
authorstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
committerstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
commit3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch)
treea44932296ef4a9b71d5f010906253d8c53727726 /addons/website_event_track/views
parent0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff)
initial commit 2
Diffstat (limited to 'addons/website_event_track/views')
-rw-r--r--addons/website_event_track/views/assets.xml19
-rw-r--r--addons/website_event_track/views/event_event_views.xml45
-rw-r--r--addons/website_event_track/views/event_menus.xml56
-rw-r--r--addons/website_event_track/views/event_sponsor_views.xml153
-rw-r--r--addons/website_event_track/views/event_templates.xml75
-rw-r--r--addons/website_event_track/views/event_track_location_views.xml34
-rw-r--r--addons/website_event_track/views/event_track_stage_views.xml92
-rw-r--r--addons/website_event_track/views/event_track_tag_views.xml76
-rw-r--r--addons/website_event_track/views/event_track_templates_agenda.xml203
-rw-r--r--addons/website_event_track/views/event_track_templates_list.xml415
-rw-r--r--addons/website_event_track/views/event_track_templates_misc.xml53
-rw-r--r--addons/website_event_track/views/event_track_templates_page.xml216
-rw-r--r--addons/website_event_track/views/event_track_templates_proposal.xml167
-rw-r--r--addons/website_event_track/views/event_track_templates_reminder.xml30
-rw-r--r--addons/website_event_track/views/event_track_views.xml293
-rw-r--r--addons/website_event_track/views/event_track_visitor_views.xml70
-rw-r--r--addons/website_event_track/views/event_type_views.xml20
-rw-r--r--addons/website_event_track/views/res_config_settings_view.xml28
-rw-r--r--addons/website_event_track/views/website_templates.xml10
-rw-r--r--addons/website_event_track/views/website_visitor_views.xml51
20 files changed, 2106 insertions, 0 deletions
diff --git a/addons/website_event_track/views/assets.xml b/addons/website_event_track/views/assets.xml
new file mode 100644
index 00000000..c94ee9ec
--- /dev/null
+++ b/addons/website_event_track/views/assets.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<odoo>
+
+<template id="assets_frontend" inherit_id="website.assets_frontend" name="Website Event Track Assets">
+ <xpath expr="//link[last()]" position="after">
+ <link rel="stylesheet" href="/website_event_track/static/src/css/website_event_track.css"/>
+ <link rel="stylesheet" type="text/scss" href="/website_event_track/static/src/scss/event_track_templates.scss"/>
+ <link rel="stylesheet" type="text/scss" href="/website_event_track/static/src/scss/event_track_templates_online.scss"/>
+ <link rel="stylesheet" type="text/scss" href="/website_event_track/static/src/scss/pwa_frontend.scss"/>
+ </xpath>
+ <xpath expr="//script[last()]" position="after">
+ <script type="text/javascript" src="/website_event_track/static/src/js/website_event_track.js"></script>
+ <script type="text/javascript" src="/website_event_track/static/src/js/event_track_reminder.js"></script>
+ <script type="text/javascript" src="/website_event_track/static/src/js/website_event_pwa_widget.js"/>
+ <script type="text/javascript" src="/website_event_track/static/lib/idb-keyval/idb-keyval.js"/>
+ </xpath>
+</template>
+
+</odoo>
diff --git a/addons/website_event_track/views/event_event_views.xml b/addons/website_event_track/views/event_event_views.xml
new file mode 100644
index 00000000..a06ca458
--- /dev/null
+++ b/addons/website_event_track/views/event_event_views.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="utf-8"?>
+<odoo>
+
+ <record id="event_event_view_form" model="ir.ui.view">
+ <field name="name">event.event.view.from.inherit.track</field>
+ <field name="inherit_id" ref="website_event.event_event_view_form"/>
+ <field name="model">event.event</field>
+ <field name="priority" eval="3"/>
+ <field name="arch" type="xml">
+ <xpath expr="//field[@name='is_published']" position="before">
+ <button name="%(action_event_track_from_event)d"
+ type="action"
+ class="oe_stat_button"
+ icon="fa-microphone"
+ context="{'default_date': date_begin}">
+ <field name="track_count" string="Tracks" widget="statinfo"/>
+ </button>
+ <button name="%(event_sponsor_action_from_event)d"
+ type="action"
+ class="oe_stat_button"
+ icon="fa-black-tie">
+ <field name="sponsor_count" string="Sponsors" widget="statinfo"/>
+ </button>
+ </xpath>
+ <xpath expr="//field[@name='website_menu']" position="after">
+ <label for="website_track" string="Showcase Tracks"/>
+ <field name="website_track"/>
+ <label for="website_track_proposal" string="Allow Track Proposals"/>
+ <field name="website_track_proposal"/>
+ </xpath>
+ </field>
+ </record>
+
+ <record id="event_event_view_list" model="ir.ui.view">
+ <field name="name">event.event.view.list.inherit.website.event.track</field>
+ <field name="model">event.event</field>
+ <field name="inherit_id" ref="event.view_event_tree"/>
+ <field name="arch" type="xml">
+ <field name="stage_id" position="after">
+ <field name="track_count" readonly="1" optional="hide"/>
+ <field name="sponsor_count" readonly="1" optional="hide"/>
+ </field>
+ </field>
+ </record>
+</odoo>
diff --git a/addons/website_event_track/views/event_menus.xml b/addons/website_event_track/views/event_menus.xml
new file mode 100644
index 00000000..8ec7b7b2
--- /dev/null
+++ b/addons/website_event_track/views/event_menus.xml
@@ -0,0 +1,56 @@
+<?xml version="1.0"?>
+<odoo><data>
+
+ <!-- MAIN ITEMS -->
+ <menuitem id="menu_event_track"
+ name="Tracks"
+ sequence="40"
+ action="action_event_track"
+ parent="event.event_main_menu"
+ groups="base.group_no_one"/>
+
+ <!-- CONFIGURATION -->
+ <menuitem id="event_track_stage_menu"
+ name="Track Stages"
+ action="event_track_stage_action"
+ parent="event.menu_event_configuration"
+ groups="base.group_no_one"
+ sequence="30"/>
+
+ <menuitem id="menu_event_track_location"
+ name="Track Locations"
+ action="action_event_track_location"
+ parent="event.menu_event_configuration"
+ groups="base.group_no_one"
+ sequence="32"/>
+
+ <menuitem id="event_track_tag_category_menu"
+ name="Track Tag Categories"
+ action="event_track_tag_category_action"
+ parent="event.menu_event_configuration"
+ groups="base.group_no_one"
+ sequence="33"/>
+
+ <menuitem
+ id="menu_event_track_tag"
+ name="Track Tags"
+ action="action_event_track_tag"
+ parent="event.menu_event_configuration"
+ groups="base.group_no_one"
+ sequence="34"/>
+
+ <menuitem id="event_track_visitor_menu"
+ name="Track Visitors"
+ sequence="38"
+ action="event_track_visitor_action"
+ parent="event.menu_event_configuration"
+ groups="base.group_no_one"/>
+
+ <menuitem id="menu_event_sponsor_type"
+ name="Sponsor Types"
+ action="event_sponsor_type_action"
+ parent="event.menu_event_configuration"
+ groups="base.group_no_one"
+ sequence="40"/>
+
+</data></odoo>
diff --git a/addons/website_event_track/views/event_sponsor_views.xml b/addons/website_event_track/views/event_sponsor_views.xml
new file mode 100644
index 00000000..b3845912
--- /dev/null
+++ b/addons/website_event_track/views/event_sponsor_views.xml
@@ -0,0 +1,153 @@
+<?xml version="1.0"?>
+<odoo>
+<data>
+ <!-- EVENTS/CONFIGURATION/EVENT Sponsor Types -->
+ <record id="event_sponsor_type_view_form" model="ir.ui.view">
+ <field name="name">Sponsor Types</field>
+ <field name="model">event.sponsor.type</field>
+ <field name="arch" type="xml">
+ <form string="Event Sponsor Types">
+ <sheet>
+ <group>
+ <field name="name"/>
+ <field name="display_ribbon_style"/>
+ <field name="sequence" groups="base.group_no_one"/>
+ </group>
+ </sheet>
+ </form>
+ </field>
+ </record>
+
+ <record id="event_sponsor_type_view_tree" model="ir.ui.view">
+ <field name="name">Sponsor Types</field>
+ <field name="model">event.sponsor.type</field>
+ <field name="arch" type="xml">
+ <tree editable="bottom" string="Event Sponsor Type">
+ <field name="sequence" widget="handle"/>
+ <field name="name"/>
+ <field name="display_ribbon_style"/>
+ </tree>
+ </field>
+ </record>
+
+ <record id="event_sponsor_type_action" model="ir.actions.act_window">
+ <field name="name">Sponsor Types</field>
+ <field name="res_model">event.sponsor.type</field>
+ </record>
+
+ <record id="event_sponsor_view_search" model="ir.ui.view">
+ <field name="name">event.sponsor.search</field>
+ <field name="model">event.sponsor</field>
+ <field name="arch" type="xml">
+ <search string="Event Sponsors">
+ <field name="partner_id"/>
+ <field name="event_id"/>
+ <field name="name"/>
+ <field name="email"/>
+ <field name="phone"/>
+ <filter string="Archived" name="archived" domain="[('active', '=', False)]"/>
+ <group string="Group By" expand="0">
+ <filter string="Event" name="group_by_event_id" domain="[]" context="{'group_by': 'event_id'}"/>
+ <filter string="Sponsorship" name="group_by_sponsor_type_id" domain="[]" context="{'group_by': 'sponsor_type_id'}"/>
+ </group>
+ </search>
+ </field>
+ </record>
+
+ <record id="event_sponsor_view_form" model="ir.ui.view">
+ <field name="name">event.sponsor.view.form</field>
+ <field name="model">event.sponsor</field>
+ <field name="arch" type="xml">
+ <form>
+ <sheet>
+ <widget name="web_ribbon" title="Archived" bg_color="bg-danger" attrs="{'invisible': [('active', '=', True)]}"/>
+ <field name="active" invisible="1"/>
+ <field name="image_512" widget="image" class="oe_avatar"/>
+ <div class="oe_title">
+ <label for="name" class="oe_edit_only" string="Sponsor Name"/>
+ <h1><field name="name" placeholder="e.g. : OpenWood Decoration"/></h1>
+ </div>
+ <group>
+ <group>
+ <field name="event_id"/>
+ <field name="partner_id" string="Partner"/>
+ <field name="email" widget="email" string="Email"
+ placeholder="e.g. : open.wood.decoration@example.com"/>
+ <field name="url" widget="url" string="Website"
+ placeholder=">e.g. : https://www.odoo.com"/>
+ </group>
+ <group>
+ <field name="sponsor_type_id"/>
+ <field name="phone" widget="phone" string="Phone" options="{'enable_sms': True}"/>
+ <field name="mobile" widget="phone" string="Mobile" options="{'enable_sms': True}"/>
+ </group>
+ </group>
+ </sheet>
+ <div class="oe_chatter">
+ <field name="message_follower_ids" groups="base.group_user"/>
+ <field name="activity_ids"/>
+ <field name="message_ids"/>
+ </div>
+ </form>
+ </field>
+ </record>
+
+ <record id="event_sponsor_view_tree" model="ir.ui.view">
+ <field name="name">event.sponsor.view.tree</field>
+ <field name="model">event.sponsor</field>
+ <field name="arch" type="xml">
+ <tree multi_edit="1">
+ <field name="sequence" widget="handle"/>
+ <field name="partner_id" readonly="1"/>
+ <field name="name"/>
+ <field name="email"/>
+ <field name="phone"/>
+ <field name="mobile"/>
+ <field name="url" string="Website"/>
+ <field name="sponsor_type_id"/>
+ </tree>
+ </field>
+ </record>
+
+ <record id="event_sponsor_view_kanban" model="ir.ui.view">
+ <field name="name">event.sponsor.view.kanban</field>
+ <field name="model">event.sponsor</field>
+ <field name="arch" type="xml">
+ <kanban>
+ <field name="id"/>
+ <field name="url"/>
+ <field name="partner_email"/>
+ <field name="sponsor_type_id"/>
+ <templates>
+ <t t-name="kanban-box">
+ <div class="oe_kanban_global_click overflow-hidden">
+ <div class="row my-auto">
+ <img t-att-src="kanban_image('event.sponsor', 'image_128', record.id.raw_value)" alt="Sponsor image" class="col-4"/>
+ <div class="col-8">
+ <h1 class="o_kanban_record_title"><field name="partner_id"/></h1>
+ <div>Level: <field name="sponsor_type_id"/></div>
+ <span class="o_text_overflow" t-esc="record.partner_email.value"/>
+ <span class="o_text_overflow" t-esc="record.url.value"/>
+ </div>
+ </div>
+ </div>
+ </t>
+ </templates>
+ </kanban>
+ </field>
+ </record>
+
+ <record id="event_sponsor_action_from_event" model="ir.actions.act_window">
+ <field name="name">Event Sponsors</field>
+ <field name="res_model">event.sponsor</field>
+ <field name="view_mode">kanban,tree,form</field>
+ <field name="context">{'search_default_event_id': active_id, 'default_event_id': active_id}</field>
+ <field name="help" type="html">
+<p class="o_view_nocontent_smiling_face">
+ Create a Sponsor
+</p>
+ </field>
+ </record>
+
+</data>
+</odoo>
diff --git a/addons/website_event_track/views/event_templates.xml b/addons/website_event_track/views/event_templates.xml
new file mode 100644
index 00000000..b19dd1b0
--- /dev/null
+++ b/addons/website_event_track/views/event_templates.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="utf-8"?>
+<odoo>
+
+<!-- Add a shortcut to wishlist / talks after registration -->
+<template id="registration_complete" inherit_id="website_event.registration_complete">
+ <xpath expr="//div[hasclass('row')][last()]" position="after">
+ <div t-if="event.website_track" class="row mt-5 mb256">
+ <div class="col-12">
+ <h3>Book your seats to the best talks</h3>
+ <p>Get prepared and
+ <a t-att-href="'/event/%s/track' % (slug(event))">register to your favorites talks now.</a>
+ </p>
+ </div>
+ </div>
+ </xpath>
+</template>
+
+<template id="layout" inherit_id="website_event.layout">
+ <xpath expr='//t[@t-call="website.layout"]' position="inside">
+ <t t-set="pageName" t-value="'event'"/>
+ <t t-set="head">
+ <t t-raw="head"/>
+ <t t-call="website_event_track.pwa_manifest"/>
+ </t>
+ </xpath>
+</template>
+
+<template id="index" inherit_id="website_event.index">
+ <xpath expr='//t[@t-call="website.layout"]' position="inside">
+ <t t-set="pageName" t-value="'event'"/>
+ <t t-set="head">
+ <t t-raw="head"/>
+ <t t-call="website_event_track.pwa_manifest"/>
+ </t>
+ </xpath>
+</template>
+
+<template id="pwa_manifest">
+ <link rel="manifest" href="/event/manifest.webmanifest" crossorigin="use-credentials"/>
+ <link rel="apple-touch-icon" t-att-href="website.image_url(website, 'app_icon', size='192x192')"/>
+ <meta name="theme-color" content="#875A7B"/>
+</template>
+
+<template id="pwa_offline" inherit_id="website_event.index" primary="True">
+ <xpath expr='//div[@id="wrap"]' position="replace">
+ <div id="wrap" class="o_wevent_index">
+ <div class="container">
+ <div class="row">
+ <div class="col-12 card-body">
+ <div class="h2 mb-3">You're offline!</div>
+ <div class="alert alert-info text-center">
+ <span class="fa-stack fa-4x">
+ <i class="fa fa-wifi fa-stack-1x"></i>
+ <i class="fa fa-ban fa-stack-2x text-muted"></i>
+ </span>
+ <p>This page hasn't been saved for offline reading yet.<br/>Please check your network connection.</p>
+ <p>
+ <a t-att-href="url_for('/event')" class="btn btn-primary btn-block">Home page</a>
+ <button onclick="history.back();" class="btn btn-secondary btn-block">Previous page</button>
+ </p>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ <script type="text/javascript">
+ window.addEventListener('online', function(e) {
+ console.log('Go back online');
+ location.reload();
+ });
+ </script>
+ </xpath>
+</template>
+
+</odoo>
diff --git a/addons/website_event_track/views/event_track_location_views.xml b/addons/website_event_track/views/event_track_location_views.xml
new file mode 100644
index 00000000..a2499f02
--- /dev/null
+++ b/addons/website_event_track/views/event_track_location_views.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0"?>
+<odoo>
+
+ <!-- EVENTS/CONFIGURATION/EVENT locations -->
+ <record model="ir.ui.view" id="view_event_location_form">
+ <field name="name">Event Locations</field>
+ <field name="model">event.track.location</field>
+ <field name="arch" type="xml">
+ <form string="Event Locations">
+ <sheet>
+ <group>
+ <field name="name"/>
+ </group>
+ </sheet>
+ </form>
+ </field>
+ </record>
+
+ <record model="ir.ui.view" id="view_event_location_tree">
+ <field name="name">Event Location</field>
+ <field name="model">event.track.location</field>
+ <field name="arch" type="xml">
+ <tree string="Event Location" editable="bottom">
+ <field name="name"/>
+ </tree>
+ </field>
+ </record>
+
+ <record model="ir.actions.act_window" id="action_event_track_location">
+ <field name="name">Event Locations</field>
+ <field name="res_model">event.track.location</field>
+ </record>
+
+</odoo>
diff --git a/addons/website_event_track/views/event_track_stage_views.xml b/addons/website_event_track/views/event_track_stage_views.xml
new file mode 100644
index 00000000..9ee7adf3
--- /dev/null
+++ b/addons/website_event_track/views/event_track_stage_views.xml
@@ -0,0 +1,92 @@
+<?xml version="1.0"?>
+<odoo>
+
+ <!-- EVENTS TRACK STAGES-->
+ <record id="event_track_stage_view_search" model="ir.ui.view">
+ <field name="name">event.track.stage.view.search</field>
+ <field name="model">event.track.stage</field>
+ <field name="arch" type="xml">
+ <search string="Track Stage">
+ <field name="name" string="Track Stages"/>
+ </search>
+ </field>
+ </record>
+
+ <record id="event_track_stage_view_form" model="ir.ui.view">
+ <field name="name">event.track.stage.view.form</field>
+ <field name="model">event.track.stage</field>
+ <field name="arch" type="xml">
+ <form string="Track Stage">
+ <sheet>
+ <group>
+ <group>
+ <field name="name"/>
+ <field name="mail_template_id"/>
+ <field name="sequence" groups="base.group_no_one"/>
+ </group>
+ <group>
+ <field name="fold"/>
+ <field name="is_accepted"/>
+ <field name="is_done"/>
+ <field name="is_cancel"/>
+ <field name="color" widget="color_picker"/>
+ </group>
+ </group>
+ </sheet>
+ </form>
+ </field>
+ </record>
+
+ <record id="event_track_stage_view_tree" model="ir.ui.view">
+ <field name="name">event.track.stage.view.tree</field>
+ <field name="model">event.track.stage</field>
+ <field name="arch" type="xml">
+ <tree string="Track Stage">
+ <field name="sequence" widget="handle" groups="event.group_event_manager"/>
+ <field name="name"/>
+ <field name="is_accepted"/>
+ <field name="is_done"/>
+ <field name="is_cancel"/>
+ <field name="fold"/>
+ </tree>
+ </field>
+ </record>
+
+ <record id="view_event_track_stage_kanban" model="ir.ui.view">
+ <field name="name">event.track.stage.kanban</field>
+ <field name="model">event.track.stage</field>
+ <field name="arch" type="xml">
+ <kanban>
+ <field name="name"/>
+ <field name="fold"/>
+ <templates>
+ <t t-name="kanban-box">
+ <div t-attf-class="oe_kanban_global_click">
+ <div>
+ <strong class="o_kanban_record_title"><field name="name"/></strong>
+ </div>
+ </div>
+ </t>
+ </templates>
+ </kanban>
+ </field>
+ </record>
+
+ <record id="event_track_stage_action" model="ir.actions.act_window">
+ <field name="name">Track Stages</field>
+ <field name="res_model">event.track.stage</field>
+ <field name="view_mode">tree,kanban,form</field>
+ <field name="view_id" ref="event_track_stage_view_tree"/>
+ <field name="help" type="html">
+ <p class="o_view_nocontent_smiling_face">
+ Add a new stage in the task pipeline
+ </p><p>
+ Define the steps that will be used in the event from the
+ creation of the track, up to the closing of the track.
+ You will use these stages in order to track the progress in
+ solving an event track.
+ </p>
+ </field>
+ </record>
+
+</odoo>
diff --git a/addons/website_event_track/views/event_track_tag_views.xml b/addons/website_event_track/views/event_track_tag_views.xml
new file mode 100644
index 00000000..780b9814
--- /dev/null
+++ b/addons/website_event_track/views/event_track_tag_views.xml
@@ -0,0 +1,76 @@
+<?xml version="1.0"?>
+<odoo>
+ <record id="event_track_tag_category_view_form" model="ir.ui.view">
+ <field name="name">event.track.tag.category.view.form</field>
+ <field name="model">event.track.tag.category</field>
+ <field name="arch" type="xml">
+ <form string="Track Tag Category">
+ <sheet>
+ <group>
+ <field name="name"/>
+ <field name="tag_ids" context="{'default_category_id': active_id}">
+ <tree string="Tags" editable="bottom">
+ <field name="sequence" widget="handle"/>
+ <field name="name"/>
+ <field name="color" widget="color_picker"/>
+ </tree>
+ </field>
+ </group>
+ </sheet>
+ </form>
+ </field>
+ </record>
+
+ <record id="event_track_tag_category_view_list" model="ir.ui.view">
+ <field name="name">event.track.tag.category.view.list</field>
+ <field name="model">event.track.tag.category</field>
+ <field name="arch" type="xml">
+ <tree string="Track Tags Category">
+ <field name="sequence" widget="handle"/>
+ <field name="name"/>
+ <field name="tag_ids" widget="many2many_tags" options="{'color_field': 'color'}"/>
+ </tree>
+ </field>
+ </record>
+
+ <record id="event_track_tag_category_action" model="ir.actions.act_window">
+ <field name="name">Track Tag Categories</field>
+ <field name="res_model">event.track.tag.category</field>
+ <field name="view_mode">tree,form</field>
+ </record>
+
+ <record model="ir.ui.view" id="view_event_track_tag_form">
+ <field name="name">Track Tags</field>
+ <field name="model">event.track.tag</field>
+ <field name="arch" type="xml">
+ <form string="Event Track Tag">
+ <sheet>
+ <group>
+ <field name="name"/>
+ <field name="color" widget="color_picker"/>
+ <field name="category_id"/>
+ </group>
+ </sheet>
+ </form>
+ </field>
+ </record>
+
+ <record model="ir.ui.view" id="view_event_track_tag_tree">
+ <field name="name">Tracks Tag</field>
+ <field name="model">event.track.tag</field>
+ <field name="arch" type="xml">
+ <tree string="Event Track Tag" editable="bottom">
+ <field name="sequence" widget="handle"/>
+ <field name="name"/>
+ <field name="color" widget="color_picker"/>
+ <field name="category_id"/>
+ </tree>
+ </field>
+ </record>
+
+ <record model="ir.actions.act_window" id="action_event_track_tag">
+ <field name="name">Track Tags</field>
+ <field name="res_model">event.track.tag</field>
+ </record>
+
+</odoo>
diff --git a/addons/website_event_track/views/event_track_templates_agenda.xml b/addons/website_event_track/views/event_track_templates_agenda.xml
new file mode 100644
index 00000000..05059f54
--- /dev/null
+++ b/addons/website_event_track/views/event_track_templates_agenda.xml
@@ -0,0 +1,203 @@
+<?xml version="1.0" encoding="utf-8"?>
+<odoo>
+
+<!-- Revamped agenda : Will need to replace agenda_online from website_event_track in master -->
+<template id="agenda_online" name="Track Online: Agenda">
+ <t t-call="website_event.layout">
+ <div class="o_wevent_online o_weagenda_index">
+ <!-- Options -->
+ <t t-set="option_track_wishlist" t-value="not event.is_done and is_view_active('website_event_track.agenda_topbar_wishlist')"/>
+ <!-- Topbar -->
+ <t t-call="website_event_track.agenda_topbar"/>
+ <!-- Drag/Drop Area -->
+ <div class="oe_structure" id="oe_structure_website_event_track_agenda_1"/>
+ <!-- Content -->
+ <div class="container">
+ <div class="row mb-5">
+ <t t-call="website_event_track.agenda_main"/>
+ </div>
+ </div>
+ <!-- Drag/Drop Area -->
+ <div class="oe_structure" id="oe_structure_website_event_track_agenda_2"/>
+ </div>
+ </t>
+</template>
+
+<!-- ============================================================ -->
+<!-- TOPBAR: BASE NAVIGATION -->
+<!-- ============================================================ -->
+
+<!-- Main topbar -->
+<template id="agenda_topbar" name="Agenda Tools">
+ <nav class="navbar navbar-light border-top shadow-sm d-print-none">
+ <div class="container">
+ <div class="d-flex flex-column flex-sm-row justify-content-between w-100">
+ <ul class="o_weagenda_topbar_filters o_wevent_index_topbar_filters nav">
+ </ul>
+ <div class="form-inline pl-sm-3 pr-0">
+ <label class="invisible text-muted mr-2" id="search_summary"><span id="search_number" class="mr-1">0</span>Results</label>
+ <input type="text" class="form-control" placeholder="Filter Tracks..." id="event_track_search"/>
+ </div>
+ </div>
+ </div>
+ </nav>
+</template>
+
+<!-- Option: Tracks display: optional wishlist -->
+<template id="agenda_topbar_wishlist"
+ inherit_id="website_event_track.agenda_topbar"
+ name="Allow Wishlists"
+ active="True"
+ customize_show="True">
+ <xpath expr="//ul[hasclass('o_weagenda_topbar_filters')]" position="inside">
+ </xpath>
+</template>
+
+<!-- ============================================================ -->
+<!-- CONTENT: MAIN TEMPLATES -->
+<!-- ============================================================ -->
+
+<!-- Agenda Main Display -->
+<template id="agenda_main" name="Tracks: Main Display">
+ <!-- No tracks -->
+ <div class="col-12" t-if="not tracks_by_days">
+ <div class="h2 mb-3">No track found.</div>
+ <div t-if="search_key" class="alert alert-info text-center">
+ <p class="m-0">We did not find any track matching your <strong t-esc="search_key"/> search.</p>
+ </div>
+ <div t-else="" class="alert alert-info text-center" groups="event.group_event_manager">
+ <p class="m-0">Schedule some tracks to get started !</p>
+ </div>
+ </div>
+
+ <section t-else="" class="col-12" t-foreach="days" t-as="day">
+ <!-- DAY HEADER -->
+ <div class="o_we_track_day_header mt-3 w-100 d-flex justify-content-between align-items-center">
+ <div class="d-flex">
+ <span class="h1 m-0 font-weight-bold" t-esc="day"
+ t-options="{'widget': 'date', 'format': 'EEEE dd'}"/>
+ <div class="d-flex flex-column ml-2">
+ <span class="font-weight-bold" t-esc="day"
+ t-options="{'widget': 'date', 'format': 'MMMM'}"/>
+ <span class="font-weight-bold" t-esc="day"
+ t-options="{'widget': 'date', 'format': 'YYYY'}"/>
+ </div>
+ </div>
+ <small class="float-right text-muted align-self-end"><t t-esc="tracks_by_days[day]"/> tracks</small>
+ </div>
+ <hr class="mt-2 pb-1 mb-1"/>
+
+ <!-- Day Agenda -->
+ <div class="o_we_online_agenda">
+ <table id="table_search" class="table table-sm border-0 h-100">
+ <!--Header-->
+ <tr>
+ <th class="border-0 bg-white position-sticky"/>
+ <t t-foreach="locations" t-as="location">
+ <th t-if="location" class="active text-center">
+ <span t-esc="location and location.name or 'Unknown'"/>
+ </th>
+ </t>
+ </tr>
+
+ <!-- Time Slots -->
+ <t t-set="used_cells" t-value="[]"/>
+ <t t-foreach="time_slots[day]" t-as="time_slot">
+ <t t-set="is_round_hour" t-value="time_slot == time_slot.replace(minute=0)"/>
+ <t t-set="is_half_hour" t-value="time_slot == time_slot.replace(minute=30)"/>
+
+ <tr t-att-class="'%s' % ('active' if is_round_hour else '')">
+ <td class="active">
+ <b t-if="is_round_hour" t-esc="time_slots[day][time_slot]['formatted_time']"/>
+ </td>
+
+ <t t-foreach="locations" t-as="location">
+ <t t-set="tracks" t-value="time_slots[day][time_slot].get(location, {})"/>
+ <t t-if="tracks">
+ <t t-foreach="tracks" t-as="track">
+ <t t-set="_classes"
+ t-value="'text-center %s %s %s' % (
+ 'event_color_%s' % (track.color) if track.color else 'bg-100',
+ 'event_track h-100' if track else '',
+ 'o_location_size_%d' % len(locations),
+ )"/>
+ <t t-if="track.location_id and track.location_id == location">
+ <td t-att-rowspan="tracks[track]['rowspan']"
+ t-att-class="_classes">
+ <t t-call="website_event_track.agenda_main_track"/>
+ </td>
+ </t>
+ <t t-else="">
+ <td t-att-colspan="len(locations)-1"
+ t-att-rowspan="tracks[track]['rowspan']"
+ t-att-class="_classes">
+ <t t-call="website_event_track.agenda_main_track"/>
+ </td>
+ </t>
+ <t t-set="used_cells" t-value="used_cells + tracks[track]['occupied_cells']"/>
+ </t>
+ </t>
+ <t t-elif="location and (time_slot, location) not in used_cells">
+ <td t-att-rowspan="1"
+ t-att-class="'o_location_size_%s %s' % (len(locations),
+ 'o_we_agenda_time_slot_half' if is_half_hour else
+ 'o_we_agenda_time_slot_main' if is_round_hour else
+ ''
+ )"><div/></td>
+ </t>
+ </t>
+ </tr>
+ </t>
+ </table>
+ </div>
+ </section>
+</template>
+
+<template id="agenda_main_track" name="Track Agenda: Track">
+ <div class="d-flex flex-column h-100">
+ <div class="d-flex justify-content-end flex-wrap-reverse align-items-center o_weagenda_track_badges">
+ <small t-if="track.is_track_live and not track.is_track_done and track.website_published"
+ class="mx-1 badge badge-danger">Live
+ </small>
+ <small t-if="not track.website_published and user_event_manager and track.stage_id.is_accepted"
+ title="Unpublished"
+ class="ml-1 badge badge-danger o_wevent_online_badge_unpublished">Unpublished</small>
+ <small t-if="not track.stage_id.is_accepted" title="Not Accepted"
+ class="ml-1 badge badge-danger o_wevent_online_badge_unpublished">Not Accepted</small>
+ <span t-if="option_track_wishlist">
+ <t t-call="website_event_track.track_widget_reminder">
+ <t t-set="reminder_light" t-value="True"/>
+ <t t-set="reminder_small" t-value="True"/>
+ <t t-set="light_theme" t-value="False"/>
+ </t>
+ </span>
+ </div>
+
+ <div class="o_we_agenda_card_content d-flex flex-column justify-content-center my-1">
+ <div t-att-class="'text-black' if track.website_published or user_event_manager else 'text-muted'"
+ t-att-onclick="'window.location=\'/event/%s/track/%s\'' % (slug(event), slug(track))
+ if track.website_published or user_event_manager else ''">
+ <span class="o_we_agenda_card_title text-bold" t-esc="track.name"/>
+ </div>
+ <div class="text-muted text-center">
+ <small t-if="track.partner_id or track.partner_name">
+ <t t-esc="track.partner_id.sudo().name or track.partner_name"/></small>
+ </div>
+ <div class="d-flex justify-content-center flex-wrap">
+ <t t-foreach="track.tag_ids" t-as="tag">
+ <span t-if="tag.color" t-att-title="tag.name"
+ t-attf-class="mr-1 mt-1 badge #{'o_tag_color_'+str(tag.color)}" t-esc="tag.name"
+ t-attf-onclick="
+ var value = '#{tag.name}' ;
+ var target = $('#event_track_search');
+ if (target.val() == value) { target.val(''); } else { target.val(value); }
+ target.trigger('input');
+ "
+ />
+ </t>
+ </div>
+ </div>
+ </div>
+</template>
+
+</odoo>
diff --git a/addons/website_event_track/views/event_track_templates_list.xml b/addons/website_event_track/views/event_track_templates_list.xml
new file mode 100644
index 00000000..cfbf70b6
--- /dev/null
+++ b/addons/website_event_track/views/event_track_templates_list.xml
@@ -0,0 +1,415 @@
+<?xml version="1.0" encoding="utf-8"?>
+<odoo>
+
+<template id="tracks_session" name="Event Tracks">
+ <t t-call="website_event.layout">
+ <div class="o_wevent_online o_wesession_index">
+ <!-- Options -->
+ <t t-set="option_track_wishlist" t-value="not event.is_done and is_view_active('website_event_track.session_topbar_wishlist')"/>
+ <!-- Topbar -->
+ <t t-call="website_event_track.session_topbar"/>
+ <!-- Drag/Drop Area -->
+ <div id="oe_structure_wesession_index_1" class="oe_structure"/>
+ <!-- Content -->
+ <div class="o_wesession_container container">
+ <div class="row">
+ <t t-call="website_event_track.tracks_search"/>
+ </div>
+ <div class="row">
+ <t t-call="website_event_track.tracks_main"/>
+ </div>
+ </div>
+ <!-- Drag/Drop Area -->
+ <div id="oe_structure_wesession_index_2" class="oe_structure mb-5"/>
+ </div>
+ </t>
+</template>
+
+<!-- ============================================================ -->
+<!-- TOPBAR: BASE NAVIGATION -->
+<!-- ============================================================ -->
+
+<!-- Main topbar -->
+<template id="session_topbar" name="Tracks Tools">
+ <nav class="navbar navbar-light border-top shadow-sm d-print-none">
+ <div class="container">
+ <div class="d-flex flex-column flex-sm-row justify-content-between w-100">
+ <ul class="o_wesession_topbar_filters o_wevent_index_topbar_filters nav">
+ <!-- Optional wishlist filter -->
+ <li t-if="option_track_wishlist" class="nav-item dropdown mr-2 my-1">
+ <a href="#" role="button" class="btn dropdown-toggle" data-toggle="dropdown">
+ <i class="fa fa-folder-open"/> Favorites
+ </a>
+ <div class="dropdown-menu">
+ <a t-att-href="'/event/%s/track?%s' % (
+ slug(event),
+ keep_query('*', search_wishlist='')
+ )"
+ class="dropdown-item d-flex align-items-center justify-content-between">
+ All Talks
+ </a>
+ <a t-att-href="'/event/%s/track?%s' % (
+ slug(event),
+ keep_query('*', search_wishlist='1')
+ )"
+ t-attf-class="dropdown-item d-flex align-items-center justify-content-between #{'active' if search_wishlist else ''}">
+ Favorites
+ </a>
+ </div>
+ </li>
+ </ul>
+ <div class="d-flex align-items-center flex-wrap pl-sm-3 pr-0">
+ <t t-call="website_event.events_search_box">
+ <t t-set="_searches" t-value="searches"/>
+ <t t-set="action" t-value="'/event/%s/track' % (slug(event))"/>
+ <t t-set="_placeholder" t-value="'Search a talk ...'"/>
+ </t>
+ </div>
+ </div>
+ </div>
+ </nav>
+</template>
+
+<!-- Option: Topbar: optional tags filters -->
+<template id="session_topbar_tag"
+ inherit_id="website_event_track.session_topbar"
+ name="Filter by Tags"
+ active="True"
+ customize_show="True">
+ <xpath expr="//ul[hasclass('o_wesession_topbar_filters')]" position="inside">
+ <t t-foreach="tag_categories" t-as="tag_category">
+ <li t-if="tag_category.tag_ids and any(tag.color for tag in tag_category.tag_ids)" class="nav-item dropdown mr-2 my-1">
+ <a href="#" role="button" class="btn dropdown-toggle" data-toggle="dropdown">
+ <i class="fa fa-folder-open"/>
+ <t t-esc="tag_category.name"/>
+ </a>
+ <div class="dropdown-menu">
+ <t t-foreach="tag_category.tag_ids" t-as="tag">
+ <a t-att-href="'/event/%s/track?%s' % (
+ slug(event),
+ keep_query('*', tags=str((search_tags - tag).ids if tag in search_tags else (tag | search_tags).ids))
+ )"
+ t-if="tag.color"
+ t-attf-class="dropdown-item d-flex align-items-center justify-content-between #{'active' if tag in search_tags else ''}">
+ <t t-esc="tag.name"/>
+ </a>
+ </t>
+ </div>
+ </li>
+ </t>
+ </xpath>
+</template>
+
+<!-- Option: Tracks display: optional wishlist -->
+<template id="session_topbar_wishlist"
+ inherit_id="website_event_track.session_topbar"
+ name="Allow Wishlists"
+ active="True"
+ customize_show="True">
+ <xpath expr="//ul[hasclass('o_wesession_topbar_filters')]" position="inside">
+ </xpath>
+</template>
+
+<!-- ============================================================ -->
+<!-- CONTENT: MAIN TEMPLATES -->
+<!-- ============================================================ -->
+
+<!-- Tracks Main Display -->
+<template id="tracks_main" name="Tracks: Main Display">
+ <!-- No tracks -->
+ <t t-if="not tracks">
+ <div class="col-12">
+ <div class="h2 mb-3">No track found.</div>
+ <div t-if="search_key" class="alert alert-info text-center">
+ <p class="m-0">We did not find any track matching your <strong t-esc="search_key"/> search.</p>
+ </div>
+ <div t-else="" class="alert alert-info text-center" groups="event.group_event_manager">
+ <p class="m-0">Schedule some tracks to get started !</p>
+ </div>
+ </div>
+ </t>
+ <!-- Cards -->
+ <div class="col-12" t-call="website_event_track.tracks_display_cards"/>
+ <!-- List -->
+ <div class="col-12" t-call="website_event_track.tracks_display_list"/>
+</template>
+
+<!-- Tracks: Cards-based display -->
+<template id="tracks_display_cards" name="Tracks: Cards Display">
+ <div class="row mb-3" t-if="tracks_live">
+ <div class="col-12">
+ <h5 class="m-0 text-danger">Live Now</h5>
+ <hr class="mt-2 pb-1 mb-1"/>
+ </div>
+ <div t-foreach="tracks_live" t-as="track" class="col-md-6 col-lg-3 mb-4">
+ <t t-call="website_event_track.tracks_cards_track"/>
+ </div>
+ </div>
+ <div class="row mb-3" t-if="tracks_soon">
+ <div class="col-12">
+ <h5 class="m-0 text-danger">Coming soon ...</h5>
+ <hr class="mt-2 pb-1 mb-1"/>
+ </div>
+ <div t-foreach="tracks_soon" t-as="track" class="col-md-6 col-lg-3 mb-4">
+ <t t-call="website_event_track.tracks_cards_track"/>
+ </div>
+ </div>
+</template>
+
+<!-- Tracks: List-based display -->
+<template id="tracks_display_list" name="Tracks: List Display">
+ <div t-if="tracks">
+ <h1>Book your talks</h1>
+ <h4 class="mb-5">Plan your experience by adding your favorites talks to your wishlist</h4>
+ </div>
+ <div t-if="tracks" class="o_wesession_list mb-3">
+ <ul class="list-unstyled">
+ <li t-foreach="tracks_by_day" t-as="tracks_info"
+ class="mb-5">
+ <t t-set="tracks_date" t-value="tracks_info['date']"/>
+ <t t-set="tracks_header_name" t-value="tracks_info['name']"/>
+ <t t-set="tracks" t-value="tracks_info['tracks']"/>
+ <!-- DAY HEADER -->
+ <div class="o_we_track_day_header w-100">
+ <div t-if="tracks_date" class="d-flex">
+ <span class="h1 m-0 font-weight-bold" t-esc="tracks_date"
+ t-options="{'widget': 'date', 'format': 'EEEE dd'}"/>
+ <div class="d-flex flex-column ml-2">
+ <span class="font-weight-bold" t-esc="tracks_date"
+ t-options="{'widget': 'date', 'format': 'MMMM'}"/>
+ <span class="font-weight-bold" t-esc="tracks_date"
+ t-options="{'widget': 'date', 'format': 'YYYY'}"/>
+ </div>
+ </div>
+ <div t-elif="tracks_header_name">
+ <span class="h1 m-0 font-weight-bold"
+ t-esc="tracks_header_name"/>
+ </div>
+ <hr class="mt-2 pb-1 mb-1"/>
+ </div>
+ <!-- DAY TRACKS LIST -->
+ <div t-foreach="tracks" t-as="track"
+ t-att-class="'o_wesession_list_item px-2 py-2 event_color_%d' % (track.color)">
+ <!-- Side information in a floating div (desktop only) -->
+ <div t-if="not event.is_done and (not track.date or today_tz &lt;= tracks_date) and option_track_wishlist"
+ class="float-right d-none d-md-block ml-2">
+ <t t-call="website_event_track.track_widget_reminder">
+ <t t-set="reminder_small" t-value="False"/>
+ <t t-set="reminder_light" t-value="False"/>
+ </t>
+ </div>
+ <div class="row no-gutters">
+ <!-- Main column: name, speaker -->
+ <div class="col-md-7">
+ <!-- Reminder widget: directly in line to gain space, mobile only -->
+ <div t-if="not event.is_done and (not track.date or today_tz &lt;= tracks_date) and option_track_wishlist"
+ class="float-right d-block d-md-none ml-2">
+ <t t-call="website_event_track.track_widget_reminder">
+ <t t-set="reminder_small" t-value="True"/>
+ <t t-set="reminder_light" t-value="False"/>
+ </t>
+ </div>
+ <span class="h5 mb0">
+ <a t-if="track.is_published or user_event_manager"
+ class="mr-2"
+ t-att-href="track.website_url">
+ <span t-field="track.name"/>
+ </a>
+ <t t-else="">
+ <span class="mr-2" t-field="track.name"/>
+ </t>
+ <span t-if="not track.is_published and user_event_manager"
+ class="badge badge-danger o_wevent_online_badge_unpublished">
+ Unpublished
+ </span>
+ </span>
+ <div class="text-muted d-flex align-items-center">
+ <span class="text-muted" t-esc="track.partner_name"/>
+ <t t-if="tracks_date and today_tz &lt;= tracks_date">
+ <!-- Hour: Live > Remaining > Hour: mobile only -->
+ <div class="d-block d-md-none">
+ <span t-if="track.partner_name" class="ml-2">&amp;bull;</span>
+ <span t-if="track.is_track_live and not track.is_track_done"
+ class="badge badge-danger ml-2">Live</span>
+ <span t-elif="not track.is_track_done and track.is_track_soon"
+ class="ml-2">
+ <span t-esc="track.track_start_remaining"
+ t-options="{'widget': 'duration', 'digital': False, 'format': 'narrow',
+ 'add_direction': True, 'unit': 'second', 'round': 'minute'}"/>
+ </span>
+ <span t-elif="not track.is_track_done and not track.is_track_soon"
+ class="ml-2"
+ t-esc="track.date"
+ t-options="{'widget': 'datetime', 'time_only': True, 'format': 'short'}"/>
+ <span t-else="" class="badge badge-info ml-2">Finished</span>
+ </div>
+ <!-- Duration (desktop only) -->
+ <t t-if="track.duration and not track.is_track_done and not track.is_track_done">
+ <span class="d-none d-md-block ml-2">&amp;bull;</span>
+ <span class="d-none d-md-block ml-2"
+ t-esc="track.duration"
+ t-options="{'widget': 'duration', 'digital': False, 'format': 'short', 'unit': 'hour', 'round': 'minute'}"/>
+ </t>
+ </t>
+ </div>
+ </div>
+ <!-- Aside column: date, tags -->
+ <div class="col-md-5">
+ <!-- Hour: Live > Remaining > Hour: desktop only -->
+ <div t-if="tracks_date and today_tz &lt;= tracks_date"
+ class="d-none d-md-block float-right">
+ <span t-if="track.is_track_live and not track.is_track_done"
+ class="badge badge-danger ml-2">Live</span>
+ <span t-elif="not track.is_track_done and track.is_track_soon"
+ class="ml-2">
+ <span t-esc="track.track_start_remaining"
+ t-options="{'widget': 'duration', 'digital': False, 'format': 'narrow',
+ 'add_direction': True, 'unit': 'second', 'round': 'minute'}"/>
+ </span>
+ <span t-elif="not track.is_track_done and not track.is_track_soon"
+ class="ml-2"
+ t-esc="track.date"
+ t-options="{'widget': 'datetime', 'time_only': True, 'format': 'short'}"/>
+ <span t-else="" class="badge badge-info ml-2">Finished</span>
+ </div>
+ <!-- Tags: desktop only -->
+ <div class="d-none d-md-block">
+ <t t-foreach="track.tag_ids" t-as="tag">
+ <t t-if="tag.color" t-call="website_event_track.track_tag_badge_link"/>
+ </t>
+ </div>
+ </div>
+ </div>
+ </div>
+ </li>
+ </ul>
+ </div>
+</template>
+
+<!-- ============================================================ -->
+<!-- TOOL TEMPLATES -->
+<!-- ============================================================ -->
+
+<template id="tracks_cards_track" name="Track Card">
+ <a t-att-href="'/event/%s/track/%s' % (slug(track.event_id), slug(track))" class="text-decoration-none">
+ <article t-att-class="'h-100 card border-0 shadow-sm o_wesession_track_card %s' % ('o_wesession_track_card_unpublished' if not track.is_published else '')"
+ itemscope="itemscope" itemtype="http://schema.org/Event">
+ <div class="h-100 row no-gutters">
+ <header class="overflow-hidden bg-secondary col-12 rounded-top">
+ <small t-if="not track.is_published" class="o_wesession_track_card_header_badge bg-danger">
+ <i class="fa fa-ban mr-2"/>Unpublished
+ </small>
+
+ <div t-if="track.website_image_url" class="card-img-top"
+ t-attf-style="padding-top: 50%; background-image: url(#{track.website_image_url}); background-size: cover; background-position:center">
+ <span t-if="option_track_wishlist and not track.is_track_live" class="position-absolute h3 mt-2 mr-2" style="right: 0; top: 0;">
+ <t t-call="website_event_track.track_widget_reminder">
+ <t t-set="reminder_light" t-value="True"/>
+ <t t-set="light_theme" t-value="True"/>
+ </t>
+ </span>
+ </div>
+ <div t-else="" class="o_wesession_gradient card-img-top position-relative"
+ style="padding-top: 50%;">
+ <span t-if="option_track_wishlist" class="position-absolute h3 mt-2 mr-2" style="right: 0; top: 0;">
+ <t t-call="website_event_track.track_widget_reminder">
+ <t t-set="reminder_light" t-value="True"/>
+ </t>
+ </span>
+ <i class="fa fa-glass fa-2x mx-2 mb-3 position-absolute text-white-75" style="right:0; bottom: 0;"/>
+ </div>
+ </header>
+ <div class="col-12">
+ <main class="card-body">
+ <!-- Title -->
+ <h5 class="card-title mt-0 mb-0 text-truncate">
+ <span t-field="track.name" itemprop="name"/>
+ </h5>
+ <!-- Tags> -->
+ <div>
+ <t t-foreach="track.tag_ids" t-as="tag">
+ <t t-if="tag.color" t-call="website_event_track.track_tag_badge_info"/>
+ </t>
+ </div>
+ </main>
+ </div>
+ <!-- Footer -->
+ <footer class="small align-self-end w-100 card-footer">
+ <div class="d-flex justify-content-between align-items-center">
+ <!-- Speaker -->
+ <span class="text-muted text-truncate" t-field="track.partner_name" itemprop="performer"/>
+ <!-- Starts -->
+ <span class="text-muted ml-auto">
+ <t t-if="track.is_track_upcoming &gt; 0">In
+ <span class="text-muted ml-auto" t-field="track.track_start_remaining" itemprop="duration"
+ t-options="{'widget': 'duration', 'digital': False, 'format': 'short', 'unit': 'second', 'round': 'minute'}"/>
+ </t>
+ <t t-else="">
+ <span class="text-muted ml-auto" t-field="track.track_start_relative" itemprop="duration"
+ t-options="{'widget': 'duration', 'digital': False, 'format': 'short', 'unit': 'second', 'round': 'minute'}"/>
+ ago
+ </t>
+ </span>
+ </div>
+ </footer>
+ </div>
+ </article>
+ </a>
+</template>
+
+<!-- Searched tags -->
+<template id="tracks_search" name="Tracks: search tags">
+ <div class="d-flex align-items-center mb-3">
+ <span t-if="search_wishlist"
+ class="align-items-baseline border d-inline-flex pl-2 mt-3 rounded ml16 mb-2 bg-white">
+ <i class="fa fa-bell mr-2 text-muted"/> Wishlisted Talks
+ <a t-att-href="'/event/%s/track?%s' % (slug(event), keep_query('*', search_wishlist=''))"
+ class="btn border-0 py-1">
+ &#215;
+ </a>
+ </span>
+
+ <t t-foreach="search_tags" t-as="tag">
+ <span class="align-items-baseline border d-inline-flex pl-2 mt-3 rounded ml16 mb-2 bg-white">
+ <i class="fa fa-tag mr-2 text-muted"/>
+ <t t-esc="tag.display_name"/>
+ <a t-att-href="'/event/%s/track?%s' % (slug(event), keep_query('*', tags=str((search_tags - tag).ids)))"
+ class="btn border-0 py-1">
+ &#215;
+ </a>
+ </span>
+ </t>
+ </div>
+</template>
+
+<!-- ============================================================ -->
+<!-- MISC TOOLS -->
+<!-- ============================================================ -->
+
+<template id="track_tag_badge_link" name="Track: Tag Badge Link">
+ <a t-if="search_tags"
+ t-att-href="'/event/%s/track?%s'% (
+ slug(event),
+ keep_query('*', tags=str((search_tags - tag).ids if tag in search_tags else (tag | search_tags).ids))
+ )"
+ t-att-class="'badge %s' % ('badge-primary' if tag in search_tags else 'o_tag_color_hovered_0')"
+ t-esc="tag.name"/>
+ <a t-else=""
+ t-att-href="'/event/%s/track?%s'% (
+ slug(event),
+ keep_query('*', tags=str(tag.ids))
+ )"
+ t-att-class="'badge o_tag_color_hovered_%s' % (tag.color)"
+ t-esc="tag.name"/>
+</template>
+
+<template id="track_tag_badge_info" name="Track: Tag Badge Info">
+ <span t-if="search_tags"
+ t-att-class="'badge %s' % ('badge-primary' if tag in search_tags else 'o_tag_color_0')"
+ t-esc="tag.name"/>
+ <span t-else=""
+ t-att-class="'badge o_tag_color_%s' % (tag.color)"
+ t-esc="tag.name"/>
+</template>
+
+</odoo>
diff --git a/addons/website_event_track/views/event_track_templates_misc.xml b/addons/website_event_track/views/event_track_templates_misc.xml
new file mode 100644
index 00000000..4137660b
--- /dev/null
+++ b/addons/website_event_track/views/event_track_templates_misc.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="utf-8"?>
+<odoo>
+
+<template id="event_layout" inherit_id="website_event.layout">
+ <xpath expr="//div[@id='wrap']" position="attributes">
+ <attribute name="t-attf-class">o_wevent_event js_event #{'o_wevent_hide_sponsors' if hide_sponsors else ''}</attribute>
+ </xpath>
+</template>
+
+<template name="Sponsors" id="event_sponsor" customize_show="True" inherit_id="website_event.layout">
+ <xpath expr="//div[@id='wrap']" position="inside">
+ <div class="container mt32 mb16 d-none d-md-block d-print-none" t-if="event.sponsor_ids">
+ <div t-attf-class="d-flex flex-wrap mb-5 #{'' if (len(event.sponsor_ids) > 10) else 'justify-content-md-center'}">
+ <t t-foreach="event.sponsor_ids" t-as="sponsor">
+ <t t-if="sponsor.url">
+ <a class="o_wevent_sponsor o_wevent_sponsor_card" target="_blank" t-att-href="sponsor.url">
+ <div class="h-100 shadow-sm p-2">
+ <span t-field="sponsor.image_128"
+ t-options='{"widget": "image", "class": "img img-fluid"}'/>
+ <span t-if="sponsor.sponsor_type_id.display_ribbon_style and sponsor.sponsor_type_id.display_ribbon_style != 'no_ribbon'"
+ t-field="sponsor.sponsor_type_id" t-attf-class="o_ribbon o_ribbon_right ribbon_#{sponsor.sponsor_type_id.display_ribbon_style}"/>
+ </div>
+ </a>
+ </t>
+ <t t-if="not sponsor.url">
+ <div class="o_wevent_sponsor o_wevent_sponsor_card">
+ <div class="h-100 shadow-sm p-2">
+ <span t-field="sponsor.image_128"
+ t-options='{"widget": "image", "class": "img img-fluid"}'/>
+ <span t-if="sponsor.sponsor_type_id.display_ribbon_style and sponsor.sponsor_type_id.display_ribbon_style != 'no_ribbon'"
+ t-field="sponsor.sponsor_type_id" t-attf-class="o_ribbon o_ribbon_right ribbon_#{sponsor.sponsor_type_id.display_ribbon_style}"/>
+ </div>
+ </div>
+ </t>
+ </t>
+ </div>
+ </div>
+ </xpath>
+</template>
+
+<!-- Chatter templates -->
+<template id="event_track_template_new">
+ <p>New track proposal <a href="#" t-att-data-oe-model="track._name" t-att-data-oe-id="track.id"> <t t-esc="track.name"/></a></p>
+ <ul>
+ <li><b>Proposed By</b>: <t t-esc="track.partner_name or track.partner_email"/></li>
+ <li><b>Mail</b>: <a t-attf-href="mailto:#{track.partner_email}"><t t-esc="track.partner_email"/></a></li>
+ <li><b>Phone</b>: <t t-esc="track.partner_phone"/></li>
+ <li><b>Speakers Biography</b>: <div t-field="track.partner_biography"/></li>
+ <li><b>Talk Introduction</b>: <div t-field="track.description"/></li>
+ </ul>
+</template>
+
+</odoo>
diff --git a/addons/website_event_track/views/event_track_templates_page.xml b/addons/website_event_track/views/event_track_templates_page.xml
new file mode 100644
index 00000000..ba7ff7e0
--- /dev/null
+++ b/addons/website_event_track/views/event_track_templates_page.xml
@@ -0,0 +1,216 @@
+<?xml version="1.0" encoding="utf-8"?>
+<odoo>
+
+<template id="event_track_main" name="Event Exhibitor">
+ <t t-call="website_event.layout">
+ <div class="o_wevent_online o_wevent_online_bg o_wesession_index">
+ <!-- Options -->
+ <t t-set="option_widescreen" t-value="option_widescreen or False"/>
+ <t t-set="option_track_wishlist" t-value="not event.is_done and is_view_active('website_event_track.session_topbar_wishlist')"/>
+ <!-- Drag/Drop Area -->
+ <div id="oe_structure_wesession_track_index_1" class="oe_structure"/>
+ <!-- Content -->
+ <div t-att-class="'o_wevent_online_page_container %s' % ('container pb-3' if not option_widescreen else 'pb-3')">
+ <div class="row mb-5 mx-0">
+ <t t-call="website_event_track.event_track_aside"/>
+ <t t-call="website_event_track.event_track_content"/>
+ </div>
+ </div>
+ <!-- Drag/Drop Area -->
+ <div id="oe_structure_wesession_track_index_2" class="oe_structure"/>
+ </div>
+ </t>
+</template>
+
+<!-- ============================================================ -->
+<!-- CONTENT: MAIN TEMPLATES -->
+<!-- ============================================================ -->
+
+<template id="event_track_content" name="Track: Main Description">
+ <div name="o_wesession_track_main"
+ t-att-class="'col-12 o_wevent_online_page_main o_wesession_track_main bg-white p-0 %s' % ('col-md-9 col-lg-10' if option_widescreen else 'col-md-8 col-lg-9')">
+ <!-- LIVE INFORMATIONS -->
+ <div t-if="not track.event_id.is_ongoing" class="pt-3">
+ <div class="mx-3 alert alert-warning">
+ Event <span t-esc="track.event_id.name" class="font-weight-bold"/>
+ <span t-if="track.event_id.start_today">
+ starts in
+ <span t-esc="track.event_id.start_remaining"
+ t-options="{'widget': 'duration', 'digital': False, 'unit': 'minute', 'round': 'minute'}"/>
+ </span>
+ <span t-else="">
+ starts on
+ <span t-field="track.event_id.with_context(tz=track.event_id.date_tz).date_begin"
+ t-options="{'format': 'long', 'tz_name': track.event_id.date_tz, 'hide_seconds': True}"/>
+ </span>
+ </div>
+ </div>
+ <div t-elif="track.track_start_remaining" class="pt-3">
+ <div class="mx-3 alert alert-warning">
+ Starting in
+ <span t-esc="track.track_start_remaining"
+ t-options="{'widget': 'duration', 'digital': False, 'unit': 'second', 'round': 'minute'}"/>
+ </div>
+ </div>
+ <!-- TRACK DESCRIPTION -->
+ <div class="o_wesession_track_main_description overflow-auto">
+ <div class="mx-3 pt-3 mb-3 d-flex justify-content-between flex-column flex-md-row">
+ <div class="d-flex flex-column">
+ <span class="h4 mb-0" t-esc="track.name"/>
+ <div>
+ <t t-foreach="track.tag_ids" t-as="tag">
+ <span t-if="tag.color"
+ t-att-class="'badge o_tag_color_hovered_%s' % (tag.color)"
+ t-esc="tag.name"/>
+ </t>
+ </div>
+ </div>
+ <div class="o_we_track_action_buttons d-flex justify-content-md-end align-items-center flex-wrap">
+ <div class="o_we_track_reminder_button my-1">
+ <div t-if="option_track_wishlist and not track.is_track_done"
+ t-call="website_event_track.track_widget_reminder">
+ <t t-set="reminder_small" t-value="False"/>
+ <t t-set="reminder_light" t-value="False"/>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="mx-3 text-muted">
+ <t t-if="track.location_id">
+ <strong>Location:</strong> <span t-field="track.location_id"/>
+ <span> - </span>
+ </t>
+ <t t-if="track.date">
+ <span t-field="track.date"
+ t-options='{"hide_seconds":"True", "format": "short"}'/>
+ -
+ <span t-field="track.date_end"
+ t-options='{"hide_seconds":"True", "format": "short"}'/>
+ <t t-if="event.date_tz">
+ (<span t-field="track.date_end" t-options='{"format": "zzz"}'/>)
+ </t>
+ </t>
+ <t t-if="track.duration">
+ (<span t-field="track.duration"
+ t-options='{"widget": "duration", "unit": "hour", "round": "minute"}'/>)
+ </t>
+ </div>
+
+ <hr class="mt-2 mb-0"/>
+
+ <!-- ABOUT AUTHOR -->
+ <div class="mx-3">
+ <div class="mt-2 d-flex">
+ <span t-if="track.image" t-field="track.image" class="o_wevent_online_page_avatar"
+ t-options="{'widget': 'image', 'class': 'rounded-circle', 'max_width': '96'}"/>
+ <div class="pl-2 pr-0 pr-md-2 d-flex flex-column">
+ <span t-field="track.partner_name" class="font-weight-bold mb-2"/>
+ <span class="mb-1 d-flex align-items-baseline text-break" t-if="track.partner_function">
+ <i class="fa fa-briefcase mr-2"/><span t-esc="track.partner_function"/>
+ <t t-if="track.partner_company_name">
+ <span>&amp;nbsp;at&amp;nbsp;</span><span t-esc="track.partner_company_name"/>
+ </t>
+ </span>
+ <span class="mb-1 d-flex align-items-baseline text-break" t-if="track.partner_id.website">
+ <i class="fa fa-home mr-2"/><a t-att-href="track.partner_id.website"><span t-field="track.partner_id.website"/></a>
+ </span>
+ <span class="mb-1 d-flex align-items-baseline text-break" t-if="track.partner_email">
+ <i class="fa fa-envelope mr-2"/><a t-att-mailto="track.partner_email"><span t-field="track.partner_email"/></a>
+ </span>
+ <span class="mb-1 d-flex align-items-baseline text-break" t-if="track.partner_phone">
+ <i class="fa fa-phone mr-2"/><span t-field="track.partner_phone"/>
+ </span>
+ </div>
+ </div>
+ <div t-field="track.partner_biography" class="oe_no_empty"/>
+ <hr t-if="not is_html_empty(track.description)" class="mt-2 pb-1 mb-1"/>
+ </div>
+ <div t-field="track.description" class="my-2 mx-3 oe_no_empty"/>
+ </div>
+ </div>
+</template>
+
+<!-- ============================================================ -->
+<!-- ASIDE: CONTROL PANEL -->
+<!-- ============================================================ -->
+
+<template id="event_track_aside" name="Track: Aside">
+ <div t-att-class="'col-12 pl-0 pr-0 pr-md-3 o_wevent_online_page_aside o_wesession_track_aside %s' % ('col-md-3 col-lg-2' if option_widescreen else 'col-md-4 col-lg-3')">
+ <div class="bg-white pt-0 pt-md-3 o_wevent_online_page_aside_content">
+ <div class="mx-2" t-if="track.website_cta">
+ <t t-set="cta_coundown" t-value="bool(track.website_cta_start_remaining)"/>
+ <div t-if="cta_coundown" class="text-center mt-2 mt-md-0 w-100 btn btn-primary d-none">
+ <t t-call="website_event.display_timer_widget">
+ <t t-set="pre_remaining_time" t-value="int(track.track_start_remaining)"/>
+ <!--<t t-set="pre_countdown_text" t-value="'Talk starts in'"/>-->
+ <t t-set="pre_countdown_display" t-value="bool(False)"/>
+ <t t-set="main_remaining_time" t-value="int(track.website_cta_start_remaining)"/>
+ <!--<t t-set="main_countdown_text" t-value="'Magic happens in'"/>-->
+ <t t-set="main_countdown_display" t-value="bool(False)"/>
+ <t t-set="display_class" t-value="'.o_event_cta_action'"/>
+ </t>
+ </div>
+ <div t-att-class="'o_event_cta_action %s' % ('d-none' if cta_coundown else '')">
+ <a t-att-href="track.website_cta_url"
+ target="_blank"
+ class="btn btn-primary w-100 mb-3 mt-2 mt-md-0">
+ <span t-esc="track.website_cta_title"/>
+ </a>
+ </div>
+ </div>
+ <div class="d-flex align-items-center justify-content-between mx-2">
+ <ul class="nav nav-tabs o_wesession_track_aside_nav d-flex border-0" role="tablist">
+ <li class="nav-item flex-grow-1">
+ <a href="#track_list" aria-controls="track_list" class="nav-link active" role="tab" data-toggle="tab">
+ Talks
+ </a>
+ </li>
+ </ul>
+ <a href="#collapse_track_aside" data-toggle="collapse" class="d-md-none p-2 text-decoration-none o_wevent_online_page_aside_collapse collapsed">
+ <i class="fa fa-chevron-down d-md-none"/>
+ </a>
+ </div>
+ <div id="collapse_track_aside"
+ class="tab-content collapse d-md-block o_wesession_track_aside_tabs">
+ <div class="tab-pane fade show active" id="track_list" role="tabpanel">
+ <ul class="list-unstyled mb-0">
+ <li t-foreach="tracks_other" t-as="track_other" class="w-100">
+ <a t-if="user_event_manager or track_other.is_published"
+ class="d-block w-100 h-100 px-2 pt-2 pb-1 text-decoration-none"
+ t-att-href="track_other.website_url">
+ <t t-call="website_event_track.event_track_aside_other_track"/>
+ </a>
+ <div t-else="" class="text-muted px-2 pt-2 pb-1">
+ <t t-call="website_event_track.event_track_aside_other_track"/>
+ </div>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ </div>
+</template>
+
+<template id="event_track_aside_other_track">
+ <span t-esc="track_other.name" class="w-100"/>
+ <div class="d-flex align-items-center">
+ <small class="text-muted" t-esc="track_other.partner_name"/>
+ <div class="d-inline-block ml-auto o_wesession_track_aside_info text-truncate">
+ <small t-if="track_other.is_track_live and not track_other.is_track_done"
+ class="badge badge-danger">Live</small>
+ <small t-elif="track_other.is_track_done"
+ class="badge badge-light">Done</small>
+ <small t-elif="track_other.is_track_today and track_other.track_start_remaining"
+ class="badge badge-light">
+ <span t-esc="track_other.track_start_remaining"
+ t-options="{'widget': 'duration', 'digital': False, 'add_direction': True,
+ 'unit': 'second', 'round': 'minute', 'format': 'narrow'}"/>
+ </small>
+ <div t-elif="track_other.date" class="badge badge-light">
+ <span t-esc="track_other.date" t-options="{'widget': 'datetime', 'tz_name': track_other.event_id.date_tz, 'format': 'MMM. dd'}"/>
+ </div>
+ </div>
+ </div>
+</template>
+
+</odoo>
diff --git a/addons/website_event_track/views/event_track_templates_proposal.xml b/addons/website_event_track/views/event_track_templates_proposal.xml
new file mode 100644
index 00000000..794c5e54
--- /dev/null
+++ b/addons/website_event_track/views/event_track_templates_proposal.xml
@@ -0,0 +1,167 @@
+<?xml version="1.0" encoding="utf-8"?>
+<odoo>
+
+<template id="event_track_proposal">
+ <t t-call="website_event.layout">
+ <div class="oe_structure" id="oe_structure_website_event_track_proposal_1"/>
+ <div class="container">
+ <section class="pt48">
+ <h1 class="o_page_header">Call for Proposals</h1>
+ <h2 class="text-center text-secondary font-weight-bold my-4" t-esc="event.name"/>
+ </section>
+ <section id="forms" t-if="not event.website_track_proposal">
+ <h1>Proposals are closed!</h1>
+ <p>
+ This event does not accept proposals.
+ </p>
+ </section>
+ <section class="row">
+ <div class="col-lg-9">
+ <div class="oe_structure">
+ <section>
+ <h3 class="o_page_header mt16">
+ Introduction
+ </h3>
+ <p>
+ We will accept a broad range of
+ presentations, from reports on academic and
+ commercial projects to tutorials and case
+ studies. As long as the presentation is
+ interesting and potentially useful to the
+ audience, it will be considered for
+ inclusion in the programme.
+ </p>
+ </section>
+ </div>
+ <div t-if="not track">
+ <section class="mt-5">
+ <h3 class="o_page_header">Application</h3>
+ <p>
+ Fill this form to propose your talk.
+ </p>
+ <div class="alert alert-info" role="alert">
+ <i class="fa fa-info-circle"/>
+ You can add multiple speakers by separating names, emails and phones with commas.
+ </div>
+ </section>
+ <section id="forms" class="mb-5"
+ t-if="event.website_track_proposal">
+ <form class="mt32 js_website_submit_form" t-attf-action="/event/#{event.id}/track_proposal/post" method="post" enctype="multipart/form-data">
+ <input type="hidden" name="csrf_token" t-att-value="request.csrf_token()"/>
+ <div class="form-group row">
+ <label class="col-lg-3 col-md-4 col-form-label" for="track_name">Talk Title</label>
+ <div class="col-lg-7 col-md-8">
+ <input type="text" class="form-control" name="track_name" required="True"/>
+ </div>
+ </div>
+ <div class="form-group row">
+ <label class="col-lg-3 col-md-4 col-form-label" for="description">Talk Introduction</label>
+ <div class="col-lg-7 col-md-8">
+ <textarea class="form-control" name="description"/>
+ </div>
+ </div>
+ <div class="form-group row" t-if="len(event.allowed_track_tag_ids)">
+ <label class="col-lg-3 col-md-4 col-form-label" for="phone">Tags</label>
+ <div class="col-lg-9 col-md-8">
+ <div class="row">
+ <label class="col-md-4" t-foreach="event.allowed_track_tag_ids" t-as="tag">
+ <input type="checkbox" value="1" t-attf-name="tag_#{str(tag.id)}"/>
+ <t t-esc="tag.name"/>
+ </label>
+ </div>
+ </div>
+ </div>
+ <div class="form-group row">
+ <label class="col-lg-3 col-md-4 col-form-label" for="partner_name">Speaker(s) Name</label>
+ <div class="col-lg-7 col-md-8">
+ <input type="text" class="form-control" name="partner_name" required="True"/>
+ </div>
+ </div>
+ <div class="form-group row">
+ <label class="col-lg-3 col-md-4 col-form-label" for="email_from">Speaker(s) Email</label>
+ <div class="col-lg-7 col-md-8">
+ <input type="email" class="form-control" name="email_from" required="True" multiple="multiple"/>
+ </div>
+ </div>
+ <div class="form-group row">
+ <label class="col-lg-3 col-md-4 col-form-label" for="phone">Speaker(s) Phone</label>
+ <div class="col-lg-7 col-md-8">
+ <input type="text" class="form-control" name="phone" required="True"/>
+ </div>
+ </div>
+ <div class="form-group row">
+ <label class="col-lg-3 col-md-4 col-form-label" for="biography">Speaker(s) Biography</label>
+ <div class="col-lg-7 col-md-8">
+ <textarea class="form-control" name="biography" rows="5"/>
+ </div>
+ </div>
+ <div class="form-group row">
+ <label class="col-lg-3 col-md-4 col-form-label" for="image">Speaker(s) Picture</label>
+ <div class="col-lg-7 col-md-8">
+ <input name="image" type="file" accept="image/*"/>
+ </div>
+ </div>
+ <div class="form-group row o_form_buttons">
+ <div class="offset-lg-3 offset-md-4 col-md-8 col-lg-7">
+ <button type="submit" class="btn btn-primary">Submit Proposal</button>
+ </div>
+ </div>
+ </form>
+ </section>
+ </div>
+ <div t-else="">
+ <t t-call="website_event_track.event_track_proposal_success"/>
+ </div>
+ <div class="oe_structure" id="oe_structure_website_event_track_proposal_2"/>
+ </div>
+ <div class="col-lg-3">
+ <div class="card mb-3 bg-secondary">
+ <h4 class="card-header">Talks Types</h4>
+ <div class="card-body">
+ <ul class="list-unstyled">
+ <li>
+ <strong>Regular Talks</strong>. These are standard talks with slides,
+ alocated in slots of 60 minutes.
+ </li><li>
+ <strong>Lightning Talks</strong>. These are 30 minutes talks on many
+ different topics. Most topics are accepted in lightning talks.
+ </li>
+ </ul>
+ </div>
+ </div>
+ <div class="card bg-secondary">
+ <h4 class="card-header">Submission Agreement</h4>
+ <div class="card-body">
+ <p>
+ We require speakers to accept an agreement in which they commit to:
+ </p>
+ <ul class="list-unstyled">
+ <li>
+ Timely release of presentation material (slides),
+ for publishing on our website.
+ </li><li>
+ Allow video and audio recording of their
+ presentation, for publishing on our website.
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ </section>
+ </div>
+ <div class="oe_structure" id="oe_structure_website_event_track_proposal_3"/>
+ </t>
+</template>
+
+<template id="event_track_proposal_success">
+ <section class="mt-5">
+ <h3 class="o_page_header">Application</h3>
+ <p>
+ Thank you for your proposal.
+ </p><p>
+ We will evaluate your proposition and get back to you shortly.
+ </p>
+ </section>
+</template>
+
+</odoo>
diff --git a/addons/website_event_track/views/event_track_templates_reminder.xml b/addons/website_event_track/views/event_track_templates_reminder.xml
new file mode 100644
index 00000000..ff6fe937
--- /dev/null
+++ b/addons/website_event_track/views/event_track_templates_reminder.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<odoo>
+
+<!-- Options
+ * reminder_light: no text displayed
+ * reminder_small: text displayed as small
+ * light_theme: bell is white/gold if set; otherwse bell is gray / white
+ -->
+<template id="track_widget_reminder">
+ <t t-set="_btn_style" t-value="'btn-link' if reminder_light else (track.is_reminder_on and 'btn-primary') or 'btn-outline-primary'"/>
+ <t t-set="_btn_size" t-value="'btn-sm' if reminder_small else ''"/>
+ <div t-att-class="'o_wetrack_js_reminder btn %s %s' % (_btn_style, _btn_size)">
+ <t t-if="track.is_reminder_on" t-set="title">Favorite On</t>
+ <t t-else="track.is_reminder_on" t-set="title">Set Favorite</t>
+ <i t-att-class="'fa fa-bell%s inactive_color_%s' % ('' if track.is_reminder_on else '-o', 'dark' if reminder_light and not light_theme else 'light')"
+ t-att-data-track-id="track.id"
+ t-att-title="title"
+ t-att-data-is-reminder-light="reminder_light"
+ t-att-data-reminder-on="bool(track.is_reminder_on)"></i>
+ <span t-if="not reminder_light" class="o_wetrack_js_reminder_text">
+ <t t-if="not track.is_reminder_on">
+ Set Favorite
+ </t><t t-else="">
+ Favorite On
+ </t>
+ </span>
+ </div>
+</template>
+
+</odoo>
diff --git a/addons/website_event_track/views/event_track_views.xml b/addons/website_event_track/views/event_track_views.xml
new file mode 100644
index 00000000..d2058cc4
--- /dev/null
+++ b/addons/website_event_track/views/event_track_views.xml
@@ -0,0 +1,293 @@
+<?xml version="1.0"?>
+<odoo>
+ <record id="website_visitor_action_from_track" model="ir.actions.act_window">
+ <field name="name">Visitors Wishlist</field>
+ <field name="res_model">website.visitor</field>
+ <field name="view_mode">kanban,tree,form,graph</field>
+ <field name="domain">[('event_track_wishlisted_ids', 'in', [active_id])]</field>
+ <field name="help" type="html">
+ <p class="o_view_nocontent_smiling_face">
+ Wait for visitors to wishlist your tracks
+ </p>
+ </field>
+ </record>
+
+ <record model="ir.ui.view" id="view_event_track_kanban">
+ <field name="name">event.track.kanban</field>
+ <field name="model">event.track</field>
+ <field name="arch" type="xml">
+ <kanban default_group_by="stage_id">
+ <templates>
+ <field name="color"/>
+ <field name="partner_id"/>
+ <field name="stage_id"/>
+ <field name="website_url"/>
+ <field name="activity_ids"/>
+ <field name="activity_state"/>
+ <progressbar field="kanban_state" colors='{"done": "success", "blocked": "danger"}'/>
+ <t t-name="kanban-box">
+ <div t-attf-class="{{!selection_mode ? 'oe_kanban_color_' + kanban_getcolor(record.color.raw_value) : ''}} oe_kanban_card oe_kanban_global_click">
+ <div class="o_dropdown_kanban dropdown" groups="base.group_user">
+
+ <a role="button" class="dropdown-toggle o-no-caret btn" data-toggle="dropdown" href="#" aria-label="Dropdown menu" title="Dropdown menu">
+ <span class="fa fa-ellipsis-v"/>
+ </a>
+ <div class="dropdown-menu" role="menu">
+ <a role="menuitem" t-att-href="record.website_url.value" class="dropdown-item">View Track</a>
+ <t t-if="widget.editable"><a role="menuitem" type="edit" class="dropdown-item">Edit Track</a></t>
+ <t t-if="widget.deletable"><a role="menuitem" type="delete" class="dropdown-item">Delete</a></t>
+ <ul class="oe_kanban_colorpicker" data-field="color"/>
+ </div>
+ </div>
+ <div class="oe_kanban_content">
+ <div class="o_kanban_record_top">
+ <h4 class="o_kanban_record_title"><field name="name"/></h4>
+ </div>
+ <div class="o_kanban_record_body">
+ <t t-if="duration"><field name="duration" widget="float_time"/> hours</t>
+ <field name="tag_ids" widget="many2many_tags" options="{'color_field': 'color'}"/>
+ </div>
+ <div class="o_kanban_record_bottom">
+ <div class="oe_kanban_bottom_left">
+ <field name="priority" widget="priority"/>
+ <field name="activity_ids" widget="kanban_activity"/>
+ </div>
+ <div class="oe_kanban_bottom_right">
+ <field name="kanban_state" widget="state_selection" groups="base.group_user"/>
+ <img t-att-src="kanban_image('res.partner', 'image_128', record.partner_id.raw_value)"
+ t-att-title="record.partner_id.value" t-att-alt="record.partner_id.value"
+ class="oe_kanban_avatar"/>
+ </div>
+ </div>
+ </div>
+ </div>
+ </t>
+ </templates>
+ </kanban>
+ </field>
+ </record>
+
+ <record id="view_event_track_calendar" model="ir.ui.view">
+ <field name="name">event.track.calendar</field>
+ <field name="model">event.track</field>
+ <field eval="2" name="priority"/>
+ <field name="arch" type="xml">
+ <calendar date_start="date" date_delay="duration" string="Event Tracks" color="location_id" event_limit="5">
+ <field name="location_id" filters="1"/>
+ <field name="event_id"/>
+ <field name="partner_id" avatar_field="image_128"/>
+ <field name="user_id" avatar_field="image_128"/>
+ </calendar>
+ </field>
+ </record>
+
+ <record model="ir.ui.view" id="view_event_track_search">
+ <field name="name">event.track.search</field>
+ <field name="model">event.track</field>
+ <field name="arch" type="xml">
+ <search string="Event Tracks">
+ <field name="name"/>
+ <field name="event_id"/>
+ <field name="location_id"/>
+ <field name="stage_id"/>
+ <field name="partner_id"/>
+ <filter string="My Tracks" name="my_tracks" domain="[('user_id', '=', uid)]"/>
+ <separator/>
+ <filter string="Unread Messages" name="message_needaction" domain="[('message_needaction', '=', True)]"/>
+ <separator/>
+ <filter string="Always Wishlisted" name="filter_wishlisted_by_default" domain="[('wishlisted_by_default', '=', True)]"/>
+ <separator/>
+ <filter name="filter_date" date="date"/>
+ <separator/>
+ <filter string="Archived" name="inactive" domain="[('active', '=', False)]"/>
+ <separator/>
+ <filter invisible="1" string="Late Activities" name="activities_overdue"
+ domain="[('my_activity_date_deadline', '&lt;', context_today().strftime('%Y-%m-%d'))]"
+ help="Show all records which has next action date is before today"/>
+ <filter invisible="1" string="Today Activities" name="activities_today"
+ domain="[('my_activity_date_deadline', '=', context_today().strftime('%Y-%m-%d'))]"/>
+ <filter invisible="1" string="Future Activities" name="activities_upcoming_all"
+ domain="[('my_activity_date_deadline', '&gt;', context_today().strftime('%Y-%m-%d'))]"/>
+ <group expand="0" string="Group By">
+ <filter string="Responsible" name="responsible" context="{'group_by': 'user_id'}"/>
+ <filter string="Stage" name="stage" context="{'group_by': 'stage_id'}"/>
+ <filter string="Date" name="date" context="{'group_by': 'date'}"/>
+ <filter string="Event" name="event" context="{'group_by': 'event_id'}"/>
+ <filter string="Location" name="location" context="{'group_by': 'location_id'}"/>
+ </group>
+ </search>
+ </field>
+ </record>
+
+ <record model="ir.ui.view" id="view_event_track_form">
+ <field name="name">event.track.form</field>
+ <field name="model">event.track</field>
+ <field name="arch" type="xml">
+ <form string="Event Track">
+ <header>
+ <field name="stage_id" widget="statusbar" options="{'clickable': '1'}"/>
+ </header>
+ <sheet string="Track">
+ <div class="oe_button_box" name="button_box">
+ <field name="website_url" invisible="1"/>
+ <button name="%(website_event_track.website_visitor_action_from_track)d"
+ type="action"
+ class="oe_stat_button"
+ icon="fa-bell">
+ <field name="wishlist_visitor_count" string="Wishlisted By" widget="statinfo"/>
+ </button>
+ <field name="is_published" widget="website_redirect_button"/>
+ </div>
+ <widget name="web_ribbon" text="Archived" bg_color="bg-danger" attrs="{'invisible': [('active', '=', True)]}"/>
+ <field name="kanban_state" widget="state_selection" class="ml-3 float-right"/>
+ <field name="website_image" widget="image" class="oe_avatar"/>
+ <div class="oe_title">
+ <label for="name" class="oe_edit_only"/>
+ <h1>
+ <field name="name" placeholder="e.g. Inspiring Business Talk"/>
+ </h1>
+ </div>
+ <group>
+ <group>
+ <field name="date"/>
+ <field name="location_id"/>
+ <label for="duration"/>
+ <div class="o_row">
+ <field name="duration" widget="float_time"/>
+ <span>hours</span>
+ </div>
+ <field name="active" invisible="1"/>
+ <field name="wishlisted_by_default"/>
+ </group>
+ <group>
+ <field name="company_id" invisible="1"/>
+ <field name="user_id" domain="[('share', '=', False)]"/>
+ <field name="event_id"/>
+ <field name="tag_ids" widget="many2many_tags" options="{'color_field': 'color'}"/>
+ <field name="color" widget="color_picker"/>
+ </group>
+ </group>
+ <notebook>
+ <page string="Speakers" name="speakers">
+ <group class="display-flex justify-content-between">
+ <group>
+ <field name="partner_id"
+ domain="['|', ('company_id', '=', company_id), ('company_id', '=', False)]"
+ context="{'default_phone': partner_phone, 'default_email': partner_email}"/>
+ <field name="partner_name"/>
+ <field name="partner_email"/>
+ <field name="partner_phone" class="o_force_ltr"/>
+ </group>
+ <group>
+ <field name="image" nolabel="1" widget="image" class="oe_avatar"/>
+ </group>
+ </group>
+ <group>
+ <field name="partner_biography"/>
+ </group>
+ </page>
+ <page string="Description" name="description">
+ <field name="description"/>
+ </page>
+ <page string="Interactivity" name="interactivity">
+ <group>
+ <group name="event_track_cta_group">
+ <field name="website_cta"/>
+ <field name="website_cta_title" placeholder="e.g. Get Yours Now !"
+ attrs="{'invisible': [('website_cta', '=', False)],
+ 'required': [('website_cta', '=', True)]}"/>
+ <field name="website_cta_url" placeholder="e.g. http://www.example.com"
+ attrs="{'invisible': [('website_cta', '=', False)],
+ 'required': [('website_cta', '=', True)]}"/>
+ <label for="website_cta_delay"
+ attrs="{'invisible': [('website_cta', '=', False)]}"/>
+ <div attrs="{'invisible': [('website_cta', '=', False)]}">
+ <field name="website_cta_delay" class="oe_inline"
+ attrs="{'required': [('website_cta', '=', True)]}"/> minutes after talk start
+ </div>
+ </group>
+ </group>
+ </page>
+ </notebook>
+ </sheet>
+ <div class="oe_chatter">
+ <field name="message_follower_ids"/>
+ <field name="activity_ids"/>
+ <field name="message_ids" options="{'post_refresh': 'recipients'}"/>
+ </div>
+ </form>
+ </field>
+ </record>
+
+ <record model="ir.ui.view" id="view_event_track_tree">
+ <field name="name">event.track.tree</field>
+ <field name="model">event.track</field>
+ <field name="arch" type="xml">
+ <tree string="Event Track">
+ <field name="name"/>
+ <field name="active" invisible="1"/>
+ <field name="partner_name"/>
+ <field name="partner_id" optional="hide"/>
+ <field name="partner_email"/>
+ <field name="partner_phone"/>
+ <field name="event_id" invisible="context.get('default_event_id')"/>
+ <field name="wishlisted_by_default" optional="hide"/>
+ <field name="wishlist_visitor_count" optional="hide"/>
+ <field name="stage_id"/>
+ <field name="color" widget="color_picker" optional="hide"/>
+ <field name="activity_exception_decoration" widget="activity_exception"/>
+ </tree>
+ </field>
+ </record>
+
+ <record model="ir.ui.view" id="view_event_track_graph">
+ <field name="name">event.track.graph</field>
+ <field name="model">event.track</field>
+ <field name="arch" type="xml">
+ <graph string="Tracks" type="bar" orientation="horizontal" sample="1">
+ <field name="location_id"/>
+ <field name="duration" operator="+"/>
+ </graph>
+ </field>
+ </record>
+
+ <record model="ir.actions.act_window" id="action_event_track">
+ <field name="name">Event Tracks</field>
+ <field name="res_model">event.track</field>
+ <field name="view_mode">kanban,tree,form,calendar,graph,activity</field>
+ <field name="help" type="html">
+ <p class="o_view_nocontent_smiling_face">
+ Add a new track
+ </p><p>
+ Tracks define the schedule of your event.<br/>These can be a talk, a round table, a meeting, etc.
+ </p>
+ </field>
+ </record>
+
+ <record model="ir.actions.act_window" id="action_event_track_from_event">
+ <field name="res_model">event.track</field>
+ <field name="name">Event Tracks</field>
+ <field name="view_mode">kanban,tree,form,calendar,graph,activity</field>
+ <field name="context">{'search_default_event_id': active_id, 'default_event_id': active_id}</field>
+ <field name="help" type="html">
+ <p class="o_view_nocontent_smiling_face">
+ Add a new track
+ </p><p>
+ Tracks define the schedule of your event.<br/>These can be a talk, a round table, a meeting, etc.
+ </p>
+ </field>
+ </record>
+
+ <record id="event_track_action_from_visitor" model="ir.actions.act_window">
+ <field name="name">Wishlisted Tracks</field>
+ <field name="res_model">event.track</field>
+ <field name="view_mode">kanban,tree,form</field>
+ <field name="domain">[('wishlist_visitor_ids', 'in', [active_id])]</field>
+ <field name="help" type="html">
+ <p class="o_view_nocontent_empty_folder">
+ No track wishlisted by this visitor
+ </p>
+ </field>
+ </record>
+
+</odoo>
diff --git a/addons/website_event_track/views/event_track_visitor_views.xml b/addons/website_event_track/views/event_track_visitor_views.xml
new file mode 100644
index 00000000..2a90e7f5
--- /dev/null
+++ b/addons/website_event_track/views/event_track_visitor_views.xml
@@ -0,0 +1,70 @@
+<?xml version="1.0"?>
+<odoo><data>
+
+ <record id="event_track_visitor_view_search" model="ir.ui.view" >
+ <field name="name">event.track.visitor.view.search</field>
+ <field name="model">event.track.visitor</field>
+ <field name="arch" type="xml">
+ <search string="Track Visitors">
+ <field name="track_id"/>
+ <field name="visitor_id"/>
+ <field name="partner_id"/>
+ <field name="is_wishlisted"/>
+ <group string="Group By" expand="0">
+ <filter string="Track" name="groupby_track_id" context="{'group_by': 'track_id'}"/>
+ <filter string="Visitor" name="groupby_visitor_id" context="{'group_by': 'visitor_id'}"/>
+ <filter string="Customer" name="groupby_partner_id" context="{'group_by': 'partner_id'}"/>
+ </group>
+ </search>
+ </field>
+ </record>
+
+ <record id="event_track_visitor_view_form" model="ir.ui.view">
+ <field name="name">event.track.visitor.view.form</field>
+ <field name="model">event.track.visitor</field>
+ <field name="arch" type="xml">
+ <form string="Track Visitor">
+ <sheet string="Track Visitor">
+ <group>
+ <group>
+ <field name="track_id"/>
+ <field name="is_wishlisted"/>
+ </group>
+ <group>
+ <field name="visitor_id"/>
+ <field name="partner_id"/>
+ </group>
+ </group>
+ </sheet>
+ </form>
+ </field>
+ </record>
+
+ <record id="event_track_visitor_view_list" model="ir.ui.view">
+ <field name="name">event.track.visitor.view.list</field>
+ <field name="model">event.track.visitor</field>
+ <field name="arch" type="xml">
+ <tree string="Track Visitors">
+ <field name="track_id"/>
+ <field name="visitor_id"/>
+ <field name="partner_id"/>
+ <field name="is_wishlisted"/>
+ </tree>
+ </field>
+ </record>
+
+ <record id="event_track_visitor_action" model="ir.actions.act_window">
+ <field name="name">Track Visitors</field>
+ <field name="res_model">event.track.visitor</field>
+ <field name="view_mode">tree,form</field>
+ <field name="help" type="html">
+ <p class="o_view_nocontent_smiling_face">
+ Add a new track visitor
+ </p><p>
+ Track Visitors store statistics on track attendance, including
+ wishlist management.
+ </p>
+ </field>
+ </record>
+
+</data></odoo>
diff --git a/addons/website_event_track/views/event_type_views.xml b/addons/website_event_track/views/event_type_views.xml
new file mode 100644
index 00000000..1c49a043
--- /dev/null
+++ b/addons/website_event_track/views/event_type_views.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<odoo>
+
+ <record id="event_type_view_form_inherit_track" model="ir.ui.view">
+ <field name="name">event.type.view.form.inherit.track</field>
+ <field name="model">event.type</field>
+ <field name="inherit_id" ref="website_event.event_type_view_form"/>
+ <field name="arch" type="xml">
+ <xpath expr="//div[@name='website_menu']" position='after'>
+ <div class="row mt16" attrs="{'invisible': [('website_menu', '=', False)]}">
+ <label class="col-lg-4" for="website_track"/> <field name="website_track"/>
+ </div>
+ <div class="row mt16" attrs="{'invisible': [('website_menu', '=', False)]}">
+ <label class="col-lg-4" for="website_track_proposal"/> <field name="website_track_proposal"/>
+ </div>
+ </xpath>
+ </field>
+ </record>
+
+</odoo>
diff --git a/addons/website_event_track/views/res_config_settings_view.xml b/addons/website_event_track/views/res_config_settings_view.xml
new file mode 100644
index 00000000..ccc1293f
--- /dev/null
+++ b/addons/website_event_track/views/res_config_settings_view.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<odoo>
+ <record id="res_config_settings_view_form" model="ir.ui.view">
+ <field name="name">res.config.settings.view.form.inherit.website</field>
+ <field name="model">res.config.settings</field>
+ <field name="priority" eval="20"/>
+ <field name="inherit_id" ref="base.res_config_settings_view_form"/>
+ <field name="arch" type="xml">
+ <xpath expr="//div[hasclass('settings')]//div[@id='website_settings']" position="inside">
+ <div class="col-12 col-lg-6 o_setting_box" id="events_app_setting">
+ <div class="o_setting_right_pane">
+ <label for="events_app_name" string="Events PWA"/>
+ <span class="fa fa-lg fa-globe" title="Values set here are website-specific." groups="website.group_multi_website"/>
+ <div class="text-muted">
+ Name of your website's Events Progressive Web Application
+ </div>
+ <div class="content-group">
+ <div class="row mt16">
+ <label class="col-lg-3 o_light_label" string="Name" for="events_app_name"/>
+ <field name="events_app_name" attrs="{'required': [('website_id', '!=', False)]}"/>
+ </div>
+ </div>
+ </div>
+ </div>
+ </xpath>
+ </field>
+ </record>
+</odoo>
diff --git a/addons/website_event_track/views/website_templates.xml b/addons/website_event_track/views/website_templates.xml
new file mode 100644
index 00000000..30ef7902
--- /dev/null
+++ b/addons/website_event_track/views/website_templates.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<odoo>
+
+<template id="track_edit_options" inherit_id="website.user_navbar" name="Edit Track Options">
+ <xpath expr="//li[@id='edit-page-menu']" position="after">
+ <t t-if="main_object._name == 'event.track'" t-set="action" t-value="'website_event_track.action_event_track'" />
+ </xpath>
+</template>
+
+</odoo>
diff --git a/addons/website_event_track/views/website_visitor_views.xml b/addons/website_event_track/views/website_visitor_views.xml
new file mode 100644
index 00000000..171186d7
--- /dev/null
+++ b/addons/website_event_track/views/website_visitor_views.xml
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="utf-8"?>
+<odoo><data>
+
+ <record id="website_visitor_view_tree" model="ir.ui.view">
+ <field name="name">website.visitor.view.tree.inherit.event.track</field>
+ <field name="model">website.visitor</field>
+ <field name="inherit_id" ref="website_event.website_visitor_view_tree"/>
+ <field name="arch" type="xml">
+ <xpath expr="//field[@name='event_registration_count']" position="after">
+ <field name="event_track_wishlisted_count"/>
+ </xpath>
+ </field>
+ </record>
+
+ <record id="website_visitor_view_form" model="ir.ui.view">
+ <field name="name">website.visitor.view.form.inherit.event.track</field>
+ <field name="model">website.visitor</field>
+ <field name="inherit_id" ref="website_event.website_visitor_view_form"/>
+ <field name="arch" type="xml">
+ <xpath expr="//button[@id='w_visitor_visit_counter']" position="before">
+ <button name="%(website_event_track.event_track_action_from_visitor)d"
+ type="action"
+ class="oe_stat_button" icon="fa-ticket"
+ attrs="{'invisible': [('event_track_wishlisted_count', '=', 0)]}">
+ <field name="event_track_wishlisted_count" widget="statinfo" string="Tracks"/>
+ </button>
+ </xpath>
+ </field>
+ </record>
+
+ <record id="website_visitor_view_kanban" model="ir.ui.view">
+ <field name="name">website.visitor.view.kanban.inherit.event.track</field>
+ <field name="model">website.visitor</field>
+ <field name="inherit_id" ref="website_event.website_visitor_view_kanban"/>
+ <field name="arch" type="xml">
+ <field name="page_ids" position="after">
+ <field name="event_track_wishlisted_count"/>
+ </field>
+ <xpath expr="//div[@id='o_page_count']" position="after">
+ <div>Wishlisted Tracks<span class="float-right font-weight-bold"><field name="event_track_wishlisted_count"/></span></div>
+ </xpath>
+ <xpath expr="//div[hasclass('w_visitor_kanban_actions_ungrouped')]" position="before">
+ <div class="col">
+ <b><field name="event_track_wishlisted_count"/></b>
+ <div>Wishlisted Tracks</div>
+ </div>
+ </xpath>
+ </field>
+ </record>
+
+</data></odoo>