Initial commit: Core packages

This commit is contained in:
Ernad Husremovic 2025-08-29 15:20:45 +02:00
commit 12c29a983b
9512 changed files with 8379910 additions and 0 deletions

View file

@ -0,0 +1,322 @@
<?xml version="1.0"?>
<odoo><data>
<record model="ir.ui.view" id="view_event_form">
<field name="name">event.event.form</field>
<field name="model">event.event</field>
<field name="arch" type="xml">
<form string="Events" class="o_event_form_view">
<header>
<field name="stage_id" widget="statusbar" options="{'clickable': '1'}"/>
</header>
<sheet>
<div class="oe_button_box" name="button_box" groups="base.group_user">
<button name="%(event.event_registration_action_stats_from_event)d"
type="action" class="oe_stat_button" icon="fa-line-chart">
<span class="o_stat_text">
Registration statistics
</span>
</button>
<button name="%(event.act_event_registration_from_event)d"
type="action"
context="{'search_default_expected': True}"
class="oe_stat_button"
icon="fa-users"
help="Total Registrations for this Event">
<field name="seats_expected" widget="statinfo" string="Attendees"/>
</button>
</div>
<field name="active" invisible="1"/>
<field name="company_id" invisible="1"/>
<field name="legend_blocked" invisible="1"/>
<field name="legend_normal" invisible="1"/>
<field name="legend_done" invisible="1"/>
<widget name="web_ribbon" text="Archived" bg_color="bg-danger" attrs="{'invisible': [('active', '=', True)]}"/>
<field name="kanban_state" widget="state_selection" class="ms-auto float-end"/>
<div class="oe_title">
<label for="name" string="Event Name"/>
<h1><field class="text-break" name="name" placeholder="e.g. Conference for Architects"/></h1>
</div>
<group>
<group>
<field name="active" invisible="1"/>
<label for="date_begin" string="Date"/>
<div class="o_row">
<field name="date_begin" widget="daterange" nolabel="1" class="oe_inline" options="{'related_end_date': 'date_end'}"/>
<i class="fa fa-long-arrow-right mx-2" aria-label="Arrow icon" title="Arrow"/>
<field name="date_end" widget="daterange" nolabel="1" class="oe_inline" options="{'related_start_date': 'date_begin'}"/>
</div>
<field name="date_tz"/>
<field name="event_type_id" string="Template" options="{'no_create':True}"/>
<field name="tag_ids" widget="many2many_tags" options="{'color_field': 'color', 'no_quick_create': True}"/>
</group>
<group name="right_event_details">
<field name="organizer_id"/>
<field name="user_id" domain="[('share', '=', False)]"/>
<field name="company_id" groups="base.group_multi_company"/>
<field name="address_id"
context="{'show_address': 1}"
options='{"always_reload": True}'/>
<label for="seats_limited" string="Limit Registrations"/>
<div>
<field name="seats_limited"/>
<span attrs="{'invisible': [('seats_limited', '=', False)], 'required': [('seats_limited', '=', False)]}">to <field name="seats_max" class="oe_inline o_input_9ch"/> Confirmed Attendees</span>
</div>
<field name="auto_confirm"/>
</group>
</group>
<notebook>
<page string="Tickets" name="tickets">
<field name="event_ticket_ids" context="{
'default_event_name': name,
'tree_view_ref': 'event.event_event_ticket_view_tree_from_event',
'form_view_ref': 'event.event_event_ticket_view_form_from_event',
'kanban_view_ref': 'event.event_event_ticket_view_kanban_from_event'}" mode="tree,kanban"/>
</page>
<page string="Communication" name="event_communication">
<field name="event_mail_ids">
<tree string="Communication" editable="bottom">
<field name="sequence" widget="handle"/>
<field name="notification_type"/>
<field name="template_model_id" invisible="1"/>
<field name="template_ref" options="{'hide_model': True, 'no_quick_create': True}" context="{'filter_template_on_event': True, 'default_model': 'event.registration'}"/>
<field name="interval_nbr" attrs="{'readonly':[('interval_unit','=','now')]}"/>
<field name="interval_unit"/>
<field name="interval_type"/>
<field name="scheduled_date" groups="base.group_no_one"/>
<field name="mail_count_done"/>
<field name="mail_state" widget="event_icon_selection" string=" " nolabel="1"
options="{'sent': 'fa fa-check', 'scheduled': 'fa fa-hourglass-half', 'running': 'fa fa-cogs'}"/>
</tree>
</field>
</page>
<page string="Notes" name="event_notes">
<group>
<label for="note" string="Note" />
<br />
<field nolabel="1" colspan="2" name="note"
placeholder="Add some internal notes (to do lists, contact info, ...)" />
<label for="ticket_instructions" string="Ticket Instructions" />
<br />
<field nolabel="1" colspan="2" name="ticket_instructions"
placeholder="e.g. How to get to your event, door closing time, ..." />
</group>
</page>
</notebook>
</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 model="ir.ui.view" id="view_event_tree">
<field name="name">event.event.tree</field>
<field name="model">event.event</field>
<field name="arch" type="xml">
<tree string="Events"
decoration-danger="(seats_max and seats_max&lt;seats_reserved)"
multi_edit="1"
sample="1">
<field name="name"/>
<field name="address_id" readonly="1"/>
<field name="organizer_id" readonly="1" optional="hide"/>
<field name="user_id" readonly="1" widget="many2one_avatar_user"/>
<field name="company_id" groups="base.group_multi_company" readonly="1" optional="show"/>
<field name="date_begin" readonly="1" widget="date"/>
<field name="date_end" readonly="1" widget="date"/>
<field name="tag_ids" widget="many2many_tags" options="{'color_field': 'color'}" optional="hide"/>
<field name="seats_expected" string="Expected Attendees" sum="Total" readonly="1"/>
<field name="seats_used" sum="Total" readonly="1"/>
<field name="seats_max" string="Maximum Seats" sum="Total" readonly="1" optional="hide"/>
<field name="seats_reserved" sum="Total" readonly="1" optional="hide"/>
<field name="seats_unconfirmed" string="Unconfirmed Seats" sum="Total" readonly="1" optional="hide"/>
<field name="stage_id" readonly="1"/>
<field name="message_needaction" invisible="1" readonly="1"/>
<field name="activity_exception_decoration" widget="activity_exception" readonly="1"/>
</tree>
</field>
</record>
<record id="event_event_view_form_quick_create" model="ir.ui.view">
<field name="name">event.event.form.quick_create</field>
<field name="model">event.event</field>
<field name="priority">1000</field>
<field name="arch" type="xml">
<form>
<group>
<field name="name" placeholder="e.g. Conference for Architects"/>
<label for="date_begin" string="Date"/>
<div class="o_row">
<field name="date_begin" widget="daterange" options="{'related_end_date': 'date_end'}"/>
<i class="fa fa-long-arrow-right mx-2" aria-label="Arrow icon" title="Arrow"/>
<field name="date_end" widget="daterange" options="{'related_start_date': 'date_begin'}"/>
</div>
</group>
</form>
</field>
</record>
<record model="ir.ui.view" id="view_event_kanban">
<field name="name">event.event.kanban</field>
<field name="model">event.event</field>
<field name="arch" type="xml">
<kanban class="o_event_kanban_view" default_group_by="stage_id" quick_create_view="event.event_event_view_form_quick_create" sample="1">
<field name="user_id"/>
<field name="name"/>
<field name="stage_id" options='{"group_by_tooltip": {"description": "Description"}}'/>
<field name="address_id"/>
<field name="date_begin"/>
<field name="date_end"/>
<field name="auto_confirm"/>
<field name="seats_unconfirmed"/>
<field name="seats_reserved"/>
<field name="seats_used"/>
<field name="seats_expected"/>
<field name="legend_blocked"/>
<field name="legend_normal"/>
<field name="legend_done"/>
<field name="activity_ids"/>
<field name="activity_state"/>
<templates>
<t t-name="kanban-box">
<div t-attf-class="d-flex flex-column p-0 oe_kanban_card oe_kanban_global_click">
<div class="o_kanban_content p-0 m-0 position-relative row d-flex flex-fill">
<div class="col-3 text-bg-primary p-2 text-center d-flex flex-column justify-content-center">
<div t-esc="luxon.DateTime.fromISO(record.date_begin.raw_value).toFormat('d')" class="o_event_fontsize_20"/>
<div>
<t t-esc="luxon.DateTime.fromISO(record.date_begin.raw_value).toFormat('MMM yyyy')"/>
</div>
<div><t t-esc="luxon.DateTime.fromISO(record.date_begin.raw_value).toFormat('t')"/></div>
<div t-if="record.date_begin.raw_value !== record.date_end.raw_value">
<i class="fa fa-arrow-right me-2 o_event_fontsize_09" title="End date"/>
<t t-esc="luxon.DateTime.fromISO(record.date_end.raw_value).toFormat('d MMM')"/>
</div>
</div>
<div class="col-9 py-2 px-3 d-flex flex-column justify-content-between pt-3">
<div>
<div class="o_kanban_record_title o_text_overflow" t-att-title="record.name.value">
<field name="name"/>
</div>
<div t-if="record.address_id.value" class="d-flex">
<i class="fa fa-map-marker mt-1 me-1" title="Location"/>
<span t-esc="record.address_id.value"/>
</div>
</div>
<h5 class="o_event_fontsize_11 p-0">
<a name="%(event_registration_action_stats_from_event)d"
type="action"
context="{'search_default_expected': True}">
<t t-esc="record.seats_expected.raw_value"/> Expected attendees
</a>
<t t-set="total_seats" t-value="record.seats_reserved.raw_value + record.seats_used.raw_value"/>
<div class="pt-2 pt-md-0" t-if="total_seats > 0 and ! record.auto_confirm.raw_value"><br/>
<a class="ps-2" name="%(event_registration_action_stats_from_event)d" type="action" context="{'search_default_confirmed': True}">
<i class="fa fa-level-up fa-rotate-90" title="Confirmed"/><span class="ps-2"><t t-esc="total_seats"/> Confirmed</span>
</a>
</div>
</h5>
<div class="o_kanban_record_bottom">
<div class="oe_kanban_bottom_left">
<field name="activity_ids" widget="kanban_activity"/>
</div>
<div class="oe_kanban_bottom_right">
<field name="kanban_state" widget="state_selection"/>
<field name="user_id" widget="many2one_avatar_user"/>
</div>
</div>
</div>
</div>
</div>
</t>
</templates>
</kanban>
</field>
</record>
<record model="ir.ui.view" id="view_event_calendar">
<field name="name">event.event.calendar</field>
<field name="model">event.event</field>
<field eval="2" name="priority"/>
<field name="arch" type="xml">
<calendar date_start="date_begin" date_stop="date_end" string="Event Organization" mode="month" color="event_type_id" event_limit="5">
<field name="user_id" avatar_field="avatar_128"/>
<field name="seats_expected"/>
<field name="seats_reserved"/>
<field name="seats_used"/>
<field name="seats_unconfirmed"/>
<field name="event_type_id" filters="1" invisible="1"/>
</calendar>
</field>
</record>
<record model="ir.ui.view" id="view_event_search">
<field name="name">event.event.search</field>
<field name="model">event.event</field>
<field name="arch" type="xml">
<search string="Events">
<field name="name" string="Event"/>
<field name="event_type_id"/>
<field name="user_id"/>
<field name="address_search"/>
<field name="stage_id"/>
<filter string="My Events" name="myevents" help="My Events" domain="[('user_id', '=', uid)]"/>
<separator/>
<filter string="Upcoming/Running" name="upcoming"
domain="[('date_end', '&gt;=', datetime.datetime.combine(context_today(), datetime.time(0,0,0)))]" help="Upcoming events from today" />
<separator/>
<filter string="Start Date" name="start_date" date="date_begin"/>
<separator/>
<filter string="Archived" name="filter_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="Template" name="event_type_id" context="{'group_by': 'event_type_id'}"/>
<!--
TODO the "groups" attribute is not directly useful here: the
whole event app is supposed to be hidden for those lambda
non-"event users". However, this view is also used in the
website builder, where we do want normal website users to
access events views. This should be reviewed in master.
This was mostly made to avoid runbot "errors".
See WEBSITE_RECORDS_VIEWS_ACCESS_RIGHTS.
-->
<filter string="Stage" name="stage_id" context="{'group_by': 'stage_id'}" groups="event.group_event_registration_desk"/>
<filter string="Start Date" name="date_begin" domain="[]" context="{'group_by': 'date_begin'}"/>
</group>
</search>
</field>
</record>
<!-- EVENT.EVENT VIEWS -->
<record model="ir.actions.act_window" id="action_event_view">
<field name="name">Events</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">event.event</field>
<field name="view_mode">kanban,calendar,tree,form,pivot,graph</field>
<field name="search_view_id" ref="view_event_search"/>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Create an Event
</p><p>
Schedule and organize your events: handle registrations, send automated confirmation emails, sell tickets, etc.
</p>
</field>
</record>
<record id="event.menu_event_event" model="ir.ui.menu">
<field name="action" ref="event.action_event_view"/>
</record>
</data></odoo>

