266 lines
14 KiB
XML
266 lines
14 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
||
<odoo>
|
||
<record id="room_booking_view_search" model="ir.ui.view">
|
||
<field name="name">Bookings search view</field>
|
||
<field name="model">room.booking</field>
|
||
<field name="arch" type="xml">
|
||
<search string="Booking">
|
||
<field name="name" string="Meeting name"/>
|
||
<field name="organizer_id"/>
|
||
<field name="room_id"/>
|
||
<field name="office_id"/>
|
||
<filter name="organizer_id" string="My Meetings" domain="[('organizer_id', '=', uid)]"/>
|
||
<filter name="group_by_organizer_id" context="{'group_by': 'organizer_id'}"/>
|
||
<filter name="group_by_room_id" context="{'group_by': 'room_id'}"/>
|
||
<filter name="group_by_office_id" context="{'group_by': 'office_id'}"/>
|
||
</search>
|
||
</field>
|
||
</record>
|
||
|
||
<record id="room_booking_view_gantt" model="ir.ui.view">
|
||
<field name="name">room.booking.view.gantt</field>
|
||
<field name="model">room.booking</field>
|
||
<field name="arch" type="xml">
|
||
<gantt js_class="room_booking_gantt"
|
||
date_start="start_datetime"
|
||
date_stop="stop_datetime"
|
||
default_group_by="room_id"
|
||
precision="{'day': 'hour:quarter', 'week': 'day:half', 'month': 'day:half', 'year': 'day:full'}"
|
||
default_scale="day"
|
||
dynamic_range="1"
|
||
color="organizer_id"
|
||
string="Bookings"
|
||
plan="0">
|
||
<templates>
|
||
<field name="name"/>
|
||
<field name="room_users_names"/>
|
||
<div t-name="gantt-popover">
|
||
<div class="o_gantt_popover">
|
||
<ul class="ps-1 mb-0 list-unstyled">
|
||
<li>
|
||
<strong>创建人:</strong>
|
||
<t t-out="organizer_id[1]"/>
|
||
</li>
|
||
<li class="o_gantt_popover_content_item mt-2">
|
||
<t t-out="start_datetime.toFormat('f ')"/>
|
||
<i class="fa fa-long-arrow-right" title="Until"/>
|
||
<t t-out="stop_datetime.toFormat(' f')"/>
|
||
</li>
|
||
<li>
|
||
<strong>参会人员:</strong>
|
||
<t t-out="room_users_names"/>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</templates>
|
||
</gantt>
|
||
</field>
|
||
</record>
|
||
|
||
<record id="room_booking_view_calendar" model="ir.ui.view">
|
||
<field name="name">room.booking.view.calendar</field>
|
||
<field name="model">room.booking</field>
|
||
<field name="arch" type="xml">
|
||
<calendar date_start="start_datetime" date_stop="stop_datetime" color="room_id" quick_create="0"
|
||
event_open_popup="1">
|
||
<field name="room_id"/>
|
||
</calendar>
|
||
</field>
|
||
</record>
|
||
|
||
<record id="room_booking_view_list" model="ir.ui.view">
|
||
<field name="name">room.booking.view.list</field>
|
||
<field name="model">room.booking</field>
|
||
<field name="arch" type="xml">
|
||
<tree duplicate="0">
|
||
<field name="start_datetime"/>
|
||
<field name="stop_datetime"/>
|
||
<field name="name" string="Name"/>
|
||
<field name="room_id"/>
|
||
<field name="organizer_id" widget="many2one_avatar_user"/>
|
||
</tree>
|
||
</field>
|
||
</record>
|
||
|
||
<record id="room_booking_view_kanban" model="ir.ui.view">
|
||
<field name="name">room.booking.view.kanban</field>
|
||
<field name="model">room.booking</field>
|
||
<field name="arch" type="xml">
|
||
<kanban>
|
||
<templates>
|
||
<t t-name="kanban-box">
|
||
<div class="oe_kanban_global_click">
|
||
<div class="o_kanban_record_top">
|
||
<strong class="o_kanban_record_title">
|
||
<field name="display_name"/>
|
||
</strong>
|
||
</div>
|
||
<div class="oe_kanban_content">
|
||
<ul class="ps-1 mb-0 list-unstyled">
|
||
<li>
|
||
<strong>Room:</strong>
|
||
<field name="room_id"/>
|
||
</li>
|
||
<li>
|
||
<strong>Date:</strong>
|
||
<field name="start_datetime"/>
|
||
<i class="fa fa-long-arrow-right mx-1" title="Until"/>
|
||
<field name="stop_datetime"/>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
<div class="o_kanban_record_bottom">
|
||
<div class="oe_kanban_bottom_left"/>
|
||
<div class="oe_kanban_bottom_right">
|
||
<field name="organizer_id" widget="many2one_avatar_user"/>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</t>
|
||
</templates>
|
||
</kanban>
|
||
</field>
|
||
</record>
|
||
|
||
<record id="room_booking_view_form" model="ir.ui.view">
|
||
<field name="name">room.booking.view.form</field>
|
||
<field name="model">room.booking</field>
|
||
<field name="arch" type="xml">
|
||
<form duplicate="0">
|
||
<header>
|
||
<button name="meet_notice" string="会议通知" type="object" class="oe_highlight" invisible="not work_end"/>
|
||
<button name="meeting_sign_in" string="签到" invisible="meeting_type != 'down' or not work_end " type="object"
|
||
class="oe_highlight"/>
|
||
<button name="meeting_partner_create" string="录入" invisible="meeting_type != 'down' or not work_end"
|
||
type="object" class="oe_highlight"/>
|
||
<button name="sync_wechat_room" string="同步企业微信" type="object" class="oe_highlight" invisible="not work_end"/>
|
||
<button name="action_print_room_booking_agenda" string="打印" type="object" class="btn-primary"/>
|
||
</header>
|
||
<sheet>
|
||
<!-- 顶部信息行:流水号 / 本公司 / 紧急度(保持不动) -->
|
||
<group col="3">
|
||
<group>
|
||
<field name="code" string="流水号" readonly="1"/>
|
||
</group>
|
||
<group>
|
||
<label for="is_this_company"/>
|
||
<div><field name="is_this_company"/></div>
|
||
</group>
|
||
<group>
|
||
<field name="urgency_level" readonly="1"/>
|
||
</group>
|
||
</group>
|
||
<!-- 标题 -->
|
||
<div class="oe_title">
|
||
<label for="name"/>
|
||
<h1>
|
||
<field name="name" required="1" string="标题" placeholder="例如:2026-08-11 党总支部党员大会"/>
|
||
</h1>
|
||
</div>
|
||
<!-- 核心三字段:会议时间 / 会议地点 / 会议类型(始终可见,主区域显示) -->
|
||
<group col="3" class="o_field_highlight o_room_booking_core_fields">
|
||
<group string="会议时间">
|
||
<field name="start_datetime" string="会议时间" widget="daterange"
|
||
options="{'end_date_field': 'stop_datetime'}"/>
|
||
<field name="stop_datetime" invisible="1"/>
|
||
</group>
|
||
<group string="会议地点">
|
||
<field name="room_id" string="会议地点" domain=""/>
|
||
</group>
|
||
<group string="会议类型">
|
||
<field name="meeting_type_id" required="1"
|
||
domain="[('company_id', '=', company_id)]"
|
||
options="{'no_create': True}"/>
|
||
</group>
|
||
</group>
|
||
<!-- 其他次要字段折叠:使用 HTML5 <details> 默认收起。注意:open 是布尔属性,写 open="false" 也会展开,必须整段不写 open 才默认折叠 -->
|
||
<details class="o_inline_details mb-3">
|
||
<summary class="o_inline_details_summary">
|
||
<i class="fa fa-info-circle me-1"/>
|
||
<strong>详细信息</strong>
|
||
<span class="text-muted small ms-2">(默认折叠,点击展开:组织者、部门、参会人员、通知等)</span>
|
||
</summary>
|
||
<group col="2" class="o_room_booking_more_info">
|
||
<group string="组织与会议形式">
|
||
<!-- 隐藏字段 -->
|
||
<field name="user_id" invisible="1"/>
|
||
<field name="state" invisible="1"/>
|
||
<field name="is_back" invisible="1"/>
|
||
<field name="work_end" invisible="1"/>
|
||
<field name="company_id" invisible="1"/>
|
||
<field name="is_meeting" invisible="1"/>
|
||
<field name="partner_ids" widget="many2many_tags" force_save="1" invisible="1"/>
|
||
<field name="is_notice" invisible="1"/>
|
||
<!-- 可见字段 -->
|
||
<field name="organizer_id" options="{'no_create': True}"/>
|
||
<field name="department_id" widget="ztree_select" options="{'no_create': True}"/>
|
||
<field name="meeting_type"/>
|
||
<field name="driver" invisible="meeting_type != 'exterior'"/>
|
||
<field name="fleet_id" invisible="meeting_type != 'exterior'"/>
|
||
<field name="meeting_place" invisible="meeting_type != 'exterior'"/>
|
||
<field name="host"
|
||
domain="[('company_id', '=', company_id), ('user_id.name', '!=', 'Administrator')] if is_this_company else []"
|
||
options="{'no_create': True}"/>
|
||
<label for="stationed_group"/>
|
||
<div><field name="stationed_group"/></div>
|
||
<field name="other_company_user_ids" widget="many2many_tags" readonly="0"/>
|
||
</group>
|
||
<group string="参会与通知">
|
||
<field name="room_users_ids" widget="many2many_tags"
|
||
domain="[('company_id', '=', company_id), ('name', '!=', 'Administrator')] if is_this_company else []"
|
||
options="{'no_create': True}"/>
|
||
<field name="recorder_ids" widget="many2many_tags"
|
||
domain="[('user_role_ids.name', 'ilike', '会议记录员')]"
|
||
options="{'no_create': True}"/>
|
||
<label for="is_notice"/>
|
||
<div><field name="is_notice"/></div>
|
||
<label for="task_time_ids" invisible="not is_notice"/>
|
||
<div><field name="task_time_ids" invisible="not is_notice" widget="many2many_tags"/></div>
|
||
</group>
|
||
</group>
|
||
</details>
|
||
<!-- 签到详情/会议说明/附件 折叠为 notebook,notebook 默认折叠为 tab 形式 -->
|
||
<notebook>
|
||
<page name="sign" string="签到详情">
|
||
<group>
|
||
<group>
|
||
<field name="should_user"/>
|
||
</group>
|
||
<group>
|
||
<field name="right_user"/>
|
||
</group>
|
||
<field name="meeting_sing_ids">
|
||
<tree delete="0" create="0">
|
||
<field name="room_booking_id" column_invisible="1"/>
|
||
<field name="sign_user_name"/>
|
||
<field name="partner_name"/>
|
||
<field name="job"/>
|
||
<field name="mobile"/>
|
||
<field name="user_type"/>
|
||
<field name="sign_type"/>
|
||
<field name="sign_time"/>
|
||
</tree>
|
||
</field>
|
||
</group>
|
||
</page>
|
||
<page name="meeting_html" string="会议说明">
|
||
<button name="button_meeting_data" string="座位排列" type="object" class="oe_highlight"/>
|
||
<field name="meeting_data" widget="tinymce"/>
|
||
</page>
|
||
<page string="附件" invisible="is_meeting">
|
||
<field name="documents_ids" widget="preview_many2many"/>
|
||
</page>
|
||
</notebook>
|
||
</sheet>
|
||
</form>
|
||
</field>
|
||
</record>
|
||
|
||
<record id="room_booking_action" model="ir.actions.act_window">
|
||
<field name="name">Bookings</field>
|
||
<field name="res_model">room.booking</field>
|
||
<field name="view_mode">list,kanban,form,search</field>
|
||
</record>
|
||
</odoo>
|