summaryrefslogtreecommitdiff
path: root/helpdesk_mgmt/views
diff options
context:
space:
mode:
authorRichard Sassine <richardsassine@tutanota.com>2021-05-04 18:00:38 +0300
committerRichard Sassine <richardsassine@tutanota.com>2021-05-04 18:00:38 +0300
commitad97722b1b35aff50d0adf13a19715f7b8373c07 (patch)
treeedf36f1114b896a01602e31dafd74efe45736427 /helpdesk_mgmt/views
initial commit
Diffstat (limited to 'helpdesk_mgmt/views')
-rw-r--r--helpdesk_mgmt/views/helpdesk_dashboard_views.xml141
-rw-r--r--helpdesk_mgmt/views/helpdesk_ticket_category_views.xml62
-rw-r--r--helpdesk_mgmt/views/helpdesk_ticket_channel_views.xml62
-rw-r--r--helpdesk_mgmt/views/helpdesk_ticket_menu.xml130
-rw-r--r--helpdesk_mgmt/views/helpdesk_ticket_stage_views.xml76
-rw-r--r--helpdesk_mgmt/views/helpdesk_ticket_tag_views.xml62
-rw-r--r--helpdesk_mgmt/views/helpdesk_ticket_team_views.xml154
-rw-r--r--helpdesk_mgmt/views/helpdesk_ticket_templates.xml323
-rw-r--r--helpdesk_mgmt/views/helpdesk_ticket_views.xml351
-rw-r--r--helpdesk_mgmt/views/res_partner_views.xml23
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="{&quot;terminology&quot;: &quot;active&quot;}"
+ />
+ </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','&gt;', (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', '&lt;', 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', '&gt;', 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="{&quot;planned&quot;: &quot;success&quot;, &quot;today&quot;: &quot;warning&quot;, &quot;overdue&quot;: &quot;danger&quot;}"
+ />
+ <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>