View file

@ -0,0 +1,76 @@
<?xml version="1.0"?>
<odoo><data>
<!-- EVENT.MAIL VIEWS -->
<record model="ir.ui.view" id="view_event_mail_form">
<field name="name">event.mail.form</field>
<field name="model">event.mail</field>
<field name="arch" type="xml">
<form string="Event Mail Scheduler">
<sheet>
<group>
<group>
<field name="event_id"/>
<field name="notification_type"/>
<field name="template_ref" options="{'hide_model': True, 'no_quick_create': True}" context="{'filter_template_on_event': True, 'default_model': 'event.registration'}"/>
<field name="mail_state"/>
</group>
<group>
<label for="interval_nbr"/>
<div class="o_row">
<field name="interval_nbr" attrs="{'invisible': [('interval_unit', '=', 'now')], 'readonly': [('interval_unit', '=', 'now')]}"/>
<field name="interval_unit"/>
</div>
<field name="interval_type"/>
<field name="scheduled_date"/>
</group>
</group>
<notebook groups="base.group_no_one">
<page string="Registration Mails" name="registration_mails">
<field name="mail_registration_ids">
<tree string="Registration mail" editable="bottom">
<field name="registration_id"/>
<field name="scheduled_date"/>
<field name="mail_sent" string="Sent"/>
</tree>
</field>
</page>
</notebook>
</sheet>
</form>
</field>
</record>
<record model="ir.ui.view" id="view_event_mail_tree">
<field name="name">event.mail.tree</field>
<field name="model">event.mail</field>
<field name="arch" type="xml">
<tree string="Event Mail Schedulers">
<field name="event_id"/>
<field name="notification_type"/>
<field name="template_ref" options="{'hide_model': True, 'no_quick_create': True}" context="{'filter_template_on_event': True, 'default_model': 'event.registration'}"/>
<field name="scheduled_date"/>
<field name="mail_count_done"/>
<field name="mail_state" widget="event_icon_selection" string=" " nolabel="1"
options="{'sent': 'fa fa-check', 'scheduled': 'fa fa-hourglass-half', 'running': 'fa fa-cogs'}"/>
</tree>
</field>
</record>
<record model="ir.actions.act_window" id="action_event_mail">
<field name="name">Events Mail Schedulers</field>
<field name="res_model">event.mail</field>
<field name="context">{'create': False}</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Nothing Scheduled yet!
</p><p>
Under this technical menu you will find all scheduled communication related to your events.
</p>
</field>
</record>
<record id="menu_event_mail_schedulers" model="ir.ui.menu">
<field name="action" ref="event.action_event_mail"/>
</record>
</data></odoo>

