oca-ocb-core/odoo-bringout-oca-ocb-mail/mail/views/mail_activity_views.xml
Ernad Husremovic 2d3ee4855a 19.0 vanilla
2026-03-09 09:30:27 +01:00

461 lines
25 KiB
XML

<?xml version="1.0"?>
<odoo>
<record id="mail_activity_type_view_form" model="ir.ui.view">
<field name="name">mail.activity.type.view.form</field>
<field name="model">mail.activity.type</field>
<field name="arch" type="xml">
<form string="Activities">
<sheet>
<widget name="web_ribbon" title="Archived" bg_color="text-bg-danger" invisible="active"/>
<div class="oe_title">
<label for="name" class="oe_edit_only"/>
<h1><field name="name" placeholder="e.g. Schedule a meeting" options="{'line_breaks': False}" widget="text"/></h1>
</div>
<group>
<group name="activity_details" string="Activity Settings">
<field name="active" invisible="1"/>
<field name="category"/>
<field name="default_user_id" options="{'no_create': True}" domain="[('share', '=', False)]"
widget="many2one_avatar_user"/>
<field name="res_model" invisible="context.get('default_res_model')"
placeholder="Available everywhere"/>
<field name="summary" placeholder="e.g. &quot;Discuss proposal&quot;"/>
<field name="icon" groups="base.group_no_one"/>
<field name="decoration_type" groups="base.group_no_one"/>
<label for="delay_count"/>
<div>
<field class="oe_inline pe-1 o_input_3ch" name="delay_count"/>
<field class="oe_inline ps-1 pe-2" name="delay_unit"/>
<field class="oe_inline" name="delay_from"/>
</div>
</group>
<group name="activity_planning" string="Next Activity">
<field name="chaining_type" invisible="category == 'upload_file'"/>
<field name="triggered_next_type_id" options="{'no_open': True}" context="{'default_res_model': res_model}"
invisible="chaining_type == 'suggest' and category != 'upload_file'"
required="chaining_type == 'trigger' and category != 'upload_file'"/>
<field name="suggested_next_type_ids" widget="many2many_tags" context="{'default_res_model': res_model}"
invisible="chaining_type == 'trigger' or category == 'upload_file'"/>
<field name="mail_template_ids" widget="many2many_tags"
domain="[('model_id.model', '=', res_model)]"
invisible="not res_model"
context="{'default_model': res_model}"/>
</group>
</group>
<label for="default_note" class="fw-bold"/>
<field nolabel="1" name="default_note" placeholder="e.g. &quot;Go over the offer and discuss details&quot;" class="oe-bordered-editor"/>
</sheet>
</form>
</field>
</record>
<record id="mail_activity_type_view_search" model="ir.ui.view">
<field name="name">mail.activity.type.search</field>
<field name="model">mail.activity.type</field>
<field name="arch" type="xml">
<search string="Activities">
<field name="name"/>
<filter string="Archived" domain="[('active', '=', False)]" name="archived"/>
</search>
</field>
</record>
<record id="mail_activity_type_view_tree" model="ir.ui.view">
<field name="name">mail.activity.type.view.list</field>
<field name="model">mail.activity.type</field>
<field name="arch" type="xml">
<list string="Activities" sample="1">
<field name="sequence" widget="handle"/>
<field name="name"/>
<field name="summary"/>
<field name="delay_label" string="Planned in" class="text-end"/>
<field name="delay_from" string="Type"/>
<field name="res_model" column_invisible="context.get('default_res_model')"/>
<field name="icon" groups="base.group_no_one"/>
<field name="triggered_next_type_id" optional="hide"
string="Triggered Next"/>
<field name="suggested_next_type_ids" optional="hide" widget="many2many_tags"
string="Suggested Next"/>
</list>
</field>
</record>
<record id="mail_activity_type_view_kanban" model="ir.ui.view" >
<field name="name">mail.activity.type.view.kanban</field>
<field name="model">mail.activity.type</field>
<field name="arch" type="xml">
<kanban class="o_kanban_mobile">
<field name="icon"/>
<templates>
<t t-name="card">
<div class="fw-bold fs-5">
<i t-if="record.icon.value" t-attf-class="fa #{record.icon.value} fa-fw"
role="img" aria-label="Activity Type Name" title="Activity Type Name"/>
<field name="name"/>
</div>
<field t-if="record.res_model.value" name="res_model"/>
<div t-if="record.summary.raw_value">
Default Summary: <field name="summary"/>
</div>
<footer>
<field class="ms-auto" name="default_user_id"
widget="many2one_avatar_user" readonly="1"/>
</footer>
</t>
</templates>
</kanban>
</field>
</record>
<record id="mail_activity_type_action" model="ir.actions.act_window">
<field name="name">Activity Types</field>
<field name="res_model">mail.activity.type</field>
<field name="view_mode">list,kanban,form</field>
</record>
<record id="mail_activity_action" model="ir.actions.act_window">
<field name="name">Activity Overview</field>
<field name="res_model">mail.activity</field>
<field name="view_mode">list,form</field>
<!-- ensure pagination works even if _search removes records after fetching -->
<field name="context">{
'force_search_count': 1,
}</field>
</record>
<record id="mail_activity_view_form_popup" model="ir.ui.view">
<field name="name">mail.activity.view.form.popup</field>
<field name="model">mail.activity</field>
<field name="priority">20</field>
<field name="arch" type="xml">
<form string="Log an Activity" create="false">
<sheet string="Activity">
<div class="oe_button_box" name="button_box" invisible="1">
<button name="action_open_document"
type="object" class="oe_link" icon="fa-file-text-o"
invisible="not res_model or res_id == 0">
<div class="o_field_widget o_stat_info">
<span class="o_stat_text">Open Document</span>
</div>
</button>
</div>
<group invisible="1">
<field name="activity_category" invisible="1" />
<field name="res_model" invisible="1"/>
<field name="res_model_id" invisible="1"/>
<field name="res_id" invisible="1"/>
<field name="chaining_type" invisible="1"/>
<field name="previous_activity_type_id"/>
<field name="has_recommended_activities"/>
</group>
<group invisible="not has_recommended_activities">
<field name="recommended_activity_type_id" widget="selection_badge"
domain="[('previous_type_ids', '=', previous_activity_type_id)]"
string="Recommended Activities"/>
</group>
<group>
<field name="activity_type_id" required="1" widget="selection_badge_icons" iconField="icon" nolabel="1"/>
<field name="summary" placeholder="e.g. Discuss Proposal" class="fs-3 pb-2"/>
<group>
<field name="date_deadline"/>
</group>
<field name="user_id" widget="many2one_avatar_user"/>
</group>
<field name="note" class="oe-bordered-editor embedded-editor-height-4" placeholder="Log a note..." widget="html_mail"/>
<footer>
<field name="id" invisible="1"/>
<button id="mail_activity_schedule" string="Schedule" close="1" name="action_close_dialog" type="object" class="btn-primary"
invisible="id" data-hotkey="q"/>
<button id="mail_activity_save" string="Save" name="action_close_dialog" type="object" class="btn-primary"
invisible="not id" data-hotkey="q"/>
<button invisible="chaining_type == 'trigger'" string="Mark Done" name="action_done"
type="object" class="btn-secondary" data-hotkey="w"
context="{'mail_activity_quick_update': True}"/>
<button string="Discard" class="btn-secondary" special="cancel" data-hotkey="x" />
</footer>
</sheet>
</form>
</field>
</record>
<record id="mail_activity_view_form" model="ir.ui.view">
<field name="name">mail.activity.view.form</field>
<field name="model">mail.activity</field>
<field name="priority">21</field>
<field name="mode">primary</field>
<field name="inherit_id" ref="mail.mail_activity_view_form_popup"/>
<field name="arch" type="xml">
<field name="activity_type_id" position="before">
<field name="res_name" readonly="1" string="Document"/>
</field>
<footer position="replace"/>
<xpath expr="//div[hasclass('oe_button_box')]" position="attributes">
<attribute name="invisible">0</attribute>
</xpath>
</field>
</record>
<record id="mail_activity_view_form_without_record_access" model="ir.ui.view">
<field name="name">mail.activity.view.form.without.record.access</field>
<field name="model">mail.activity</field>
<field name="priority">32</field>
<field name="arch" type="xml">
<form string="Log an Activity" create="false" delete="false">
<header>
<button string="Mark Done" class="btn-primary"
name="action_done_redirect_to_other" type="object"/>
</header>
<sheet string="Activity">
<field name="display_name" invisible="1"/>
<group>
<field name="activity_type_id" required="1"
widget="selection_badge_icons" iconField="icon" nolabel="1"/>
<field name="summary" placeholder="e.g. Discuss proposal"/>
<group>
<field name="date_deadline"/>
</group>
</group>
<field name="note" class="oe-bordered-editor embedded-editor-height-4" placeholder="Log a note..." widget="html_mail"/>
</sheet>
</form>
</field>
</record>
<record id="mail_activity_view_search" model="ir.ui.view">
<field name="name">mail.activity.view.search</field>
<field name="model">mail.activity</field>
<field name="arch" type="xml">
<search string="Activity">
<field name="res_name" string="Name" filter_domain="[
'|',
('res_name', 'ilike', self),
('summary', 'ilike', self),
]"/>
<field name="user_id"/>
<field name="activity_type_id"/>
<filter name="filter_user_id_uid" string="My Activities" domain="[('user_id', '=', uid)]"/>
<filter name="filter_user_id_no_user" string="Unassigned Activities" domain="[('user_id', '=', False)]"/>
<separator/>
<separator invisible="1"/>
<filter string="Overdue" name="filter_date_deadline_past"
domain="[('date_deadline', '&lt;', 'today')]"
help="Show all records whose next activity date is past"/>
<filter string="Today" name="filter_date_deadline_today"
domain="[('date_deadline', '=', 'today')]"/>
<filter string="Tomorrow" name="filter_date_deadline_tomorrow"
help="Show all records whose next action date is tomorrow"
domain="[('date_deadline', '=', 'today +1d')]"/>
<filter string="This week" name="filter_date_deadline_week"
help="Show all records whose next action date is this week"
domain="[
('date_deadline', '&gt;=', '=week_start'),
('date_deadline', '&lt;', '=week_start +1w')
]"/>
<filter string="Future" name="filter_date_deadline_future"
domain="[('date_deadline', '&gt;', 'today')
]"/>
<separator/>
<filter string="Done" name="filter_archived" domain="[('active', '=', False)]"/>
<separator />
<group>
<filter string="Deadline" name="date_deadline" context="{'group_by': 'date_deadline'}"/>
<filter string="Document Model" name="group_by_res_model_id" context="{'group_by': 'res_model_id'}"/>
<filter string="Assigned To" name="group_by_user_id" context="{'group_by': 'user_id'}"/>
<filter string="Created By" name="createdby" context="{'group_by': 'create_uid'}"/>
<filter string="Activity Type" name="activittype" context="{'group_by': 'activity_type_id'}"/>
</group>
</search>
</field>
</record>
<record id="mail_activity_view_tree" model="ir.ui.view">
<field name="name">mail.activity.view.list</field>
<field name="model">mail.activity</field>
<field name="arch" type="xml">
<list string="Next Activities"
default_order="date_deadline" create="true">
<header>
<button name="action_done" type="object" string="Done" icon="fa-check"/>
<button name="action_cancel" type="object" string="Cancel" icon="fa-times"/>
<button name="action_reschedule_today" type="object" string="Today" icon="fa-arrow-down"/>
<button name="action_reschedule_tomorrow" type="object" string="Tomorrow" icon="fa-calendar-plus-o"/>
<button name="action_reschedule_nextweek" type="object" string="Next Week" icon="fa-calendar-o"/>
</header>
<field name="summary" string="Summary"/>
<field name="activity_type_id"/>
<field name="user_id" widget="many2one_avatar_user"/>
<field name="res_name" string="Linked to"/>
<field name="date_deadline" widget="remaining_days"/>
<field name="date_done" string="Done Date" optional="hide"/>
<field name="feedback" optional="hide"/>
<widget name="mail_activity_list_reschedule_dropdown"/>
<button name="action_done" type="object" string="Done" icon="fa-check" invisible="active == False"/>
<button name="unlink" type="object" string="Cancel" icon="fa-times" class="text-danger" invisible="active == False"/>
</list>
</field>
</record>
<record id="mail_activity_view_tree_without_record_access" model="ir.ui.view">
<field name="name">mail.activity.view.list.without.record.access</field>
<field name="model">mail.activity</field>
<field name="inherit_id" ref="mail_activity_view_tree"/>
<field name="mode">primary</field>
<field name="priority">32</field>
<field name="arch" type="xml">
<xpath expr="//list" position="attributes">
<attribute name="delete">0</attribute>
<attribute name="edit">0</attribute>
<attribute name="duplicate">0</attribute>
<attribute name="js_class">archive_disabled_activity_list</attribute>
</xpath>
</field>
</record>
<record id="mail_activity_view_tree_open_target" model="ir.ui.view">
<field name="name">mail.activity.view.list.open.target</field>
<field name="model">mail.activity</field>
<field name="inherit_id" ref="mail_activity_view_tree"/>
<field name="mode">primary</field>
<field name="priority">32</field>
<field name="arch" type="xml">
<xpath expr="//list" position="attributes">
<attribute name="action">action_open_document</attribute>
<attribute name="type">object</attribute>
<attribute name="js_class">archive_disabled_activity_list</attribute>
<attribute name="multi_edit">1</attribute>
</xpath>
<xpath expr="//list//field[@name='activity_type_id']" position="attributes">
<attribute name="domain">[('res_model', '=', False)]</attribute>
</xpath>
</field>
</record>
<record id="mail_activity_view_kanban_open_target" model="ir.ui.view">
<field name="name">mail.activity.view.kanban.open.target</field>
<field name="model">mail.activity</field>
<field name="arch" type="xml">
<kanban string="Activity" action="action_open_document" type="object" js_class="mail_activity_my_kanban">
<templates>
<field name="active" invisible="1"/>
<field name="icon" invisible="1"/>
<t t-name="card">
<div class="d-flex justify-content-between">
<span class="text-truncate" invisible="not res_name">
<field name="res_name" class="fw-bold" />
(<field class="text-muted" name="res_model_id" />)
</span>
<field name="summary" class="text-truncate" invisible="res_name"/>
<span class="badge rounded-pill text-bg-300">
<i t-if="record.icon" t-attf-class="fa {{record.icon.raw_value}} me-1"/>
<field name="activity_type_id"/>
</span>
</div>
<field class="text-truncate" name="summary" invisible="not res_name"/>
<footer class="align-items-center">
<field name="user_id" widget="many2one_avatar_user" />
<field name="date_deadline" widget="remaining_days" class="ms-2"/>
<button type="object" name="action_done" class="btn btn-link btn-sm ms-auto me-1" invisible="active == False">
<i class="fa fa-check" /> Done
</button>
<button type="object" name="unlink" class="btn btn-link text-danger btn-sm">
<i class="fa fa-times" /> Cancel
</button>
</footer>
</t>
</templates>
</kanban>
</field>
</record>
<record id="mail_activity_action_view_tree" model="ir.actions.act_window.view">
<field name="sequence" eval="1"/>
<field name="view_mode">list</field>
<field name="act_window_id" ref="mail.mail_activity_action"/>
</record>
<record id="mail_activity_action_view_form" model="ir.actions.act_window.view">
<field name="sequence" eval="2"/>
<field name="view_mode">form</field>
<field name="view_id" ref="mail.mail_activity_view_form"/>
<field name="act_window_id" ref="mail.mail_activity_action"/>
</record>
<record id="mail_activity_without_access_action" model="ir.actions.act_window">
<field name="name">Other activities</field>
<field name="res_model">mail.activity</field>
<field name="view_mode">list,form</field>
<field name="search_view_id" ref="mail.mail_activity_view_search"/>
<field name="domain">['|', ('id', 'in', context.get('active_ids')), '&amp;', ('res_model', '=', False), ('user_id', '=', uid)]</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
No activities.
</p>
</field>
<field name="target">main</field>
</record>
<record id="mail_activity_action_without_access_view_tree" model="ir.actions.act_window.view">
<field name="sequence">1</field>
<field name="view_mode">list</field>
<field name="view_id" ref="mail.mail_activity_view_tree_without_record_access"/>
<field name="act_window_id" ref="mail.mail_activity_without_access_action"/>
</record>
<record id="mail_activity_action_without_access_view_form" model="ir.actions.act_window.view">
<field name="sequence">2</field>
<field name="view_mode">form</field>
<field name="view_id" ref="mail.mail_activity_view_form_without_record_access"/>
<field name="act_window_id" ref="mail.mail_activity_without_access_action"/>
</record>
<record id="mail_activity_view_calendar" model="ir.ui.view">
<field name="name">mail.activity.view.calendar</field>
<field name="model">mail.activity</field>
<field name="priority" eval="2"/>
<field name="arch" type="xml">
<calendar string="Activity" date_start="date_deadline" color="activity_type_id" js_class="activity_calendar" create="0" mode="month">
<field name="user_id" avatar_field="avatar_128"/>
<field name="res_name" string="Name"/>
<field name="date_deadline"/>
<field name="summary"/>
<field name="activity_type_id" filters="1" invisible="1"/>
</calendar>
</field>
</record>
<record id="mail_activity_action_my" model="ir.actions.act_window">
<field name="name">My Activities</field>
<field name="res_model">mail.activity</field>
<field name="view_mode">list,kanban,calendar</field>
<field name="search_view_id" ref="mail.mail_activity_view_search"/>
<!-- ensure pagination works even if _search removes records after fetching -->
<field name="context">{
'force_search_count': 1,
'search_default_filter_user_id_uid': 1,
'search_default_filter_date_deadline_past': 1,
'search_default_filter_date_deadline_today': 1,
}</field>
</record>
<record id="mail_activity_action_my_view_tree" model="ir.actions.act_window.view">
<field name="sequence" eval="1"/>
<field name="view_mode">list</field>
<field name="act_window_id" ref="mail.mail_activity_action_my"/>
<field name="view_id" ref="mail.mail_activity_view_tree_open_target"/>
</record>
<record id="mail_activity_action_my_view_kanban" model="ir.actions.act_window.view">
<field name="sequence" eval="1"/>
<field name="view_mode">kanban</field>
<field name="act_window_id" ref="mail.mail_activity_action_my"/>
<field name="view_id" ref="mail.mail_activity_view_kanban_open_target"/>
</record>
<record id="mail_activity_action_my_view_calendar" model="ir.actions.act_window.view">
<field name="sequence" eval="1"/>
<field name="view_mode">calendar</field>
<field name="act_window_id" ref="mail.mail_activity_action_my"/>
<field name="view_id" ref="mail.mail_activity_view_calendar"/>
</record>
</odoo>