Files
odoo_source/addons/event/views/event_event_views.xml
T
Pierre-Yves Dufays 725e7ffae3 [IMP] various: improve custom activity views
The following summary view of the record in the activity views have been
improved:
- project_task: task state added
- project_project: project manager added
- event_event: responsible and the dates (date_begin_located and
date_end_located) added
- account_move: total amount, customer and state added
- sale_order: total amount and the state added
- purchase_order: total amount and the state added
- crm_lead: customer and stage added
- hr_applicant (hr_recruitment): recruiter added
- survey_survey: responsible added
- maintenance.request: added equipment and responsible
- stock.picking: added scheduled_date
- repair.order: responsible, schedule_date and product_id added
- mrp.production: added responsible
- hr_leave (hr_holidays): status is added and default deadline modified see
below

Ensures that "Schedule activity" is in one line by adding a colspan.

hr_leave activity: When a time off approval activity is created as a
consequence of the creation of a hr.leave, the deadline of the activity is set
to the date_from of the hr.leave minus activity type delay_count (default 15)
except if it leads to a date anterior to today. In that case it is set to
today. That way, in the activity view, the time off approval activities are
more or less sorted by related hr.leave date_from and the cell date is an
indication of when the time off is planned.

Technical note: on most activity view, the activity record was not occupying
all the horizontal space. To solve that problem the css has been modified and
the max-width (200) that was imposed on the sub div has been removed. And as
it was impossible to impose a max-width for a flex div (which is the common
case for the activity record), the max width is imposed on each text that might
be too long using the class o_text_block. That class has been modified to
impose a max-width. That's why that class has been added in most view.
Alternativly, we could have modified the activity compiler to add that class
when the attribute full was set (not done because not sure of the consequence).

Task-3300854

Part-of: odoo/odoo#138135
2023-10-19 19:08:12 +00:00

341 lines
19 KiB
XML

<?xml version="1.0"?>
<odoo><data>
<record id="event_barcode_action_main_view" model="ir.actions.client">
<field name="name">Barcode Interface</field>
<field name="tag">event.event_barcode_scan_view</field>
<field name="target">fullscreen</field>
</record>
<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>
<button name="%(event_barcode_action_main_view)d"
type="action"
context="{'default_event_id': id}">
Registration Desk
</button>
<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">
<div class="o_stat_info">
<span class="o_stat_text">
Registration
</span>
</div>
</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_taken" widget="statinfo" string="Attendees"/>
</button>
<button name="%(event_barcode_action_main_view)d"
type="action"
class="oe_stat_button"
icon="fa-mobile"
context="{'default_event_id': id}">
<div class="o_stat_info">
<span class="o_stat_text">Registration Desk</span>
</div>
</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="text-bg-danger" invisible="active"/>
<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" options="{'line_breaks': False}" widget="text" name="name" placeholder="e.g. Conference for Architects"/></h1>
</div>
<group>
<group>
<field name="active" invisible="1"/>
<field name="date_begin" string="Date" widget="daterange" options="{'end_date_field': 'date_end'}" />
<field name="date_end" invisible="1" />
<field name="date_tz"/>
<field name="lang"/>
<field name="event_type_id" string="Template"/>
<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" widget="many2one_avatar_user" domain="[('share', '=', False)]"/>
<field name="company_id" groups="base.group_multi_company"/>
<field name="address_id" context="{'show_address': 1}"/>
<label for="seats_limited" string="Limit Registrations"/>
<div>
<field name="seats_limited"/>
<span invisible="not seats_limited" required="not seats_limited">to <field name="seats_max" class="oe_inline o_input_9ch"/> Attendees</span>
</div>
<field name="badge_format"/>
<field name="badge_image"/>
</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" column_invisible="True"/>
<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" 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"
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_taken" string="Total 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="stage_id" readonly="1"/>
<field name="message_needaction" readonly="1" column_invisible="True"/>
<field name="activity_exception_decoration" widget="activity_exception" readonly="1"/>
</tree>
</field>
</record>
<record id="event_event_view_activity" model="ir.ui.view">
<field name="name">event.event.view.activity</field>
<field name="model">event.event</field>
<field name="arch" type="xml">
<activity string="Event">
<templates>
<div t-name="activity-box">
<field name="user_id" widget="many2one_avatar_user"/>
<div class="flex-grow-1">
<field name="name" string="Event Name" class="o_text_block o_text_bold"/>
<field name="date_begin"/>
<i class="fa fa-long-arrow-right mx-2" aria-label="Arrow icon" title="Arrow" />
<field name="date_end"/>
</div>
</div>
</templates>
</activity>
</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"/>
<field name="date_begin" string="Date" widget="daterange" options="{'end_date_field': 'date_end'}" />
<field name="date_end" invisible="1" />
</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="seats_reserved"/>
<field name="seats_used"/>
<field name="seats_taken"/>
<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-4 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="oi oi-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-8 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 ps-1">
<i class="fa fa-map-marker mt-1 me-2 text-center ps-1" title="Location"/>
<span t-esc="record.address_id.value" class="ms-1"/>
</div>
<div class="d-flex ps-1">
<i class="fa fa-group mt-1 me-2 text-center" title="Attendees"/>
<span t-out="record.seats_taken.raw_value" class="me-1"/> Attendees
</div>
</div>
<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_taken"/>
<field name="seats_reserved"/>
<field name="seats_used"/>
<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'}"/>
<filter string="Stage" name="stage_id" context="{'group_by': 'stage_id'}"/>
<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="res_model">event.event</field>
<field name="view_mode">kanban,calendar,tree,form,pivot,graph,activity</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>
<!-- EVENT.EVENT HEADER: REGISTRATION DESK MENU -->
<menuitem name="Registration Desk"
id="menu_event_registration_desk"
sequence="30"
action="event.event_barcode_action_main_view"
parent="event.event_main_menu"
groups="event.group_event_registration_desk"/>
</data></odoo>