View file

@ -0,0 +1,49 @@
<?xml version="1.0"?>
<odoo><data>
<!-- MAIN MENU -->
<menuitem name="Events"
id="event_main_menu"
sequence="125"
groups="event.group_event_registration_desk"
web_icon="event,static/description/icon.svg"/>
<!-- HEADER: EVENTS -->
<menuitem name="Events"
id="menu_event_event"
sequence="1"
parent="event.event_main_menu"
groups="event.group_event_registration_desk"/>
<!-- HEADER: REPORTING -->
<menuitem name="Reporting"
id="menu_reporting_events"
sequence="50"
parent="event_main_menu"
groups="event.group_event_user"/>
<!-- HEADER: CONFIGURATION -->
<menuitem name="Configuration"
id="menu_event_configuration"
sequence="99"
parent="event_main_menu"
groups="event.group_event_user"/>
<menuitem name="Event Templates"
id="menu_event_type"
sequence="1"
parent="menu_event_configuration"/>
<menuitem name="Event Stages"
id="event_stage_menu"
sequence="2"
parent="menu_event_configuration"/>
<menuitem name="Mail Schedulers"
id="menu_event_mail_schedulers"
sequence="10"
parent="menu_event_configuration"
groups="base.group_no_one"/>
<menuitem name="Event Tags Categories"
id="menu_event_category"
sequence="3"
parent="menu_event_configuration"/>
</data></odoo>

View file

