Merge branch 'master-helpdesk-bhumika' into 'master'
[ADD]: Added modules Helpdesk, Helpdesk Project Ext., Helpdesk Forum and Website Helpdesk See merge request flectra-hq/flectra!126
4
addons/helpdesk_basic/__init__.py
Normal file
@ -0,0 +1,4 @@
|
||||
# Part of Flectra See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from . import models
|
||||
from . import report
|
34
addons/helpdesk_basic/__manifest__.py
Normal file
@ -0,0 +1,34 @@
|
||||
# Part of Flectra See LICENSE file for full copyright and licensing details.
|
||||
|
||||
{
|
||||
'name': 'Helpdesk',
|
||||
'version': '1.0',
|
||||
'description': '''A help desk is a department inside an organization that
|
||||
is responsible for answering the technical questions of its users.
|
||||
''',
|
||||
'summary': '''A help desk is a department inside an organization that is
|
||||
responsible for answering the technical questions of its users.
|
||||
''',
|
||||
'category': 'Human Resources',
|
||||
'author': 'FlectraHQ',
|
||||
'website': 'https://flectrahq.com',
|
||||
'depends': ['mail'],
|
||||
'data': [
|
||||
'security/helpdesk_security_view.xml',
|
||||
'security/ir.model.access.csv',
|
||||
'data/helpdesk_data.xml',
|
||||
'views/view.xml',
|
||||
'views/helpdesk_ticket_view.xml',
|
||||
'views/helpdesk_team_view.xml',
|
||||
'views/issue_type_view.xml',
|
||||
'views/helpdesk_tag_view.xml',
|
||||
'views/helpdesk_stage_view.xml',
|
||||
'report/helpdesk_report_view.xml',
|
||||
],
|
||||
'demo': [
|
||||
'demo/helpdesk_demo.xml',
|
||||
],
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
'application': True,
|
||||
}
|
30
addons/helpdesk_basic/data/helpdesk_data.xml
Normal file
@ -0,0 +1,30 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<flectra>
|
||||
|
||||
<data noupdate="1">
|
||||
<record id="seq_helpdesk_issue" model="ir.sequence">
|
||||
<field name="name">Issues</field>
|
||||
<field name="code">helpdesk.ticket</field>
|
||||
<field name="prefix">ISSUE</field>
|
||||
<field name="padding">4</field>
|
||||
<field name="company_id" eval="False"/>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
|
||||
<record id="mt_issue_new" model="mail.message.subtype">
|
||||
<field name="name">Issue Opened</field>
|
||||
<field name="res_model">helpdesk.ticket</field>
|
||||
<field name="default" eval="False"/>
|
||||
<field name="hidden" eval="False"/>
|
||||
<field name="description">Issue opened</field>
|
||||
</record>
|
||||
|
||||
<record id="mt_issue_stage" model="mail.message.subtype">
|
||||
<field name="name">Stage Changed</field>
|
||||
<field name="res_model">helpdesk.ticket</field>
|
||||
<field name="default" eval="False"/>
|
||||
<field name="description">Stage changed</field>
|
||||
</record>
|
||||
|
||||
</flectra>
|
113
addons/helpdesk_basic/demo/helpdesk_demo.xml
Normal file
@ -0,0 +1,113 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<flectra noupdate="1">
|
||||
|
||||
<record id="helpdesk_stage_draft" model="helpdesk.stage">
|
||||
<field name="name">Draft</field>
|
||||
<field name="stage_type">draft</field>
|
||||
</record>
|
||||
|
||||
<record id="helpdesk_stage_new" model="helpdesk.stage">
|
||||
<field name="name">New</field>
|
||||
<field name="stage_type">new</field>
|
||||
</record>
|
||||
|
||||
<record id="helpdesk_stage_in_progress" model="helpdesk.stage">
|
||||
<field name="name">In Progress</field>
|
||||
<field name="stage_type">in_progress</field>
|
||||
</record>
|
||||
|
||||
<record id="helpdesk_stage_done" model="helpdesk.stage">
|
||||
<field name="name">Done</field>
|
||||
<field name="stage_type">done</field>
|
||||
</record>
|
||||
|
||||
<record id="helpdesk_tag_new" model="helpdesk.tag">
|
||||
<field name="name">New</field>
|
||||
<field name="code">new</field>
|
||||
</record>
|
||||
|
||||
<record id="helpdesk_tag_reopen" model="helpdesk.tag">
|
||||
<field name="name">Re-Open</field>
|
||||
<field name="code">reopen</field>
|
||||
</record>
|
||||
|
||||
<record id="helpdesk_tag_cancel" model="helpdesk.tag">
|
||||
<field name="name">Cancelled</field>
|
||||
<field name="code">cancel</field>
|
||||
</record>
|
||||
|
||||
<record id="helpdesk_tag_done" model="helpdesk.tag">
|
||||
<field name="name">Done</field>
|
||||
<field name="code">done</field>
|
||||
</record>
|
||||
|
||||
<record id="issue_type_hardware" model="issue.type">
|
||||
<field name="name">Hardware</field>
|
||||
<field name="code">H/W</field>
|
||||
<field name="reporting_template">
|
||||
Q. When did you purchased this product?
|
||||
A.
|
||||
|
||||
Q. Was it a damaged product at time of purchase?
|
||||
A.
|
||||
|
||||
Q. How long was the warrenty of this product?
|
||||
A.
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="issue_type_software" model="issue.type">
|
||||
<field name="name">Software</field>
|
||||
<field name="code">S/W</field>
|
||||
<field name="reporting_template">
|
||||
Q. What is the version?
|
||||
A.
|
||||
|
||||
Q. What is the OS of your system?
|
||||
A.
|
||||
|
||||
Q. When did you last updated your system?
|
||||
A.
|
||||
|
||||
Q. When did you last updated this software?
|
||||
A.
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="helpdesk_software" model="helpdesk.team">
|
||||
<field name="name">Team Software</field>
|
||||
<field name="alias_name">team_software</field>
|
||||
<field name="issue_type_ids"
|
||||
eval="[(6,0,[ref('helpdesk_basic.issue_type_software')])]"/>
|
||||
<field name="stage_ids"
|
||||
eval="[(6,0,[ref('helpdesk_basic.helpdesk_stage_new'), ref('helpdesk_basic.helpdesk_stage_in_progress'),
|
||||
ref('helpdesk_basic.helpdesk_stage_done')])]"/>
|
||||
<field name="member_ids"
|
||||
eval="[(6,0,[ref('base.user_root'), ref('base.user_demo')])]"/>
|
||||
</record>
|
||||
|
||||
<record id="helpdesk_hardware" model="helpdesk.team">
|
||||
<field name="name">Team Hardware</field>
|
||||
<field name="alias_name">team_hardware</field>
|
||||
<field name="issue_type_ids"
|
||||
eval="[(6,0,[ref('helpdesk_basic.issue_type_hardware')])]"/>
|
||||
<field name="stage_ids"
|
||||
eval="[(6,0,[ref('helpdesk_basic.helpdesk_stage_draft'), ref('helpdesk_basic.helpdesk_stage_in_progress'),
|
||||
ref('helpdesk_basic.helpdesk_stage_done')])]"/>
|
||||
<field name="member_ids"
|
||||
eval="[(6,0,[ref('base.user_root'), ref('base.user_demo')])]"/>
|
||||
</record>
|
||||
|
||||
<record id="helpdesk_ticket" model="helpdesk.ticket">
|
||||
<field name="name">Software Issue</field>
|
||||
<field name="priority">2</field>
|
||||
<field name="issue_type_id"
|
||||
eval="ref('helpdesk_basic.issue_type_software')"/>
|
||||
<field name="team_id"
|
||||
eval="ref('helpdesk_basic.helpdesk_software')"/>
|
||||
<field name="assigned_to_id" eval="ref('base.user_demo')"/>
|
||||
<field name="tag_ids"
|
||||
eval="[(6,0,[ref('helpdesk_basic.helpdesk_tag_new')])]"/>
|
||||
</record>
|
||||
|
||||
</flectra>
|
301
addons/helpdesk_basic/doc/helpdesk.rst
Normal file
@ -0,0 +1,301 @@
|
||||
:banner: image/helpdesk.jpg
|
||||
|
||||
.. _setup/install:
|
||||
|
||||
========
|
||||
Helpdesk
|
||||
========
|
||||
|
||||
This document provides a brief information of what is helpdesk and its
|
||||
workflow.
|
||||
|
||||
.. _helpdesk_dashboard:
|
||||
|
||||
Dashboard
|
||||
---------
|
||||
|
||||
A helpdesk is a department inside an organization that is responsible for
|
||||
answering the technical questions of its users.
|
||||
|
||||
A dashboard of helpdesk displays teamwise total counts of helpdesk, its issue
|
||||
type and graphical view.
|
||||
|
||||
.. image:: image/dashboard.png
|
||||
:class: imgresponsive
|
||||
|
||||
* Total Issues: Total number of issues.
|
||||
|
||||
* Issue Types: Type of an issue.
|
||||
|
||||
* Graphical view for the total number of issues.
|
||||
|
||||
.. _teamwise_ticket_view:
|
||||
|
||||
Tickets displayed in below image will be filtered by its team clicked from
|
||||
dashboard.
|
||||
|
||||
.. image:: image/teamwise_ticket.png
|
||||
:class: imgresponsive
|
||||
|
||||
|
||||
Helpdesk
|
||||
--------
|
||||
|
||||
There are different types of views for helpdesk ticket.
|
||||
|
||||
.. _helpdesk_kanban_view:
|
||||
|
||||
Kanban View
|
||||
===========
|
||||
|
||||
The kanban view for helpdesk, shows the details like issue name, issue
|
||||
type, team, tags and also its priority and user related details which will
|
||||
be grouped by its state.
|
||||
|
||||
* Name: Title of the issue.
|
||||
|
||||
* Team: Team which will be responsible to solve the issue.
|
||||
|
||||
* Issue Type: Type of the issue.
|
||||
|
||||
* Tags: Tags for the issue.
|
||||
|
||||
* Priority: Priority of the issue.
|
||||
|
||||
* Assigned To: the user which is assigned a current issue to fix.
|
||||
|
||||
.. image:: image/helpdesk_ticket_kanban.png
|
||||
:class: imgresponsive
|
||||
|
||||
.. _helpdesk_form_view:
|
||||
|
||||
Form View
|
||||
=========
|
||||
|
||||
The form view for helpdesk shows the details like issue sequence, issue
|
||||
title, issue creator and its related partner details, issue type, team,
|
||||
assigned to users, tags, its priority and its start and end date related
|
||||
details.
|
||||
|
||||
.. image:: image/ticket_form.png
|
||||
:class: imgresponsive
|
||||
|
||||
Form view will take the following information to create an issue ticket:
|
||||
|
||||
* Sequence: Sequence of the issue which will be automatically generated.
|
||||
|
||||
* Issue Title: Title of the issue.
|
||||
|
||||
* Created By: The one who creates the current issue.
|
||||
|
||||
* Related Partner: Related partner details of created by the user which will be
|
||||
automatically fetched by the system.
|
||||
|
||||
* Start Date: Starting date of the issue.
|
||||
|
||||
* End Date: Ending date of the issue.
|
||||
|
||||
* Issue Type: Type of the current issue.
|
||||
|
||||
* Team: Team responsible to solve the current issue.
|
||||
|
||||
* Assigned To: User which is assigned to solve the current issue.
|
||||
|
||||
* Tags: Tags if any for the current issue.
|
||||
|
||||
* Priority: Priority for the issue to be fixed in specific time.
|
||||
|
||||
* Description: Detailed description of the issue.
|
||||
|
||||
On the top there are two buttons:
|
||||
|
||||
* Active: Make an issue Active/Archive.
|
||||
|
||||
* Attachments: It will redirect you to the attachments which are attached by
|
||||
users for issues. It will be helpful for the user to understand and fix
|
||||
exact issue.
|
||||
|
||||
|
||||
Helpdesk Team
|
||||
-------------
|
||||
|
||||
.. _helpdesk_team_kanban_view:
|
||||
|
||||
Kanban View
|
||||
===========
|
||||
|
||||
A kanban view for helpdesk team which shows the total issues assigned to a
|
||||
particular team and its issue type.
|
||||
|
||||
.. image:: image/helpdesk_team.png
|
||||
:class: imgresponsive
|
||||
|
||||
* Total Issues: Total number of issues.
|
||||
|
||||
* Issue Types: Type of an issue.
|
||||
|
||||
.. _helpdesk_team_form_view:
|
||||
|
||||
Form View
|
||||
=========
|
||||
|
||||
The helpdesk team's form view takes the following information to create a team:
|
||||
|
||||
* Helpdesk Team: Name of the team.
|
||||
|
||||
* Stages: Stages of the issue tickets.
|
||||
|
||||
* Issue Type: Multiple types of issues that will be solved by the current team.
|
||||
|
||||
* Email Alias: Mail Alias for the team.
|
||||
|
||||
* Team Members: Select members for the team.
|
||||
|
||||
.. image:: image/helpdesk_team_form.png
|
||||
:class: imgresponsive
|
||||
|
||||
|
||||
Issue Type
|
||||
----------
|
||||
|
||||
.. _issue_type_kanban_view:
|
||||
|
||||
Kanban View
|
||||
===========
|
||||
|
||||
From the helpdesk issue types kanban view one can create an issue by directly
|
||||
clicking on ``Create`` button displayed on kanban view. There are the list
|
||||
of stages and its related count for the issues present in that state. Also,
|
||||
there is a graphical representation of the issue count based on its type of
|
||||
issue.
|
||||
|
||||
.. image:: image/issue_type_kanban.png
|
||||
:class: imgresponsive
|
||||
|
||||
.. _issue_type_form_view:
|
||||
|
||||
Form View
|
||||
=========
|
||||
|
||||
The view of issue type form takes the following information to create an issue
|
||||
type:
|
||||
|
||||
* Name: Name of the issue type.
|
||||
|
||||
* Code: Unique code for the issue type.
|
||||
|
||||
* Reporting Template Content: Content details / Basic Information to get from
|
||||
the user at the time of registering an issue.
|
||||
|
||||
.. image:: image/issue_type_form.png
|
||||
:class: imgresponsive
|
||||
|
||||
|
||||
Helpdesk Stages
|
||||
---------------
|
||||
|
||||
.. _helpdesk_stage_tree_view:
|
||||
|
||||
Tree View
|
||||
=========
|
||||
|
||||
Tree view for helpdesk stages.
|
||||
|
||||
.. image:: image/stages.png
|
||||
:class: imgresponsive
|
||||
|
||||
.. _helpdesk_stage_form_view:
|
||||
|
||||
Form View
|
||||
=========
|
||||
|
||||
The form view of helpdesk stages takes the following information to create a
|
||||
new stage:
|
||||
|
||||
* Name: Name of the stage.
|
||||
|
||||
* Description: Description of the stage if any.
|
||||
|
||||
.. image:: image/stages_form.png
|
||||
:class: imgresponsive
|
||||
|
||||
|
||||
Helpdesk Tags
|
||||
-------------
|
||||
|
||||
.. _helpdesk_tag_tree_view:
|
||||
|
||||
Tree View
|
||||
=========
|
||||
|
||||
Tree view for helpdesk tags.
|
||||
|
||||
.. image:: image/tags.png
|
||||
:class: imgresponsive
|
||||
|
||||
.. _helpdesk_tag_form_view:
|
||||
|
||||
Form View
|
||||
=========
|
||||
|
||||
The form view of helpdesk tags takes the following information to create a
|
||||
new tag:
|
||||
|
||||
* Name: Name of the tag.
|
||||
|
||||
* Code: Unique code for the tag.
|
||||
|
||||
.. image:: image/tags_form.png
|
||||
:class: imgresponsive
|
||||
|
||||
|
||||
Helpdesk Report
|
||||
---------------
|
||||
|
||||
.. _helpdesk_bar_graph_report:
|
||||
|
||||
Bar Graph Representation
|
||||
========================
|
||||
|
||||
Bar graph representation of helpdesk issues based on a team in which issue
|
||||
tickets are assigned.
|
||||
|
||||
.. image:: image/helpdesk_report_bar_graph.png
|
||||
:class: imgresponsive
|
||||
|
||||
|
||||
.. _helpdesk_line_graph_report:
|
||||
|
||||
Line Graph Representation
|
||||
=========================
|
||||
|
||||
Line graph representation of helpdesk issues based on a team in which issue
|
||||
tickets are assigned.
|
||||
|
||||
.. image:: image/helpdesk_report_line_graph.png
|
||||
:class: imgresponsive
|
||||
|
||||
|
||||
.. _helpdesk_pie_chart_report:
|
||||
|
||||
Pie Chart Representation
|
||||
========================
|
||||
|
||||
Pie chart representation of helpdesk issues based on a team in which issue
|
||||
tickets are assigned.
|
||||
|
||||
.. image:: image/helpdesk_report_pie_chart.png
|
||||
:class: imgresponsive
|
||||
|
||||
|
||||
.. _helpdesk_analysis_report:
|
||||
|
||||
Analysis Report
|
||||
===============
|
||||
|
||||
Analysis report for helpdesk issues to get different details in a single
|
||||
report. There are multiple measures to get the different output of the same
|
||||
report.
|
||||
|
||||
.. image:: image/helpdesk_analysis_report.png
|
||||
:class: imgresponsive
|
BIN
addons/helpdesk_basic/doc/image/dashboard.png
Normal file
After Width: | Height: | Size: 39 KiB |
BIN
addons/helpdesk_basic/doc/image/helpdesk.jpg
Normal file
After Width: | Height: | Size: 49 KiB |
BIN
addons/helpdesk_basic/doc/image/helpdesk_analysis_report.png
Normal file
After Width: | Height: | Size: 43 KiB |
BIN
addons/helpdesk_basic/doc/image/helpdesk_report_bar_graph.png
Normal file
After Width: | Height: | Size: 36 KiB |
BIN
addons/helpdesk_basic/doc/image/helpdesk_report_line_graph.png
Normal file
After Width: | Height: | Size: 32 KiB |
BIN
addons/helpdesk_basic/doc/image/helpdesk_report_pie_chart.png
Normal file
After Width: | Height: | Size: 41 KiB |
BIN
addons/helpdesk_basic/doc/image/helpdesk_team.png
Normal file
After Width: | Height: | Size: 34 KiB |
BIN
addons/helpdesk_basic/doc/image/helpdesk_team_form.png
Normal file
After Width: | Height: | Size: 45 KiB |
BIN
addons/helpdesk_basic/doc/image/helpdesk_ticket_kanban.png
Normal file
After Width: | Height: | Size: 34 KiB |
BIN
addons/helpdesk_basic/doc/image/issue_type_form.png
Normal file
After Width: | Height: | Size: 39 KiB |
BIN
addons/helpdesk_basic/doc/image/issue_type_kanban.png
Normal file
After Width: | Height: | Size: 38 KiB |
BIN
addons/helpdesk_basic/doc/image/stages.png
Normal file
After Width: | Height: | Size: 19 KiB |
BIN
addons/helpdesk_basic/doc/image/stages_form.png
Normal file
After Width: | Height: | Size: 22 KiB |
BIN
addons/helpdesk_basic/doc/image/tags.png
Normal file
After Width: | Height: | Size: 17 KiB |
BIN
addons/helpdesk_basic/doc/image/tags_form.png
Normal file
After Width: | Height: | Size: 20 KiB |
BIN
addons/helpdesk_basic/doc/image/teamwise_ticket.png
Normal file
After Width: | Height: | Size: 48 KiB |
BIN
addons/helpdesk_basic/doc/image/ticket_form.png
Normal file
After Width: | Height: | Size: 68 KiB |
706
addons/helpdesk_basic/i18n/helpdesk_basic.pot
Normal file
@ -0,0 +1,706 @@
|
||||
# Translation of Flectra Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * helpdesk_basic
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Flectra Server 1.3\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2018-07-05 09:52+0000\n"
|
||||
"PO-Revision-Date: 2018-07-05 09:52+0000\n"
|
||||
"Last-Translator: <>\n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: \n"
|
||||
"Plural-Forms: \n"
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.ui.view,arch_db:helpdesk_basic.issue_type_dashboard_kanban_view
|
||||
msgid "<span>Ticket</span>"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.ui.view,arch_db:helpdesk_basic.issue_type_dashboard_kanban_view
|
||||
msgid "<strong><span>Issue Type: </span></strong>"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.ui.view,arch_db:helpdesk_basic.helpdesk_kanban_view
|
||||
msgid "<strong>Issue Type:</strong>"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.ui.view,arch_db:helpdesk_basic.helpdesk_team_kanban_view
|
||||
#: model:ir.ui.view,arch_db:helpdesk_basic.team_dashboard_view
|
||||
msgid "<strong>Issue Types</strong>"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.ui.view,arch_db:helpdesk_basic.helpdesk_kanban_view
|
||||
msgid "<strong>Tags: </strong>"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.ui.view,arch_db:helpdesk_basic.helpdesk_kanban_view
|
||||
msgid "<strong>Team:</strong>"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.ui.view,arch_db:helpdesk_basic.helpdesk_team_kanban_view
|
||||
#: model:ir.ui.view,arch_db:helpdesk_basic.team_dashboard_view
|
||||
msgid "<strong>Total Issues</strong>"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.model.fields,help:helpdesk_basic.field_helpdesk_team_alias_defaults
|
||||
msgid "A Python dictionary that will be evaluated to provide default values when creating new records for this alias."
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_helpdesk_team_active
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_helpdesk_ticket_active
|
||||
msgid "Active"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_helpdesk_ticket_attachments_count
|
||||
msgid "Add Attachments"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_helpdesk_team_alias_id
|
||||
msgid "Alias"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_helpdesk_team_alias_contact
|
||||
msgid "Alias Contact Security"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_helpdesk_team_alias_name
|
||||
msgid "Alias Name"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_helpdesk_team_alias_domain
|
||||
msgid "Alias domain"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_helpdesk_team_alias_model_id
|
||||
msgid "Aliased Model"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.ui.view,arch_db:helpdesk_basic.view_helpdesk_search
|
||||
msgid "Archived"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_helpdesk_report_assigned_to_id
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_helpdesk_ticket_assigned_to_id
|
||||
#: model:ir.ui.view,arch_db:helpdesk_basic.view_helpdesk_search
|
||||
msgid "Assigned To"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.ui.view,arch_db:helpdesk_basic.report_helpdesk_view_search
|
||||
msgid "Assignee"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: code:addons/helpdesk_basic/models/helpdesk_ticket.py:146
|
||||
#: model:ir.ui.view,arch_db:helpdesk_basic.view_helpdesk_form
|
||||
#, python-format
|
||||
msgid "Attachments"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.ui.view,arch_db:helpdesk_basic.report_helpdesk_view_search
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_helpdesk_tag_code
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_issue_type_code
|
||||
#: model:ir.ui.view,arch_db:helpdesk_basic.view_issue_type_search
|
||||
msgid "Code"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_helpdesk_team_color
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_helpdesk_ticket_color
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_issue_type_color
|
||||
msgid "Color Index"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.ui.view,arch_db:helpdesk_basic.report_helpdesk_view_search
|
||||
#: model:ir.ui.view,arch_db:helpdesk_basic.view_helpdesk_search
|
||||
msgid "Company"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.ui.menu,name:helpdesk_basic.menu_helpdesk_config
|
||||
msgid "Configuration"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: code:addons/helpdesk_basic/models/helpdesk_ticket.py:191
|
||||
#: code:addons/helpdesk_basic/models/issue_type.py:45
|
||||
#, python-format
|
||||
msgid "Create Ticket"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_helpdesk_report_user_id
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_helpdesk_ticket_user_id
|
||||
#: model:ir.ui.view,arch_db:helpdesk_basic.view_helpdesk_search
|
||||
msgid "Created By"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_helpdesk_stage_create_uid
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_helpdesk_tag_create_uid
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_helpdesk_team_create_uid
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_helpdesk_ticket_create_uid
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_issue_type_create_uid
|
||||
msgid "Created by"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_helpdesk_stage_create_date
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_helpdesk_tag_create_date
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_helpdesk_team_create_date
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_helpdesk_ticket_create_date
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_issue_type_create_date
|
||||
msgid "Created on"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.actions.act_window,name:helpdesk_basic.act_team_dashboard_view
|
||||
#: model:ir.ui.menu,name:helpdesk_basic.menu_helpdesk_dashboard
|
||||
msgid "Dashboard"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_helpdesk_team_alias_defaults
|
||||
msgid "Default Values"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.ui.view,arch_db:helpdesk_basic.helpdesk_kanban_view
|
||||
msgid "Delete"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_helpdesk_report_description
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_helpdesk_stage_description
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_helpdesk_ticket_description
|
||||
#: model:ir.ui.view,arch_db:helpdesk_basic.view_helpdesk_form
|
||||
msgid "Description"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_helpdesk_report_display_name
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_helpdesk_stage_display_name
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_helpdesk_tag_display_name
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_helpdesk_team_display_name
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_helpdesk_ticket_display_name
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_issue_type_display_name
|
||||
msgid "Display Name"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.ui.view,arch_db:helpdesk_basic.report_helpdesk_view_search
|
||||
msgid "Done"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.ui.view,arch_db:helpdesk_basic.report_helpdesk_view_search
|
||||
msgid "Draft"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.ui.view,arch_db:helpdesk_basic.report_helpdesk_view_search
|
||||
msgid "Draft Issues"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.ui.view,arch_db:helpdesk_basic.helpdesk_kanban_view
|
||||
msgid "Edit Ticket"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_helpdesk_ticket_email
|
||||
msgid "Email"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.ui.view,arch_db:helpdesk_basic.helpdesk_team_form_view
|
||||
msgid "Email Alias"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_helpdesk_report_end_date
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_helpdesk_ticket_end_date
|
||||
#: model:ir.ui.view,arch_db:helpdesk_basic.report_helpdesk_view_search
|
||||
msgid "End Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_helpdesk_stage_fold
|
||||
msgid "Fold in Kanban"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: code:addons/helpdesk_basic/models/helpdesk_team.py:111
|
||||
#: code:addons/helpdesk_basic/models/issue_type.py:70
|
||||
#, python-format
|
||||
msgid "Future"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.ui.view,arch_db:helpdesk_basic.report_helpdesk_view_search
|
||||
msgid "Group By"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.ui.view,arch_db:helpdesk_basic.view_helpdesk_search
|
||||
#: model:ir.ui.view,arch_db:helpdesk_basic.view_helpdesk_team_search
|
||||
msgid "Group By..."
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.actions.act_window,name:helpdesk_basic.act_helpdesk_view
|
||||
#: model:ir.module.category,name:helpdesk_basic.module_helpdesk_category
|
||||
#: model:ir.ui.menu,name:helpdesk_basic.menu_helpdesk
|
||||
#: model:ir.ui.menu,name:helpdesk_basic.menu_main_helpdesk
|
||||
#: model:ir.ui.menu,name:helpdesk_basic.sub_menu_helpdesk
|
||||
#: model:ir.ui.view,arch_db:helpdesk_basic.view_helpdesk_form
|
||||
#: model:ir.ui.view,arch_db:helpdesk_basic.view_helpdesk_pivot
|
||||
#: model:ir.ui.view,arch_db:helpdesk_basic.view_helpdesk_search
|
||||
#: model:ir.ui.view,arch_db:helpdesk_basic.view_helpdesk_tag_form
|
||||
msgid "Helpdesk"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.actions.act_window,name:helpdesk_basic.action_helpdesk_report
|
||||
#: model:ir.ui.view,arch_db:helpdesk_basic.report_helpdesk_view_search
|
||||
#: model:ir.ui.view,arch_db:helpdesk_basic.view_helpdesk_report_graph
|
||||
msgid "Helpdesk Analysis"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.model,name:helpdesk_basic.model_helpdesk_report
|
||||
#: model:ir.ui.menu,name:helpdesk_basic.helpdesk_report
|
||||
msgid "Helpdesk Report"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.ui.view,arch_db:helpdesk_basic.view_report_helpdesk_pivot
|
||||
msgid "Helpdesk Statistics"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.actions.act_window,name:helpdesk_basic.action_helpdesk_team
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_helpdesk_team_name
|
||||
#: model:ir.ui.menu,name:helpdesk_basic.helpdesk_team_menu
|
||||
#: model:ir.ui.view,arch_db:helpdesk_basic.report_helpdesk_view_search
|
||||
msgid "Helpdesk Team"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: selection:helpdesk.report,priority:0
|
||||
#: selection:helpdesk.ticket,priority:0
|
||||
msgid "High"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_helpdesk_report_id
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_helpdesk_stage_id
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_helpdesk_tag_id
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_helpdesk_team_id
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_helpdesk_ticket_id
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_issue_type_id
|
||||
msgid "ID"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.model.fields,help:helpdesk_basic.field_helpdesk_team_alias_parent_thread_id
|
||||
msgid "ID of the parent record holding the alias (example: project holding the task creation alias)"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.ui.view,arch_db:helpdesk_basic.report_helpdesk_view_search
|
||||
msgid "In Progress"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_helpdesk_ticket_is_accessible
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_helpdesk_ticket_is_assigned
|
||||
msgid "Is Accessible"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.ui.view,arch_db:helpdesk_basic.view_helpdesk_form
|
||||
msgid "Issue Details"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.actions.act_window,name:helpdesk_basic.action_issue_type
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_helpdesk_report_issue_type_id
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_helpdesk_team_issue_type_ids
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_helpdesk_ticket_issue_type_id
|
||||
#: model:ir.ui.menu,name:helpdesk_basic.issue_type_menu
|
||||
#: model:ir.ui.view,arch_db:helpdesk_basic.view_issue_type_form
|
||||
msgid "Issue Type"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.ui.view,arch_db:helpdesk_basic.helpdesk_team_kanban_view
|
||||
#: model:ir.ui.view,arch_db:helpdesk_basic.team_dashboard_view
|
||||
msgid "Issues"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.ui.view,arch_db:helpdesk_basic.report_helpdesk_view_search
|
||||
msgid "Journal invoices with period in current year"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_helpdesk_team_kanban_dashboard_graph
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_issue_type_kanban_dashboard_graph
|
||||
msgid "Kanban Dashboard Graph"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_helpdesk_report___last_update
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_helpdesk_stage___last_update
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_helpdesk_tag___last_update
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_helpdesk_team___last_update
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_helpdesk_ticket___last_update
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_issue_type___last_update
|
||||
msgid "Last Modified on"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.ui.view,arch_db:helpdesk_basic.report_helpdesk_view_search
|
||||
msgid "Last Month"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_helpdesk_stage_write_uid
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_helpdesk_tag_write_uid
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_helpdesk_team_write_uid
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_helpdesk_ticket_write_uid
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_issue_type_write_uid
|
||||
msgid "Last Updated by"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_helpdesk_stage_write_date
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_helpdesk_tag_write_date
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_helpdesk_team_write_date
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_helpdesk_ticket_write_date
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_issue_type_write_date
|
||||
msgid "Last Updated on"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: selection:helpdesk.report,priority:0
|
||||
#: selection:helpdesk.ticket,priority:0
|
||||
msgid "Low"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:res.groups,name:helpdesk_basic.helpdesk_group_manager
|
||||
msgid "Manager"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: selection:helpdesk.report,priority:0
|
||||
#: selection:helpdesk.ticket,priority:0
|
||||
msgid "Medium"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_helpdesk_team_member_ids
|
||||
msgid "Members"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.ui.view,arch_db:helpdesk_basic.report_helpdesk_view_search
|
||||
msgid "My Issues"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_helpdesk_report_name
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_helpdesk_stage_name
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_helpdesk_tag_name
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_helpdesk_ticket_name
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_issue_type_name
|
||||
#: model:ir.ui.view,arch_db:helpdesk_basic.view_issue_type_search
|
||||
msgid "Name"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: code:addons/helpdesk_basic/models/helpdesk_ticket.py:53
|
||||
#: code:addons/helpdesk_basic/models/helpdesk_ticket.py:55
|
||||
#: model:ir.ui.view,arch_db:helpdesk_basic.report_helpdesk_view_search
|
||||
#, python-format
|
||||
msgid "New"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.model.fields,help:helpdesk_basic.field_helpdesk_team_alias_force_thread_id
|
||||
msgid "Optional ID of a thread (record) to which all incoming messages will be attached, even if they did not reply to it. If set, this will disable the creation of new records completely."
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_helpdesk_team_alias_user_id
|
||||
msgid "Owner"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_helpdesk_team_alias_parent_model_id
|
||||
msgid "Parent Model"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_helpdesk_team_alias_parent_thread_id
|
||||
msgid "Parent Record Thread ID"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.model.fields,help:helpdesk_basic.field_helpdesk_team_alias_parent_model_id
|
||||
msgid "Parent model holding the alias. The model holding the alias reference is not necessarily the model given by alias_model_id (example: project (parent_model) and task (model))"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.ui.view,arch_db:helpdesk_basic.report_helpdesk_view_search
|
||||
msgid "Partner"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.model.fields,help:helpdesk_basic.field_helpdesk_ticket_partner_id
|
||||
msgid "Partner-related data of the user"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: code:addons/helpdesk_basic/models/helpdesk_team.py:103
|
||||
#: code:addons/helpdesk_basic/models/issue_type.py:62
|
||||
#, python-format
|
||||
msgid "Past"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.model.fields,help:helpdesk_basic.field_helpdesk_team_alias_contact
|
||||
msgid "Policy to post a message on the document using the mailgateway.\n"
|
||||
"- everyone: everyone can post\n"
|
||||
"- partners: only authenticated partners\n"
|
||||
"- followers: only followers of the related document or members of following channels\n"
|
||||
""
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_helpdesk_report_priority
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_helpdesk_ticket_priority
|
||||
msgid "Priority"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_helpdesk_team_alias_force_thread_id
|
||||
msgid "Record Thread ID"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.ui.view,arch_db:helpdesk_basic.helpdesk_kanban_view
|
||||
msgid "Record's Color"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_helpdesk_report_partner_id
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_helpdesk_ticket_partner_id
|
||||
#: model:ir.ui.view,arch_db:helpdesk_basic.view_helpdesk_search
|
||||
msgid "Related Partner"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.ui.menu,name:helpdesk_basic.helpdesk_report_main_menu
|
||||
msgid "Reporting"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_issue_type_reporting_template
|
||||
msgid "Reporting Template"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.ui.view,arch_db:helpdesk_basic.view_issue_type_form
|
||||
msgid "Reporting Template Content"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.ui.view,arch_db:helpdesk_basic.view_helpdesk_search
|
||||
#: model:ir.ui.view,arch_db:helpdesk_basic.view_helpdesk_team_search
|
||||
msgid "Search for Helpdesk"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.ui.view,arch_db:helpdesk_basic.view_issue_type_search
|
||||
msgid "Search for Issue Type"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_helpdesk_report_sequence
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_helpdesk_ticket_sequence
|
||||
msgid "Sequence"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.ui.view,arch_db:helpdesk_basic.helpdesk_team_kanban_view
|
||||
#: model:ir.ui.view,arch_db:helpdesk_basic.issue_type_dashboard_kanban_view
|
||||
#: model:ir.ui.view,arch_db:helpdesk_basic.team_dashboard_view
|
||||
msgid "Settings"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:helpdesk.ticket,name:helpdesk_basic.helpdesk_ticket
|
||||
msgid "Software Issue"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_helpdesk_report_stage_id
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_helpdesk_ticket_stage_id
|
||||
msgid "Stage"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.actions.act_window,name:helpdesk_basic.act_helpdesk_stage_view
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_helpdesk_team_stage_ids
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_issue_type_stages
|
||||
#: model:ir.ui.menu,name:helpdesk_basic.stage_menu
|
||||
msgid "Stages"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_helpdesk_report_start_date
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_helpdesk_ticket_start_date
|
||||
#: model:ir.ui.view,arch_db:helpdesk_basic.report_helpdesk_view_search
|
||||
msgid "Start Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.ui.view,arch_db:helpdesk_basic.report_helpdesk_view_search
|
||||
#: model:ir.ui.view,arch_db:helpdesk_basic.view_helpdesk_search
|
||||
msgid "Status"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_helpdesk_ticket_tag_ids
|
||||
msgid "Tag(s)"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.actions.act_window,name:helpdesk_basic.act_helpdesk_tag_view
|
||||
#: model:ir.ui.menu,name:helpdesk_basic.tag_menu
|
||||
msgid "Tags"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_helpdesk_report_team_id
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_helpdesk_ticket_team_id
|
||||
#: model:ir.ui.view,arch_db:helpdesk_basic.view_helpdesk_search
|
||||
msgid "Team"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:helpdesk.team,name:helpdesk_basic.helpdesk_hardware
|
||||
msgid "Team Hardware"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.ui.view,arch_db:helpdesk_basic.helpdesk_team_form_view
|
||||
msgid "Team Members"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:helpdesk.team,name:helpdesk_basic.helpdesk_software
|
||||
msgid "Team Software"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.ui.view,arch_db:helpdesk_basic.view_helpdesk_team_search
|
||||
msgid "Team id"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.model.fields,help:helpdesk_basic.field_helpdesk_team_alias_model_id
|
||||
msgid "The model (Flectra Document Kind) to which this alias corresponds. Any incoming email that does not reply to an existing record will cause the creation of a new record of this model (e.g. a Project Task)"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.model.fields,help:helpdesk_basic.field_helpdesk_team_alias_name
|
||||
msgid "The name of the email alias, e.g. 'jobs' if you want to catch emails for <jobs@example.flectra.com>"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.model.fields,help:helpdesk_basic.field_helpdesk_team_alias_user_id
|
||||
msgid "The owner of records created upon receiving emails on this alias. If this field is not set the system will attempt to find the right owner based on the sender (From) address, or will use the Administrator account if no system user is found for that address."
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.ui.view,arch_db:helpdesk_basic.report_helpdesk_view_search
|
||||
msgid "This Month"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: code:addons/helpdesk_basic/models/helpdesk_team.py:109
|
||||
#: code:addons/helpdesk_basic/models/issue_type.py:68
|
||||
#, python-format
|
||||
msgid "This Week"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.ui.view,arch_db:helpdesk_basic.report_helpdesk_view_search
|
||||
msgid "This Year"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.model.fields,field_description:helpdesk_basic.field_helpdesk_team_helpdesk_count
|
||||
msgid "Total Helpdesk"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:res.groups,name:helpdesk_basic.helpdesk_group_user
|
||||
msgid "User"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.model,name:helpdesk_basic.model_helpdesk_stage
|
||||
msgid "helpdesk.stage"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.model,name:helpdesk_basic.model_helpdesk_tag
|
||||
msgid "helpdesk.tag"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.model,name:helpdesk_basic.model_helpdesk_team
|
||||
msgid "helpdesk.team"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.model,name:helpdesk_basic.model_helpdesk_ticket
|
||||
msgid "helpdesk.ticket"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_basic
|
||||
#: model:ir.model,name:helpdesk_basic.model_issue_type
|
||||
msgid "issue.type"
|
||||
msgstr ""
|
||||
|
7
addons/helpdesk_basic/models/__init__.py
Normal file
@ -0,0 +1,7 @@
|
||||
# Part of Flectra See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from . import helpdesk_ticket
|
||||
from . import helpdesk_team
|
||||
from . import issue_type
|
||||
from . import helpdesk_tag
|
||||
from . import helpdesk_stage
|
18
addons/helpdesk_basic/models/helpdesk_stage.py
Normal file
@ -0,0 +1,18 @@
|
||||
# Part of Flectra See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from flectra import fields, models
|
||||
|
||||
|
||||
class HelpdeskStage(models.Model):
|
||||
_name = 'helpdesk.stage'
|
||||
_order = 'sequence, id'
|
||||
_description = 'Helpdesk Stage'
|
||||
|
||||
name = fields.Char('Name', required=True)
|
||||
description = fields.Text(translate=True)
|
||||
fold = fields.Boolean(string='Fold in Kanban')
|
||||
stage_type = fields.Selection([('draft', 'Draft'), ('new', 'New'),
|
||||
('in_progress', 'In Progress'),
|
||||
('done', 'Done')], string='Stage Type',
|
||||
required=True)
|
||||
sequence = fields.Integer(default=1)
|
11
addons/helpdesk_basic/models/helpdesk_tag.py
Normal file
@ -0,0 +1,11 @@
|
||||
# Part of Flectra See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from flectra import fields, models
|
||||
|
||||
|
||||
class HelpdeskTag(models.Model):
|
||||
_name = 'helpdesk.tag'
|
||||
_description = 'Helpdesk Tags'
|
||||
|
||||
name = fields.Char('Name', required=True)
|
||||
code = fields.Char('Code', required=True)
|
128
addons/helpdesk_basic/models/helpdesk_team.py
Normal file
@ -0,0 +1,128 @@
|
||||
# Part of Flectra. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from flectra import api, fields, models, _
|
||||
from flectra.tools.safe_eval import safe_eval
|
||||
from flectra.tools import DEFAULT_SERVER_DATE_FORMAT as DF
|
||||
from datetime import datetime, timedelta
|
||||
from babel.dates import format_datetime, format_date
|
||||
import json
|
||||
|
||||
|
||||
class HelpdeskTeam(models.Model):
|
||||
_name = 'helpdesk.team'
|
||||
_inherit = ['mail.thread', 'mail.activity.mixin', 'mail.alias.mixin']
|
||||
_description = 'Helpdesk Team'
|
||||
|
||||
name = fields.Char(string='Helpdesk Team', translate=True,
|
||||
track_visibility='always', required=True)
|
||||
active = fields.Boolean(string='Active', default=True)
|
||||
color = fields.Integer(string='Color Index')
|
||||
member_ids = fields.Many2many('res.users', string='Members')
|
||||
alias_id = fields.Many2one('mail.alias', 'Alias', ondelete='restrict')
|
||||
issue_type_ids = fields.Many2many('issue.type', string='Issue Type')
|
||||
helpdesk_count = fields.Integer(compute='_compute_helpdesk_count',
|
||||
string='Total Helpdesk')
|
||||
stage_ids = fields.Many2many('helpdesk.stage', string='Stages')
|
||||
kanban_dashboard_graph = fields.Text(
|
||||
compute='_compute_kanban_dashboard_graph')
|
||||
|
||||
@api.multi
|
||||
def _compute_helpdesk_count(self):
|
||||
for team in self:
|
||||
team.helpdesk_count = self.env['helpdesk.ticket'].search_count([
|
||||
('team_id', '=', team.id)])
|
||||
|
||||
@api.multi
|
||||
def get_alias_model_name(self, vals):
|
||||
return vals.get('alias_model', 'helpdesk.ticket')
|
||||
|
||||
@api.multi
|
||||
def get_alias_values(self):
|
||||
self.ensure_one()
|
||||
values = super(HelpdeskTeam, self).get_alias_values()
|
||||
values['alias_defaults'] = defaults = safe_eval(
|
||||
self.alias_defaults or "{}")
|
||||
defaults['team_id'] = self.id
|
||||
return values
|
||||
|
||||
@api.model
|
||||
def create(self, values):
|
||||
res = super(HelpdeskTeam, self).create(values)
|
||||
res.message_subscribe_users(user_ids=res.member_ids.ids)
|
||||
return res
|
||||
|
||||
@api.multi
|
||||
def write(self, vals):
|
||||
if vals.get('member_ids', False):
|
||||
self.message_subscribe_users(user_ids=self.member_ids.ids)
|
||||
result = super(HelpdeskTeam, self).write(vals)
|
||||
if 'alias_defaults' in vals:
|
||||
for team in self:
|
||||
team.alias_id.write(team.get_alias_values())
|
||||
return result
|
||||
|
||||
@api.multi
|
||||
def _compute_kanban_dashboard_graph(self):
|
||||
for record in self:
|
||||
record.kanban_dashboard_graph = json.dumps(
|
||||
record.get_bar_graph_datas())
|
||||
|
||||
@api.multi
|
||||
def get_bar_graph_datas(self):
|
||||
data = []
|
||||
today = datetime.strptime(fields.Date.context_today(self), DF)
|
||||
data.append({'label': _('Past'), 'value': 0.0, 'type': 'past'})
|
||||
day_of_week = int(format_datetime(today, 'e', locale=self._context.get(
|
||||
'lang') or 'en_US'))
|
||||
first_day_of_week = today + timedelta(days=-day_of_week + 1)
|
||||
for i in range(-1, 4):
|
||||
if i == 0:
|
||||
label = _('This Week')
|
||||
elif i == 3:
|
||||
label = _('Future')
|
||||
else:
|
||||
start_week = first_day_of_week + timedelta(days=i * 7)
|
||||
end_week = start_week + timedelta(days=6)
|
||||
if start_week.month == end_week.month:
|
||||
label = \
|
||||
str(start_week.day) + '-' + str(end_week.day) + ' ' + \
|
||||
format_date(end_week, 'MMM', locale=self._context.get(
|
||||
'lang') or 'en_US')
|
||||
else:
|
||||
label = \
|
||||
format_date(start_week, 'd MMM',
|
||||
locale=self._context.get('lang') or 'en_US'
|
||||
) + '-' + format_date(
|
||||
end_week, 'd MMM',
|
||||
locale=self._context.get('lang') or'en_US')
|
||||
data.append(
|
||||
{'label': label,
|
||||
'value': 0.0,
|
||||
'type': 'past' if i < 0 else 'future'})
|
||||
|
||||
select_sql_clause = 'SELECT count(*) FROM helpdesk_ticket AS h ' \
|
||||
'WHERE team_id = %(team_id)s'
|
||||
query_args = {'team_id': self.id}
|
||||
query = ''
|
||||
start_date = (first_day_of_week + timedelta(days=-7))
|
||||
for i in range(0, 6):
|
||||
if i == 0:
|
||||
query += "(" + select_sql_clause + " and start_date < '" + \
|
||||
start_date.strftime(DF) + "')"
|
||||
elif i == 5:
|
||||
query += " UNION ALL (" + select_sql_clause + \
|
||||
" and start_date >= '" + \
|
||||
start_date.strftime(DF) + "')"
|
||||
else:
|
||||
next_date = start_date + timedelta(days=7)
|
||||
query += " UNION ALL (" + select_sql_clause + \
|
||||
" and start_date >= '" + start_date.strftime(DF) + \
|
||||
"' and start_date < '" + next_date.strftime(DF) + \
|
||||
"')"
|
||||
start_date = next_date
|
||||
self.env.cr.execute(query, query_args)
|
||||
query_results = self.env.cr.dictfetchall()
|
||||
for index in range(0, len(query_results)):
|
||||
if query_results[index]:
|
||||
data[index]['value'] = query_results[index].get('count')
|
||||
return [{'values': data}]
|
185
addons/helpdesk_basic/models/helpdesk_ticket.py
Normal file
@ -0,0 +1,185 @@
|
||||
# Part of Flectra See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from flectra import api, fields, models, _
|
||||
|
||||
|
||||
class HelpdeskTicket(models.Model):
|
||||
_name = 'helpdesk.ticket'
|
||||
_inherit = ['mail.thread', 'mail.activity.mixin']
|
||||
_order = 'id desc'
|
||||
_description = 'Helpdesk Ticket'
|
||||
|
||||
@api.model
|
||||
def _get_default_state(self):
|
||||
if self.team_id and self.team_id.stage_ids:
|
||||
return self.team_id.stage_ids[0]
|
||||
|
||||
active = fields.Boolean('Active', default=True)
|
||||
color = fields.Integer(string='Color Index')
|
||||
name = fields.Char('Name', translate=True)
|
||||
sequence = fields.Char('Sequence', default='New', copy=False)
|
||||
priority = fields.Selection([('1', 'Low'), ('2', 'Medium'),
|
||||
('3', 'High')], default='1')
|
||||
user_id = fields.Many2one('res.users', string='Created By',
|
||||
track_visibility='onchange')
|
||||
partner_id = fields.Many2one(
|
||||
'res.partner', store=True, related='user_id.partner_id',
|
||||
string='Related Partner', track_visibility='onchange')
|
||||
email = fields.Char(
|
||||
string='Email',
|
||||
default=lambda s: s.env.user.partner_id.email or False)
|
||||
issue_type_id = fields.Many2one('issue.type', string='Issue Type',
|
||||
track_visibility='onchange')
|
||||
team_id = fields.Many2one('helpdesk.team', 'Team',
|
||||
track_visibility='onchange')
|
||||
assigned_to_id = fields.Many2one('res.users', string='Assigned To',
|
||||
track_visibility='onchange')
|
||||
tag_ids = fields.Many2many('helpdesk.tag', string='Tag(s)')
|
||||
start_date = fields.Datetime(
|
||||
string='Start Date', default=fields.Datetime.now,
|
||||
track_visibility='onchange')
|
||||
end_date = fields.Datetime(
|
||||
string='End Date', default=fields.Datetime.now,
|
||||
track_visibility='onchange')
|
||||
description = fields.Text(string='Description', size=128, translate=True,
|
||||
track_visibility='onchange')
|
||||
attachment_ids = fields.One2many(
|
||||
'ir.attachment', compute='_compute_attachments',
|
||||
string="Main Attachments",
|
||||
help="Attachment that don't come from message.")
|
||||
attachments_count = fields.Integer(compute='_compute_attachments',
|
||||
string='Add Attachments')
|
||||
is_accessible = fields.Boolean('Is Accessible',
|
||||
compute='_compute_is_accessible')
|
||||
is_assigned = fields.Boolean('Is Accessible',
|
||||
compute='_compute_is_accessible')
|
||||
stage_id = fields.Many2one('helpdesk.stage', string='Stage',
|
||||
default=_get_default_state,
|
||||
track_visibility='onchange')
|
||||
|
||||
@api.multi
|
||||
def _track_subtype(self, init_values):
|
||||
self.ensure_one()
|
||||
if 'assigned_to_id' in init_values and self.assigned_to_id:
|
||||
# assigned -> new
|
||||
return 'helpdesk_basic.mt_issue_new'
|
||||
elif 'stage_id' in init_values and self.stage_id and \
|
||||
self.stage_id.sequence <= 1: # start stage -> new
|
||||
return 'helpdesk_basic.mt_issue_new'
|
||||
elif 'stage_id' in init_values:
|
||||
return 'helpdesk_basic.mt_issue_stage'
|
||||
return super(HelpdeskTicket, self)._track_subtype(init_values)
|
||||
|
||||
def add_followers(self):
|
||||
followers = []
|
||||
followers.append(self.assigned_to_id.id)
|
||||
followers.append(self.user_id.id)
|
||||
self.message_subscribe_users(user_ids=followers)
|
||||
|
||||
@api.model
|
||||
def create(self, values):
|
||||
if not values.get('user_id'):
|
||||
values.update({'user_id': self.env.user.id})
|
||||
if 'sequence' not in values or values['sequence'] == _('New'):
|
||||
values['sequence'] = self.env['ir.sequence'].next_by_code(
|
||||
'helpdesk.ticket') or _('New')
|
||||
if values.get('team_id'):
|
||||
team = self.team_id.browse(values.get('team_id'))
|
||||
values.update(
|
||||
{'stage_id': team.stage_ids and team.stage_ids[0].id or False})
|
||||
res = super(HelpdeskTicket, self).create(values)
|
||||
if not res.stage_id and res.team_id and res.team_id.stage_ids:
|
||||
res.stage_id = res.team_id.stage_ids[0]
|
||||
res.add_followers()
|
||||
return res
|
||||
|
||||
@api.multi
|
||||
def write(self, vals):
|
||||
if vals.get('partner_id', False) or vals.get('assigned_to_id', False):
|
||||
self.add_followers()
|
||||
return super(HelpdeskTicket, self).write(vals)
|
||||
|
||||
@api.onchange('team_id')
|
||||
def onchange_team_id(self):
|
||||
self.assigned_to_id = False
|
||||
if self.team_id:
|
||||
self.stage_id = \
|
||||
self.team_id.stage_ids and self.team_id.stage_ids.ids[0]
|
||||
return {'domain': {
|
||||
'assigned_to_id':
|
||||
[('id', 'in', self.team_id.member_ids and
|
||||
self.team_id.member_ids.ids or [])],
|
||||
'stage_id':
|
||||
[('id', 'in', self.team_id.stage_ids and
|
||||
self.team_id.stage_ids.ids or [])]
|
||||
}}
|
||||
|
||||
@api.onchange('issue_type_id')
|
||||
def onchange_issue_type_id(self):
|
||||
self.team_id = False
|
||||
if self.issue_type_id:
|
||||
self.description = self.issue_type_id.reporting_template or ''
|
||||
return {'domain': {'team_id': [('issue_type_ids', 'in',
|
||||
self.issue_type_id.id)]}}
|
||||
|
||||
@api.multi
|
||||
def _compute_is_accessible(self):
|
||||
has_group = self.env.user.has_group('base.group_no_one')
|
||||
for ticket in self:
|
||||
if self.env.user.partner_id.id == ticket.partner_id.id or \
|
||||
has_group:
|
||||
ticket.is_accessible = True
|
||||
if self.env.user.id == ticket.assigned_to_id.id or has_group:
|
||||
ticket.is_assigned = True
|
||||
|
||||
@api.multi
|
||||
def _compute_attachments(self):
|
||||
for ticket in self:
|
||||
attachment_ids = self.env['ir.attachment'].search(
|
||||
[('res_model', '=', ticket._name),
|
||||
('res_id', '=', ticket.id)])
|
||||
ticket.attachments_count = len(attachment_ids.ids)
|
||||
ticket.attachment_ids = attachment_ids
|
||||
|
||||
@api.multi
|
||||
def action_get_attachments(self):
|
||||
self.ensure_one()
|
||||
return {
|
||||
'name': _('Attachments'),
|
||||
'res_model': 'ir.attachment',
|
||||
'type': 'ir.actions.act_window',
|
||||
'view_mode': 'kanban,form',
|
||||
'view_type': 'form',
|
||||
'domain': [('res_model', '=', self._name),
|
||||
('res_id', '=', self.id)],
|
||||
'context': "{'default_res_model': '%s','default_res_id': %d}" % (
|
||||
self._name, self.id),
|
||||
}
|
||||
|
||||
@api.multi
|
||||
def action_get_issue_type(self):
|
||||
form_id = self.env.ref('helpdesk_basic.view_issue_type_form')
|
||||
tree_id = self.env.ref('helpdesk_basic.view_issue_type_tree')
|
||||
return {
|
||||
'name': 'Issue Types',
|
||||
'type': 'ir.actions.act_window',
|
||||
'view_type': 'form',
|
||||
'view_mode': 'tree,form',
|
||||
'res_model': 'issue.type',
|
||||
'views': [(tree_id.id, 'tree'), (form_id.id, 'form'), ],
|
||||
'domain': [('id', '=', self.issue_type_id.id)],
|
||||
}
|
||||
|
||||
@api.multi
|
||||
def action_get_team(self):
|
||||
form_id = self.env.ref('helpdesk_basic.helpdesk_team_form_view')
|
||||
tree_id = self.env.ref('helpdesk_basic.helpdesk_team_tree_view')
|
||||
return {
|
||||
'name': 'Helpdesk Teams',
|
||||
'type': 'ir.actions.act_window',
|
||||
'view_type': 'form',
|
||||
'view_mode': 'tree,form',
|
||||
'res_model': 'helpdesk.team',
|
||||
'views': [(tree_id.id, 'tree'), (form_id.id, 'form'), ],
|
||||
'domain': [('id', '=', self.team_id.id)],
|
||||
}
|
129
addons/helpdesk_basic/models/issue_type.py
Normal file
@ -0,0 +1,129 @@
|
||||
# Part of Flectra See LICENSE file for full copyright and licensing details.
|
||||
|
||||
import json
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
from babel.dates import format_datetime, format_date
|
||||
from flectra import api, fields, models, _
|
||||
from flectra.tools import DEFAULT_SERVER_DATE_FORMAT as DF
|
||||
|
||||
|
||||
class IssueType(models.Model):
|
||||
_name = 'issue.type'
|
||||
_description = 'Issue Type'
|
||||
|
||||
name = fields.Char(string='Name', required=True)
|
||||
code = fields.Char(string='Code', required=True)
|
||||
reporting_template = fields.Text(string='Reporting Template')
|
||||
color = fields.Integer(string='Color Index')
|
||||
stages = fields.Char(compute='_compute_stages')
|
||||
kanban_dashboard_graph = fields.Text(
|
||||
compute='_compute_kanban_dashboard_graph')
|
||||
|
||||
@api.multi
|
||||
def name_get(self):
|
||||
result = []
|
||||
for record in self:
|
||||
result.append((record.id, '%s-%s' % (record.code, record.name)))
|
||||
return result
|
||||
|
||||
@api.multi
|
||||
def _compute_stages(self):
|
||||
ticket = self.env['helpdesk.ticket']
|
||||
stage_ids = self.env['helpdesk.stage'].search([])
|
||||
for type in self:
|
||||
stages = []
|
||||
for stage in stage_ids:
|
||||
context = \
|
||||
"{'search_default_stage_id': %d, " \
|
||||
"'search_default_issue_type_id': %d}" % (stage.id, type.id)
|
||||
tickets = ticket.search(
|
||||
[('issue_type_id', '=', type.id),
|
||||
('stage_id', '=', stage.id)])
|
||||
stages.append({'key': stage.name, 'value': len(tickets.ids),
|
||||
'context': context,
|
||||
'ticket_ids': tickets.ids})
|
||||
type.stages = json.dumps(stages)
|
||||
|
||||
@api.multi
|
||||
def action_create_new(self):
|
||||
ctx = self._context.copy()
|
||||
model = 'helpdesk.ticket'
|
||||
view_id = self.env.ref('helpdesk_basic.view_helpdesk_form').id
|
||||
return {
|
||||
'name': _('Create Ticket'),
|
||||
'type': 'ir.actions.act_window',
|
||||
'view_type': 'form',
|
||||
'view_mode': 'form',
|
||||
'res_model': model,
|
||||
'view_id': view_id,
|
||||
'context': ctx,
|
||||
}
|
||||
|
||||
@api.multi
|
||||
def _compute_kanban_dashboard_graph(self):
|
||||
for record in self:
|
||||
record.kanban_dashboard_graph = json.dumps(
|
||||
record.get_bar_graph_datas())
|
||||
|
||||
@api.multi
|
||||
def get_bar_graph_datas(self):
|
||||
data = []
|
||||
today = datetime.strptime(fields.Date.context_today(self), DF)
|
||||
data.append({'label': _('Past'), 'value': 0.0, 'type': 'past'})
|
||||
day_of_week = int(format_datetime(today, 'e', locale=self._context.get(
|
||||
'lang') or 'en_US'))
|
||||
first_day_of_week = today + timedelta(days=-day_of_week + 1)
|
||||
for i in range(-1, 4):
|
||||
if i == 0:
|
||||
label = _('This Week')
|
||||
elif i == 3:
|
||||
label = _('Future')
|
||||
else:
|
||||
start_week = first_day_of_week + timedelta(days=i * 7)
|
||||
end_week = start_week + timedelta(days=6)
|
||||
if start_week.month == end_week.month:
|
||||
label = \
|
||||
str(start_week.day) + '-' + str(end_week.day) + ' ' + \
|
||||
format_date(end_week, 'MMM',
|
||||
locale=self._context.get(
|
||||
'lang') or 'en_US')
|
||||
else:
|
||||
label = \
|
||||
format_date(start_week, 'd MMM',
|
||||
locale=self._context.get('lang') or 'en_US'
|
||||
) + '-' + format_date(
|
||||
end_week, 'd MMM',
|
||||
locale=self._context.get('lang') or 'en_US')
|
||||
data.append({
|
||||
'label': label,
|
||||
'value': 0.0,
|
||||
'type': 'past' if i < 0 else 'future'})
|
||||
|
||||
select_sql_clause = 'SELECT count(*) FROM helpdesk_ticket AS h ' \
|
||||
'WHERE issue_type_id = %(issue_type_id)s'
|
||||
query_args = {'issue_type_id': self.id}
|
||||
query = ''
|
||||
start_date = (first_day_of_week + timedelta(days=-7))
|
||||
for i in range(0, 6):
|
||||
if i == 0:
|
||||
query += "(" + select_sql_clause + " and start_date < '" + \
|
||||
start_date.strftime(DF) + "')"
|
||||
elif i == 5:
|
||||
query += " UNION ALL (" + select_sql_clause + \
|
||||
" and start_date >= '" + \
|
||||
start_date.strftime(DF) + "')"
|
||||
else:
|
||||
next_date = start_date + timedelta(days=7)
|
||||
query += " UNION ALL (" + select_sql_clause + \
|
||||
" and start_date >= '" + start_date.strftime(DF) + \
|
||||
"' and end_date < '" + next_date.strftime(DF) + \
|
||||
"')"
|
||||
start_date = next_date
|
||||
|
||||
self.env.cr.execute(query, query_args)
|
||||
query_results = self.env.cr.dictfetchall()
|
||||
for index in range(0, len(query_results)):
|
||||
if query_results[index]:
|
||||
data[index]['value'] = query_results[index].get('count')
|
||||
return [{'values': data}]
|
3
addons/helpdesk_basic/report/__init__.py
Normal file
@ -0,0 +1,3 @@
|
||||
# Part of Flectra See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from . import helpdesk_report
|
52
addons/helpdesk_basic/report/helpdesk_report.py
Normal file
@ -0,0 +1,52 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Part of Flectra. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from flectra import api, fields, models, tools
|
||||
|
||||
|
||||
class HelpdeskReport(models.Model):
|
||||
_name = "helpdesk.report"
|
||||
_description = "Helpdesk Report"
|
||||
_auto = False
|
||||
|
||||
sequence = fields.Char('Sequence', default='New')
|
||||
name = fields.Char('Name', readonly=True)
|
||||
partner_id = fields.Many2one('res.partner', string='Related Partner',
|
||||
readonly=True)
|
||||
user_id = fields.Many2one('res.users', string='Created By',
|
||||
readonly=True)
|
||||
issue_type_id = fields.Many2one('issue.type', string='Issue Type',
|
||||
readonly=True)
|
||||
team_id = fields.Many2one('helpdesk.team', 'Team', readonly=True)
|
||||
assigned_to_id = fields.Many2one('res.users', string='Assigned To',
|
||||
readonly=True)
|
||||
start_date = fields.Datetime(string='Start Date', readonly=True)
|
||||
end_date = fields.Datetime(string='End Date', readonly=True)
|
||||
stage_id = fields.Many2one('helpdesk.stage', string='Stage')
|
||||
description = fields.Text(string='Description', readonly=True)
|
||||
priority = fields.Selection([('low', 'Low'), ('medium', 'Medium'),
|
||||
('high', 'High')])
|
||||
|
||||
@api.model_cr
|
||||
def init(self):
|
||||
tools.drop_view_if_exists(self._cr, 'helpdesk_report')
|
||||
self._cr.execute("""
|
||||
CREATE VIEW helpdesk_report as (
|
||||
SELECT
|
||||
t.id as id,
|
||||
h.sequence as sequence,
|
||||
t.name as name,
|
||||
h.partner_id as partner_id,
|
||||
h.user_id as user_id,
|
||||
h.issue_type_id as issue_type_id,
|
||||
h.team_id as team_id,
|
||||
h.assigned_to_id as assigned_to_id,
|
||||
h.start_date as start_date,
|
||||
h.end_date as end_date,
|
||||
h.stage_id as stage_id,
|
||||
h.description as description,
|
||||
h.priority as priority
|
||||
FROM helpdesk_team t
|
||||
INNER JOIN helpdesk_ticket h
|
||||
ON (h.team_id = t.id and h.active = True))
|
||||
""")
|
97
addons/helpdesk_basic/report/helpdesk_report_view.xml
Normal file
@ -0,0 +1,97 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<flectra>
|
||||
|
||||
<record id="view_helpdesk_report_graph" model="ir.ui.view">
|
||||
<field name="name">helpdesk.report.graph</field>
|
||||
<field name="model">helpdesk.report</field>
|
||||
<field name="arch" type="xml">
|
||||
<graph string="Helpdesk Analysis">
|
||||
<field name="name" type="row"/>
|
||||
<field name="partner_id" type="col"/>
|
||||
</graph>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.ui.view" id="view_report_helpdesk_pivot">
|
||||
<field name="name">helpdesk.pivot</field>
|
||||
<field name="model">helpdesk.report</field>
|
||||
<field name="arch" type="xml">
|
||||
<pivot string="Helpdesk Statistics" disable_linking="True">
|
||||
<field name="name" type="row"/>
|
||||
<field name="partner_id" type="col"/>
|
||||
</pivot>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="report_helpdesk_view_search" model="ir.ui.view">
|
||||
<field name="name">report.helpdesk.search</field>
|
||||
<field name="model">helpdesk.report</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Helpdesk Analysis">
|
||||
<filter string="My Issues" name="my_issues"
|
||||
domain="[('assigned_to_id', '=', uid)]"/>
|
||||
<separator/>
|
||||
<field name="start_date"/>
|
||||
<field name="end_date"/>
|
||||
<filter string="This Year" name="thisyear"
|
||||
domain="['|', ('start_date', '=', False), '&',
|
||||
('start_date','<=', time.strftime('%%Y-12-31')),
|
||||
('start_date','>=',time.strftime('%%Y-01-01'))]"
|
||||
help="Journal invoices with period in current year"/>
|
||||
<separator/>
|
||||
<filter string="Draft" domain="[('stage_id','=','draft')]"
|
||||
help="Draft Issues" name="draft"/>
|
||||
<filter string="New" domain="[('stage_id','=','new')]"
|
||||
help="New" name="new"/>
|
||||
<filter string="In Progress" name="in_progress"
|
||||
domain="[('stage_id','=', 'in_progress')]"/>
|
||||
<filter string="Done" name="done"
|
||||
domain="[('stage_id','=', 'done')]"/>
|
||||
<filter string="Cancel" name="cancel"
|
||||
domain="[('stage_id','=', 'cancel')]"/>
|
||||
<separator/>
|
||||
<filter string="This Month" name="this_month"
|
||||
domain="[('start_date', '>=', context_today().strftime('%%Y-%%m-01'))]"/>
|
||||
<filter string="Last Month" name="last_month"
|
||||
domain="['&',
|
||||
('start_date', '>=', (context_today() - relativedelta(months=1)).strftime('%%Y-%%m-01')),
|
||||
('start_date', '<', context_today().strftime('%%Y-%%m-01'))]"/>
|
||||
<separator/>
|
||||
<field name="partner_id" operator="child_of"/>
|
||||
<field name="assigned_to_id"/>
|
||||
<group expand="1" string="Group By">
|
||||
<filter string="Helpdesk Team" name="team_id"
|
||||
context="{'group_by':'team_id'}"/>
|
||||
<filter string="Partner" name="partner_id"
|
||||
context="{'group_by':'partner_id','residual_visible':True}"/>
|
||||
<filter string="Assiged To" name='assigned_to_id'
|
||||
context="{'group_by':'assigned_to_id'}"/>
|
||||
<filter string="Status" context="{'group_by':'stage_id'}"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter string="Start Date"
|
||||
context="{'group_by':'start_date'}"/>
|
||||
<filter string="End Date"
|
||||
context="{'group_by':'end_date'}"/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_helpdesk_report" model="ir.actions.act_window">
|
||||
<field name="name">Helpdesk Analysis</field>
|
||||
<field name="res_model">helpdesk.report</field>
|
||||
<field name="view_mode">graph,pivot</field>
|
||||
<field name="view_id" ref="view_helpdesk_report_graph"/>
|
||||
<field name="search_view_id" ref="report_helpdesk_view_search"/>
|
||||
<field name="context">{'search_default_team_id': 1,
|
||||
'search_default_current_year': 1}
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<menuitem id="helpdesk_report_main_menu" name="Reporting"
|
||||
parent="menu_main_helpdesk" sequence="50"/>
|
||||
<menuitem id="helpdesk_report" name="Helpdesk Report"
|
||||
parent="helpdesk_report_main_menu" sequence="1"
|
||||
action="action_helpdesk_report"/>
|
||||
|
||||
</flectra>
|
57
addons/helpdesk_basic/security/helpdesk_security_view.xml
Normal file
@ -0,0 +1,57 @@
|
||||
<?xml version="1.0" ?>
|
||||
<flectra>
|
||||
|
||||
<record id="module_helpdesk_category" model="ir.module.category">
|
||||
<field name="name">Helpdesk</field>
|
||||
<field name="sequence">20</field>
|
||||
</record>
|
||||
|
||||
<record model="res.groups" id="helpdesk_group_user">
|
||||
<field name="name">User</field>
|
||||
<field name="category_id" ref="module_helpdesk_category"/>
|
||||
</record>
|
||||
|
||||
<record model="res.groups" id="helpdesk_group_manager">
|
||||
<field name="name">Manager</field>
|
||||
<field name="category_id" ref="module_helpdesk_category"/>
|
||||
<field name="implied_ids" eval="[(4, ref('helpdesk_group_user'))]"/>
|
||||
<field name="users" eval="[(4, ref('base.user_root'))]"/>
|
||||
</record>
|
||||
|
||||
<record id="helpdesk_user_rule" model="ir.rule">
|
||||
<field name="name">See Own Issues</field>
|
||||
<field ref="model_helpdesk_ticket" name="model_id"/>
|
||||
<field name="domain_force">
|
||||
['|', '|', ('assigned_to_id','=',user.id), ('partner_id', '=',
|
||||
user.partner_id.id), ('team_id.member_ids','in',user.id)]
|
||||
</field>
|
||||
<field name="groups" eval="[(4, ref('helpdesk_group_user'))]"/>
|
||||
</record>
|
||||
|
||||
<record id="helpdesk_user_create_own_rule" model="ir.rule">
|
||||
<field name="name">Create Own Issues</field>
|
||||
<field ref="model_helpdesk_ticket" name="model_id"/>
|
||||
<field name="domain_force">
|
||||
[('user_id','=',user.id)]
|
||||
</field>
|
||||
<field name="groups" eval="[(4, ref('helpdesk_group_user'))]"/>
|
||||
<field name="perm_create" eval="True"/>
|
||||
<field name="perm_read" eval="True"/>
|
||||
<field name="perm_write" eval="True"/>
|
||||
</record>
|
||||
|
||||
<record id="rule_helpdesk_manager" model="ir.rule">
|
||||
<field name="name">See All Issues</field>
|
||||
<field ref="model_helpdesk_ticket" name="model_id"/>
|
||||
<field name="domain_force">[(1, '=', 1)]</field>
|
||||
<field name="groups" eval="[(4, ref('helpdesk_group_manager'))]"/>
|
||||
</record>
|
||||
|
||||
<record id="helpdesk_team_manager_rule" model="ir.rule">
|
||||
<field name="name">See All Team</field>
|
||||
<field ref="model_helpdesk_team" name="model_id"/>
|
||||
<field name="domain_force">[(1, '=', 1)]</field>
|
||||
<field name="groups" eval="[(4, ref('helpdesk_group_manager'))]"/>
|
||||
</record>
|
||||
|
||||
</flectra>
|
14
addons/helpdesk_basic/security/ir.model.access.csv
Normal file
@ -0,0 +1,14 @@
|
||||
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
|
||||
access_helpdesk_user,access_helpdesk_user,model_helpdesk_ticket,helpdesk_group_user,1,1,1,0
|
||||
access_helpdesk_manager,access_helpdesk_manager,model_helpdesk_ticket,helpdesk_group_manager,1,1,1,1
|
||||
access_helpdesk_team_user,access_helpdesk_team_user,model_helpdesk_team,helpdesk_group_user,1,0,0,0
|
||||
access_helpdesk_team_manager,access_helpdesk_team_manager,model_helpdesk_team,helpdesk_group_manager,1,1,1,1
|
||||
access_issue_type_user,access_issue_type_user,model_issue_type,helpdesk_group_user,1,0,0,0
|
||||
access_issue_type_any,access_issue_type_any,model_issue_type,,1,0,0,0
|
||||
access_issue_type_manager,access_issue_type_manager,model_issue_type,helpdesk_group_manager,1,1,1,1
|
||||
access_tag_user,access_tag_user,model_helpdesk_tag,helpdesk_group_user,1,0,0,0
|
||||
access_tag_manager,access_tag_manager,model_helpdesk_tag,helpdesk_group_manager,1,1,1,1
|
||||
access_helpdesk_report,access_helpdesk_report,model_helpdesk_report,helpdesk_group_manager,1,0,0,0
|
||||
access_ir_rule,access_ir_rule,base.model_ir_rule,helpdesk_group_manager,1,0,0,0
|
||||
access_ir_config_parameter,access_ir_config_parameter,base.model_ir_config_parameter,helpdesk_group_manager,1,0,0,0
|
||||
access_helpdesk_stage,access_helpdesk_stage,model_helpdesk_stage,,1,0,0,0
|
|
BIN
addons/helpdesk_basic/static/description/dashboard.png
Normal file
After Width: | Height: | Size: 39 KiB |
BIN
addons/helpdesk_basic/static/description/helpdesk.jpg
Normal file
After Width: | Height: | Size: 49 KiB |
After Width: | Height: | Size: 43 KiB |
After Width: | Height: | Size: 36 KiB |
After Width: | Height: | Size: 32 KiB |
After Width: | Height: | Size: 41 KiB |
BIN
addons/helpdesk_basic/static/description/helpdesk_team.png
Normal file
After Width: | Height: | Size: 34 KiB |
BIN
addons/helpdesk_basic/static/description/helpdesk_team_form.png
Normal file
After Width: | Height: | Size: 45 KiB |
After Width: | Height: | Size: 34 KiB |
BIN
addons/helpdesk_basic/static/description/icon.png
Normal file
After Width: | Height: | Size: 7.2 KiB |
306
addons/helpdesk_basic/static/description/index.html
Normal file
@ -0,0 +1,306 @@
|
||||
<section class="container">
|
||||
<div class="row oe_spaced">
|
||||
<div class="col-md-12">
|
||||
<h2 class="oe_slogan">Helpdesk</h2>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="container">
|
||||
<div class="row oe_spaced mt0">
|
||||
<div class="col-md-12">
|
||||
<h3 class="oe_slogan">Dashboard</h3>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="oe_demo oe_picture oe_screenshot">
|
||||
<img src="dashboard.png" alt="Dashboard"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<p class="text-justify" style="font-size: 15px;">
|
||||
Teamwise dashboard view for total issues per team with
|
||||
graphical representation and also describes its issue type.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="container bg-gray-lighter">
|
||||
<div class="row oe_spaced mt0">
|
||||
<div class="col-md-12">
|
||||
<h3 class="oe_slogan">Helpdesk Tickets</h3>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<p class="text-justify" style="font-size: 15px;">
|
||||
On click of Issues on dashboard, tickets appears from a
|
||||
particular team and this will be easier for the user to work
|
||||
with.
|
||||
</p>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="oe_demo oe_picture oe_screenshot">
|
||||
<img src="teamwise_ticket.png" width="100%"
|
||||
alt="Helpdesk Teamwise Tickets"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="container">
|
||||
<div class="row oe_spaced mt0">
|
||||
<div class="col-md-12">
|
||||
<h3 class="oe_slogan">Helpdesk</h3>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="oe_demo oe_picture oe_screenshot">
|
||||
<img src="helpdesk_ticket_kanban.png" alt="Helpdesk Kanban"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<p class="text-justify" style="font-size: 15px;">
|
||||
Helpdesk kanban view to get all issues grouped by states.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="container bg-gray-lighter">
|
||||
<div class="row oe_spaced mt0">
|
||||
<div class="col-md-12">
|
||||
<h3 class="oe_slogan">Helpdesk Form</h3>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<p class="text-justify" style="font-size: 15px;">
|
||||
Helpdesk form view to add and update details of issue tickets.
|
||||
</p>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="oe_demo oe_picture oe_screenshot">
|
||||
<img src="ticket_form.png" alt="Helpdesk Form"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="container">
|
||||
<div class="row oe_spaced mt0">
|
||||
<div class="col-md-12">
|
||||
<h3 class="oe_slogan">Helpdesk Team</h3>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="oe_demo oe_picture oe_screenshot">
|
||||
<img src="helpdesk_team.png" alt="Helpdesk Team"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<p class="text-justify" style="font-size: 15px;">
|
||||
Helpdesk team details in kanban view.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="container bg-gray-lighter">
|
||||
<div class="row oe_spaced mt0">
|
||||
<div class="col-md-12">
|
||||
<h3 class="oe_slogan">Helpdesk Team Form</h3>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<p class="text-justify" style="font-size: 15px;">
|
||||
Helpdesk team form view to add and update details of team.
|
||||
</p>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="oe_demo oe_picture oe_screenshot">
|
||||
<img src="helpdesk_team_form.png" alt="Helpdesk Team Form"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="container">
|
||||
<div class="row oe_spaced mt0">
|
||||
<div class="col-md-12">
|
||||
<h3 class="oe_slogan">Issue Type</h3>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="oe_demo oe_picture oe_screenshot">
|
||||
<img src="issue_type_kanban.png"
|
||||
alt="Issue Type"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<p class="text-justify" style="font-size: 15px;">
|
||||
Issue type are the different types of helpdesk tickets issue.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="container bg-gray-lighter">
|
||||
<div class="row oe_spaced mt0">
|
||||
<div class="col-md-12">
|
||||
<h3 class="oe_slogan">Issue Type Form</h3>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<p class="text-justify" style="font-size: 15px;">
|
||||
Create issue types from this form.
|
||||
</p>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="oe_demo oe_picture oe_screenshot">
|
||||
<img src="issue_type_form.png" alt="Issue Type Form"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="container">
|
||||
<div class="row oe_spaced mt0">
|
||||
<div class="col-md-12">
|
||||
<h3 class="oe_slogan">Stages</h3>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="oe_demo oe_picture oe_screenshot">
|
||||
<img src="stages.png" alt="Stages"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<p class="text-justify" style="font-size: 15px;">
|
||||
Stages for the helpdesk issue tickets.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="container bg-gray-lighter">
|
||||
<div class="row oe_spaced mt0">
|
||||
<div class="col-md-12">
|
||||
<h3 class="oe_slogan">Stages Form</h3>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<p class="text-justify" style="font-size: 15px;">
|
||||
Create stages for helpdesk issue tickets from this form.
|
||||
</p>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="oe_demo oe_picture oe_screenshot">
|
||||
<img src="stages_form.png" alt="Stages Form"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="container">
|
||||
<div class="row oe_spaced mt0">
|
||||
<div class="col-md-12">
|
||||
<h3 class="oe_slogan">Tags</h3>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="oe_demo oe_picture oe_screenshot">
|
||||
<img src="tags.png"
|
||||
alt="Tags"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<p class="text-justify" style="font-size: 15px;">
|
||||
Tags for the helpdesk issue tickets.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="container bg-gray-lighter">
|
||||
<div class="row oe_spaced mt0">
|
||||
<div class="col-md-12">
|
||||
<h3 class="oe_slogan">Tags Form</h3>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<p class="text-justify" style="font-size: 15px;">
|
||||
Create tags for helpdesk issue tickets from this form.
|
||||
</p>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="oe_demo oe_picture oe_screenshot">
|
||||
<img src="tags_form.png" alt="Tags Form"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="container">
|
||||
<div class="row oe_spaced mt0">
|
||||
<div class="col-md-12">
|
||||
<h3 class="oe_slogan">Bar Graph Report</h3>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="oe_demo oe_picture oe_screenshot">
|
||||
<img src="helpdesk_report_bar_graph.png"
|
||||
alt="Bar Graph Report"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<p class="text-justify" style="font-size: 15px;">
|
||||
Graphical representation with Bar Graph for helpdesk tickets.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="container bg-gray-lighter">
|
||||
<div class="row oe_spaced mt0">
|
||||
<div class="col-md-12">
|
||||
<h3 class="oe_slogan">Line Graph Report</h3>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<p class="text-justify" style="font-size: 15px;">
|
||||
Graphical representation with Line Graph for helpdesk tickets.
|
||||
</p>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="oe_demo oe_picture oe_screenshot">
|
||||
<img src="helpdesk_report_line_graph.png"
|
||||
alt="Line Graph Report"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="container">
|
||||
<div class="row oe_spaced mt0">
|
||||
<div class="col-md-12">
|
||||
<h3 class="oe_slogan">Pie Chart Report</h3>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="oe_demo oe_picture oe_screenshot">
|
||||
<img src="helpdesk_report_pie_chart.png"
|
||||
alt="Pie Chart Report"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<p class="text-justify" style="font-size: 15px;">
|
||||
Graphical representation with Pie Chart for helpdesk tickets.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="container bg-gray-lighter">
|
||||
<div class="row oe_spaced mt0">
|
||||
<div class="col-md-12">
|
||||
<h3 class="oe_slogan">Helpdesk Analysis Report</h3>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<p class="text-justify" style="font-size: 15px;">
|
||||
Helpdesk analysis report with tabular representation for its
|
||||
details.
|
||||
</p>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="oe_demo oe_picture oe_screenshot">
|
||||
<img src="helpdesk_analysis_report.png"
|
||||
alt="Helpdesk Analysis Report"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
BIN
addons/helpdesk_basic/static/description/issue_type_form.png
Normal file
After Width: | Height: | Size: 39 KiB |
BIN
addons/helpdesk_basic/static/description/issue_type_kanban.png
Normal file
After Width: | Height: | Size: 38 KiB |
BIN
addons/helpdesk_basic/static/description/stages.png
Normal file
After Width: | Height: | Size: 19 KiB |
BIN
addons/helpdesk_basic/static/description/stages_form.png
Normal file
After Width: | Height: | Size: 22 KiB |
BIN
addons/helpdesk_basic/static/description/tags.png
Normal file
After Width: | Height: | Size: 17 KiB |
BIN
addons/helpdesk_basic/static/description/tags_form.png
Normal file
After Width: | Height: | Size: 20 KiB |
BIN
addons/helpdesk_basic/static/description/teamwise_ticket.png
Normal file
After Width: | Height: | Size: 48 KiB |
BIN
addons/helpdesk_basic/static/description/ticket_form.png
Normal file
After Width: | Height: | Size: 68 KiB |
16
addons/helpdesk_basic/static/src/less/kanban.less
Normal file
@ -0,0 +1,16 @@
|
||||
.o_kanban_view.o_helpdesk_kanban {
|
||||
|
||||
.o_kanban_record {
|
||||
width: 450px;
|
||||
}
|
||||
|
||||
.o_kanban_group {
|
||||
width: 450px !important;
|
||||
}
|
||||
|
||||
&.o_kanban_ungrouped {
|
||||
.o_kanban_record {
|
||||
width: 450px;
|
||||
}
|
||||
}
|
||||
}
|
3
addons/helpdesk_basic/tests/__init__.py
Normal file
@ -0,0 +1,3 @@
|
||||
# Part of Flectra See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from . import test_helpdesk
|
82
addons/helpdesk_basic/tests/test_helpdesk.py
Normal file
@ -0,0 +1,82 @@
|
||||
# Part of Flectra See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from flectra.tests.common import TransactionCase
|
||||
|
||||
|
||||
class TestHelpdesk(TransactionCase):
|
||||
|
||||
def setUp(self):
|
||||
""" setUp ***"""
|
||||
super(TestHelpdesk, self).setUp()
|
||||
self.helpdesk_id = self.env.ref('helpdesk_basic.helpdesk_ticket')
|
||||
|
||||
def test_00_helpdesk_workflow(self):
|
||||
team = self.env.ref('helpdesk_basic.helpdesk_software')
|
||||
issue_type = self.env.ref('helpdesk_basic.issue_type_software')
|
||||
tag = self.env.ref('helpdesk_basic.helpdesk_tag_new')
|
||||
stage = self.env.ref('helpdesk_basic.helpdesk_stage_draft')
|
||||
|
||||
new_helpdesk = self.env['helpdesk.ticket'].create({
|
||||
'name': 'Testing helpdesk ticket',
|
||||
'issue_type_id': issue_type.id,
|
||||
'priority': '2',
|
||||
'tag_ids': [(6, 0, [tag.id])],
|
||||
'team_id': team.id,
|
||||
'stage_id': stage.id,
|
||||
'assigned_to_id': self.env.ref('base.user_demo').id
|
||||
})
|
||||
|
||||
self.assertTrue(new_helpdesk,
|
||||
'Helpdesk Issue ticket creation failed')
|
||||
new_helpdesk.assigned_to_id = self.env.ref('base.user_root').id
|
||||
|
||||
team._compute_helpdesk_count()
|
||||
count_before = team.helpdesk_count
|
||||
new_helpdesk.onchange_team_id()
|
||||
new_helpdesk.team_id = self.env.ref(
|
||||
'helpdesk_basic.helpdesk_hardware').id
|
||||
self.assertFalse(
|
||||
new_helpdesk.assigned_to_id.id,
|
||||
'Assigned to must be reset on change of helpdesk team')
|
||||
team._compute_helpdesk_count()
|
||||
count_after = team.helpdesk_count
|
||||
self.assertEqual(count_before, count_after + 1,
|
||||
'Helpdesk count is not working properly')
|
||||
|
||||
new_helpdesk.issue_type_id = self.env.ref(
|
||||
'helpdesk_basic.issue_type_hardware').id
|
||||
new_helpdesk.onchange_issue_type_id()
|
||||
self.assertFalse(
|
||||
new_helpdesk.team_id.id,
|
||||
'Team must be reset on change of helpdesk issue type')
|
||||
|
||||
action = new_helpdesk.issue_type_id.action_create_new()
|
||||
self.assertTrue(action,
|
||||
'Helpdesk Issue ticket creation form from '
|
||||
'kanban view not working correctly')
|
||||
|
||||
action = new_helpdesk.action_get_team()
|
||||
self.assertTrue(action, 'Helpdesk team redirectiom form from '
|
||||
'dashboard view not working correctly')
|
||||
|
||||
action = new_helpdesk.action_get_issue_type()
|
||||
self.assertTrue(action, 'Helpdesk team redirectiom form from '
|
||||
'dashboard view not working correctly')
|
||||
|
||||
new_helpdesk.team_id = team.id
|
||||
member_before = len(new_helpdesk.team_id.member_ids.ids)
|
||||
new_helpdesk.team_id.member_ids = \
|
||||
[(4, self.env.ref('base.demo_user0').id)]
|
||||
member_after = len(new_helpdesk.team_id.member_ids.ids)
|
||||
self.assertEqual(member_after, member_before + 1,
|
||||
'Helpdesk Team members not updated properly')
|
||||
|
||||
self.helpdesk_id.issue_type_id._compute_stages()
|
||||
self.assertTrue(
|
||||
self.helpdesk_id.issue_type_id.stages,
|
||||
'Helpdesk Issue stages details in kanban view working correctly')
|
||||
|
||||
action = self.helpdesk_id.issue_type_id.action_create_new()
|
||||
self.assertTrue(
|
||||
action,
|
||||
'Helpdesk Issue create button in kanban view working correctly')
|
48
addons/helpdesk_basic/views/helpdesk_stage_view.xml
Normal file
@ -0,0 +1,48 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<flectra>
|
||||
|
||||
<record id="view_helpdesk_tag_form" model="ir.ui.view">
|
||||
<field name="name">Helpdesk Stages Form</field>
|
||||
<field name="model">helpdesk.stage</field>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Helpdesk">
|
||||
<sheet>
|
||||
<group>
|
||||
<field name="name"/>
|
||||
<field name="sequence" required="1"/>
|
||||
<field name="stage_type"/>
|
||||
<field name="description"/>
|
||||
</group>
|
||||
</sheet>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_helpdesk_tag_tree" model="ir.ui.view">
|
||||
<field name="name">Helpdesk Stages Tree View</field>
|
||||
<field name="model">helpdesk.stage</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree>
|
||||
<field name="sequence" widget="handle"/>
|
||||
<field name="name"/>
|
||||
<field name="stage_type"/>
|
||||
<field name="description"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.actions.act_window" id="act_helpdesk_stage_view">
|
||||
<field name="name">Stages</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">helpdesk.stage</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
</record>
|
||||
|
||||
<menuitem id="stage_menu" parent="menu_helpdesk_config"
|
||||
action="act_helpdesk_stage_view" sequence="4"
|
||||
groups="helpdesk_basic.helpdesk_group_manager"/>
|
||||
|
||||
</flectra>
|
44
addons/helpdesk_basic/views/helpdesk_tag_view.xml
Normal file
@ -0,0 +1,44 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<flectra>
|
||||
|
||||
<record id="view_helpdesk_tag_form" model="ir.ui.view">
|
||||
<field name="name">Helpdesk Tags Form</field>
|
||||
<field name="model">helpdesk.tag</field>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Helpdesk">
|
||||
<sheet>
|
||||
<group>
|
||||
<field name="name"/>
|
||||
<field name="code"/>
|
||||
</group>
|
||||
</sheet>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_helpdesk_tag_tree" model="ir.ui.view">
|
||||
<field name="name">Helpdesk Tags Tree View</field>
|
||||
<field name="model">helpdesk.tag</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree>
|
||||
<field name="name"/>
|
||||
<field name="code"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.actions.act_window" id="act_helpdesk_tag_view">
|
||||
<field name="name">Tags</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">helpdesk.tag</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
</record>
|
||||
|
||||
<menuitem id="tag_menu" parent="menu_helpdesk_config"
|
||||
action="act_helpdesk_tag_view" sequence="3"
|
||||
groups="helpdesk_basic.helpdesk_group_manager"/>
|
||||
|
||||
</flectra>
|
290
addons/helpdesk_basic/views/helpdesk_team_view.xml
Normal file
@ -0,0 +1,290 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<flectra>
|
||||
|
||||
<record id="helpdesk_team_tree_view" model="ir.ui.view">
|
||||
<field name="name">helpdesk.team.tree</field>
|
||||
<field name="model">helpdesk.team</field>
|
||||
<field name="priority">2</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree>
|
||||
<field name="name"/>
|
||||
<field name="member_ids" widget="many2many_tags"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="helpdesk_team_form_view" model="ir.ui.view">
|
||||
<field name="name">Helpdesk Team Form</field>
|
||||
<field name="model">helpdesk.team</field>
|
||||
<field name="priority">1</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Team Members">
|
||||
<sheet>
|
||||
<group>
|
||||
<group>
|
||||
<field name="name"/>
|
||||
<field name="issue_type_ids" required="1"
|
||||
widget="many2many_tags"/>
|
||||
</group>
|
||||
<group name="group_alias">
|
||||
<field name="stage_ids" widget="many2many_tags"
|
||||
required="1"/>
|
||||
<label for="alias_name" string="Email Alias"/>
|
||||
<div name="alias_def">
|
||||
<field name="alias_id" required="0"
|
||||
class="oe_read_only oe_inline"
|
||||
string="Email Alias"/>
|
||||
<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"/>
|
||||
</div>
|
||||
</div>
|
||||
</group>
|
||||
</group>
|
||||
<notebook>
|
||||
<page name="members" string="Team Members">
|
||||
<field name="member_ids" widget="many2many">
|
||||
<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_small', record.id.raw_value)"
|
||||
height="40" width="40"
|
||||
class="oe_avatar oe_kanban_avatar_smallboxn mb0"/>
|
||||
<div class="o_kanban_record_headings ml8">
|
||||
<strong class="o_kanban_record_title">
|
||||
<field name="name"/>
|
||||
</strong>
|
||||
</div>
|
||||
<a t-if="! read_only_mode"
|
||||
type="delete"
|
||||
class="text-danger">
|
||||
<i class="fa fa-times">
|
||||
</i>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
</templates>
|
||||
</kanban>
|
||||
</field>
|
||||
</page>
|
||||
</notebook>
|
||||
</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'}"/>
|
||||
</div>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_helpdesk_team_search" model="ir.ui.view">
|
||||
<field name="name">Helpdesk Team Search</field>
|
||||
<field name="model">helpdesk.team</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Search for Helpdesk">
|
||||
<field name="name" string="Team id"
|
||||
filter_domain="['|',('name','ilike',self)]"/>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.ui.view" id="helpdesk_team_kanban_view">
|
||||
<field name="name">helpdesk.team.kanban.view</field>
|
||||
<field name="model">helpdesk.team</field>
|
||||
<field name="arch" type="xml">
|
||||
<kanban
|
||||
class="oe_background_grey o_kanban_dashboard o_workcenter_kanban o_helpdesk_kanban">
|
||||
<field name="id"/>
|
||||
<field name="name"/>
|
||||
<field name="color"/>
|
||||
<templates>
|
||||
<t t-name="kanban-box">
|
||||
<div style="width: 400px;"
|
||||
t-attf-class="#{kanban_color(record.color.raw_value)} oe_kanban_global_click">
|
||||
<div t-attf-class="o_kanban_card_header o_kanban_record_top">
|
||||
<div style="text-align: center;"
|
||||
class="o_kanban_record_headings o_kanban_card_header_title">
|
||||
<span class="o_primary ml8"
|
||||
style="display: inline-block; font-weight:bold;">
|
||||
<field name="name"/>
|
||||
</span>
|
||||
</div>
|
||||
<div class="o_kanban_manage_button_section">
|
||||
<a class="o_kanban_manage_toggle_button"
|
||||
href="#">
|
||||
<i class="fa fa-ellipsis-v"/>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="container o_kanban_card_content"
|
||||
id="container">
|
||||
<div class="row">
|
||||
<div class="col-xs-4" id="total_issues">
|
||||
<strong>Total Issues</strong>
|
||||
</div>
|
||||
<div class="col-xs-4" id="project">
|
||||
</div>
|
||||
<div class="col-xs-4" id="issue_type">
|
||||
<strong>Issue Types</strong>
|
||||
</div>
|
||||
<br/>
|
||||
<br/>
|
||||
<div class="col-xs-4" id="issue">
|
||||
<a name="%(act_helpdesk_view)d"
|
||||
type="action"
|
||||
context="{'search_default_team_id': [active_id], 'default_team_id': active_id}">
|
||||
<field name="helpdesk_count"/>
|
||||
Issues
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-xs-4" id="project_value">
|
||||
</div>
|
||||
<div class="col-xs-4"
|
||||
id="issue_type_value">
|
||||
<field name="issue_type_ids"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="container o_kanban_card_manage_pane">
|
||||
<div t-if="widget.editable"
|
||||
class="o_kanban_card_manage_settings row">
|
||||
<div class="col-xs-8">
|
||||
<ul class="oe_kanban_colorpicker"
|
||||
data-field="color"/>
|
||||
</div>
|
||||
<div class="col-xs-4 text-right">
|
||||
<a type="edit">Settings</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
</templates>
|
||||
</kanban>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.ui.view" id="team_dashboard_view">
|
||||
<field name="name">helpdesk.dashboard.kanban.view</field>
|
||||
<field name="model">helpdesk.team</field>
|
||||
<field name="arch" type="xml">
|
||||
<kanban create="false"
|
||||
class="oe_background_grey o_kanban_dashboard o_workcenter_kanban o_helpdesk_kanban">
|
||||
<field name="id"/>
|
||||
<field name="name"/>
|
||||
<field name="color"/>
|
||||
<templates>
|
||||
<t t-name="kanban-box">
|
||||
<div style="width: 400px;"
|
||||
t-attf-class="#{kanban_color(record.color.raw_value)} oe_kanban_global_click">
|
||||
<div t-attf-class="o_kanban_card_header o_kanban_record_top">
|
||||
<div style="text-align: center;"
|
||||
class="o_kanban_record_headings o_kanban_card_header_title">
|
||||
<span class="o_primary ml8"
|
||||
style="display: inline-block; font-weight:bold;">
|
||||
<field name="name"/>
|
||||
</span>
|
||||
</div>
|
||||
<div class="o_kanban_manage_button_section">
|
||||
<a class="o_kanban_manage_toggle_button"
|
||||
href="#">
|
||||
<i class="fa fa-ellipsis-v"/>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="container o_kanban_card_content">
|
||||
<div class="row">
|
||||
<div class="col-xs-4">
|
||||
<strong>Total Issues</strong>
|
||||
</div>
|
||||
<div class="col-xs-4">
|
||||
</div>
|
||||
<div class="col-xs-4">
|
||||
<strong>Issue Types</strong>
|
||||
</div>
|
||||
<br/>
|
||||
<br/>
|
||||
<div class="col-xs-4">
|
||||
<a name="%(act_helpdesk_view)d"
|
||||
type="action"
|
||||
context="{'search_default_team_id': [active_id], 'default_team_id': active_id}">
|
||||
<field name="helpdesk_count"/>
|
||||
Issues
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-xs-4">
|
||||
</div>
|
||||
<div class="col-xs-4">
|
||||
<field name="issue_type_ids"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="container o_kanban_card_content">
|
||||
<field name="kanban_dashboard_graph"
|
||||
t-att-graph_type="'bar'"
|
||||
widget="dashboard_graph"/>
|
||||
</div>
|
||||
<div class="container o_kanban_card_manage_pane">
|
||||
<div t-if="widget.editable"
|
||||
class="o_kanban_card_manage_settings row">
|
||||
<div class="col-xs-8">
|
||||
<ul class="oe_kanban_colorpicker"
|
||||
data-field="color"/>
|
||||
</div>
|
||||
<div class="col-xs-4 text-right">
|
||||
<a type="edit">Settings</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
</templates>
|
||||
</kanban>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_helpdesk_team" model="ir.actions.act_window">
|
||||
<field name="name">Helpdesk Team</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">helpdesk.team</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">kanban,tree,form</field>
|
||||
<field name="view_id" ref="helpdesk_team_kanban_view"/>
|
||||
<field name="search_view_id" ref="view_helpdesk_team_search"/>
|
||||
</record>
|
||||
|
||||
<record model="ir.actions.act_window" id="act_team_dashboard_view">
|
||||
<field name="name">Dashboard</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">helpdesk.team</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">kanban,form</field>
|
||||
<field name="view_id" ref="team_dashboard_view"/>
|
||||
</record>
|
||||
|
||||
<menuitem id="helpdesk_team_menu" parent="menu_helpdesk_config"
|
||||
action="action_helpdesk_team" sequence="2"/>
|
||||
|
||||
<menuitem name="Dashboard" id="menu_helpdesk_dashboard"
|
||||
parent="menu_main_helpdesk" sequence="1"
|
||||
action="act_team_dashboard_view"
|
||||
groups="helpdesk_basic.helpdesk_group_manager"/>
|
||||
|
||||
</flectra>
|
259
addons/helpdesk_basic/views/helpdesk_ticket_view.xml
Normal file
@ -0,0 +1,259 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<flectra>
|
||||
|
||||
<record id="view_helpdesk_form" model="ir.ui.view">
|
||||
<field name="name">Helpdesk Form</field>
|
||||
<field name="model">helpdesk.ticket</field>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Helpdesk">
|
||||
<header>
|
||||
<field name="stage_id" widget="statusbar" clickable="True"
|
||||
options="{'fold_field': 'fold'}"/>
|
||||
</header>
|
||||
<sheet>
|
||||
<div class="oe_button_box" name="button_box">
|
||||
<button class="oe_stat_button" name="toggle_active"
|
||||
type="object" icon="fa-archive">
|
||||
<field name="active" widget="boolean_button"
|
||||
options='{"terminology": "archive"}'/>
|
||||
</button>
|
||||
<button class="oe_stat_button" type="object"
|
||||
name="action_get_attachments" icon="fa-file">
|
||||
<field string="Attachments"
|
||||
name="attachments_count" widget="statinfo"/>
|
||||
</button>
|
||||
</div>
|
||||
<div class="oe_title">
|
||||
<h1>
|
||||
<field name="sequence" readonly="1"/>
|
||||
</h1>
|
||||
<label for="name" class="oe_edit_only"/>
|
||||
<h1>
|
||||
<field name="name" placeholder="Issue Details"
|
||||
required="True"/>
|
||||
</h1>
|
||||
</div>
|
||||
<group>
|
||||
<group>
|
||||
<field name="user_id" required="1"/>
|
||||
<field name="partner_id"/>
|
||||
<field name="is_accessible" invisible="1"/>
|
||||
<field name="is_assigned" invisible="1"/>
|
||||
<field name="issue_type_id"
|
||||
options='{"no_open": True}'/>
|
||||
<field name="assigned_to_id"
|
||||
options='{"no_open": True}'/>
|
||||
<field name="priority" widget="priority"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="start_date"/>
|
||||
<field name="end_date"/>
|
||||
<field name="team_id"/>
|
||||
<field name="tag_ids" widget="many2many_tags"/>
|
||||
</group>
|
||||
</group>
|
||||
<notebook>
|
||||
<page name="description" string="Description">
|
||||
<field name="description"/>
|
||||
<field name="attachment_ids" invisible="1"/>
|
||||
</page>
|
||||
</notebook>
|
||||
</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"/>
|
||||
</div>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_helpdesk_tree" model="ir.ui.view">
|
||||
<field name="name">Helpdesk Tree View</field>
|
||||
<field name="model">helpdesk.ticket</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree>
|
||||
<field name="name"/>
|
||||
<field name="user_id"/>
|
||||
<field name="partner_id"/>
|
||||
<field name="team_id"/>
|
||||
<field name="assigned_to_id"/>
|
||||
<field name="stage_id"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_helpdesk_search" model="ir.ui.view">
|
||||
<field name="name">Helpdesk Search</field>
|
||||
<field name="model">helpdesk.ticket</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Search for Helpdesk">
|
||||
<field name="name" string="Helpdesk"
|
||||
filter_domain="[('name','ilike',self)]"/>
|
||||
<field name="team_id" string="Team"/>
|
||||
<field name="user_id" string="Created By"/>
|
||||
<field name="issue_type_id" string="Issue Type"/>
|
||||
<field name="partner_id" string="Related Partner"/>
|
||||
<field name="assigned_to_id" string="Assigned To"/>
|
||||
<field name="stage_id" string="Status"/>
|
||||
<filter string="Archived" domain="[('active','=',False)]"/>
|
||||
<group expand="0" string="Group By...">
|
||||
<filter string="Status" domain="[]"
|
||||
context="{'group_by':'stage_id'}"/>
|
||||
<filter string="Company" domain="[]"
|
||||
context="{'group_by':'company_id'}"
|
||||
groups="base.group_multi_company"/>
|
||||
<filter string="Team" domain="[]"
|
||||
context="{'group_by':'team_id'}"/>
|
||||
<filter string="Created By" domain="[]"
|
||||
context="{'group_by':'user_id'}"/>
|
||||
<filter string="Related Partner" domain="[]"
|
||||
context="{'group_by':'partner_id'}"/>
|
||||
<filter string="Assigned To" domain="[]"
|
||||
context="{'group_by':'assigned_to_id'}"/>
|
||||
<filter string="Issue Type" domain="[]"
|
||||
context="{'group_by':'issue_type_id'}"/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.ui.view" id="view_helpdesk_pivot">
|
||||
<field name="name">helpdesk.pivot</field>
|
||||
<field name="model">helpdesk.ticket</field>
|
||||
<field name="arch" type="xml">
|
||||
<pivot string="Helpdesk">
|
||||
<field name="name" type="row"/>
|
||||
<field name="user_id" type="col"/>
|
||||
</pivot>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.ui.view" id="helpdesk_kanban_view">
|
||||
<field name="name">helpdesk.ticket.kanban</field>
|
||||
<field name="model">helpdesk.ticket</field>
|
||||
<field name="arch" type="xml">
|
||||
<kanban default_group_by="stage_id"
|
||||
class="o_kanban_small_column o_kanban_project_tasks"
|
||||
on_create="quick_create">
|
||||
<field name="id"/>
|
||||
<field name="name"/>
|
||||
<field name="team_id"/>
|
||||
<field name="assigned_to_id"/>
|
||||
<field name="user_id"/>
|
||||
<field name="partner_id"/>
|
||||
<field name="color"/>
|
||||
<field name="priority"/>
|
||||
<field name="stage_id"
|
||||
options='{"group_by_tooltip": {"description": "Stage Description"}}'/>
|
||||
<field name="description"/>
|
||||
<field name="sequence"/>
|
||||
<field name="active"/>
|
||||
<templates>
|
||||
<t t-name="kanban-box">
|
||||
<div t-attf-class="oe_kanban_color_#{kanban_getcolor(record.color.raw_value)} oe_kanban_card oe_kanban_global_click">
|
||||
<div class="oe_kanban_content">
|
||||
<div class="o_kanban_record_top">
|
||||
<div class="o_kanban_record_headings">
|
||||
<strong class="o_kanban_record_title">
|
||||
<field name="name"/>
|
||||
</strong>
|
||||
<br/>
|
||||
</div>
|
||||
<div class="o_dropdown_kanban dropdown"
|
||||
groups="base.group_user">
|
||||
<a class="dropdown-toggle btn"
|
||||
data-toggle="dropdown" href="#">
|
||||
<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 Ticket</a>
|
||||
</li>
|
||||
<li t-if="widget.deletable">
|
||||
<a type="delete">Delete</a>
|
||||
</li>
|
||||
<li class="divider"></li>
|
||||
<li class="dropdown-header">
|
||||
Record's Color
|
||||
</li>
|
||||
<li>
|
||||
<ul class="oe_kanban_colorpicker"
|
||||
data-field="color"/>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="o_kanban_record_body">
|
||||
<div class="row">
|
||||
<div class="col-xs-12">
|
||||
<strong>Team:</strong>
|
||||
<a name="action_get_team"
|
||||
type="object">
|
||||
<field name="team_id"/>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-xs-12">
|
||||
<strong>Issue Type:</strong>
|
||||
<a name="action_get_issue_type"
|
||||
type="object">
|
||||
<field name="issue_type_id"/>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-xs-12">
|
||||
<strong>Tags:</strong>
|
||||
<field name="tag_ids"/>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="o_kanban_record_bottom">
|
||||
<div class="oe_kanban_bottom_left">
|
||||
<field name="priority"
|
||||
widget="priority"/>
|
||||
</div>
|
||||
<div class="oe_kanban_bottom_right">
|
||||
<img t-att-src="kanban_image('res.users', 'image_small', record.assigned_to_id.raw_value)"
|
||||
t-att-title="record.assigned_to_id.value"
|
||||
width="24" height="24"
|
||||
class="oe_kanban_avatar"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="oe_clear"></div>
|
||||
</div>
|
||||
</t>
|
||||
</templates>
|
||||
</kanban>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.actions.act_window" id="act_helpdesk_view">
|
||||
<field name="name">Helpdesk</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">helpdesk.ticket</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">kanban,tree,form,pivot</field>
|
||||
<field name="search_view_id" ref="view_helpdesk_search"/>
|
||||
</record>
|
||||
|
||||
<menuitem name="Helpdesk" id="menu_main_helpdesk" web_icon="helpdesk_basic,static/description/icon.png"/>
|
||||
<menuitem name="Helpdesk" id="menu_helpdesk" parent="menu_main_helpdesk"
|
||||
sequence="2"/>
|
||||
<menuitem name="Helpdesk" id="sub_menu_helpdesk"
|
||||
parent="menu_helpdesk" action="act_helpdesk_view"
|
||||
sequence="1"/>
|
||||
<menuitem id="menu_helpdesk_config" name="Configuration"
|
||||
parent="helpdesk_basic.menu_main_helpdesk" sequence="100"
|
||||
groups="helpdesk_basic.helpdesk_group_manager,base.group_system"/>
|
||||
|
||||
</flectra>
|
154
addons/helpdesk_basic/views/issue_type_view.xml
Normal file
@ -0,0 +1,154 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<flectra>
|
||||
|
||||
<record id="view_issue_type_form" model="ir.ui.view">
|
||||
<field name="name">Issue Type Form</field>
|
||||
<field name="model">issue.type</field>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Issue Type">
|
||||
<sheet>
|
||||
<group>
|
||||
<group>
|
||||
<field name="name"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="code"/>
|
||||
</group>
|
||||
</group>
|
||||
<notebook>
|
||||
<page name="reporting_template"
|
||||
string="Reporting Template Content">
|
||||
<field name="reporting_template"/>
|
||||
</page>
|
||||
</notebook>
|
||||
</sheet>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_issue_type_tree" model="ir.ui.view">
|
||||
<field name="name">Issue Type Tree</field>
|
||||
<field name="model">issue.type</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree>
|
||||
<field name="name"/>
|
||||
<field name="code"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_issue_type_search" model="ir.ui.view">
|
||||
<field name="name">Issue Type Search</field>
|
||||
<field name="model">issue.type</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Search for Issue Type">
|
||||
<field name="name" string="Name"
|
||||
filter_domain="['|',('name','ilike',self)]"/>
|
||||
<field name="code" string="Code"
|
||||
filter_domain="['|',('code','ilike',self)]"/>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.ui.view" id="issue_type_dashboard_kanban_view">
|
||||
<field name="name">issue.type.dashboard.kanban.view</field>
|
||||
<field name="model">issue.type</field>
|
||||
<field name="arch" type="xml">
|
||||
<kanban class="oe_background_grey o_kanban_dashboard o_account_kanban o_helpdesk_kanban">
|
||||
<field name="id"/>
|
||||
<field name="name"/>
|
||||
<field name="stages"/>
|
||||
<field name="color"/>
|
||||
<templates>
|
||||
<t t-name="kanban-box">
|
||||
<div t-attf-class="#{kanban_color(record.color.raw_value)}">
|
||||
<div t-attf-class="o_kanban_card_header o_kanban_record_top">
|
||||
<div t-attf-class="o_kanban_card_header">
|
||||
<div class="o_kanban_card_header_title">
|
||||
<div class="o_primary">
|
||||
<strong>
|
||||
<span>Issue Type:</span>
|
||||
</strong>
|
||||
<field name="name"/>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="o_kanban_manage_button_section">
|
||||
<a class="o_kanban_manage_toggle_button"
|
||||
href="#">
|
||||
<i class="fa fa-ellipsis-v"/>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="container o_kanban_card_content">
|
||||
<div class="row">
|
||||
<div class="col-xs-6 o_kanban_primary_left">
|
||||
<button type="object"
|
||||
name="action_create_new"
|
||||
class="btn btn-primary btn-sm o_invoice_new"
|
||||
context="{'default_issue_type_id': active_id}">
|
||||
<span>Ticket</span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="col-xs-6 o_kanban_primary_right">
|
||||
<div class="row"
|
||||
t-foreach="JSON.parse(record.stages.raw_value)"
|
||||
t-as="stage">
|
||||
<t t-set="context"
|
||||
t-value="stage['context']"/>
|
||||
<div class="col-xs-6">
|
||||
<a name="%(act_helpdesk_view)d"
|
||||
type="action"
|
||||
t-att-data-context="context">
|
||||
<strong>
|
||||
<span t-esc="stage['key']"/>
|
||||
</strong>
|
||||
<span>:</span>
|
||||
<span t-esc="stage['value']"/>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="container o_kanban_card_content">
|
||||
<field name="kanban_dashboard_graph"
|
||||
t-att-graph_type="'bar'"
|
||||
widget="dashboard_graph"/>
|
||||
</div>
|
||||
<div class="container o_kanban_card_manage_pane">
|
||||
<div t-if="widget.editable"
|
||||
class="o_kanban_card_manage_settings row">
|
||||
<div class="col-xs-8">
|
||||
<ul class="oe_kanban_colorpicker"
|
||||
data-field="color"/>
|
||||
</div>
|
||||
<div class="col-xs-4 text-right">
|
||||
<a type="edit">Settings</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
</templates>
|
||||
</kanban>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.actions.act_window" id="action_issue_type">
|
||||
<field name="name">Issue Type</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">issue.type</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">kanban,tree,form</field>
|
||||
<field name="search_view_id" ref="view_issue_type_search"/>
|
||||
</record>
|
||||
|
||||
<menuitem id="issue_type_menu" parent="menu_helpdesk_config"
|
||||
action="action_issue_type" sequence="2"
|
||||
groups="helpdesk_basic.helpdesk_group_manager"/>
|
||||
|
||||
</flectra>
|
10
addons/helpdesk_basic/views/view.xml
Normal file
@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<flectra>
|
||||
<template id="assets_backend" name="account assets"
|
||||
inherit_id="web.assets_backend">
|
||||
<xpath expr="." position="inside">
|
||||
<link rel="stylesheet"
|
||||
href="/helpdesk_basic/static/src/less/kanban.less"/>
|
||||
</xpath>
|
||||
</template>
|
||||
</flectra>
|
3
addons/helpdesk_forum/__init__.py
Normal file
@ -0,0 +1,3 @@
|
||||
# Part of Flectra See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from . import models
|
23
addons/helpdesk_forum/__manifest__.py
Normal file
@ -0,0 +1,23 @@
|
||||
# Part of Flectra See LICENSE file for full copyright and licensing details.
|
||||
|
||||
{
|
||||
'name': 'Helpdesk Forum',
|
||||
'version': '1.0',
|
||||
'description': '''Helpdesk Forum will provide you forum per
|
||||
helpdesk team''',
|
||||
'summary': '''Helpdesk Forum will provide you forum per
|
||||
helpdesk team''',
|
||||
'category': 'Human Resources',
|
||||
'author': 'FlectraHQ',
|
||||
'website': 'https://flectrahq.com',
|
||||
'depends': ['helpdesk_basic', 'website_forum'],
|
||||
'data': [
|
||||
'views/helpdesk_team_view.xml',
|
||||
'views/helpdesk_ticket_view.xml',
|
||||
],
|
||||
'demo': [
|
||||
'demo/helpdesk_demo.xml',
|
||||
],
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
}
|
16
addons/helpdesk_forum/demo/helpdesk_demo.xml
Normal file
@ -0,0 +1,16 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<flectra noupdate="1">
|
||||
|
||||
<record id="helpdesk_team_forum" model="helpdesk.team">
|
||||
<field name="name">Team Quick Support</field>
|
||||
<field name="alias_name">team_quick_support</field>
|
||||
<field name="issue_type_ids"
|
||||
eval="[(6,0,[ref('helpdesk_basic.issue_type_hardware')]), (6,0,[ref('helpdesk_basic.issue_type_software')])]"/>
|
||||
<field name="stage_ids"
|
||||
eval="[(6,0,[ref('helpdesk_basic.helpdesk_stage_draft'), ref('helpdesk_basic.helpdesk_stage_in_progress'),
|
||||
ref('helpdesk_basic.helpdesk_stage_done')])]"/>
|
||||
<field name="member_ids"
|
||||
eval="[(6,0,[ref('base.user_root'), ref('base.user_demo')])]"/>
|
||||
</record>
|
||||
|
||||
</flectra>
|
27
addons/helpdesk_forum/i18n/helpdesk_forum.pot
Normal file
@ -0,0 +1,27 @@
|
||||
# Translation of Flectra Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * helpdesk_forum
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Flectra Server 1.3\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2018-07-05 09:58+0000\n"
|
||||
"PO-Revision-Date: 2018-07-05 09:58+0000\n"
|
||||
"Last-Translator: <>\n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: \n"
|
||||
"Plural-Forms: \n"
|
||||
|
||||
#. module: helpdesk_forum
|
||||
#: model:ir.model.fields,field_description:helpdesk_forum.field_helpdesk_team_forum_id
|
||||
msgid "Forum"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_forum
|
||||
#: model:ir.model,name:helpdesk_forum.model_helpdesk_team
|
||||
msgid "helpdesk.team"
|
||||
msgstr ""
|
||||
|
4
addons/helpdesk_forum/models/__init__.py
Normal file
@ -0,0 +1,4 @@
|
||||
# Part of Flectra See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from . import helpdesk_team
|
||||
from . import helpdesk_ticket
|
16
addons/helpdesk_forum/models/helpdesk_team.py
Normal file
@ -0,0 +1,16 @@
|
||||
# Part of Flectra. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from flectra import api, fields, models
|
||||
|
||||
|
||||
class HelpdeskTeam(models.Model):
|
||||
_inherit = 'helpdesk.team'
|
||||
|
||||
forum_id = fields.Many2one('forum.forum', string="Forum")
|
||||
|
||||
@api.model
|
||||
def create(self, values):
|
||||
res = super(HelpdeskTeam, self).create(values)
|
||||
res.forum_id = self.env['forum.forum'].sudo().create(
|
||||
{'name': 'Forum %s' % (res.name or '')})
|
||||
return res
|
37
addons/helpdesk_forum/models/helpdesk_ticket.py
Normal file
@ -0,0 +1,37 @@
|
||||
# Part of Flectra See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from flectra import api, fields, models, _
|
||||
|
||||
|
||||
class HelpdeskTicket(models.Model):
|
||||
_inherit = 'helpdesk.ticket'
|
||||
|
||||
posted_to_forum = fields.Boolean(string='Posted to Forum', copy=False)
|
||||
display_post = fields.Boolean(string='Display',
|
||||
compute='_compute_display_post')
|
||||
|
||||
@api.multi
|
||||
def _compute_display_post(self):
|
||||
for record in self:
|
||||
if record.team_id and record.team_id.forum_id:
|
||||
record.display_post = True
|
||||
|
||||
@api.multi
|
||||
def post_to_forum(self):
|
||||
for record in self:
|
||||
if record.team_id and record.team_id.forum_id:
|
||||
self.env['forum.post'].create(
|
||||
{'forum_id': record.team_id.forum_id.id,
|
||||
'name': record.name,
|
||||
'content': record.description})
|
||||
self.posted_to_forum = True
|
||||
body = "#%s Issue Posted on Forum: %s" % (
|
||||
record.sequence, record.team_id.forum_id.name)
|
||||
self.env['mail.message'].create({
|
||||
'subject': _('Issue Posted on Forum'),
|
||||
'body': body,
|
||||
'record_name': record.name,
|
||||
'model': record._name,
|
||||
'res_id': record.id,
|
||||
'no_auto_thread': True,
|
||||
})
|
BIN
addons/helpdesk_forum/static/description/helpdesk-forum.jpg
Normal file
After Width: | Height: | Size: 54 KiB |
BIN
addons/helpdesk_forum/static/description/icon.png
Normal file
After Width: | Height: | Size: 9.6 KiB |
26
addons/helpdesk_forum/static/description/index.html
Normal file
@ -0,0 +1,26 @@
|
||||
<section class="container">
|
||||
<div class="row oe_spaced">
|
||||
<div class="col-md-12">
|
||||
<h2 class="oe_slogan">Helpdesk Forum</h2>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="container">
|
||||
<div class="row oe_spaced mt0">
|
||||
<div class="col-md-12">
|
||||
<h3 class="oe_slogan">Helpdesk Forum</h3>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="oe_demo oe_picture oe_screenshot">
|
||||
<img src="team_forum.png" alt="Helpdesk Forum"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<p class="text-justify" style="font-size: 15px;">
|
||||
Per team different forums will be available. One creating a
|
||||
team forum will be created automatically.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
BIN
addons/helpdesk_forum/static/description/team_forum.png
Normal file
After Width: | Height: | Size: 46 KiB |
3
addons/helpdesk_forum/tests/__init__.py
Normal file
@ -0,0 +1,3 @@
|
||||
# Part of Flectra See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from . import test_helpdesk
|
26
addons/helpdesk_forum/tests/test_helpdesk.py
Normal file
@ -0,0 +1,26 @@
|
||||
# Part of Flectra See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from flectra.tests.common import TransactionCase
|
||||
|
||||
|
||||
class TestHelpdeskForum(TransactionCase):
|
||||
|
||||
def setUp(self):
|
||||
""" setUp ***"""
|
||||
super(TestHelpdeskForum, self).setUp()
|
||||
|
||||
def test_00_helpdesk_forum_workflow(self):
|
||||
team = self.env['helpdesk.team'].create({
|
||||
'name': 'Test team software',
|
||||
'alias_name': 'test_team_software',
|
||||
'issue_type_ids':
|
||||
[(4, self.env.ref('helpdesk_basic.issue_type_software').id)],
|
||||
'stage_ids':
|
||||
[(6, 0, [self.env.ref('helpdesk_basic.helpdesk_stage_new').id,
|
||||
self.env.ref(
|
||||
'helpdesk_basic.helpdesk_stage_in_progress').id,
|
||||
self.env.ref(
|
||||
'helpdesk_basic.helpdesk_stage_done').id])],
|
||||
'member_ids': [(6, 0, [self.env.ref('base.user_demo').id])]
|
||||
})
|
||||
self.assertTrue(team.forum_id, 'Helpdesk Team forum creation fails')
|
17
addons/helpdesk_forum/views/helpdesk_team_view.xml
Normal file
@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<flectra>
|
||||
|
||||
<record id="helpdesk_team_form_view" model="ir.ui.view">
|
||||
<field name="name">Helpdesk Team Form</field>
|
||||
<field name="model">helpdesk.team</field>
|
||||
<field name="inherit_id"
|
||||
ref="helpdesk_basic.helpdesk_team_form_view"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//group[@name='group_alias']"
|
||||
position="inside">
|
||||
<field name="forum_id" readonly="1"/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
</flectra>
|
23
addons/helpdesk_forum/views/helpdesk_ticket_view.xml
Normal file
@ -0,0 +1,23 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<flectra>
|
||||
|
||||
<record id="view_helpdesk_form_inherited" model="ir.ui.view">
|
||||
<field name="name">Helpdesk Form</field>
|
||||
<field name="model">helpdesk.ticket</field>
|
||||
<field name="inherit_id"
|
||||
ref="helpdesk_basic.view_helpdesk_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='tag_ids']" position="after">
|
||||
<field name="posted_to_forum" invisible="1"/>
|
||||
<field name="display_post" invisible="1"/>
|
||||
</xpath>
|
||||
<xpath expr="//header" position="inside">
|
||||
<button name="post_to_forum"
|
||||
string="Post Issue to Forum" type="object"
|
||||
attrs="{'invisible': ['|', ('posted_to_forum', '=', True), ('display_post', '=', False)]}"
|
||||
groups="helpdesk_basic.helpdesk_group_manager"/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
</flectra>
|
3
addons/helpdesk_project_ext/__init__.py
Normal file
@ -0,0 +1,3 @@
|
||||
# Part of Flectra See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from . import models
|
22
addons/helpdesk_project_ext/__manifest__.py
Normal file
@ -0,0 +1,22 @@
|
||||
# Part of Flectra See LICENSE file for full copyright and licensing details.
|
||||
|
||||
{
|
||||
'name': 'Helpdesk Project Extension',
|
||||
'version': '1.0',
|
||||
'description': '''Helpdesk with project and task feature for generating
|
||||
issues.''',
|
||||
'summary': '''Helpdesk with project and task feature for generating
|
||||
issues.''',
|
||||
'category': 'Human Resources',
|
||||
'author': 'FlectraHQ',
|
||||
'website': 'https://flectrahq.com',
|
||||
'depends': ['helpdesk_basic', 'project'],
|
||||
'data': [
|
||||
'views/helpdesk_ticket_view.xml',
|
||||
'views/helpdesk_team_view.xml',
|
||||
'views/project_view.xml',
|
||||
'views/res_config_settings_views.xml',
|
||||
],
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
}
|
96
addons/helpdesk_project_ext/i18n/helpdesk_project_ext.pot
Normal file
@ -0,0 +1,96 @@
|
||||
# Translation of Flectra Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * helpdesk_project_ext
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Flectra Server 1.3\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2018-07-05 10:00+0000\n"
|
||||
"PO-Revision-Date: 2018-07-05 10:00+0000\n"
|
||||
"Last-Translator: <>\n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: \n"
|
||||
"Plural-Forms: \n"
|
||||
|
||||
#. module: helpdesk_project_ext
|
||||
#: model:ir.ui.view,arch_db:helpdesk_project_ext.view_helpdesk_form_inherited
|
||||
msgid "Create Task"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_project_ext
|
||||
#: model:ir.ui.view,arch_db:helpdesk_project_ext.res_config_settings_view_form_inherit
|
||||
msgid "Helpdesk"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_project_ext
|
||||
#: model:ir.model.fields,field_description:helpdesk_project_ext.field_project_task_helpdesk_id
|
||||
msgid "Helpdesk Ticket"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_project_ext
|
||||
#: model:ir.model.fields,field_description:helpdesk_project_ext.field_helpdesk_team_need_project
|
||||
#: model:ir.model.fields,field_description:helpdesk_project_ext.field_helpdesk_ticket_need_project
|
||||
msgid "Need Project"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_project_ext
|
||||
#: model:ir.model,name:helpdesk_project_ext.model_project_project
|
||||
#: model:ir.model.fields,field_description:helpdesk_project_ext.field_helpdesk_team_project_id
|
||||
#: model:ir.ui.view,arch_db:helpdesk_project_ext.helpdesk_team_kanban_view_inherited
|
||||
msgid "Project"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_project_ext
|
||||
#: model:ir.actions.act_window,name:helpdesk_project_ext.helpdesk_config_settings_action
|
||||
#: model:ir.ui.menu,name:helpdesk_project_ext.helpdesk_config_settings_menu_action
|
||||
msgid "Settings"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_project_ext
|
||||
#: model:ir.model,name:helpdesk_project_ext.model_project_task
|
||||
msgid "Task"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_project_ext
|
||||
#: code:addons/helpdesk_project_ext/models/helpdesk_ticket.py:42
|
||||
#: model:ir.model.fields,field_description:helpdesk_project_ext.field_helpdesk_ticket_task_count
|
||||
#: model:ir.ui.view,arch_db:helpdesk_project_ext.view_helpdesk_form_inherited
|
||||
#, python-format
|
||||
msgid "Tasks"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_project_ext
|
||||
#: model:ir.model.fields,field_description:helpdesk_project_ext.field_res_config_settings_use_project
|
||||
msgid "Use Projects"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_project_ext
|
||||
#: model:ir.model.fields,field_description:helpdesk_project_ext.field_project_project_is_helpdesk
|
||||
#: model:ir.ui.view,arch_db:helpdesk_project_ext.helpdesk_inherit_edit_project
|
||||
msgid "Use in Helpdesk"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_project_ext
|
||||
#: model:ir.ui.view,arch_db:helpdesk_project_ext.res_config_settings_view_form_inherit
|
||||
msgid "Use projects for creating helpdesk\n"
|
||||
" issues."
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_project_ext
|
||||
#: model:ir.model,name:helpdesk_project_ext.model_helpdesk_team
|
||||
msgid "helpdesk.team"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_project_ext
|
||||
#: model:ir.model,name:helpdesk_project_ext.model_helpdesk_ticket
|
||||
msgid "helpdesk.ticket"
|
||||
msgstr ""
|
||||
|
||||
#. module: helpdesk_project_ext
|
||||
#: model:ir.model,name:helpdesk_project_ext.model_res_config_settings
|
||||
msgid "res.config.settings"
|
||||
msgstr ""
|
||||
|
6
addons/helpdesk_project_ext/models/__init__.py
Normal file
@ -0,0 +1,6 @@
|
||||
# Part of Flectra See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from . import helpdesk_team
|
||||
from . import helpdesk_ticket
|
||||
from . import project
|
||||
from . import res_config_settings
|
21
addons/helpdesk_project_ext/models/helpdesk_team.py
Normal file
@ -0,0 +1,21 @@
|
||||
# Part of Flectra. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from flectra import api, fields, models
|
||||
|
||||
|
||||
class HelpdeskTeam(models.Model):
|
||||
|
||||
_inherit = 'helpdesk.team'
|
||||
|
||||
project_id = fields.Many2one('project.project', string='Project')
|
||||
need_project = fields.Boolean(string='Need Project',
|
||||
compute="_compute_need_project")
|
||||
|
||||
@api.multi
|
||||
def _compute_need_project(self):
|
||||
config = self.env['res.config.settings'].search(
|
||||
[], limit=1, order='id desc')
|
||||
for team in self:
|
||||
team.need_project = False
|
||||
if config.use_project:
|
||||
team.need_project = True
|
64
addons/helpdesk_project_ext/models/helpdesk_ticket.py
Normal file
@ -0,0 +1,64 @@
|
||||
# Part of Flectra See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from flectra import api, fields, models, _
|
||||
|
||||
|
||||
class HelpdeskTicket(models.Model):
|
||||
_inherit = 'helpdesk.ticket'
|
||||
|
||||
need_project = fields.Boolean(string='Need Project',
|
||||
compute="_compute_need_project")
|
||||
task_count = fields.Integer(compute='_compute_task_count', string='Tasks')
|
||||
|
||||
@api.multi
|
||||
def action_create_task(self):
|
||||
self.ensure_one()
|
||||
user = self.env['res.users'].search(
|
||||
[('partner_id', '=', self.partner_id.id)], limit=1)
|
||||
vals = {'name': self.name,
|
||||
'helpdesk_id': self.id,
|
||||
'partner_id': self.assigned_to_id.id,
|
||||
'description':
|
||||
self.name or '' + '<br/>' + self.description or '',
|
||||
'user_id': user and user.id or False,
|
||||
'priority': 'l',
|
||||
}
|
||||
if self.env['res.config.settings'].search(
|
||||
[], limit=1, order='id desc').mapped('use_project'):
|
||||
vals.update({
|
||||
'project_id':
|
||||
self.team_id and self.team_id.project_id and
|
||||
self.team_id.project_id.id or False})
|
||||
self.env['project.task'].create(vals)
|
||||
|
||||
@api.multi
|
||||
def action_get_tasks(self):
|
||||
self.ensure_one()
|
||||
context = {'default_helpdesk_id': self.id}
|
||||
if self.env['res.config.settings'].search(
|
||||
[], limit=1, order='id desc').mapped('use_project') and \
|
||||
self.team_id and self.team_id.project_id and \
|
||||
self.team_id.project_id:
|
||||
context.update({'default_project_id': self.team_id.project_id.id})
|
||||
return {
|
||||
'name': _('Tasks'),
|
||||
'res_model': 'project.task',
|
||||
'type': 'ir.actions.act_window',
|
||||
'view_mode': 'tree,form',
|
||||
'view_type': 'form',
|
||||
'domain': [('helpdesk_id', '=', self.id)],
|
||||
'context': context,
|
||||
}
|
||||
|
||||
@api.multi
|
||||
def _compute_task_count(self):
|
||||
for ticket in self:
|
||||
ticket.task_count = self.env['project.task'].search_count([(
|
||||
'helpdesk_id', '=', self.id)])
|
||||
|
||||
@api.multi
|
||||
def _compute_need_project(self):
|
||||
if self.env['res.config.settings'].search(
|
||||
[], limit=1, order='id desc').mapped('use_project'):
|
||||
for team in self:
|
||||
team.need_project = True
|
15
addons/helpdesk_project_ext/models/project.py
Normal file
@ -0,0 +1,15 @@
|
||||
# Part of Flectra. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from flectra import fields, models
|
||||
|
||||
|
||||
class Project(models.Model):
|
||||
_inherit = 'project.project'
|
||||
|
||||
is_helpdesk = fields.Boolean(string='Use in Helpdesk')
|
||||
|
||||
|
||||
class ProjectTask(models.Model):
|
||||
_inherit = 'project.task'
|
||||
|
||||
helpdesk_id = fields.Many2one('helpdesk.ticket', string='Helpdesk Ticket')
|
23
addons/helpdesk_project_ext/models/res_config_settings.py
Normal file
@ -0,0 +1,23 @@
|
||||
# Part of Flectra See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from flectra import api, fields, models
|
||||
|
||||
|
||||
class ResConfigSettings(models.TransientModel):
|
||||
_inherit = 'res.config.settings'
|
||||
|
||||
use_project = fields.Boolean("Use Projects")
|
||||
|
||||
@api.model
|
||||
def get_values(self):
|
||||
res = super(ResConfigSettings, self).get_values()
|
||||
get_param = self.env['ir.config_parameter'].sudo().get_param
|
||||
res.update(
|
||||
use_project=get_param('helpdesk_project_ext.use_project'),
|
||||
)
|
||||
return res
|
||||
|
||||
def set_values(self):
|
||||
super(ResConfigSettings, self).set_values()
|
||||
set_param = self.env['ir.config_parameter'].sudo().set_param
|
||||
set_param('helpdesk_project_ext.use_project', self.use_project)
|
After Width: | Height: | Size: 49 KiB |
After Width: | Height: | Size: 53 KiB |
After Width: | Height: | Size: 41 KiB |
After Width: | Height: | Size: 52 KiB |
BIN
addons/helpdesk_project_ext/static/description/icon.png
Normal file
After Width: | Height: | Size: 6.0 KiB |
84
addons/helpdesk_project_ext/static/description/index.html
Normal file
@ -0,0 +1,84 @@
|
||||
<section class="container">
|
||||
<div class="row oe_spaced">
|
||||
<div class="col-md-12">
|
||||
<h2 class="oe_slogan">Helpdesk Project Extension</h2>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="container">
|
||||
<div class="row oe_spaced mt0">
|
||||
<div class="col-md-12">
|
||||
<h3 class="oe_slogan">Helpdesk team with project details</h3>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="oe_demo oe_picture oe_screenshot">
|
||||
<img src="helpdesk_project_team.png" alt="Helpdesk Team"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<p class="text-justify" style="font-size: 15px;">
|
||||
Helpdesk team kanban view displays the project for the team
|
||||
to create tasks in that project for particular issue.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="container bg-gray-lighter">
|
||||
<div class="row oe_spaced mt0">
|
||||
<div class="col-md-12">
|
||||
<h3 class="oe_slogan">Helpdesk Team Form</h3>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<p class="text-justify" style="font-size: 15px;">
|
||||
Select project from the list of projects or create new one
|
||||
for the team.
|
||||
</p>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="oe_demo oe_picture oe_screenshot">
|
||||
<img src="create_project_in_team.png" width="100%"
|
||||
alt="Helpdesk Team Form"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="container">
|
||||
<div class="row oe_spaced mt0">
|
||||
<div class="col-md-12">
|
||||
<h3 class="oe_slogan">Helpdesk Project Form</h3>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="oe_demo oe_picture oe_screenshot">
|
||||
<img src="helpdesk_team_project_create.png"
|
||||
alt="Helpdesk Project Form"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<p class="text-justify" style="font-size: 15px;">
|
||||
Create project by adding its name and mark boolean to enable
|
||||
in helpdesk to true if not enabled.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="container bg-gray-lighter">
|
||||
<div class="row oe_spaced mt0">
|
||||
<div class="col-md-12">
|
||||
<h3 class="oe_slogan">Helpdesk Team with project.</h3>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<p class="text-justify" style="font-size: 15px;">
|
||||
Helpdesk team view after project created for the team.
|
||||
</p>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="oe_demo oe_picture oe_screenshot">
|
||||
<img src="team_with_project.png" alt="Helpdesk Team Form"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
After Width: | Height: | Size: 47 KiB |
3
addons/helpdesk_project_ext/tests/__init__.py
Normal file
@ -0,0 +1,3 @@
|
||||
# Part of Flectra See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from . import test_helpdesk
|
19
addons/helpdesk_project_ext/tests/test_helpdesk.py
Normal file
@ -0,0 +1,19 @@
|
||||
# Part of Flectra See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from flectra.tests.common import TransactionCase
|
||||
|
||||
|
||||
class TestHelpdesk(TransactionCase):
|
||||
|
||||
def setUp(self):
|
||||
""" setUp ***"""
|
||||
super(TestHelpdesk, self).setUp()
|
||||
self.helpdesk_id = self.env.ref('helpdesk_basic.helpdesk_ticket')
|
||||
|
||||
def test_00_helpdesk_project_workflow(self):
|
||||
self.assertFalse(self.helpdesk_id._compute_task_count(),
|
||||
'Helpdesk task should not be created.')
|
||||
self.helpdesk_id.action_create_task()
|
||||
self.helpdesk_id._compute_task_count()
|
||||
self.assertEqual(self.helpdesk_id.task_count, 1,
|
||||
'Helpdesk task creation process fails')
|
43
addons/helpdesk_project_ext/views/helpdesk_team_view.xml
Normal file
@ -0,0 +1,43 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<flectra>
|
||||
|
||||
<record id="helpdesk_team_form_view_inherited" model="ir.ui.view">
|
||||
<field name="name">Helpdesk Team Form</field>
|
||||
<field name="model">helpdesk.team</field>
|
||||
<field name="inherit_id"
|
||||
ref="helpdesk_basic.helpdesk_team_form_view"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='name']" position="after">
|
||||
<field name="need_project" invisible="1"/>
|
||||
<field name="project_id"
|
||||
context="{'default_is_helpdesk': True}"
|
||||
attrs="{'invisible':[('need_project', '=', False)]}"
|
||||
domain="[('is_helpdesk', '=', True)]"/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.ui.view" id="helpdesk_team_kanban_view_inherited">
|
||||
<field name="name">helpdesk.team.kanban.view</field>
|
||||
<field name="model">helpdesk.team</field>
|
||||
<field name="inherit_id"
|
||||
ref="helpdesk_basic.helpdesk_team_kanban_view"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='name']" position="after">
|
||||
<field name="need_project" invisible="1"/>
|
||||
<field name="project_id"
|
||||
attrs="{'invisible':[('need_project', '=', False)]}"/>
|
||||
</xpath>
|
||||
<xpath expr="//div[@id='project']" position="inside">
|
||||
<strong>
|
||||
<span t-if="record.need_project.raw_value">Project</span>
|
||||
</strong>
|
||||
</xpath>
|
||||
<xpath expr="//div[@id='project_value']" position="inside">
|
||||
<field t-if="record.need_project and record.project_id.raw_value"
|
||||
name="project_id"/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
</flectra>
|
28
addons/helpdesk_project_ext/views/helpdesk_ticket_view.xml
Normal file
@ -0,0 +1,28 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<flectra>
|
||||
|
||||
<record id="view_helpdesk_form_inherited" model="ir.ui.view">
|
||||
<field name="name">Helpdesk Form</field>
|
||||
<field name="model">helpdesk.ticket</field>
|
||||
<field name="inherit_id"
|
||||
ref="helpdesk_basic.view_helpdesk_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//div[@name='button_box']" position="inside">
|
||||
<button class="oe_stat_button" type="object"
|
||||
name="action_get_tasks" icon="fa-tasks">
|
||||
<field string="Tasks"
|
||||
name="task_count" widget="statinfo"/>
|
||||
</button>
|
||||
</xpath>
|
||||
<!--<xpath expr="//header" position="inside">
|
||||
<button name="action_create_task"
|
||||
string="Create Task" type="object"
|
||||
groups="helpdesk_basic.helpdesk_group_manager"/>
|
||||
</xpath>-->
|
||||
<xpath expr="//field[@name='tag_ids']" position="after">
|
||||
<field name="need_project" invisible="1"/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
</flectra>
|
33
addons/helpdesk_project_ext/views/project_view.xml
Normal file
@ -0,0 +1,33 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<flectra>
|
||||
|
||||
<record id="helpdesk_project_view_inherit" model="ir.ui.view">
|
||||
<field name="name">helpdesk.project.view.inherit</field>
|
||||
<field name="model">project.project</field>
|
||||
<field name="inherit_id"
|
||||
ref="project.project_project_view_form_simplified"/>
|
||||
<field name="priority">24</field>
|
||||
<field name="arch" type="xml">
|
||||
<field name="user_id" position="after">
|
||||
<field name="is_helpdesk"/>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="helpdesk_inherit_edit_project" model="ir.ui.view">
|
||||
<field name="name">helpdesk.inherit.edit.project</field>
|
||||
<field name="model">project.project</field>
|
||||
<field name="inherit_id" ref="project.edit_project"/>
|
||||
<field name="priority">24</field>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//div[@name='options_active']" position="inside">
|
||||
<div>
|
||||
<label for="is_helpdesk"/>
|
||||
<field name="is_helpdesk" class="oe_inline"
|
||||
string="Use in Helpdesk"/>
|
||||
</div>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
</flectra>
|
@ -0,0 +1,48 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<flectra>
|
||||
|
||||
<record id="res_config_settings_view_form_inherit" model="ir.ui.view">
|
||||
<field name="name">res.config.settings.view.inherit.helpdesk</field>
|
||||
<field name="model">res.config.settings</field>
|
||||
<field name="priority" eval="50"/>
|
||||
<field name="inherit_id" ref="base.res_config_settings_view_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//div[hasclass('settings')]" position="inside">
|
||||
<div class="app_settings_block" data-string="Helpdesk"
|
||||
string="Helpdesk" data-key="helpdesk"
|
||||
groups="helpdesk_basic.helpdesk_group_manager">
|
||||
<h2>Helpdesk</h2>
|
||||
<div class="row mt16 o_settings_container">
|
||||
<div class="col-xs-12 col-md-6 o_setting_box">
|
||||
<div class="o_setting_left_pane">
|
||||
<field name="use_project"/>
|
||||
</div>
|
||||
<div class="o_setting_right_pane">
|
||||
<label for="use_project"/>
|
||||
<div class="text-muted">
|
||||
Use projects for creating helpdesk
|
||||
issues.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="helpdesk_config_settings_action" model="ir.actions.act_window">
|
||||
<field name="name">Settings</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">res.config.settings</field>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="target">inline</field>
|
||||
<field name="context">{'module' : 'helpdesk'}</field>
|
||||
</record>
|
||||
|
||||
<menuitem id="helpdesk_config_settings_menu_action"
|
||||
parent="helpdesk_basic.menu_helpdesk_config" sequence="0"
|
||||
action="helpdesk_config_settings_action"
|
||||
groups="base.group_system,helpdesk_basic.helpdesk_group_manager"/>
|
||||
|
||||
</flectra>
|
4
addons/website_helpdesk/__init__.py
Normal file
@ -0,0 +1,4 @@
|
||||
# Part of Flectra See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from . import controllers
|
||||
from . import models
|
18
addons/website_helpdesk/__manifest__.py
Normal file
@ -0,0 +1,18 @@
|
||||
# Part of Flectra See LICENSE file for full copyright and licensing details.
|
||||
|
||||
{
|
||||
'name': 'Website Helpdesk',
|
||||
'version': '1.0',
|
||||
'description': '''Website Helpdesk''',
|
||||
'summary': '''Website Helpdesk''',
|
||||
'category': 'Human Resources',
|
||||
'author': 'FlectraHQ',
|
||||
'website': 'https://flectrahq.com',
|
||||
'depends': ['helpdesk_basic', 'website', 'portal', 'website_rating'],
|
||||
'data': [
|
||||
'views/pages/helpdesk_register_website_view.xml',
|
||||
'views/views.xml',
|
||||
],
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
}
|