diff options
| author | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 21:51:50 +0700 |
|---|---|---|
| committer | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 21:51:50 +0700 |
| commit | 3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch) | |
| tree | a44932296ef4a9b71d5f010906253d8c53727726 /addons/website_event_track/views | |
| parent | 0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff) | |
initial commit 2
Diffstat (limited to 'addons/website_event_track/views')
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 <= 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 <= 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 <= tracks_date"> + <!-- Hour: Live > Remaining > Hour: mobile only --> + <div class="d-block d-md-none"> + <span t-if="track.partner_name" class="ml-2">&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">&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 <= 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 > 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"> + × + </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"> + × + </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>&nbsp;at&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', '<', 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', '>', 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> |