@ -0,0 +1,381 @@
<?xml version="1.0"?>
<odoo><data>
<!-- EVENT.REGISTRATION VIEWS -->
<record model="ir.ui.view" id="view_event_registration_tree">
<field name="name">event.registration.tree</field>
<field name="model">event.registration</field>
<field name="arch" type="xml">
<tree string="Registration" multi_edit="1" sample="1"
expand="1" default_order="create_date desc"
class="o_event_registration_view_tree">
<field name="active" invisible="1"/>
<field name="create_date" optional="show" string="Registration Date"/>
<field name="name"/>
<field name="partner_id" optional="hide"/>
<field name="email" optional="show"/>
<field name="phone" optional="show"/>
<field name="mobile" optional="hide"/>
<field name="event_id" invisible="context.get('default_event_id')"/>
<field name="event_ticket_id" domain="[('event_id', '=', event_id)]"/>
<field name="activity_ids" widget="list_activity"/>
<field name="state" decoration-info="state in ('draft', 'open')"
decoration-success="state == 'done'"
decoration-muted="state == 'cancel'" widget="badge"/>
<field name="company_id" groups="base.group_multi_company" optional="hide"/>
<field name="message_needaction" invisible="1"/>
<button name="action_confirm" string="Confirm" type="object" icon="fa-check"
attrs="{'invisible': ['|', ('active', '=', False), ('state', '!=', 'draft')]}"/>
<button name="action_set_done" string="Mark as Attending" type="object" icon="fa-level-down"
attrs="{'invisible': ['|', ('active', '=', False), ('state', '!=', 'open')]}"/>
<button name="action_cancel" string="Cancel" type="object"
class="o_btn_cancel_registration" icon="fa-times"
attrs="{'invisible': ['|', ('active', '=', False), '&amp;', ('state', '!=', 'open'), ('state', '!=', 'draft')]}"/>
<field name="activity_exception_decoration" widget="activity_exception"/>
</tree>
</field>
</record>
<record model="ir.ui.view" id="view_event_registration_form">
<field name="name">event.registration.form</field>
<field name="model">event.registration</field>
<field name="arch" type="xml">
<form string="Event Registration">
<field name="active" invisible="1"/>
<header>
<button name="action_send_badge_email" string="Send by Email" type="object" class="oe_highlight"
attrs="{'invisible': ['|', ('active', '=', False), '&amp;', ('state', '!=', 'open'), ('state', '!=', 'done')]}"/>
<button name="action_confirm" string="Confirm" type="object" class="oe_highlight"
attrs="{'invisible': ['|', ('active', '=', False), ('state', '!=', 'draft')]}"/>
<button name="action_set_done" string="Attended" type="object" class="oe_highlight"
attrs="{'invisible': ['|', ('active', '=', False), ('state', '!=', 'open')]}"/>
<button name="action_set_draft" string="Set To Unconfirmed" type="object"
attrs="{'invisible': ['|', ('active', '=', False), '&amp;', ('state', '!=', 'cancel'), ('state', '!=', 'done')]}"/>
<button name="action_cancel" string="Cancel Registration" type="object"
attrs="{'invisible': ['|', ('active', '=', False), '&amp;', ('state', '!=', 'open'), ('state', '!=', 'draft')]}"/>
<field name="state" nolabel="1" colspan="2" widget="statusbar" statusbar_visible="draft,open,done"/>
</header>
<sheet string="Registration">
<div class="oe_button_box" name="button_box"/>
<widget name="web_ribbon" text="Archived" bg_color="bg-danger" attrs="{'invisible': [('active', '=', True)]}"/>
<group>
<group string="Attendee" name="attendee">
<field class="o_text_overflow" name="name"/>
<field name="email"/>
<field name="phone" class="o_force_ltr" widget="phone" options="{'enable_sms': false}"/>
<field name="mobile" class="o_force_ltr" widget="phone"/>
</group>
<group string="Event Information" name="event">
<field class="text-break" name="event_id" attrs="{'readonly': [('state', '!=', 'draft')]}"
context="{'name_with_seats_availability': True}" options="{'no_create': True}"/>
<field name="event_ticket_id" attrs="{'invisible': [('event_id', '=', False)]}"
context="{'name_with_seats_availability': True}" options="{'no_open': True, 'no_create': True}"
domain="[('event_id', '=', event_id)]"/>
<field name="partner_id"/>
<field name="create_date" string="Registration Date" groups="base.group_no_one"/>
<field name="date_closed" groups="base.group_no_one"/>
</group>
<group string="Marketing" name="utm_link" groups="base.group_no_one">
<field name="utm_campaign_id"/>
<field name="utm_medium_id"/>
<field name="utm_source_id"/>
</group>
</group>
</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 id="event_registration_view_kanban" model="ir.ui.view">
<field name="name">event.registration.kanban</field>
<field name="model">event.registration</field>
<field name="priority">10</field>
<field name="arch" type="xml">
<kanban class="o_event_attendee_kanban_view" default_order="name, create_date desc" sample="1">
<field name="name"/>
<field name="partner_id"/>
<field name="state"/>
<field name="email"/>
<field name="event_ticket_id"/>
<field name="active" invisible="1"/>
<templates>
<t t-name="event_attendees_kanban_icons_desktop">
<div class="d-none d-md-block h-100">
<div id="event_attendees_kanban_icons_desktop" class="h-100 float-end p-2 d-flex align-items-end flex-column">
<t t-if="record.active.raw_value">
<a class="btn btn-md btn-primary" string="Confirm Registration" name="action_confirm" type="object" states="draft" role="button">
<i class="fa fa-check" role="img" aria-label="Confirm button" title="Confirm Registration"/>
</a>
<a class="btn btn-md btn-primary" string="Confirm Attendance" name="action_set_done" type="object" states="open" role="button">
<i class="fa fa-user-plus" role="img" aria-label="Attended button" title="Confirm Attendance"/>
</a>
<span class="text-muted" states="done">Attended</span>
<span class="text-muted" states="cancel">Canceled</span>
</t>
</div>
</div>
</t>
<t t-name="event_attendees_kanban_icons_mobile">
<div id="event_attendees_kanban_icons_mobile" class="d-md-none h-100 ps-4">
<t t-if="record.active.raw_value">
<a class="btn btn-primary d-flex justify-content-center align-items-center h-100 w-100"
string="Confirm Registration" name="action_confirm" type="object" states="draft" role="button">
<i class="fa fa-check fa-3x" role="img" aria-label="Confirm button" title="Confirm Registration"/>
</a>
<a class="btn btn-primary d-flex justify-content-center align-items-center h-100 w-100"
string="Confirm Attendance" name="action_set_done" type="object" states="open" role="button">
<i class="fa fa-user-plus fa-3x" role="img" aria-label="Attended button" title="Confirm Attendance"/>
</a>
<div class="d-flex justify-content-center align-items-center h-100 w-100">
<span class="text-muted" states="done" >Attended</span>
<span class="text-muted" states="cancel" >Canceled</span>
</div>
</t>
</div>
</t>
<t t-name="kanban-box">
<div t-attf-class="#{!record.active.raw_value ? 'oe_kanban_card_ribbon' : ''} oe_kanban_global_click o_event_registration_kanban container-fluid p-0">
<div t-if="!record.active.raw_value" class="ribbon ribbon-top-right">
<span class="bg-danger">Archived</span>
</div>
<div class="row h-100">
<div class="col-9 pe-0">
<div class="oe_kanban_content h-100">
<div class="o_kanban_record_body pt-1 ps-2 h-100 d-flex flex-column">
<b class="o_kanban_record_title"><field name="name"/></b>
<field class="o_text_overflow" name="event_id" invisible="context.get('default_event_id')" />
<span class="o_text_overflow" attrs="{'invisible': [('partner_id', '=', False)]}">Booked by <field name="partner_id" /></span>
<div id="event_ticket_id" class="o_field_many2manytags o_field_widget d-flex mt-auto">
<t t-if="record.event_ticket_id.raw_value">
<div t-attf-class="badge rounded-pill o_tag_color_#{(record.event_ticket_id.raw_value % 11) + 1}" >
<b><span class="o_badge_text o_text_overflow"><t t-out="record.event_ticket_id.value"/></span></b>
</div>
</t>
</div>
</div>
</div>
</div>
<div id="event_attendees_kanban_icons" class="col-3 ps-0">
<t t-call="event_attendees_kanban_icons_desktop"/>
<t t-call="event_attendees_kanban_icons_mobile"/>
</div>
</div>
</div>
</t>
</templates>
</kanban>
</field>
</record>
<record id="view_event_registration_calendar" model="ir.ui.view">
<field name="name">event.registration.calendar</field>
<field name="model">event.registration</field>
<field eval="2" name="priority"/>
<field name="arch" type="xml">
<calendar date_start="event_begin_date" date_stop="event_end_date" string="Event Registration" color="event_id" event_limit="5">
<field name="event_id" filters="1"/>
<field name="name"/>
</calendar>
</field>
</record>
<record model="ir.ui.view" id="view_event_registration_pivot">
<field name="name">event.registration.pivot</field>
<field name="model">event.registration</field>
<field name="arch" type="xml">
<pivot string="Registration" display_quantity="1" sample="1">
<field name="event_id" type="row"/>
</pivot>
</field>
</record>
<record model="ir.ui.view" id="view_event_registration_graph">
<field name="name">event.registration.graph</field>
<field name="model">event.registration</field>
<field name="arch" type="xml">
<graph string="Registration" sample="1">
<field name="event_id"/>
</graph>
</field>
</record>
<record model="ir.ui.view" id="view_registration_search">
<field name="name">event.registration.search</field>
<field name="model">event.registration</field>
<field name="arch" type="xml">
<search string="Event Registration">
<field name="id" string="Registration ID"/>
<field name="event_id"/>
<field name="event_user_id" string="Responsible"/>
<field name="event_organizer_id" string="Organizer"/>
<field name="name" string="Participant" filter_domain="['|', ('name', 'ilike', self), ('email', 'ilike', self)]"/>
<filter string="Ongoing Events" name="filter_is_ongoing" domain="[('event_id.is_ongoing', '=', True)]"/>
<filter string="Expected" name="expected" domain="[('state', 'in', ['draft', 'open', 'done'])]"/>
<separator/>
<filter string="Unconfirmed" name="unconfirmed" domain="[('state', '=', 'draft')]"/>
<filter string="Confirmed" name="confirmed" domain="[('state', '=', 'open')]"/>
<filter string="Attended" name="attended" domain="[('state', '=', 'done')]"/>
<separator/>
<filter string="Registration Date" name="filter_create_date" date="create_date"/>
<filter string="Event Start Date" name="filter_event_begin_date" date="event_begin_date"/>
<filter string="Attended Date" name="filter_date_closed" date="date_closed"/>
<field name="partner_id"/>
<field name="company_id"/>
<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'))]"/>
<filter string="Last 30 days" name="filter_last_month_creation" domain="[('create_date','&gt;', (context_today() - datetime.timedelta(days=30)).strftime('%Y-%m-%d'))]"/>
<separator/>
<filter string="Archived" name="filter_inactive" domain="[('active', '=', False)]"/>
<group expand="0" string="Group By">
<filter string="Partner" name="partner" domain="[]" context="{'group_by':'partner_id'}"/>
<filter string="Event" name="group_event" domain="[]" context="{'group_by':'event_id'}"/>
<filter string="Ticket Type" name ="group_event_ticket_id" domain="[]" context="{'group_by': 'event_ticket_id'}"/>
<filter string="Status" name="status" domain="[]" context="{'group_by':'state'}"/>
<filter string="Registration Date" name="group_by_create_date_week" domain="[]" context="{'group_by': 'create_date:week'}"
invisible="context.get('registration_view_hide_group_by_create_date_week')"/>
<filter string="Registration Date" name="group_by_create_date_day" domain="[]" context="{'group_by': 'create_date:day'}"
invisible="not context.get('registration_view_hide_group_by_create_date_week')"/>
<filter string="Campaign" name="group_by_utm_campaign_id" domain="[]"
context="{'group_by': 'utm_campaign_id'}"/>
<filter string="Medium" name="group_by_utm_medium_id" domain="[]"
context="{'group_by': 'utm_medium_id'}"/>
<filter string="Source" name="group_by_utm_source_id" domain="[]"
context="{'group_by': 'utm_source_id'}"/>
</group>
</search>
</field>
</record>
<!-- Search view typically used when coming from a specific event, meaning we don't need event-related fields -->
<record id="event_registration_view_search_event_specific" model="ir.ui.view">
<field name="name">event.registration.view.search.event.specific</field>
<field name="model">event.registration</field>
<field name="inherit_id" ref="view_registration_search"/>
<field name="mode">primary</field>
<field name="priority">32</field>
<field name="arch" type="xml">
<xpath expr="//search/field[@name='event_id']" position="replace"/>
<xpath expr="//search/field[@name='event_user_id']" position="replace"/>
<xpath expr="//search/field[@name='event_organizer_id']" position="replace"/>
<xpath expr="//search/filter[@name='filter_is_ongoing']" position="replace"/>
<xpath expr="//search/group/filter[@name='group_event']" position="replace"/>
</field>
</record>
<!-- EVENT.REGISTRATION ACTIONS -->
<record id="act_event_registration_from_event" model="ir.actions.act_window">
<field name="res_model">event.registration</field>
<field name="name">Attendees</field>
<field name="view_mode">tree,kanban,form,calendar,graph</field>
<field name="domain">[('event_id', '=', active_id)]</field>
<field name="context">{'default_event_id': active_id, 'name_with_seats_availability': True}</field>
<field name="search_view_id" ref="event_registration_view_search_event_specific"/>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
No Attendees yet!
</p><p>
Wait until Attendees register to your Event or create their registrations manually.
</p>
</field>
</record>
<!-- We need kanban view to be displayed first while coming from registration desk, so we have created
new action and changed the view sequence. -->
<record id="event_registration_action_kanban" model="ir.actions.act_window">
<field name="res_model">event.registration</field>
<field name="name">Attendees</field>
<field name="view_mode">kanban,tree,form,calendar,graph</field>
<field name="domain">[('event_id', '=', active_id)]</field>
<field name="context">{'default_event_id': active_id}</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
No Attendees yet!
</p><p>
Wait until Attendees register to your Event or create their registrations manually.
</p>
</field>
</record>
<record id="event_registration_action" model="ir.actions.act_window">
<field name="res_model">event.registration</field>
<field name="name">Attendees</field>
<field name="view_mode">kanban,tree,form,calendar,graph</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
No Attendees expected yet!
</p><p>
Wait until Attendees register to your Event or create their registrations manually.
</p>
</field>
</record>
<record id="event_registration_action_tree" model="ir.actions.act_window">
<field name="name">Event registrations</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">event.registration</field>
<field name="view_mode">tree,kanban,form,calendar,graph</field>
</record>
<record id="action_registration" model="ir.actions.act_window">
<field name="name">Attendees</field>
<field name="res_model">event.registration</field>
<field name="domain"></field>
<field name="view_mode">graph,pivot,kanban,tree,form</field>
<field name="context">{
'search_default_filter_last_month_creation': 1,
'search_default_status': 2,
'search_default_group_by_create_date_day': 3,
'search_default_group_event': 1,
'registration_view_hide_group_by_create_date_week': 1,
}
</field>
<field name="search_view_id" ref="view_registration_search"/>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
No Attendees yet!
</p><p>
From this dashboard you can report, analyze and detect trends regarding your event registrations.
</p>
</field>
</record>
<record id="event_registration_action_stats_from_event" model="ir.actions.act_window">
<field name="name">Registration statistics</field>
<field name="res_model">event.registration</field>
<field name="view_mode">graph,pivot,kanban,tree,form</field>
<field name="domain">[('event_id', '=', active_id)]</field>
<field name="context">{
'default_event_id': active_id,
'search_default_group_by_create_date_day': 1,
'search_default_status': 2,
'registration_view_hide_group_by_create_date_week': 1,
}
</field>
<field name="search_view_id" ref="event_registration_view_search_event_specific"/>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
No Attendees yet!
</p><p>
From this dashboard you can report, analyze and detect trends regarding your event registrations.
</p>
</field>
</record>
<menuitem name="Attendees"
id="menu_action_registration"
parent="event.menu_reporting_events"
sequence="4"
action="action_registration"
groups="event.group_event_user"/>
</data></odoo>

