diff options
| author | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 21:51:50 +0700 |
|---|---|---|
| committer | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 21:51:50 +0700 |
| commit | 3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch) | |
| tree | a44932296ef4a9b71d5f010906253d8c53727726 /addons/calendar/views | |
| parent | 0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff) | |
initial commit 2
Diffstat (limited to 'addons/calendar/views')
| -rw-r--r-- | addons/calendar/views/calendar_templates.xml | 85 | ||||
| -rw-r--r-- | addons/calendar/views/calendar_views.xml | 368 | ||||
| -rw-r--r-- | addons/calendar/views/mail_activity_views.xml | 37 |
3 files changed, 490 insertions, 0 deletions
diff --git a/addons/calendar/views/calendar_templates.xml b/addons/calendar/views/calendar_templates.xml new file mode 100644 index 00000000..581b201c --- /dev/null +++ b/addons/calendar/views/calendar_templates.xml @@ -0,0 +1,85 @@ +<?xml version="1.0" encoding="utf-8"?> +<odoo> + <template id="assets_backend" name="calendar assets" inherit_id="web.assets_backend"> + <xpath expr="." position="inside"> + <link rel="stylesheet" type="text/scss" href="/calendar/static/src/scss/calendar.scss"/> + <script type="text/javascript" src="/calendar/static/src/js/base_calendar.js"></script> + <script type="text/javascript" src="/calendar/static/src/js/calendar_renderer.js"></script> + <script type="text/javascript" src="/calendar/static/src/js/calendar_controller.js"></script> + <script type="text/javascript" src="/calendar/static/src/js/calendar_model.js"></script> + <script type="text/javascript" src="/calendar/static/src/js/calendar_view.js"></script> + <script type="text/javascript" src="/calendar/static/src/js/mail_activity.js"></script> + <script type="text/javascript" src="/calendar/static/src/js/systray_activity_menu.js"></script> + </xpath> + </template> + + <template id="qunit_suite" inherit_id="web.qunit_suite_tests"> + <xpath expr="//script[last()]" position="after"> + <script type="text/javascript" src="/calendar/static/tests/calendar_tests.js"/> + <script type="text/javascript" src="/calendar/static/tests/systray_activity_menu_tests.js"/> + </xpath> + </template> + + <!-- Template rendered in route auth=None, for anonymous user. This allow them to see meeting details --> + <template id="invitation_page_anonymous" name="Calendar Invitation Page for anonymous users"> + <t t-call="web.layout"> + <t t-set="head"> + <t t-call-assets="web.assets_common" t-js="false"/> + <t t-call-assets="web.assets_frontend" t-js="false"/> + </t> + + <div class="container"> + <div class="o_logo"> + <img class="img img-fluid d-block mx-auto" src="/web/binary/company_logo" alt="Logo"/> + </div> + + <div class="card"> + <div class="card-header"> + <h2>Calendar Invitation <small><t t-esc="event.name"/></small></h2> + </div> + <div class="card-body"> + <div class="clearfix mb16" t-if="attendee.state != 'needsAction'"> + <span class="float-right badge badge-info"> + <t t-if="attendee.state == 'accepted'">Yes I'm going.</t> + <t t-if="attendee.state == 'declined'">No I'm not going.</t> + <t t-if="attendee.state == 'tentative'">Tentative</t> + <t t-if="attendee.state == 'needsAction'">No feedback yet</t> + </span> + </div> + + <div class="table-responsive"> + <table class="o_event_table table table-striped"> + <tr> + <th>Invitation for</th> + <td><t t-esc="attendee.common_name"/> (<t t-esc="attendee.email"/>)</td> + </tr> + <tr> + <th>Date</th> + <td><t t-esc="event.display_time"/></td> + </tr> + <tr> + <th>Location</th> + <td><t t-esc="event.location or '-'"/></td> + </tr> + <tr> + <th>Attendees</th> + <td> + <ul> + <li t-foreach="event.attendee_ids" t-as="attendee" t-attf-class="o_#{attendee.state}"> + <t t-esc="attendee.common_name"/> + </li> + </ul> + </td> + </tr> + <tr> + <th>Description</th> + <td><t t-esc="event.description or '-'"/></td> + </tr> + </table> + </div> + </div> + </div> + </div> + </t> + </template> +</odoo> diff --git a/addons/calendar/views/calendar_views.xml b/addons/calendar/views/calendar_views.xml new file mode 100644 index 00000000..4d9d6d45 --- /dev/null +++ b/addons/calendar/views/calendar_views.xml @@ -0,0 +1,368 @@ +<?xml version="1.0"?> +<odoo> + + <!-- Calendar Events Types : Views and Actions --> + <record id="view_calendar_event_type_tree" model="ir.ui.view"> + <field name="name">calendar.event.type</field> + <field name="model">calendar.event.type</field> + <field name="arch" type="xml"> + <tree string="Meeting Types" editable="bottom"> + <field name="name"/> + </tree> + </field> + </record> + + <record id="action_calendar_event_type" model="ir.actions.act_window"> + <field name="name">Meeting Types</field> + <field name="res_model">calendar.event.type</field> + <field name="view_id" ref="view_calendar_event_type_tree"/> + </record> + + <!-- Calendar Alarm : --> + <record id="view_calendar_alarm_tree" model="ir.ui.view"> + <field name="name">calendar.alarm.tree</field> + <field name="model">calendar.alarm</field> + <field name="arch" type="xml"> + <tree string="Calendar Alarm" editable="bottom"> + <field name="name" invisible="1"/> + <field name="alarm_type"/> + <field name="duration"/> + <field name="interval"/> + </tree> + </field> + </record> + + <record id="calendar_alarm_view_form" model="ir.ui.view"> + <field name="name">calendar.alarm.form</field> + <field name="model">calendar.alarm</field> + <field name="arch" type="xml"> + <form string="Calendar Alarm"> + <group> + <group> + <field name="name" invisible="1"/> + <field name="alarm_type"/> + </group> + <group> + <label for="duration"/> + <div class="o_row"> + <field name="duration"/> + <field name="interval"/> + </div> + </group> + </group> + </form> + </field> + </record> + + <record id="action_calendar_alarm" model="ir.actions.act_window"> + <field name="name">Calendar Alarm</field> + <field name="res_model">calendar.alarm</field> + <field name="view_id" ref="view_calendar_alarm_tree"/> + </record> + + <!-- Calendar Events : Views and Actions --> + <record id="view_calendar_event_tree" model="ir.ui.view"> + <field name="name">calendar.event.tree</field> + <field name="model">calendar.event</field> + <field name="arch" type="xml"> + <tree string="Meetings" multi_edit="1"> + <field name="name" string="Subject" readonly="1"/> + <field name="allday" invisible="True"/> + <field name="start" string="Start Date"/> + <field name="stop" string="End Date"/> + <field name="partner_ids" readonly="1"/> + <field name="location"/> + <field name="duration" widget="float_time" readonly="1"/> + <field name="message_needaction" invisible="1"/> + </tree> + </field> + </record> + + <record id="view_calendar_event_form" model="ir.ui.view"> + <field name="name">calendar.event.form</field> + <field name="model">calendar.event</field> + <field name="priority" eval="1"/> + <field name="arch" type="xml"> + <form string="Meetings"> + <div attrs="{'invisible': [('recurrence_id','=',False)]}" class="alert alert-info oe_edit_only" role="status"> + <p>Edit recurring event</p> + <field name="recurrence_update" widget="radio"/> + </div> + <sheet> + <div class="oe_button_box" name="button_box"> + <button string="Document" icon="fa-bars" type="object" name="action_open_calendar_event" attrs="{'invisible': ['|', ('res_model', '=', False), ('res_id', '=', False)]}"/> + </div> + <widget name="web_ribbon" title="Archived" bg_color="bg-danger" attrs="{'invisible': [('active', '=', True)]}"/> + <field name="res_model" invisible="1" /> + <field name="res_id" invisible="1" /> + <field name="attendee_status" invisible="1"/> + <field name="active" invisible="1"/> + <div class="oe_title"> + <div class="oe_edit_only"> + <label for="name"/> + </div> + <h1> + <field name="name" placeholder="e.g. Business Lunch"/> + </h1> + <label for="partner_ids" string="Attendees" class="oe_edit_only"/> + <h2> + <field name="partner_ids" widget="many2manyattendee" + placeholder="Select attendees..." + context="{'force_email':True}" + class="oe_inline"/> + </h2> + </div> + <notebook> + <page name="page_details" string="Meeting Details"> + <group> + <group> + + <field name="start_date" string="Starting at" attrs="{'required': [('allday','=',True)], 'invisible': [('allday','=',False)]}" force_save="1"/> + <field name="stop_date" string="Ending at" attrs="{'required': [('allday','=',True)],'invisible': [('allday','=',False)]}" force_save="1"/> + + <field name="start" string="Starting at" attrs="{'required': [('allday','=',False)], 'invisible': [('allday','=',True)]}"/> + <field name="stop" invisible="1"/> + <label for="duration" attrs="{'invisible': [('allday','=',True)]}"/> + <div attrs="{'invisible': [('allday','=',True)]}"> + <field name="duration" widget="float_time" string="Duration" class="oe_inline" attrs="{'readonly': [('id', '!=', False), ('recurrency','=',True)]}"/> + <span> hours</span> + </div> + <field name="allday" attrs="{'readonly': [('id', '!=', False), ('recurrency','=',True)]}" force_save="1"/> + </group> + <group> + <field name="categ_ids" widget="many2many_tags" options=" + {'no_create_edit': True}"/> + <field name="alarm_ids" widget="many2many_tags" /> + <field name="location" /> + <field name="event_tz" attrs="{'invisible': [('recurrency', '=', False)]}"/> + </group> + + </group> + <label for="description"/> + <field name="description"/> + </page> + <page name="page_options" string="Options"> + <group> + <div> + <group> + <field name="recurrency"/> + </group> + <div attrs="{'invisible': [('recurrency', '=', False)]}"> + <group> + <label for="interval"/> + <div class="o_row"> + <field name="interval" attrs="{'required': [('recurrency', '=', True)]}"/> + <field name="rrule_type" attrs="{'required': [('recurrency', '=', True)]}"/> + </div> + <label string="Until" for="end_type"/> + <div class="o_row"> + <field name="end_type" attrs="{'required': [('recurrency', '=', True)]}"/> + <field name="count" attrs="{'invisible': [('end_type', '!=', 'count')], 'required': [('recurrency', '=', True)]}"/> + <field name="until" attrs="{'invisible': [('end_type', '!=', 'end_date')], 'required': [('end_type', '=', 'end_date'), ('recurrency', '=', True)]}"/> + </div> + </group> + <group attrs="{'invisible': [('rrule_type', '!=', 'weekly')]}" name="weekdays"> + <field name="mo"/> + <field name="tu"/> + <field name="we"/> + <field name="th"/> + <field name="fr"/> + <field name="sa"/> + <field name="su"/> + </group> + <group attrs="{'invisible': [('rrule_type', '!=', 'monthly')]}"> + <label string="Day of Month" for="month_by"/> + <div class="o_row"> + <field name="month_by"/> + <field name="day" + attrs="{'required': [('month_by', '=', 'date'), ('rrule_type', '=', 'monthly')], + 'invisible': [('month_by', '!=', 'date')]}"/> + <field name="byday" string="The" + attrs="{'required': [('recurrency', '=', True), ('month_by', '=', 'day'), ('rrule_type', '=', 'monthly')], + 'invisible': [('month_by', '!=', 'day')]}"/> + <field name="weekday" nolabel="1" + attrs="{'required': [('recurrency', '=', True), ('month_by', '=', 'day'), ('rrule_type', '=', 'monthly')], + 'invisible': [('month_by', '!=', 'day')]}"/> + </div> + </group> + </div> + </div> + <group> + <field name="privacy"/> + <field name="show_as"/> + <field name="recurrence_id" invisible="1" /> + </group> + </group> + </page> + + <page name="page_invitations" string="Invitations" groups="base.group_no_one"> + <button name="action_sendmail" type="object" string="Send mail" icon="fa-envelope" class="oe_link"/> + <field name="attendee_ids" widget="one2many" mode="tree,kanban"> + <tree string="Invitation details" editable="top" create="false" delete="false"> + <field name="partner_id" /> + <field name="state" /> + <field name="email" widget="email"/> + + <button name="do_tentative" states="needsAction,declined,accepted" string="Uncertain" type="object" icon="fa-asterisk" /> + <button name="do_accept" string="Accept" states="needsAction,tentative,declined" type="object" icon="fa-check text-success"/> + <button name="do_decline" string="Decline" states="needsAction,tentative,accepted" type="object" icon="fa-times-circle text-danger"/> + </tree> + <kanban class="o_kanban_mobile" create="false" delete="false"> + <field name="partner_id" /> + <field name="state" /> + <field name="email" widget="email"/> + + <templates> + <t t-name="kanban-box"> + <div class="d-flex flex-column justify-content-between"> + <field name="partner_id"/> + <field name="email" widget="email"/> + <span>Status: <field name="state" /></span> + + <div class="text-right"> + <button name="do_tentative" states="needsAction,declined,accepted" string="Uncertain" type="object" class="btn fa fa-asterisk"/> + <button name="do_accept" states="needsAction,tentative,declined" string="Accept" type="object" class="btn fa fa-check text-success"/> + <button name="do_decline" states="needsAction,tentative,accepted" string="Decline" type="object" class="btn fa fa-times-circle text-danger"/> + </div> + </div> + </t> + </templates> + </kanban> + </field> + </page> + <page name="page_misc" string="Misc" groups="base.group_no_one"> + <group> + <label for="user_id"/> + <field name="user_id" nolabel="1" widget="many2one_avatar_user"/> + </group> + </page> + </notebook> + </sheet> + <div class="oe_chatter"> + <field name="message_follower_ids"/> + <field name="message_ids" /> + </div> + </form> + </field> + </record> + + <record id="view_calendar_event_calendar" model="ir.ui.view"> + <field name="name">calendar.event.calendar</field> + <field name="model">calendar.event</field> + <field name="priority" eval="2"/> + <field name="arch" type="xml"> + <calendar js_class="attendee_calendar" string="Meetings" date_start="start" date_stop="stop" date_delay="duration" all_day="allday" + event_open_popup="true" + event_limit="5" + color="user_id"> + <field name="attendee_status"/> + <field name="user_id" string="Responsible" filters="1" widget="many2one_avatar_user"/> + <field name="partner_ids" widget="many2many_tags_avatar" write_model="calendar.contacts" write_field="partner_id" avatar_field="image_128"/> + <field name="is_highlighted" invisible="1"/> + <field name="description"/> + <field name="privacy"/> + <!-- For recurrence update Dialog --> + <field name="recurrency" invisible="1"/> + <field name="recurrence_update" invisible="1"/> + </calendar> + </field> + </record> + + <record id="view_calendar_event_search" model="ir.ui.view"> + <field name="name">calendar.event.search</field> + <field name="model">calendar.event</field> + <field name="arch" type="xml"> + <search string="Search Meetings"> + <field name="name" string="Meeting" filter_domain="[('name', 'ilike', self)]"/> + <field name="partner_ids"/> + <field name="categ_ids"/> + <field name="user_id"/> + <field name="show_as"/> + <filter string="My Meetings" help="My Meetings" name="mymeetings" domain="[('partner_ids.user_ids', 'in', [uid])]"/> + <separator/> + <filter string="Date" name="filter_start_date" date="start"/> + <separator/> + <filter string="Archived" name="inactive" domain="[('active', '=', False)]"/> + <group expand="0" string="Group By"> + <filter string="Responsible" name="responsible" domain="[]" context="{'group_by': 'user_id'}"/> + <filter string="Availability" name="availability" domain="[]" context="{'group_by': 'show_as'}"/> + </group> + </search> + </field> + </record> + + <record id="action_calendar_event" model="ir.actions.act_window"> + <field name="name">Meetings</field> + <field name="res_model">calendar.event</field> + <field name="view_mode">calendar,tree,form</field> + <field name="view_id" ref="view_calendar_event_calendar"/> + <field name="search_view_id" ref="view_calendar_event_search"/> + <field name="help" type="html"> + <p class="o_view_nocontent_smiling_face"> + Schedule a new meeting + </p><p> + The calendar is shared between employees and fully integrated with + other applications such as the employee leaves or the business + opportunities. + </p> + </field> + </record> + + <record id="action_view_calendar_event_calendar" model="ir.actions.act_window.view"> + <field name="act_window_id" ref="action_calendar_event"/> + <field name="sequence" eval="1"/> + <field name="view_mode">calendar</field> + <field name="view_id" ref="view_calendar_event_calendar"/> + </record> + + <record id="action_view_calendar_event_tree" model="ir.actions.act_window.view"> + <field name="act_window_id" ref="action_calendar_event"/> + <field name="sequence" eval="2"/> + <field name="view_mode">tree</field> + <field name="view_id" ref="view_calendar_event_tree"/> + </record> + + <record id="action_view_calendar_event_form" model="ir.actions.act_window.view"> + <field name="act_window_id" ref="action_calendar_event"/> + <field name="sequence" eval="3"/> + <field name="view_mode">form</field> + <field name="view_id" ref="view_calendar_event_form"/> + </record> + + <!-- Menus --> + <menuitem + id="mail_menu_calendar" + name="Calendar" + sequence="2" + action="action_calendar_event" + web_icon="calendar,static/description/icon.png" + groups="base.group_user"/> + + <menuitem + id="menu_calendar_configuration" + name="Calendar" + parent="base.menu_custom" + sequence="30" + groups="base.group_no_one"/> + + <menuitem + id="menu_calendar_event_type" + parent="menu_calendar_configuration" + action="action_calendar_event_type" + groups="base.group_no_one"/> + + <menuitem + id="menu_calendar_alarm" + parent="menu_calendar_configuration" + action="action_calendar_alarm" + groups="base.group_no_one"/> + + <!-- called in js from '/js/base_calendar.js' --> + <record id="action_calendar_event_notify" model="ir.actions.act_window"> + <field name="name">Meetings</field> + <field name="res_model">calendar.event</field> + <field name="view_mode">form,calendar,tree</field> + <field name="view_id" ref="view_calendar_event_form"/> + </record> + +</odoo> diff --git a/addons/calendar/views/mail_activity_views.xml b/addons/calendar/views/mail_activity_views.xml new file mode 100644 index 00000000..53be74a3 --- /dev/null +++ b/addons/calendar/views/mail_activity_views.xml @@ -0,0 +1,37 @@ +<?xml version="1.0"?> +<odoo> + + <record id="mail_activity_view_form_popup" model="ir.ui.view"> + <field name="name">mail.activity.form.inherit.calendar</field> + <field name="model">mail.activity</field> + <field name="inherit_id" ref="mail.mail_activity_view_form_popup"/> + <field name="arch" type="xml"> + <xpath expr="//field[@name='date_deadline']" position="attributes"> + <attribute name="attrs">{'invisible': [('activity_category', '=', 'meeting')]}</attribute> + </xpath> + <xpath expr="//field[@name='user_id']" position="attributes"> + <attribute name="attrs">{'invisible': [('activity_category', '=', 'meeting')]}</attribute> + </xpath> + <xpath expr="//button[@name='action_close_dialog']" position="attributes"> + <attribute name="attrs">{'invisible': ['|', ('activity_category', '=', 'meeting'), ('id', '!=', False)]}</attribute> + </xpath> + <xpath expr="//button[@name='action_done']" position="attributes"> + <attribute name="attrs">{'invisible': ['|', ('activity_category', '=', 'meeting'), ('force_next', '=', True)]}</attribute> + </xpath> + <xpath expr="//button[@special='cancel']" position="attributes"> + <attribute name="attrs">{'invisible': [('activity_category', '=', 'meeting')]}</attribute> + </xpath> + <xpath expr="//field[@name='note']" position="attributes"> + <attribute name="attrs">{'invisible': [('activity_category', '=', 'meeting')]}</attribute> + </xpath> + <xpath expr="//button[@name='action_close_dialog']" position="before"> + <button string="Open Calendar" + attrs="{'invisible': [('activity_category', '!=', 'meeting')]}" + name="action_create_calendar_event" + type="object" + class="btn-primary"/> + </xpath> + </field> + </record> + +</odoo> |
