diff options
| author | Richard Sassine <richardsassine@tutanota.com> | 2021-05-04 18:00:38 +0300 |
|---|---|---|
| committer | Richard Sassine <richardsassine@tutanota.com> | 2021-05-04 18:00:38 +0300 |
| commit | ad97722b1b35aff50d0adf13a19715f7b8373c07 (patch) | |
| tree | edf36f1114b896a01602e31dafd74efe45736427 /helpdesk_mgmt/views | |
initial commit
Diffstat (limited to 'helpdesk_mgmt/views')
| -rw-r--r-- | helpdesk_mgmt/views/helpdesk_dashboard_views.xml | 141 | ||||
| -rw-r--r-- | helpdesk_mgmt/views/helpdesk_ticket_category_views.xml | 62 | ||||
| -rw-r--r-- | helpdesk_mgmt/views/helpdesk_ticket_channel_views.xml | 62 | ||||
| -rw-r--r-- | helpdesk_mgmt/views/helpdesk_ticket_menu.xml | 130 | ||||
| -rw-r--r-- | helpdesk_mgmt/views/helpdesk_ticket_stage_views.xml | 76 | ||||
| -rw-r--r-- | helpdesk_mgmt/views/helpdesk_ticket_tag_views.xml | 62 | ||||
| -rw-r--r-- | helpdesk_mgmt/views/helpdesk_ticket_team_views.xml | 154 | ||||
| -rw-r--r-- | helpdesk_mgmt/views/helpdesk_ticket_templates.xml | 323 | ||||
| -rw-r--r-- | helpdesk_mgmt/views/helpdesk_ticket_views.xml | 351 | ||||
| -rw-r--r-- | helpdesk_mgmt/views/res_partner_views.xml | 23 |
10 files changed, 1384 insertions, 0 deletions
diff --git a/helpdesk_mgmt/views/helpdesk_dashboard_views.xml b/helpdesk_mgmt/views/helpdesk_dashboard_views.xml new file mode 100644 index 0000000..508d95d --- /dev/null +++ b/helpdesk_mgmt/views/helpdesk_dashboard_views.xml @@ -0,0 +1,141 @@ +<?xml version="1.0" encoding="utf-8" ?> +<odoo> + <record id="helpdesk_ticket_kanban_view" model="ir.ui.view"> + <field name="name">helpdesk.ticket.team.kanban</field> + <field name="model">helpdesk.ticket.team</field> + <field name="arch" type="xml"> + <kanban class="oe_background_grey o_kanban_dashboard" create="0"> + <field name="name" /> + <field name="color" /> + <field name="todo_ticket_ids" /> + <field name="todo_ticket_count" /> + <field name="todo_ticket_count_unassigned" /> + <field name="todo_ticket_count_unattended" /> + <field name="todo_ticket_count_high_priority" /> + <templates> + <t t-name="kanban-box"> + <div t-attf-class="#{kanban_color(record.color.raw_value)}"> + <div t-attf-class="o_kanban_card_header"> + <div class="o_kanban_card_header_title"> + <div class="o_primary"> + <a + name="%(action_helpdesk_ticket_kanban_from_dashboard)d" + type="action" + > + <field name="name" /> + </a> + </div> + </div> + <div class="o_kanban_manage_button_section"> + <a + class="o_kanban_manage_toggle_button" + href="#" + title="Toggle dropdown" + > + <i class="fa fa-ellipsis-v" /> + </a> + </div> + <div class="container o_kanban_card_content"> + <div class="row"> + <div + class="col-6 o_kanban_primary_left" + style="padding-top:20px;" + > + <button + class="btn btn-primary" + name="%(action_helpdesk_ticket_kanban_from_dashboard)d" + type="action" + context="{'search_default_open': 1}" + > + <t t-esc="record.todo_ticket_count.value" /> To Do + </button> + </div> + <div class="col-6 o_kanban_primary_right"> + <div class="row"> + <div class="col-9"> + <a + name="%(action_helpdesk_ticket_kanban_from_dashboard)d" + type="action" + context="{'search_default_unassigned': 1}" + > + Unassigned + </a> + </div> + <div class="col-3"> + <t + t-esc="record.todo_ticket_count_unassigned.value" + /> + </div> + <div class="col-9"> + <a + name="%(action_helpdesk_ticket_kanban_from_dashboard)d" + type="action" + context="{'search_default_unattended': 1}" + > + Unattended + </a> + </div> + <div class="col-3"> + <t + t-esc="record.todo_ticket_count_unattended.value" + /> + </div> + <div class="col-9"> + <a + name="%(action_helpdesk_ticket_kanban_from_dashboard)d" + type="action" + context="{'search_default_high_priority': 1}" + > + High Priority + </a> + </div> + <div class="col-3"> + <t + t-esc="record.todo_ticket_count_high_priority.value" + /> + </div> + </div> + </div> + </div> + </div> + <div + class="container o_kanban_card_manage_pane dropdown-menu" + role="menu" + > + <div class="row"> + <div + class="col-6 o_kanban_card_manage_section o_kanban_manage_view" + > + <div class="o_kanban_card_manage_title"> + <span>View</span> + </div> + <div> + <a + name="%(action_helpdesk_ticket_kanban_from_dashboard)d" + type="action" + > + All + </a> + </div> + </div> + </div> + <div + t-if="widget.editable" + class="o_kanban_card_manage_settings row" + > + <div class="col-8"> + <ul + class="oe_kanban_colorpicker" + data-field="color" + /> + </div> + </div> + </div> + </div> + </div> + </t> + </templates> + </kanban> + </field> + </record> +</odoo> diff --git a/helpdesk_mgmt/views/helpdesk_ticket_category_views.xml b/helpdesk_mgmt/views/helpdesk_ticket_category_views.xml new file mode 100644 index 0000000..b148d93 --- /dev/null +++ b/helpdesk_mgmt/views/helpdesk_ticket_category_views.xml @@ -0,0 +1,62 @@ +<?xml version="1.0" encoding="utf-8" ?> +<odoo> + <record id="view_helpdesk_ticket_category_search" model="ir.ui.view"> + <field name="name">helpdesk.ticket.category.search</field> + <field name="model">helpdesk.ticket.category</field> + <field name="arch" type="xml"> + <search string="Helpdesk Category Search"> + <filter + string="Archived" + name="inactive" + domain="[('active','=',False)]" + /> + <separator /> + <field name="name" filter_domain="[('name', 'ilike', self)]" /> + </search> + </field> + </record> + <record id="view_helpdesk_category_form" model="ir.ui.view"> + <field name="name">view.helpdesk_category.form</field> + <field name="model">helpdesk.ticket.category</field> + <field name="arch" type="xml"> + <form string="Stages"> + <header> + </header> + <sheet> + <div class="oe_button_box" name="button_box"> + <button + name="toggle_active" + type="object" + class="oe_stat_button" + icon="fa-check" + > + <field + name="active" + widget="boolean_button" + options='{"terminology": "active"}' + /> + </button> + </div> + <div class="oe_title"> + <label for="name" class="oe_edit_only" /> + <h1> + <field name="name" required="1" /> + </h1> + </div> + <group name="main"> + <field name="company_id" groups="base.group_multi_company" /> + </group> + </sheet> + </form> + </field> + </record> + <record id="view_helpdesk_category_tree" model="ir.ui.view"> + <field name="name">view.helpdesk_category.tree</field> + <field name="model">helpdesk.ticket.category</field> + <field name="arch" type="xml"> + <tree string="Team"> + <field name="name" /> + </tree> + </field> + </record> +</odoo> diff --git a/helpdesk_mgmt/views/helpdesk_ticket_channel_views.xml b/helpdesk_mgmt/views/helpdesk_ticket_channel_views.xml new file mode 100644 index 0000000..5d26964 --- /dev/null +++ b/helpdesk_mgmt/views/helpdesk_ticket_channel_views.xml @@ -0,0 +1,62 @@ +<?xml version="1.0" encoding="utf-8" ?> +<odoo> + <record id="view_helpdesk_ticket_channel_search" model="ir.ui.view"> + <field name="name">helpdesk.ticket.channel.search</field> + <field name="model">helpdesk.ticket.channel</field> + <field name="arch" type="xml"> + <search string="Helpdesk Category Search"> + <filter + string="Archived" + name="inactive" + domain="[('active','=',False)]" + /> + <separator /> + <field name="name" filter_domain="[('name', 'ilike', self)]" /> + </search> + </field> + </record> + <record id="view_helpdesk_channel_form" model="ir.ui.view"> + <field name="name">view.helpdesk_channel.form</field> + <field name="model">helpdesk.ticket.channel</field> + <field name="arch" type="xml"> + <form string="Stages"> + <header> + </header> + <sheet> + <div class="oe_button_box" name="button_box"> + <button + name="toggle_active" + type="object" + class="oe_stat_button" + icon="fa-check" + > + <field + name="active" + widget="boolean_button" + options='{"terminology": "active"}' + /> + </button> + </div> + <div class="oe_title"> + <label for="name" class="oe_edit_only" /> + <h1> + <field name="name" required="1" /> + </h1> + </div> + <group name="main"> + <field name="company_id" groups="base.group_multi_company" /> + </group> + </sheet> + </form> + </field> + </record> + <record id="view_helpdesk_channel_tree" model="ir.ui.view"> + <field name="name">view.helpdesk_channel.tree</field> + <field name="model">helpdesk.ticket.channel</field> + <field name="arch" type="xml"> + <tree string="Team"> + <field name="name" /> + </tree> + </field> + </record> +</odoo> diff --git a/helpdesk_mgmt/views/helpdesk_ticket_menu.xml b/helpdesk_mgmt/views/helpdesk_ticket_menu.xml new file mode 100644 index 0000000..8b03cad --- /dev/null +++ b/helpdesk_mgmt/views/helpdesk_ticket_menu.xml @@ -0,0 +1,130 @@ +<?xml version='1.0' encoding='utf-8' ?> +<odoo> + <!-- Actions --> + <record id="helpdesk_ticket_dashboard_action" model="ir.actions.act_window"> + <field name="name">Dashboard</field> + <field name="type">ir.actions.act_window</field> + <field name="res_model">helpdesk.ticket.team</field> + <field name="view_mode">kanban,tree,form,pivot</field> + </record> + <record id="helpdesk_ticket_action" model="ir.actions.act_window"> + <field name="name">Tickets</field> + <field name="type">ir.actions.act_window</field> + <field name="res_model">helpdesk.ticket</field> + <field name="view_mode">tree,kanban,form,pivot</field> + </record> + <record id="helpdesk_ticket_reporting_action" model="ir.actions.act_window"> + <field name="name">Reporting</field> + <field name="type">ir.actions.act_window</field> + <field name="res_model">helpdesk.ticket</field> + <field name="view_mode">pivot,graph</field> + </record> + <record id="helpdesk_ticket_channel_action" model="ir.actions.act_window"> + <field name="name">Channels</field> + <field name="type">ir.actions.act_window</field> + <field name="res_model">helpdesk.ticket.channel</field> + <field name="view_mode">tree,form</field> + </record> + <record id="helpdesk_ticket_category_action" model="ir.actions.act_window"> + <field name="name">Categories</field> + <field name="type">ir.actions.act_window</field> + <field name="res_model">helpdesk.ticket.category</field> + <field name="view_mode">tree,form</field> + </record> + <record id="helpdesk_ticket_team_action" model="ir.actions.act_window"> + <field name="name">Teams</field> + <field name="type">ir.actions.act_window</field> + <field name="res_model">helpdesk.ticket.team</field> + <field name="view_mode">tree,form</field> + </record> + <record id="helpdesk_ticket_stage_action" model="ir.actions.act_window"> + <field name="name">Stages</field> + <field name="type">ir.actions.act_window</field> + <field name="res_model">helpdesk.ticket.stage</field> + <field name="view_mode">tree,form</field> + </record> + <record id="helpdesk_ticket_tag_action" model="ir.actions.act_window"> + <field name="name">Ticket Tags</field> + <field name="type">ir.actions.act_window</field> + <field name="res_model">helpdesk.ticket.tag</field> + <field name="view_mode">tree,form</field> + </record> + <!-- Menus --> + <menuitem + id="helpdesk_ticket_main_menu" + name="Helpdesk" + sequence="16" + web_icon="helpdesk_mgmt,static/description/icon.png" + groups="group_helpdesk_user_own" + /> + <menuitem + id="helpdesk_ticket_dashboard_menu" + name="Dashboard" + parent="helpdesk_ticket_main_menu" + action="helpdesk_ticket_dashboard_action" + sequence="1" + /> + <menuitem + id="helpdesk_ticket_menu" + name="Tickets" + parent="helpdesk_ticket_main_menu" + action="helpdesk_ticket_action" + sequence="10" + /> + <menuitem + id="helpdesk_ticket_reporting_menu" + name="Reporting" + parent="helpdesk_ticket_main_menu" + sequence="25" + groups="group_helpdesk_manager" + /> + <menuitem + id="helpdesk_ticket_reporting_analysis" + name="Tickets" + parent="helpdesk_ticket_reporting_menu" + action="helpdesk_ticket_reporting_action" + sequence="5" + /> + <menuitem + id="helpdesk_ticket_config_main_menu" + name="Configuration" + parent="helpdesk_ticket_main_menu" + sequence="35" + groups="group_helpdesk_manager" + /> + <menuitem + id="helpdesk_ticket_channel_menu" + name="Channels" + parent="helpdesk_ticket_config_main_menu" + action="helpdesk_ticket_channel_action" + sequence="5" + /> + <menuitem + id="helpdesk_ticket_category_menu" + name="Categories" + parent="helpdesk_ticket_config_main_menu" + action="helpdesk_ticket_category_action" + sequence="15" + /> + <menuitem + id="helpdesk_ticket_stage_menu" + name="Stages" + parent="helpdesk_ticket_config_main_menu" + action="helpdesk_ticket_stage_action" + sequence="25" + /> + <menuitem + id="helpdesk_ticket_team_menu" + name="Teams" + parent="helpdesk_ticket_config_main_menu" + action="helpdesk_ticket_team_action" + sequence="35" + /> + <menuitem + id="helpdesk_ticket_tag_menu" + name="Ticket Tags" + parent="helpdesk_ticket_config_main_menu" + action="helpdesk_ticket_tag_action" + sequence="45" + /> +</odoo> diff --git a/helpdesk_mgmt/views/helpdesk_ticket_stage_views.xml b/helpdesk_mgmt/views/helpdesk_ticket_stage_views.xml new file mode 100644 index 0000000..0dff753 --- /dev/null +++ b/helpdesk_mgmt/views/helpdesk_ticket_stage_views.xml @@ -0,0 +1,76 @@ +<?xml version="1.0" encoding="utf-8" ?> +<odoo> + <record id="view_helpdesk_ticket_stage_search" model="ir.ui.view"> + <field name="name">helpdesk.ticket.stage.search</field> + <field name="model">helpdesk.ticket.stage</field> + <field name="arch" type="xml"> + <search string="Ticket Stage Search"> + <filter + string="Archived" + name="inactive" + domain="[('active','=',False)]" + /> + <separator /> + <field name="name" filter_domain="[('name', 'ilike', self)]" /> + </search> + </field> + </record> + <record id="view_helpdesk_ticket_stage_form" model="ir.ui.view"> + <field name="name">helpdesk.ticket.stage.form</field> + <field name="model">helpdesk.ticket.stage</field> + <field name="arch" type="xml"> + <form string="Stages"> + <header> + </header> + <sheet> + <div class="oe_button_box" name="button_box"> + <button + name="toggle_active" + type="object" + class="oe_stat_button" + icon="fa-check" + > + <field + name="active" + widget="boolean_button" + options='{"terminology": "active"}' + /> + </button> + </div> + <div class="oe_title"> + <label for="name" class="oe_edit_only" /> + <h1> + <field name="name" required="1" /> + </h1> + </div> + <group name="main"> + <group name="main_left"> + <field name="sequence" /> + <field name="mail_template_id" /> + <field + name="company_id" + groups="base.group_multi_company" + /> + </group> + <group name="main_right"> + <field name="closed" /> + <field name="unattended" /> + </group> + </group> + <field name="description" widget="html" /> + </sheet> + </form> + </field> + </record> + <record id="view_helpdesk_ticket_stage_tree" model="ir.ui.view"> + <field name="name">helpdesk.ticket.stage.tree</field> + <field name="model">helpdesk.ticket.stage</field> + <field name="arch" type="xml"> + <tree string="Ticket Stages"> + <field name="sequence" widget="handle" /> + <field name="name" /> + <field name="mail_template_id" /> + </tree> + </field> + </record> +</odoo> diff --git a/helpdesk_mgmt/views/helpdesk_ticket_tag_views.xml b/helpdesk_mgmt/views/helpdesk_ticket_tag_views.xml new file mode 100644 index 0000000..68d4a47 --- /dev/null +++ b/helpdesk_mgmt/views/helpdesk_ticket_tag_views.xml @@ -0,0 +1,62 @@ +<?xml version="1.0" encoding="utf-8" ?> +<odoo> + <record id="view_helpdesk_ticket_tag_search" model="ir.ui.view"> + <field name="name">helpdesk.ticket.tag.search</field> + <field name="model">helpdesk.ticket.tag</field> + <field name="arch" type="xml"> + <search string="Ticket Tag Search"> + <filter + string="Archived" + name="inactive" + domain="[('active','=',False)]" + /> + <separator /> + <field name="name" filter_domain="[('name', 'ilike', self)]" /> + </search> + </field> + </record> + <record id="view_helpdesk_ticket_tag_form" model="ir.ui.view"> + <field name="name">helpdesk.ticket.tag.form</field> + <field name="model">helpdesk.ticket.tag</field> + <field name="arch" type="xml"> + <form string="Tags"> + <header> + </header> + <sheet> + <div class="oe_button_box" name="button_box"> + <button + name="toggle_active" + type="object" + class="oe_stat_button" + icon="fa-check" + > + <field + name="active" + widget="boolean_button" + options="{"terminology": "active"}" + /> + </button> + </div> + <div class="oe_title"> + <label for="name" class="oe_edit_only" /> + <h1> + <field name="name" required="1" /> + </h1> + </div> + <group name="main"> + <field name="color" /> + </group> + </sheet> + </form> + </field> + </record> + <record id="view_helpdesk_ticket_tag_tree" model="ir.ui.view"> + <field name="name">helpdesk.ticket.tag.tree</field> + <field name="model">helpdesk.ticket.tag</field> + <field name="arch" type="xml"> + <tree string="Ticket Tags"> + <field name="name" /> + </tree> + </field> + </record> +</odoo> diff --git a/helpdesk_mgmt/views/helpdesk_ticket_team_views.xml b/helpdesk_mgmt/views/helpdesk_ticket_team_views.xml new file mode 100644 index 0000000..944de5d --- /dev/null +++ b/helpdesk_mgmt/views/helpdesk_ticket_team_views.xml @@ -0,0 +1,154 @@ +<?xml version="1.0" encoding="utf-8" ?> +<odoo> + <record id="view_helpdesk_ticket_team_search" model="ir.ui.view"> + <field name="name">helpdesk.ticket.team.search</field> + <field name="model">helpdesk.ticket.team</field> + <field name="arch" type="xml"> + <search string="Helpdesk Team Search"> + <filter + string="Archived" + name="inactive" + domain="[('active','=',False)]" + /> + <separator /> + <field name="name" filter_domain="[('name', 'ilike', self)]" /> + <field + name="user_ids" + string="User" + filter_domain="[('user_ids', 'ilike', self)]" + /> + </search> + </field> + </record> + <record id="view_helpdesk_team_form" model="ir.ui.view"> + <field name="name">view.helpdesk_team.form</field> + <field name="model">helpdesk.ticket.team</field> + <field name="arch" type="xml"> + <form string="Helpdesk Team"> + <sheet> + <div class="oe_button_box" name="button_box" /> + <widget + name="web_ribbon" + text="Archived" + bg_color="bg-danger" + attrs="{'invisible': [('active', '=', True)]}" + /> + <div class="oe_title"> + <label for="name" class="oe_edit_only" string="Helpdesk Team" /> + <h1> + <field name="name" placeholder="Helpdesk Team name..." /> + </h1> + <div name="options_active" /> + </div> + <group> + <group name="left"> + <field name="active" invisible="1" /> + <field name="user_id" domain="[('share', '=', False)]" /> + <label for="alias_name" string="Email Alias" /> + <div class="oe_inline" name="alias_def"> + <field + name="alias_id" + class="oe_read_only oe_inline" + string="Email Alias" + required="0" + /> + <div + class="oe_edit_only oe_inline" + name="edit_alias" + style="display: inline;" + > + <field name="alias_name" class="oe_inline" />@<field + name="alias_domain" + class="oe_inline" + readonly="1" + /> + <button + icon="fa-arrow-right" + type="action" + name="%(base_setup.action_general_configuration)d" + string="Configure domain name" + class="btn-link" + attrs="{'invisible': [('alias_domain', '!=', False)]}" + /> + </div> + </div> + <field + name="alias_contact" + class="oe_inline" + string="Accept Emails From" + /> + <field name="alias_user_id" string="Assign to" /> + <field + name="company_id" + options="{'no_create': True}" + groups="base.group_multi_company" + /> + </group> + <group name="right"> + </group> + </group> + <notebook> + <page name="members" string="Team Members"> + <field + name="user_ids" + widget="many2many" + options="{'not_delete': True}" + > + <kanban + quick_create="false" + create="true" + delete="true" + > + <field name="id" /> + <field name="name" /> + <templates> + <t t-name="kanban-box"> + <div + class="oe_kanban_global_click" + style="max-width: 200px" + > + <div class="o_kanban_record_top"> + <img + t-att-src="kanban_image('res.users', 'image_128', record.id.raw_value)" + class="oe_avatar oe_kanban_avatar_smallbox o_image_40_cover mb0" + alt="Avatar" + /> + <div + class="o_kanban_record_headings ml8" + > + <strong + class="o_kanban_record_title" + > + <field name="name" /> + </strong> + </div> + </div> + </div> + </t> + </templates> + </kanban> + </field> + </page> + </notebook> + </sheet> + <div class="oe_chatter"> + <field + name="message_follower_ids" + widget="mail_followers" + help="Follow this salesteam to automatically track the events associated to users of this team." + /> + <field name="message_ids" widget="mail_thread" /> + </div> + </form> + </field> + </record> + <record id="view_helpdesk_team_tree" model="ir.ui.view"> + <field name="name">view.helpdesk_team.tree</field> + <field name="model">helpdesk.ticket.team</field> + <field name="arch" type="xml"> + <tree string="Team"> + <field name="name" /> + </tree> + </field> + </record> +</odoo> diff --git a/helpdesk_mgmt/views/helpdesk_ticket_templates.xml b/helpdesk_mgmt/views/helpdesk_ticket_templates.xml new file mode 100644 index 0000000..6ec2679 --- /dev/null +++ b/helpdesk_mgmt/views/helpdesk_ticket_templates.xml @@ -0,0 +1,323 @@ +<?xml version="1.0" encoding="utf-8" ?> +<odoo> + <template + id="portal_layout" + name="Portal layout: ticket menu entry" + inherit_id="portal.portal_breadcrumbs" + priority="50" + > + <xpath expr="//ol[hasclass('o_portal_submenu')]" position="inside"> + <li + t-if="page_name == 'ticket' or ticket" + t-attf-class="breadcrumb-item #{'active ' if not ticket else ''}" + > + <a + t-if="ticket" + t-attf-href="/my/tickets?{{ keep_query() }}" + >Tickets</a> + <t t-else="">Tickets</t> + </li> + <li t-if="ticket" class="breadcrumb-item active"> + <t t-esc="ticket.name" /> + </li> + </xpath> + </template> + <template + id="portal_my_home" + name="Portal My Home : ticket entries" + inherit_id="portal.portal_my_home" + priority="40" + > + <xpath expr="//div[hasclass('o_portal_docs')]" position="inside"> + <t t-if="ticket_count" t-call="portal.portal_docs_entry"> + <t t-set="title">Tickets</t> + <t t-set="url" t-value="'/my/tickets'" /> + <t t-set="count" t-value="ticket_count" /> + </t> + <form method="POST" t-attf-action="/new/ticket"> + <input + type="hidden" + name="csrf_token" + t-att-value="request.csrf_token()" + /> + <button + name="create_new_ticket" + type="action" + class="btn btn-primary" + style="float: right; margin-right: 0px; margin-top:5px;" + >New Ticket</button> + </form> + </xpath> + </template> + <template id="portal_my_tickets" name="My tickets"> + <t t-call="portal.portal_layout"> + <t t-set="breadcrumbs_searchbar" t-value="True" /> + <form method="POST" t-attf-action="/new/ticket"> + <h3>Tickets + <t t-call="portal.portal_searchbar" /> + <button + name="create_new_ticket" + type="action" + class="btn btn-primary" + style="float: right; margin-right: 5px;" + >New Ticket</button> + </h3> + <input + type="hidden" + name="csrf_token" + t-att-value="request.csrf_token()" + /> + </form> + <t t-if="not tickets"> + <p>There are no tickets in your account.</p> + </t> + <div t-if="tickets" class="panel panel-default"> + <div class="table-responsive"> + <table class="table table-hover o_portal_my_doc_table"> + <thead> + <tr class="active"> + <th>By</th> + <th>Name</th> + <th>Category</th> + <th>Stage</th> + <th>Create Date</th> + <th>Last Stage Update</th> + <th>Close Date</th> + </tr> + </thead> + <t t-foreach="tickets" t-as="ticket"> + <tr> + <td> + <t t-esc="ticket.partner_id.name" /> + </td> + <td> + <a t-attf-href="/my/ticket/#{ticket.id}"> + <t t-esc="ticket.name" /> + </a> + </td> + <td> + <t t-esc="ticket.category_id.name" /> + </td> + <td> + <t t-esc="ticket.stage_id.name" /> + </td> + <td> + <span t-field="ticket.create_date" /> + </td> + <td> + <span t-field="ticket.last_stage_update" /> + </td> + <td> + <span t-field="ticket.closed_date" /> + </td> + </tr> + </t> + </table> + </div> + <div t-if="pager" class="o_portal_pager text-center"> + <t t-call="portal.pager" /> + </div> + </div> + </t> + </template> + <template id="portal_helpdesk_ticket_page" name="Ticket Portal Template"> + <t t-call="portal.portal_layout"> + <div class="container"> + <div class="panel panel-default"> + <div class="panel-heading"> + <div class="row"> + <div class="col-md-6"> + <h4> + <t t-call='portal.record_pager' /> + <span t-field="ticket.name" /> + </h4> + </div> + <t t-foreach="closed_stages" t-as="stage"> + <form + method="GET" + t-if="not ticket.closed_date" + t-attf-action="/ticket/close" + style="display:inline;" + > + <input + type="hidden" + name="ticket_id" + t-attf-value="#{ticket.id}" + /> + <input + type="hidden" + name="stage_id" + t-attf-value="#{stage.id}" + /> + <button + class="btn btn-success pull-right" + style="margin-right:15px;margin-top:3px;" + > + <span t-field="stage.name" /> + </button> + </form> + </t> + </div> + </div> + <div class="panel-body"> + <div class="mb8"> + <div> + <div class="pull-left"> + <strong>Date:</strong> + <span t-field="ticket.create_date" /> + <br /> + <b>Category:</b> + <t t-esc="ticket.category_id.name" /> + <br /> + <b>Stage:</b> + <t t-esc="ticket.stage_id.name" /> + <br /> + </div> + <div class="pull-right"> + <strong>Last Stage Update:</strong> + <span t-field="ticket.last_stage_update" /> + <br /> + </div> + </div> + <br /> + <br /> + <h4 class="page-header">Description</h4> + <t t-raw="ticket.description" /> + <br /> + </div> + <h4 class="page-header">History</h4> + <!-- Options:Ticket Chatter: user can reply --> + <t t-call="portal.message_thread"> + <t t-set="object" t-value="ticket" /> + </t> + </div> + </div> + </div> + <div class="oe_structure mb32" /> + </t> + </template> + <template id="portal_create_ticket" name="Create Ticket"> + <t t-call="portal.portal_layout"> + <div class="container"> + <div class="row"> + <div class="col-md-12"> + <h1 class="text-center">Send a new ticket</h1> + </div> + </div> + </div> + <form + action="/submitted/ticket" + method="POST" + class="form-horizontal mt32" + enctype="multipart/form-data" + > + <input + type="hidden" + name="csrf_token" + t-att-value="request.csrf_token()" + /> + <div class="form-group"> + <label + class="col-md-3 col-sm-4 control-label" + for="name" + >Name</label> + <div class="col-md-7 col-sm-8"> + <input + type="text" + class="form-control" + name="name" + t-attf-value="#{name}" + required="True" + /> + </div> + </div> + <div class="form-group"> + <label + class="col-md-3 col-sm-4 control-label" + for="email" + >Email</label> + <div class="col-md-7 col-sm-8"> + <input + type="email" + class="form-control" + name="email" + required="True" + t-attf-value="#{email}" + readonly="True" + /> + </div> + </div> + <div class="form-group"> + <label + class="col-md-3 col-sm-4 control-label" + for="category" + >Category</label> + <div class="col-md-7 col-sm-8"> + <select + class="form-control" + id="category" + name="category" + required="True" + > + <t t-foreach="categories" t-as="cat"> + <option t-attf-value="#{cat.id}"> + <t t-esc="cat.name" /> + </option> + </t> + </select> + </div> + </div> + <div class="form-group"> + <label + class="col-md-3 col-sm-4 control-label" + for="subject" + >Subject</label> + <div class="col-md-7 col-sm-8"> + <input + type="text" + class="form-control" + name="subject" + required="True" + /> + </div> + </div> + <div class="form-group"> + <label + class="col-md-3 col-sm-4 control-label" + for="attachment" + >Add Attachments</label> + <div class="col-md-7 col-sm-8"> + <div class="btn btn-default btn-file col-md-12"> + <input + class="form-control o_website_form_input" + name="attachment" + id="attachment" + type="file" + multiple="multiple" + /> + </div> + </div> + </div> + <div class="form-group"> + <label + class="col-md-3 col-dm-4 control-label" + for="description" + >Description</label> + <div class="col-md-7 col-sm-8"> + <textarea + class="form-control" + name="description" + style="min-height: 120px" + required="True" + /> + </div> + </div> + <div class="form-group"> + <div class="col-md-offset-3 col-sm-offset-4 col-sm-8 col-md-7"> + <button class="btn btn-primary btn-lg">Submit Ticket</button> + </div> + </div> + </form> + </t> + </template> +</odoo> diff --git a/helpdesk_mgmt/views/helpdesk_ticket_views.xml b/helpdesk_mgmt/views/helpdesk_ticket_views.xml new file mode 100644 index 0000000..6e068bf --- /dev/null +++ b/helpdesk_mgmt/views/helpdesk_ticket_views.xml @@ -0,0 +1,351 @@ +<?xml version='1.0' encoding='utf-8' ?> +<odoo> + <record + id="action_helpdesk_ticket_kanban_from_dashboard" + model="ir.actions.act_window" + > + <field name="name">Helpdesk Ticket</field> + <field name="res_model">helpdesk.ticket</field> + <field name="view_mode">kanban,tree,form</field> + <field name="context"> + {'default_team_id': active_id} + </field> + <field name="domain">[('team_id', '=', active_id)]</field> + </record> + <record id="helpdesk_ticket_view_search" model="ir.ui.view"> + <field name="name">helpdesk.ticket.view.search</field> + <field name="model">helpdesk.ticket</field> + <field name="arch" type="xml"> + <search> + <field name="number" /> + <field name="partner_id" /> + <field name="user_id" /> + <field name="name" /> + <field name="tag_ids" /> + <field name="stage_id" /> + <filter + string="Unassigned" + name="unassigned" + domain="[('user_id','=',False)]" + /> + <filter string="Open" name="open" domain="[('closed', '=', False )]" /> + <filter + string="Unattended" + name="unattended" + domain="[('unattended', '=', True )]" + /> + <filter + string="High Priority" + name="high_priority" + domain="[('priority','=','3')]" + /> + <separator /> + <filter + string="My Tickets" + name="mytickets" + domain="[('user_id','=',uid)]" + /> + <filter + string="My Followed Tickets" + name="my_followed_tickets" + domain="[('message_is_follower', '=', True)]" + /> + <separator /> + <filter + name="last_week" + string="Last Week" + domain="[('create_date','>', (context_today() - datetime.timedelta(weeks=1)).strftime('%%Y-%%m-%%d') )]" + /> + <separator /> + <filter + string="My Activities" + name="activities_my" + domain="[('activity_ids.user_id', '=', uid)]" + /> + <filter + string="Late Activities" + name="activities_overdue" + domain="[('activity_ids.date_deadline', '<', context_today().strftime('%Y-%m-%d'))]" + help="Show all records which has next action date is before today" + /> + <filter + string="Today Activities" + name="activities_today" + domain="[('activity_ids.date_deadline', '=', context_today().strftime('%Y-%m-%d'))]" + /> + <filter + string="Future Activities" + name="activities_upcoming_all" + domain="[('activity_ids.date_deadline', '>', context_today().strftime('%Y-%m-%d')) + ]" + /> + <group expand="0" string="Group By"> + <filter + string="Partner" + name="group_partner" + domain="[]" + context="{'group_by':'partner_id'}" + /> + <filter + string="Team" + name="group_team" + domain="[]" + context="{'group_by':'team_id'}" + /> + <filter + string="User" + name="group_user" + domain="[]" + context="{'group_by':'user_id'}" + /> + <filter + string="Stage" + name="group_stage" + domain="[]" + context="{'group_by':'stage_id'}" + /> + </group> + </search> + </field> + </record> + <record id="ticket_view_form" model="ir.ui.view"> + <field name="name">helpdesk.ticket.view.form</field> + <field name="model">helpdesk.ticket</field> + <field name="arch" type="xml"> + <form string="Helpdesk Ticket"> + <header> + <button + string="Assign to me" + name="assign_to_me" + type="object" + attrs="{'invisible' : [('user_id', '!=', False)]}" + /> + <field + name="stage_id" + widget="statusbar" + options="{'clickable': '1', 'fold_field': 'fold'}" + /> + </header> + <sheet> + <widget + name="web_ribbon" + title="Archived" + bg_color="bg-danger" + attrs="{'invisible': [('active', '=', True)]}" + /> + <div class="oe_button_box" name="button_box"> + </div> + <div class="oe_title"> + <h1 class="oe_title"> + <field name="number" /> + </h1> + <h2 class="o_row"> + <field name="name" /> + </h2> + </div> + <group name="main"> + <group> + <field name="active" invisible="1" /> + <field name="team_id" options='{"always_reload": True}' /> + <field name="user_ids" readonly="1" invisible="1" /> + <field + name="user_id" + domain="[('share', '=', False)]" + options='{"always_reload": True}' + /> + <field name="priority" widget="priority" /> + <field + name="company_id" + options="{'no_create': True}" + groups="base.group_multi_company" + /> + <field name="create_date" readonly="1" /> + <field name="channel_id" /> + </group> + <group> + <field name="partner_id" /> + <field name="partner_name" /> + <field name="partner_email" /> + <field name="category_id" /> + <field + name="tag_ids" + widget="many2many_tags" + options="{'no_create_edit': True}" + /> + </group> + </group> + <group> + <notebook> + <page string="Description" name="description"> + <field name="description" widget="html" /> + </page> + <page string="Other Information" name="other_info"> + <group> + <field name="last_stage_update" readonly="1" /> + <field name="assigned_date" readonly="1" /> + <field name="closed_date" readonly="1" /> + </group> + </page> + </notebook> + </group> + </sheet> + <div class="oe_chatter"> + <field name="message_follower_ids" widget="mail_followers" /> + <field name="activity_ids" widget="mail_activity" /> + <field + name="message_ids" + widget="mail_thread" + options="{'post_refresh': 'recipients', 'open_attachments': True}" + /> + </div> + </form> + </field> + </record> + <record id="ticket_view_tree" model="ir.ui.view"> + <field name="name">helpdesk.ticket.view.tree</field> + <field name="model">helpdesk.ticket</field> + <field name="arch" type="xml"> + <tree> + <field name="number" /> + <field name="name" /> + <field name="partner_name" /> + <field name="user_id" /> + <field name="stage_id" /> + <field name="priority" widget="priority" /> + <field name="create_date" readonly="1" /> + <field name="last_stage_update" /> + </tree> + </field> + </record> + <record id="view_helpdesk_ticket_kanban" model="ir.ui.view"> + <field name="name">helpdesk.ticket.kanban</field> + <field name="model">helpdesk.ticket</field> + <field name="priority" eval="100" /> + <field name="arch" type="xml"> + <kanban class="o_kanban_mobile" default_group_by="stage_id"> + <field name="number" /> + <field name="active" /> + <field name="name" /> + <field name="partner_name" /> + <field name="user_id" /> + <field name="color" /> + <field name="stage_id" /> + <field name="priority" widget="priority" /> + <field name="assigned_date" /> + <progressbar + field="activity_state" + colors="{"planned": "success", "today": "warning", "overdue": "danger"}" + /> + <templates> + <t t-name="kanban-box"> + <div + t-attf-class="oe_kanban_color_#{kanban_getcolor(record.color.raw_value)} oe_kanban_content oe_kanban_global_click" + > + <div + class="o_dropdown_kanban dropdown" + groups="base.group_user" + > + <a + class="dropdown-toggle btn" + role="button" + data-toggle="dropdown" + href="#" + title="Toggle dropdown" + > + <span class="fa fa-ellipsis-v" aria-hidden="true" /> + </a> + <ul + class="dropdown-menu" + role="menu" + aria-labelledby="dLabel" + > + <li t-if="widget.editable"> + <a type="edit">Edit</a> + </li> + <li t-if="widget.deletable"> + <a type="delete">Delete</a> + </li> + <li class="divider" /> + <li> + <ul + class="oe_kanban_colorpicker" + data-field="color" + /> + </li> + </ul> + </div> + <div class="o_kanban_record_top"> + <div class="o_kanban_record_headings"> + <field name="name" /> + <field + name="tag_ids" + widget="many2many_tags" + options="{'color_field': 'color'}" + /> + <field name="number" /> + <small class="o_kanban_record_subtitle text-muted"> + <field name="partner_id" /> + </small> + </div> + </div> + <div class="o_kanban_record_body" /> + <div class="o_kanban_record_bottom"> + <div class="oe_kanban_bottom_left"> + <field name="priority" widget="priority" /> + <field + name="activity_ids" + widget="kanban_activity" + related="activity_state" + /> + </div> + <div class="oe_kanban_bottom_right"> + <field + name="kanban_state" + widget="state_selection" + /> + <field name="activity_state" invisible="1" /> + <img + t-att-src="kanban_image('res.users', 'image_128', record.user_id.raw_value)" + t-att-title="record.user_id.value" + width="24" + height="24" + class="oe_kanban_avatar o_image_24_cover float-right" + t-att-alt="record.user_id.value" + /> + </div> + </div> + </div> + </t> + </templates> + </kanban> + </field> + </record> + <record id="helpdesk_ticket_views_pivot" model="ir.ui.view"> + <field name="name">helpdesk.ticket.view.pivot</field> + <field name="model">helpdesk.ticket</field> + <field name="arch" type="xml"> + <pivot string="Pivot Analysis" disable_linking="True"> + <field name="team_id" type="row" /> + <field name="assigned_date" type="col" /> + </pivot> + </field> + </record> + <record id="action_duplicate_ticket" model="ir.actions.server"> + <field name="name">Duplicate</field> + <field name="model_id" ref="model_helpdesk_ticket" /> + <field name="binding_model_id" ref="helpdesk_mgmt.model_helpdesk_ticket" /> + <field name="binding_view_types">list</field> + <field name="state">code</field> + <field name="code"> + action = model.action_duplicate_tickets() + </field> + </record> + <record id="model_helpdesk_ticket_action_share" model="ir.actions.server"> + <field name="name">Share</field> + <field name="model_id" ref="helpdesk_mgmt.model_helpdesk_ticket" /> + <field name="binding_model_id" ref="helpdesk_mgmt.model_helpdesk_ticket" /> + <field name="binding_view_types">form</field> + <field name="state">code</field> + <field name="code">action = records.action_share()</field> + </record> +</odoo> diff --git a/helpdesk_mgmt/views/res_partner_views.xml b/helpdesk_mgmt/views/res_partner_views.xml new file mode 100644 index 0000000..ebd9f84 --- /dev/null +++ b/helpdesk_mgmt/views/res_partner_views.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" ?> +<odoo> + <record id="view_partner_form" model="ir.ui.view"> + <field name="name">view_partner_form</field> + <field name="model">res.partner</field> + <field name="inherit_id" ref="base.view_partner_form" /> + <field name="arch" type="xml"> + <div class="oe_button_box" name="button_box"> + <button + context="{'search_default_open': True, 'default_partner_id': active_id}" + name="action_view_helpdesk_tickets" + type="object" + class="oe_stat_button" + icon="fa-life-ring" + > + <field invisible="True" name="helpdesk_ticket_active_count" /> + <field invisible="True" name="helpdesk_ticket_count" /> + <field name="helpdesk_ticket_count_string" widget="statinfo" /> + </button> + </div> + </field> + </record> +</odoo> |