View file

@ -0,0 +1,71 @@
<?xml version="1.0"?>
<odoo>
<data>
<record id="event_stage_view_form" model="ir.ui.view">
<field name="name">event.stage.view.form</field>
<field name="model">event.stage</field>
<field name="arch" type="xml">
<form string="Events Stage">
<sheet>
<group>
<group>
<field name="name"/>
<field name="pipe_end"/>
</group>
<group>
<field name="fold"/>
<field name="sequence"/>
</group>
</group>
<group string="Stage Description and Tooltips">
<p class="text-muted" colspan="2">
You can define here labels that will be displayed for the state instead
of the default labels in the kanban view.
</p>
<label for="legend_normal" string=" " class="o_status " title="Task in progress. Click to block or set as done." aria-label="Task in progress. Click to block or set as done." role="img"/>
<field name="legend_normal" nolabel="1"/>
<label for="legend_blocked" string=" " class="o_status o_status_red" title="Task is blocked. Click to unblock or set as done." aria-label="Task is blocked. Click to unblock or set as done." role="img"/>
<field name="legend_blocked" nolabel="1"/>
<label for="legend_done" string=" " class="o_status o_status_green" title="This step is done. Click to block or set in progress." aria-label="This step is done. Click to block or set in progress." role="img"/>
<field name="legend_done" nolabel="1"/>
<p class="text-muted" colspan="2">
You can also add a description to help your coworkers understand the meaning and purpose of the stage.
</p>
<field name="description" placeholder="Add a description..." nolabel="1" colspan="2"/>
</group>
</sheet>
</form>
</field>
</record>
<record id="event_stage_view_tree" model="ir.ui.view">
<field name="name">event.stage.view.tree</field>
<field name="model">event.stage</field>
<field name="arch" type="xml">
<tree string="Events Stage">
<field name="sequence" widget="handle"/>
<field name="name"/>
</tree>
</field>
</record>
<record id="event_stage_action" model="ir.actions.act_window">
<field name="name">Event Stages</field>
<field name="res_model">event.stage</field>
<field name="view_mode">tree,form</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Create an Event Stage
</p><p>
Event stages are used to track the progress of an Event from its origin until its conclusion.
</p>
</field>
</record>
<record id="event_stage_menu" model="ir.ui.menu">
<field name="action" ref="event.event_stage_action"/>
</record>
</data>
</odoo>

View file

@ -0,0 +1,88 @@
<?xml version="1.0"?>
<odoo>
<data>
<!-- EVENT.TAG.CATEGORY VIEWS -->
<record id="event_tag_category_view_tree" model="ir.ui.view">
<field name="name">event.tag.category.view.tree</field>
<field name="model">event.tag.category</field>
<field name="arch" type="xml">
<tree string="Event 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_tag_category_view_form" model="ir.ui.view">
<field name="name">event.tag.category.view.form</field>
<field name="model">event.tag.category</field>
<field name="arch" type="xml">
<form string="Event Category">
<sheet>
<div class="oe_title">
<h1><field nolabel="1" name="name"/></h1>
</div>
<group>
<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_tag_category_action_tree" model="ir.actions.act_window" >
<field name="name">Event Tags Categories</field>
<field name="res_model">event.tag.category</field>
<field name="view_mode">tree,form</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Create an Event Tag Category
</p><p>
Use Event Tag Categories to classify and organize your event tags.
</p>
</field>
</record>
<!-- EVENT.TAG VIEWS -->
<record id="event_tag_view_tree" model="ir.ui.view">
<field name="name">event.tag.view.tree</field>
<field name="model">event.tag</field>
<field name="arch" type="xml">
<tree string="Event Tags Categories">
<field name="sequence" widget="handle"/>
<field name="name"/>
<field name="category_id"/>
<field name="color" widget="color_picker"/>
</tree>
</field>
</record>
<record id="event_tag_view_form" model="ir.ui.view">
<field name="name">event.tag.view.form</field>
<field name="model">event.tag</field>
<field name="arch" type="xml">
<form string="Event Category Tag">
<sheet>
<group>
<field name="name"/>
<field name="category_id" widget="many2one"/>
<field name="color" widget="color_picker"/>
</group>
</sheet>
</form>
</field>
</record>
<record id="menu_event_category" model="ir.ui.menu">
<field name="action" ref="event.event_tag_category_action_tree"/>
</record>
</data>
</odoo>

View file

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
</data>
<template id="event_default_descripton" name="Event default description">
<section class="s_text_block">
<h5>Join us for this 24 hours Event</h5>
<p>Every year we invite our community, partners and end-users to come and meet us! It's the ideal event to get together and present new features, roadmap of future versions, achievements of the software, workshops, training sessions, etc...
This event is also an opportunity to showcase our partners' case studies, methodology or developments. Be there and see directly from the source the features of the new version!</p>
</section>
</template>
</odoo>

View file

@ -0,0 +1,182 @@
<?xml version="1.0"?>
<odoo><data>
<!-- EVENT.TYPE.TICKET -->
<record id="event_type_ticket_view_tree_from_type" model="ir.ui.view">
<field name="name">event.type.ticket.view.tree.from.type</field>
<field name="model">event.type.ticket</field>
<field name="priority" eval="20"/>
<field name="arch" type="xml">
<tree string="Event Template Tickets" editable="bottom">
<field name="name"/>
<field name="description"/>
<field name="seats_max"/>
<field name="seats_limited"/>
</tree>
</field>
</record>
<record id="event_type_ticket_view_form_from_type" model="ir.ui.view">
<field name="name">event.type.ticket.view.form.from.type</field>
<field name="model">event.type.ticket</field>
<field name="priority" eval="20"/>
<field name="arch" type="xml">
<form string="Event Template Ticket">
<sheet>
<group>
<field name="name"/>
<field name="description"/>
<field name="seats_limited"/>
<field name="seats_max"/>
</group>
</sheet>
</form>
</field>
</record>
<record id="event_type_ticket_view_tree" model="ir.ui.view">
<field name="name">event.type.ticket.view.tree</field>
<field name="model">event.type.ticket</field>
<field name="inherit_id" ref="event_type_ticket_view_tree_from_type"/>
<field name="mode">primary</field>
<field name="priority" eval="10"/>
<field name="arch" type="xml">
<xpath expr="//tree" position="attributes">
<attribute name="editable"></attribute>
</xpath>
<xpath expr="//field[@name='name']" position="after">
<field name="event_type_id"/>
</xpath>
</field>
</record>
<record id="event_type_ticket_view_form" model="ir.ui.view">
<field name="name">event.type.ticket.view.form</field>
<field name="model">event.type.ticket</field>
<field name="inherit_id" ref="event_type_ticket_view_form_from_type"/>
<field name="mode">primary</field>
<field name="priority" eval="10"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='name']" position="after">
<field name="event_type_id"/>
</xpath>
</field>
</record>
<!-- EVENT.TICKET -->
<record id="event_event_ticket_view_tree_from_event" model="ir.ui.view">
<field name="name">event.event.ticket.view.tree.from.event</field>
<field name="model">event.event.ticket</field>
<field name="priority" eval="20"/>
<field name="arch" type="xml">
<tree string="Tickets" editable="bottom">
<field name="name"/>
<field name="description" optional="hide"/>
<field name="start_sale_datetime" optional="show"/>
<field name="end_sale_datetime" optional="show"/>
<field name="seats_max" sum="Total" width="105px" string="Maximum"/>
<field name="seats_reserved" sum="Total" width="105px" string="Confirmed"/>
<field name="seats_unconfirmed" sum="Total" width="110px" string="Unconfirmed"/>
</tree>
</field>
</record>
<record id="event_event_ticket_view_form_from_event" model="ir.ui.view">
<field name="name">event.event.ticket.view.form.from.event</field>
<field name="model">event.event.ticket</field>
<field name="priority" eval="20"/>
<field name="arch" type="xml">
<form string="Ticket">
<sheet>
<group>
<group>
<field name="name"/>
<field name="description"/>
<field name="start_sale_datetime"/>
<field name="end_sale_datetime"/>
</group><group>
<field name="seats_max"/>
<field name="seats_reserved"/>
<field name="seats_unconfirmed"/>
</group>
</group>
</sheet>
</form>
</field>
</record>
<record id="event_event_ticket_view_kanban_from_event" model="ir.ui.view">
<field name="name">event.event.ticket.view.kanban.from.event</field>
<field name="model">event.event.ticket</field>
<field name="priority" eval="20"/>
<field name="arch" type="xml">
<kanban class="o_kanban_mobile">
<field name="name"/>
<field name="seats_max"/>
<field name="seats_reserved"/>
<field name="seats_unconfirmed"/>
<templates>
<t t-name="kanban-box">
<div t-attf-class="oe_kanban_card oe_kanban_global_click">
<div class="row">
<div class="col-8">
<strong><t t-out="record.name.value"/></strong>
</div>
</div>
<div><i>
<t t-out="record.seats_reserved.value"/> reserved + <t t-out="record.seats_reserved.value"/> unconfirmed
</i></div>
</div>
</t>
</templates>
</kanban>
</field>
</record>
<record id="event_event_ticket_view_tree" model="ir.ui.view">
<field name="name">event.event.ticket.view.tree</field>
<field name="model">event.event.ticket</field>
<field name="inherit_id" ref="event_event_ticket_view_tree_from_event"/>
<field name="mode">primary</field>
<field name="priority" eval="10"/>
<field name="arch" type="xml">
<xpath expr="//tree" position="attributes">
<attribute name="editable"></attribute>
</xpath>
<field name="name" position="after">
<field name="event_id"/>
</field>
</field>
</record>
<record id="event_event_ticket_form_view" model="ir.ui.view">
<field name="name">event.event.ticket.view.form</field>
<field name="model">event.event.ticket</field>
<field name="arch" type="xml">
<form string="Event's Ticket">
<sheet>
<div class="oe_title">
<label for="name" string="Ticket Type"/>
<h1><field name="name" placeholder="e.g. VIP Ticket"/></h1>
</div>
<group>
<group>
<field name="event_id"/>
<field name="seats_limited"/>
<field name="seats_available"/>
<field name="start_sale_datetime"/>
<field name="end_sale_datetime"/>
</group>
<group>
<field name="seats_max"/>
<field name="seats_reserved"/>
<field name="seats_unconfirmed"/>
<field name="seats_used"/>
<field name="is_expired"/>
</group>
</group>
</sheet>
</form>
</field>
</record>
</data></odoo>

View file

@ -0,0 +1,112 @@
<?xml version="1.0"?>
<odoo><data>
<!-- EVENT.TYPE VIEWS -->
<record model="ir.ui.view" id="view_event_type_form">
<field name="name">event.type.form</field>
<field name="model">event.type</field>
<field name="arch" type="xml">
<form string="Event Category">
<sheet>
<div class="oe_title" name="event_type_title">
<label for="name" string="Event Template"/>
<h1><field name="name" placeholder="e.g. Online Conferences" class="mb-2"/></h1>
</div>
<group>
<group>
<field name="default_timezone" class="w-100"/>
<field name="tag_ids" widget="many2many_tags" options="{'color_field': 'color', 'no_quick_create': True}"/>
</group>
<group>
<label for="has_seats_limitation" string="Limit Registrations"/>
<div>
<field name="has_seats_limitation"/>
<span attrs="{'invisible': [('has_seats_limitation', '=', False)], 'required': [('has_seats_limitation', '=', False)]}">
to <field name="seats_max" class="oe_inline o_input_9ch"/>
Confirmed Attendees
</span>
</div>
<label for="auto_confirm" string="Autoconfirmation"/>
<field name="auto_confirm" nolabel="1"/>
</group>
</group>
<notebook>
<page string="Tickets">
<field name="event_type_ticket_ids"
class="w-100"
context="{
'tree_view_ref': 'event.event_type_ticket_view_tree_from_type',
'form_view_ref': 'event.event_type_ticket_view_form_from_type'
}"
/>
</page>
<page string="Communication" name="event_type_communication">
<field name="event_type_mail_ids" class="w-100">
<tree string="Communication" editable="bottom">
<field name="notification_type"/>
<field name="template_model_id" invisible="1"/>
<field name="template_ref" options="{'model_field': 'template_model_id', 'no_quick_create': True}" context="{'filter_template_on_event': True, 'default_model': 'event.registration'}"/>
<field name="interval_nbr" attrs="{'readonly':[('interval_unit', '=', 'now')]}"/>
<field name="interval_unit"/>
<field name="interval_type"/>
</tree>
</field>
</page>
<page string="Notes">
<group>
<label for="note" string="Note" />
<br />
<field nolabel="1" colspan="2" name="note"
placeholder="Add some internal notes (to do lists, contact info, ...)" />
<label for="ticket_instructions" string="Ticket Instructions" />
<br />
<field nolabel="1" colspan="2" name="ticket_instructions"
placeholder="e.g. How to get to your event, door closing time, ..." />
</group>
</page>
</notebook>
</sheet>
</form>
</field>
</record>
<record model="ir.ui.view" id="view_event_type_tree">
<field name="name">event.type.tree</field>
<field name="model">event.type</field>
<field name="arch" type="xml">
<tree string="Event Template">
<field name="sequence" widget="handle"/>
<field name="name"/>
</tree>
</field>
</record>
<record id="event_type_view_search" model="ir.ui.view">
<field name="name">event.type.search</field>
<field name="model">event.type</field>
<field name="arch" type="xml">
<search string="Event Templates">
<field name="name"/>
</search>
</field>
</record>
<record model="ir.actions.act_window" id="action_event_type">
<field name="name">Event Templates</field>
<field name="res_model">event.type</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Create an Event Template
</p><p>
Event Templates combine configurations you use often and are
usually based on the types of events you organize (e.g. "Workshop",
"Roadshow", "Online Webinar", etc).
</p>
</field>
</record>
<record id="menu_event_type" model="ir.ui.menu">
<field name="action" ref="event.action_event_type"/>
</record>
</data></odoo>

View file

@ -0,0 +1,134 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record id="res_config_settings_view_form" model="ir.ui.view">
<field name="name">res.config.settings.view.form.inherit.event</field>
<field name="model">res.config.settings</field>
<field name="priority" eval="65"/>
<field name="inherit_id" ref="base.res_config_settings_view_form"/>
<field name="arch" type="xml">
<xpath expr="//div[hasclass('settings')]" position="inside">
<div class="app_settings_block" data-string="Events" string="Events" data-key="event" groups="event.group_event_manager">
<h2>Events</h2>
<div class="row mt16 o_settings_container" name="events_setting_container">
<div class="col-12 col-lg-6 o_setting_box"
id="manage_tracks"
title="Add a navigation menu to your event web pages with schedule, tracks, a track proposal form, etc.">
<div class="o_setting_left_pane">
<field name="module_website_event_track"/>
</div>
<div class="o_setting_right_pane">
<label string="Schedule &amp; Tracks" for="module_website_event_track"/>
<div class="text-muted">
Manage &amp; publish a schedule with tracks
</div>
<div class="mt-3 d-flex" attrs="{'invisible': [('module_website_event_track', '=', False)]}">
<field name="module_website_event_track_live" class="w-auto"/>
<div>
<label string="Live Broadcast" for="module_website_event_track_live"/><br/>
<span class="text-muted">Air your tracks online through a Youtube integration</span>
</div>
</div>
<div class="mt-3 d-flex" attrs="{'invisible': [('module_website_event_track', '=', False)]}">
<field name="module_website_event_track_quiz" class="w-auto"/>
<div>
<label string="Event Gamification" for="module_website_event_track_quiz"/><br/>
<span class="text-muted">Share a quiz to your attendees once a track is over</span>
</div>
</div>
</div>
</div>
<div class="col-12 col-lg-6 o_setting_box">
<div>
<div class="o_setting_left_pane">
<field name="module_website_event_meet"/>
</div>
<div class="o_setting_right_pane">
<label string="Community Chat Rooms" for="module_website_event_meet"/>
<div class="text-muted">
Foster interactions between attendees by creating virtual conference rooms
</div>
</div>
</div>
<div class="mt-3">
<div class="o_setting_left_pane">
<field name="module_website_event_exhibitor"/>
</div>
<div class="o_setting_right_pane">
<label string="Online Exhibitors" for="module_website_event_exhibitor"/>
<div class="text-muted">
Display Sponsors and Exhibitors on your event pages
</div>
</div>
</div>
<div class="mt-3">
<div class="o_setting_left_pane">
<field name="module_event_booth"/>
</div>
<div class="o_setting_right_pane">
<label string="Booth Management" for="module_event_booth"/>
<div class="text-muted">
Create Booths and manage their reservations
</div>
</div>
</div>
</div>
</div>
<h2>Registration</h2>
<div class="row mt16 o_settings_container" name="registration_setting_container">
<div class="col-12 col-lg-6 o_setting_box" id="sell_tickets">
<div class="o_setting_left_pane">
<field name="module_event_sale"/>
</div>
<div class="o_setting_right_pane">
<label for="module_event_sale"/>
<div class="text-muted">
Sell tickets with sales orders
</div>
</div>
</div>
<div class="col-12 col-lg-6 o_setting_box" name="event_settings_website">
<div class="o_setting_left_pane">
<field name="module_website_event_sale"/>
</div>
<div class="o_setting_right_pane">
<label for="module_website_event_sale"/>
<div class="text-muted">
Sell tickets on your website
</div>
</div>
</div>
</div>
<h2>Attendance</h2>
<div class="row mt16 o_settings_container" name="attendance_setting_container">
<div class="col-12 col-lg-6 o_setting_box" id="event_barcode">
<div class="o_setting_left_pane">
<field name="module_event_barcode" widget="upgrade_boolean"/>
</div>
<div class="o_setting_right_pane">
<label for="module_event_barcode"/>
<span class="fa fa-lg fa-building-o" title="Values set here are company-specific." groups="base.group_multi_company"/>
<div class="text-muted" name="event_barcode">
Scan badges to confirm attendances
</div>
</div>
</div>
</div>
</div>
</xpath>
</field>
</record>
<record id="action_event_configuration" model="ir.actions.act_window">
<field name="name">Settings</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">res.config.settings</field>
<field name="view_mode">form</field>
<field name="target">inline</field>
<field name="context">{'module' : 'event', 'bin_size': False}</field>
</record>
<menuitem id="menu_event_global_settings" name="Settings"
parent="menu_event_configuration" sequence="0" action="action_event_configuration" groups="base.group_system"/>
</data>
</odoo>

View file

@ -0,0 +1,22 @@
<?xml version="1.0"?>
<odoo>
<data>
<record id="res_partner_view_tree" model="ir.ui.view">
<field name="name">view.res.partner.form.event.inherited</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="base.view_partner_form"/>
<field name="priority" eval="6"/>
<field name="arch" type="xml">
<div name="button_box" position="inside">
<button class="oe_stat_button"
groups="event.group_event_user"
type="object"
icon="fa-ticket"
name="action_event_view" attrs="{'invisible': [('event_count','=', 0)]}">
<field string="Events" name="event_count" widget="statinfo"/>
</button>
</div>
</field>
</record>
</data>
</odoo>