Your team has been given the ticket [] kindly complete your work
+
Your team has been given the ticket [] kindly complete your work
carefully.
@@ -155,21 +153,22 @@
-
-
+ Ticket Assign to User
+ ref="odoo_website_helpdesk.model_help_ticket"/>
Dear,
-
+
-
Ticket [] Assign to you , kindly complete your work carefully.
+
Ticket [] Assign to you , kindly
+ complete your work carefully.
Details
@@ -187,27 +186,26 @@
-
-
+ Mail To Customer Assign to User
+ ref="odoo_website_helpdesk.model_help_ticket"/>
Dear,
-
Ticket [] successfully assigned to "".
+
Ticket [] successfully assigned
+ to "".
Best regards
-
diff --git a/odoo_website_helpdesk/data/ticket_stage_data.xml b/odoo_website_helpdesk/data/ticket_stage_data.xml
index 43ccbd24e..0ee6cbb5e 100644
--- a/odoo_website_helpdesk/data/ticket_stage_data.xml
+++ b/odoo_website_helpdesk/data/ticket_stage_data.xml
@@ -1,39 +1,39 @@
-
-
-
-
- 10
- Inbox
-
-
-
- 15
- Draft
-
-
-
- 25
- Done
-
-
-
- 20
-
- In Progress
-
-
-
- 30
- True
- Closed
-
-
-
- 35
- True
- Canceled
-
-
-
\ No newline at end of file
+
+
+ 10
+ Inbox
+
+
+
+ 15
+ Draft
+
+
+
+ 20
+
+ In Progress
+
+
+
+ 25
+ Done
+
+
+
+
+ 30
+ Canceled
+
+
+
+
+
+ 29
+ Closed
+
+
+
+
diff --git a/odoo_website_helpdesk/doc/RELEASE_NOTES.md b/odoo_website_helpdesk/doc/RELEASE_NOTES.md
index 1f9bec8cb..d7dc12c50 100644
--- a/odoo_website_helpdesk/doc/RELEASE_NOTES.md
+++ b/odoo_website_helpdesk/doc/RELEASE_NOTES.md
@@ -1,25 +1,11 @@
## Module
-#### 30.10.2024
-#### Version 18.0.1.0.0
+#### 04.12.2023
+#### Version 16.0.1.0.0
#### ADD
-
- Initial commit for Website Helpdesk Support Ticket Management
#### 12.02.2025
-#### Version 18.0.1.0.1
-##### UPDT
+#### Version 16.0.3.0.1
+#### UPDT
-A new contact record is created upon form submission.
-
-#### 13.05.2025
-#### Version 18.0.1.0.2
-##### UPDT
--A confirmation email will be sent to the customer upon ticket creation.
-
-
-
-
-
-
-
-
diff --git a/odoo_website_helpdesk/models/__init__.py b/odoo_website_helpdesk/models/__init__.py
index ed5cef70b..8e55983aa 100644
--- a/odoo_website_helpdesk/models/__init__.py
+++ b/odoo_website_helpdesk/models/__init__.py
@@ -1,10 +1,10 @@
# -*- coding: utf-8 -*-
-################################################################################
+#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
-# Copyright (C) 2024-TODAY Cybrosys Technologies()
-# Author: Bhagyadev KP ()
+# Copyright (C) 2023-TODAY Cybrosys Technologies()
+# Author: Cybrosys Techno Solutions()
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
@@ -18,17 +18,17 @@
# (LGPL v3) along with this program.
# If not, see .
#
-################################################################################
+#############################################################################
from . import account_move
-from . import helpdesk_category
+from . import help_team
+from . import help_ticket
+from . import helpdesk_categories
from . import helpdesk_tag
-from . import helpdesk_type
+from . import helpdesk_types
from . import mail_compose_message
-from . import merge_ticket
+from . import merge_tickets
from . import project_task
from . import res_config_settings
-from . import support_ticket
-from . import team_helpdesk
-from . import ticket_helpdesk
+from . import support_tickets
from . import ticket_stage
from . import website_menu
diff --git a/odoo_website_helpdesk/models/account_move.py b/odoo_website_helpdesk/models/account_move.py
index bb22cd759..0e7b24da0 100644
--- a/odoo_website_helpdesk/models/account_move.py
+++ b/odoo_website_helpdesk/models/account_move.py
@@ -1,10 +1,10 @@
# -*- coding: utf-8 -*-
-################################################################################
+#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
-# Copyright (C) 2024-TODAY Cybrosys Technologies()
-# Author: Bhagyadev KP ()
+# Copyright (C) 2023-TODAY Cybrosys Technologies()
+# Author: Cybrosys Techno Solutions()
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
@@ -18,13 +18,14 @@
# (LGPL v3) along with this program.
# If not, see .
#
-################################################################################
+#############################################################################
from odoo import fields, models
class AccountMove(models.Model):
- """Inheriting the account.move model"""
+ """ This class extends the functionality of the 'account.move' model to
+ include a reference to a help ticket through the 'ticket_id' field."""
_inherit = 'account.move'
- ticket_id = fields.Many2one('ticket.helpdesk',
- string='Ticket', help='ID of the ticket.')
+ ticket_id = fields.Many2one('help.ticket', string='Ticket',
+ help='Choose the tickets')
diff --git a/odoo_website_helpdesk/models/help_team.py b/odoo_website_helpdesk/models/help_team.py
new file mode 100644
index 000000000..d4839a50a
--- /dev/null
+++ b/odoo_website_helpdesk/models/help_team.py
@@ -0,0 +1,65 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies()
+# Author: Cybrosys Techno Solutions()
+#
+# You can modify it under the terms of the GNU LESSER
+# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
+#
+# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
+# (LGPL v3) along with this program.
+# If not, see .
+#
+#############################################################################
+from odoo import api, fields, models
+
+
+class HelpTeam(models.Model):
+ """ This class represents a Helpdesk Team in the system, providing
+ information about the team members, leader, and related project."""
+ _name = 'help.team'
+ _description = 'Helpdesk Team'
+
+ name = fields.Char(string='Name', help='Name of the Helpdesk Team. It '
+ 'identify the helpdesk team')
+ team_lead_id = fields.Many2one(
+ 'res.users',
+ string='Team Leader',
+ help='Name of the Helpdesk Team Leader.',
+ domain=lambda self: [('groups_id', 'in', self.env.ref(
+ 'odoo_website_helpdesk.helpdesk_team_leader').id)])
+ member_ids = fields.Many2many(
+ 'res.users',
+ string='Members',
+ help='Users who belong to that Helpdesk Team',
+ domain=lambda self: [('groups_id', 'in', self.env.ref(
+ 'odoo_website_helpdesk.helpdesk_user').id)])
+ email = fields.Char(string='Email', help='Email')
+ project_id = fields.Many2one('project.project',
+ string='Project',
+ help='The Project they are currently in')
+ create_task = fields.Boolean(string="Create Task",
+ help="Enable for allowing team to "
+ "create tasks from tickets")
+
+ @api.onchange('team_lead_id')
+ def members_choose(self):
+ """ This method is triggered when the Team Leader is changed. It
+ updates the available team members based on the selected leader and
+ filters out the leader from the list of potential members."""
+ fetch_members = self.env['res.users'].search([])
+ filtered_members = fetch_members.filtered(
+ lambda x: x.id != self.team_lead_id.id)
+ return {'domain': {'member_ids': [
+ ('id', '=', filtered_members.ids),
+ ('groups_id', 'in', self.env.ref('base.group_user').id),
+ ('groups_id', 'not in', self.env.ref(
+ 'odoo_website_helpdesk.helpdesk_team_leader').id)]}}
diff --git a/odoo_website_helpdesk/models/help_ticket.py b/odoo_website_helpdesk/models/help_ticket.py
new file mode 100644
index 000000000..eccdd8fb6
--- /dev/null
+++ b/odoo_website_helpdesk/models/help_ticket.py
@@ -0,0 +1,465 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies()
+# Author: Cybrosys Techno Solutions()
+#
+# You can modify it under the terms of the GNU LESSER
+# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
+#
+# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
+# (LGPL v3) along with this program.
+# If not, see .
+#
+#############################################################################
+import logging
+from odoo import api, fields, models, _
+from odoo.exceptions import UserError
+from odoo.exceptions import ValidationError
+
+_logger = logging.getLogger(__name__)
+
+PRIORITIES = [
+ ('0', 'Very Low'),
+ ('1', 'Low'),
+ ('2', 'Normal'),
+ ('3', 'High'),
+ ('4', 'Very High'),
+]
+RATING = [
+ ('0', 'Very Low'),
+ ('1', 'Low'),
+ ('2', 'Normal'),
+ ('3', 'High'),
+ ('4', 'Very High'),
+ ('5', 'Extreme High')
+]
+
+
+class HelpTicket(models.Model):
+ """This model represents the Helpdesk Ticket, which allows users to raise
+ tickets related to products, services or any other issues. Each ticket has a
+ name, customer information, description, team responsible for handling
+ requests, associated project, priority level, stage, cost per hour, service
+ product, start and end dates, and related tasks and invoices."""
+
+ _name = 'help.ticket'
+ _description = 'Help Ticket'
+ _inherit = ['mail.thread', 'mail.activity.mixin']
+
+ name = fields.Char(string='Name', default=lambda self: _('New'),
+ help='The name of the help ticket. By default, a new '
+ 'unique sequence number is assigned to each '
+ 'help ticket, unless a name is provided.',
+ readonly=True)
+ active = fields.Boolean(default=True, help='Active', string='Active')
+ customer_id = fields.Many2one('res.partner',
+ string='Customer Name',
+ help='Select the Customer Name')
+ customer_name = fields.Char(string='Customer Name',
+ help='Add the Customer Name')
+ subject = fields.Text(string='Subject', required=True,
+ help='Subject of the Ticket')
+ description = fields.Text(string='Description', required=True,
+ help='Issue Description')
+ email = fields.Char(string='Email', help='Email of the User.')
+ phone = fields.Char(string='Phone', help='Phone Number of the user')
+ team_id = fields.Many2one('help.team', string='Helpdesk Team',
+ help='The helpdesk team responsible for '
+ 'handling requests related to this '
+ 'record')
+ product_ids = fields.Many2many('product.template',
+ string='Product',
+ help='The product associated with this '
+ 'record.This field allows you to select'
+ 'an existing product from the product '
+ 'catalog.')
+ project_id = fields.Many2one('project.project',
+ string='Project',
+ readonly=False,
+ related='team_id.project_id',
+ store=True,
+ help='The project associated with this team.'
+ 'This field is automatically filled '
+ 'based on the project assigned to '
+ 'the team.')
+ priority = fields.Selection(PRIORITIES,
+ default='1',
+ help='Set the priority level',
+ string='Priority')
+ stage_id = fields.Many2one('ticket.stage', string='Stage',
+ default=lambda self: self.env[
+ 'ticket.stage'].search(
+ [('name', '=', 'Draft')], limit=1).id,
+ tracking=True,
+ group_expand='_read_group_stage_ids',
+ help='Stages of the ticket.')
+ user_id = fields.Many2one('res.users',
+ default=lambda self: self.env.user,
+ check_company=True,
+ index=True, tracking=True,
+ help='Login User')
+ cost = fields.Float(string='Cost per hour',
+ help='The cost per hour for this record. This field '
+ 'specifies the hourly cost associated with the'
+ 'record, which can be used in various '
+ 'calculations or reports.')
+ service_product_id = fields.Many2one('product.product',
+ string='Service Product',
+ help='The product associated with this'
+ 'service. Only service products '
+ 'are available for selection.',
+ domain=[
+ ('detailed_type', '=', 'service')])
+ create_date = fields.Datetime(string='Creation Date', help='Created date of'
+ 'the Ticket')
+ start_date = fields.Datetime(string='Start Date', help='Start Date of the '
+ 'Ticket')
+ end_date = fields.Datetime(string='End Date', help='End Date of the Ticket')
+ public_ticket = fields.Boolean(string="Public Ticket", help='Public Ticket')
+ invoice_ids = fields.Many2many('account.move',
+ string='Invoices',
+ help='To Generate Invoice based on hours '
+ 'spent on the ticket'
+ )
+ task_ids = fields.Many2many('project.task',
+ string='Tasks',
+ help='Related Task of the Ticket')
+ color = fields.Integer(string="Color", help='Color')
+ replied_date = fields.Datetime(string='Replied date',
+ help='Replied Date of the Ticket')
+ last_update_date = fields.Datetime(string='Last Update Date',
+ help='Last Update Date of Ticket')
+ ticket_type = fields.Many2one('helpdesk.types',
+ string='Ticket Type', help='Ticket Type')
+ team_head = fields.Many2one('res.users', string='Team Leader',
+ compute='_compute_team_head',
+ help='Team Leader Name')
+ assigned_user = fields.Many2one(
+ 'res.users',
+ string='Assigned User',
+ domain=lambda self: [('groups_id', 'in', self.env.ref(
+ 'odoo_website_helpdesk.helpdesk_user').id)],
+ help='Choose the Assigned User Name')
+ category_id = fields.Many2one('helpdesk.categories',
+ help='Choose the Category', string='Category')
+ tags = fields.Many2many('helpdesk.tag', help='Choose the Tags',
+ string='Tag')
+ assign_user = fields.Boolean(string='Assigned User', help='Assign User')
+ attachment_ids = fields.One2many('ir.attachment',
+ 'res_id',
+ help='Attachment Line',
+ string='Attachment')
+ merge_ticket_invisible = fields.Boolean(string='Merge Ticket',
+ help='Merge Ticket Invisible or '
+ 'Not')
+ merge_count = fields.Integer(string='Merge Count', help='Merged Tickets '
+ 'Count')
+
+ @api.onchange('team_id', 'team_head')
+ def team_leader_domain(self):
+ """Update the domain for the assigned user based on the selected team.
+
+ This onchange method is triggered when the helpdesk team or team leader
+ is changed. It updates the domain for the assigned user field to include
+ only the members of the selected team."""
+ teams = []
+ for rec in self.team_id.member_ids:
+ teams.append(rec.id)
+ return {'domain': {'assigned_user': [('id', 'in', teams)]}}
+
+ @api.depends('team_id')
+ def _compute_team_head(self):
+ """Compute the team head based on the selected team.
+
+ This method is triggered when the helpdesk team is changed. It computes
+ and updates the team head field based on the team's lead.
+ """
+ self.team_head = self.team_id.team_lead_id.id
+
+ @api.onchange('stage_id')
+ def mail_snd(self):
+ """Send an email when the stage of the ticket is changed.
+
+ This onchange method is triggered when the stage of the ticket is
+ changed. It updates the last update date, start date, and end date
+ fields accordingly. If a template is associated with the stage, it
+ sends an email using that template."""
+ rec_id = self._origin.id
+ data = self.env['help.ticket'].search([('id', '=', rec_id)])
+ data.last_update_date = fields.Datetime.now()
+ if self.stage_id.starting_stage:
+ data.start_date = fields.Datetime.now()
+ if self.stage_id.closing_stage or self.stage_id.cancel_stage:
+ data.end_date = fields.Datetime.now()
+ if self.stage_id.template_id:
+ mail_template = self.stage_id.template_id
+ mail_template.send_mail(self._origin.id, force_send=True)
+
+ def assign_to_teamleader(self):
+ """Assign the ticket to the team leader and send a notification.
+
+ This function checks if a helpdesk team is selected and assigns the
+ team leader to the ticket. It then sends a notification email to the
+ team leader."""
+ if self.team_id:
+ self.team_head = self.team_id.team_lead_id.id
+ mail_template = self.env.ref(
+ 'odoo_website_helpdesk.'
+ 'mail_template_odoo_website_helpdesk_assign')
+ mail_template.sudo().write({
+ 'email_to': self.team_head.email,
+ 'subject': self.name
+ })
+ mail_template.sudo().send_mail(self.id, force_send=True)
+ else:
+ raise ValidationError("Please choose a Helpdesk Team")
+
+ def _default_show_create_task(self):
+ """Get the default value for the 'show_create_task' field.
+
+ This method retrieves the default value for the 'show_create_task'
+ field from the configuration settings."""
+ return self.env['ir.config_parameter'].sudo().get_param(
+ 'odoo_website_helpdesk.show_create_task')
+
+ show_create_task = fields.Boolean(string="Create Task",
+ default=_default_show_create_task,
+ compute='_compute_show_create_task',
+ help='Determines whether the Create Task'
+ ' button should be shown for this '
+ 'ticket.')
+ create_task = fields.Boolean(string="Create Task", readonly=False,
+ related='team_id.create_task',
+ store=True,
+ help='Defines if a task should be created when'
+ ' this ticket is created.')
+ billable = fields.Boolean(string="Billable", help='Indicates whether the '
+ 'ticket is billable or '
+ 'not.')
+
+ def _default_show_category(self):
+ """Its display the default category"""
+ return self.env['ir.config_parameter'].sudo().get_param(
+ 'odoo_website_helpdesk.show_category')
+
+ show_category = fields.Boolean(default=_default_show_category,
+ compute='_compute_show_category',
+ help='Display the default category')
+ customer_rating = fields.Selection(RATING, default='0', readonly=True,
+ string='Customer Rating',
+ help='Display the customer rating.')
+
+ review = fields.Char(string='Review', readonly=True,
+ help='Customer review of the ticket.')
+ kanban_state = fields.Selection([
+ ('normal', 'Ready'),
+ ('done', 'In Progress'),
+ ('blocked', 'Blocked'), ], default='normal')
+
+ def _compute_show_category(self):
+ """Compute show category"""
+ show_category = self._default_show_category()
+ for rec in self:
+ rec.show_category = show_category
+
+ def _compute_show_create_task(self):
+ """Compute the value of the 'show_create_task' field for each record in
+ the current recordset."""
+ show_create_task = self._default_show_create_task()
+ for record in self:
+ record.show_create_task = show_create_task
+
+ def auto_close_ticket(self):
+ """Automatically closing the ticket based on the closing date."""
+ auto_close = self.env['ir.config_parameter'].sudo().get_param(
+ 'odoo_website_helpdesk.auto_close_ticket')
+ if auto_close:
+ no_of_days = self.env['ir.config_parameter'].sudo().get_param(
+ 'odoo_website_helpdesk.no_of_days')
+ records = self.env['help.ticket'].search([])
+ for rec in records:
+ days = (fields.Datetime.today() - rec.create_date).days
+ if days >= int(no_of_days):
+ close_stage_id = self.env['ticket.stage'].search(
+ [('closing_stage', '=', True)])
+ if close_stage_id:
+ rec.stage_id = close_stage_id
+
+ def default_stage_id(self):
+ """Search your stage"""
+ return self.env['ticket.stage'].search(
+ [('name', '=', 'Draft')], limit=1).id
+
+ @api.model
+ def _read_group_stage_ids(self, stages, domain, order):
+ """
+ Return the available stages for grouping.
+
+ This static method is used to provide the available stages for
+ grouping when displaying records in a grouped view.
+
+ """
+ stage_ids = self.env['ticket.stage'].search([])
+ return stage_ids
+
+ @api.model
+ def create(self, vals_list):
+ """Create a new helpdesk ticket.
+ This method is called when creating a new helpdesk ticket. It
+ generates a unique name for the ticket using a sequence if no
+ name is provided.
+ """
+ if vals_list.get('name', _('New')) == _('New'):
+ vals_list['name'] = self.env['ir.sequence'].next_by_code(
+ 'help.ticket') or _('New')
+ return super().create(vals_list)
+
+ def action_create_invoice(self):
+ """Create Invoice for Help Desk Ticket.
+ This function creates an invoice for the help desk ticket based on
+ the associated tasks with billed hours.
+ """
+ tasks = self.env['project.task'].search(
+ [('project_id', '=', self.project_id.id),
+ ('ticket_id', '=', self.id)]).filtered(
+ lambda line: line.ticket_billed == True)
+ if not tasks:
+ raise UserError('No Tasks to Bill')
+ total = sum(x.effective_hours for x in tasks if x.effective_hours > 0)
+ invoice_no = self.env['ir.sequence'].next_by_code(
+ 'ticket.invoice')
+ self.env['account.move'].create([
+ {
+ 'name': invoice_no,
+ 'move_type': 'out_invoice',
+ 'partner_id': self.customer_id.id,
+ 'ticket_id': self.id,
+ 'date': fields.Date.today(),
+ 'invoice_date': fields.Date.today(),
+ 'invoice_line_ids':
+ [(0, 0, {'product_id': self.service_product_id.id,
+ 'name': self.service_product_id.name,
+ 'quantity': total,
+ 'product_uom_id': self.service_product_id.uom_id.id,
+ 'price_unit': self.cost,
+ 'account_id':
+ self.service_product_id.categ_id.property_account_income_categ_id.id,
+ })],
+ }, ])
+ for task in tasks:
+ task.ticket_billed = True
+ return {
+ 'effect': {
+ 'fadeout': 'medium',
+ 'message': 'Billed Successfully!',
+ 'type': 'rainbow_man',
+ }
+ }
+
+ def action_create_tasks(self):
+ """Create Task for HelpDesk Ticket
+ This function creates a task associated with the helpdesk ticket
+ and updates the task_ids field.
+ """
+ task_id = self.env['project.task'].create({
+ 'name': self.name + '-' + self.subject,
+ 'project_id': self.project_id.id,
+ 'company_id': self.env.company.id,
+ 'ticket_id': self.id,
+ })
+ self.write({
+ 'task_ids': [(4, task_id.id)]
+ })
+ return {
+ 'name': 'Tasks',
+ 'res_model': 'project.task',
+ 'view_id': False,
+ 'res_id': task_id.id,
+ 'view_mode': 'form',
+ 'type': 'ir.actions.act_window',
+ 'target': 'new',
+ }
+
+ def action_open_tasks(self):
+ """Smart Button of Task to view the Tasks of HelpDesk Ticket"""
+ return {
+ 'name': 'Tasks',
+ 'domain': [('ticket_id', '=', self.id)],
+ 'res_model': 'project.task',
+ 'view_id': False,
+ 'view_mode': 'tree,form',
+ 'type': 'ir.actions.act_window',
+ }
+
+ def action_open_invoices(self):
+ """Smart Button of Invoice to view the Invoices for HelpDesk Ticket"""
+ return {
+ 'name': 'Invoice',
+ 'domain': [('ticket_id', '=', self.id)],
+ 'res_model': 'account.move',
+ 'view_id': False,
+ 'view_mode': 'tree,form',
+ 'type': 'ir.actions.act_window',
+ }
+
+ def action_open_merged_tickets(self):
+ """ Smart button of the merged tickets"""
+ ticket_ids = self.env['support.tickets'].search(
+ [('merged_ticket', '=', self.id)])
+ # Get the display_name matching records from the support.tickets
+ helpdesk_ticket_ids = ticket_ids.mapped('display_name')
+ # Get the IDs of the help.ticket records matching the display names
+ help_ticket_records = self.env['help.ticket'].search(
+ [('name', 'in', helpdesk_ticket_ids)])
+ return {
+ 'type': 'ir.actions.act_window',
+ 'name': 'Helpdesk Ticket',
+ 'view_mode': 'tree,form',
+ 'res_model': 'help.ticket',
+ 'domain': [('id', 'in', help_ticket_records.ids)],
+ 'context': self.env.context,
+ }
+
+ def action_send_reply(self):
+ """Compose and send a reply to the customer.
+ This function opens a window for composing and sending a reply to
+ the customer. It uses the configured email template for replies.
+ """
+ template_id = self.env['ir.config_parameter'].sudo().get_param(
+ 'odoo_website_helpdesk.reply_template_id'
+ )
+ template_id = self.env['mail.template'].browse(int(template_id))
+ if template_id:
+ return {
+ 'type': 'ir.actions.act_window',
+ 'name': 'mail',
+ 'res_model': 'mail.compose.message',
+ 'view_mode': 'form',
+ 'target': 'new',
+ 'views': [[False, 'form']],
+ 'context': {
+ 'default_model': 'help.ticket',
+ 'default_res_id': self.id,
+ 'default_template_id': template_id.id
+ }
+ }
+ return {
+ 'type': 'ir.actions.act_window',
+ 'name': 'mail',
+ 'res_model': 'mail.compose.message',
+ 'view_mode': 'form',
+ 'target': 'new',
+ 'views': [[False, 'form']],
+ 'context': {
+ 'default_model': 'help.ticket',
+ 'default_res_id': self.id,
+ }
+ }
diff --git a/odoo_website_helpdesk/models/helpdesk_category.py b/odoo_website_helpdesk/models/helpdesk_categories.py
similarity index 56%
rename from odoo_website_helpdesk/models/helpdesk_category.py
rename to odoo_website_helpdesk/models/helpdesk_categories.py
index 30d314ebe..f9b553d63 100644
--- a/odoo_website_helpdesk/models/helpdesk_category.py
+++ b/odoo_website_helpdesk/models/helpdesk_categories.py
@@ -1,10 +1,10 @@
# -*- coding: utf-8 -*-
-################################################################################
+#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
-# Copyright (C) 2024-TODAY Cybrosys Technologies()
-# Author: Bhagyadev KP ()
+# Copyright (C) 2023-TODAY Cybrosys Technologies()
+# Author: Cybrosys Techno Solutions()
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
@@ -18,15 +18,17 @@
# (LGPL v3) along with this program.
# If not, see .
#
-################################################################################
+#############################################################################
from odoo import fields, models
-class HelpdeskCategory(models.Model):
- """Category Model"""
- _name = 'helpdesk.category'
- _description = 'Categories'
+class HelpdeskCategories(models.Model):
+ """This class represents the Helpdesk Categories, providing information
+ about different categories that can be assigned to helpdesk items.
+ """
+ _name = 'helpdesk.categories'
+ _description = 'Helpdesk Categories'
- name = fields.Char('Name', help='Category name of the helpdesk')
- sequence = fields.Integer('Sequence', default=0,
- help='Sequence of the helpdesk category')
+ name = fields.Char(string='Name', help='Category Name')
+ sequence = fields.Integer(string='Sequence', default=0,
+ help='Sequence of a Category')
diff --git a/odoo_website_helpdesk/models/helpdesk_tag.py b/odoo_website_helpdesk/models/helpdesk_tag.py
index 4252223f6..5dc59c085 100644
--- a/odoo_website_helpdesk/models/helpdesk_tag.py
+++ b/odoo_website_helpdesk/models/helpdesk_tag.py
@@ -1,10 +1,10 @@
# -*- coding: utf-8 -*-
-################################################################################
+#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
-# Copyright (C) 2024-TODAY Cybrosys Technologies()
-# Author: Bhagyadev KP ()
+# Copyright (C) 2023-TODAY Cybrosys Technologies()
+# Author: Cybrosys Techno Solutions()
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
@@ -18,13 +18,13 @@
# (LGPL v3) along with this program.
# If not, see .
#
-################################################################################
+#############################################################################
from odoo import fields, models
class HelpdeskTag(models.Model):
- """Helpdesk tags"""
+ """ Its handle to control the helpdesk ticket tags"""
_name = 'helpdesk.tag'
- _description = 'Helpdesk Tags'
+ _description = 'Helpdesk Tag'
- name = fields.Char(string='Tag', help='Tag name of the helpdesk.')
+ name = fields.Char(string='Tag', help='Choose the tags')
diff --git a/odoo_website_helpdesk/models/helpdesk_type.py b/odoo_website_helpdesk/models/helpdesk_types.py
similarity index 67%
rename from odoo_website_helpdesk/models/helpdesk_type.py
rename to odoo_website_helpdesk/models/helpdesk_types.py
index f42fc2039..be3205d71 100644
--- a/odoo_website_helpdesk/models/helpdesk_type.py
+++ b/odoo_website_helpdesk/models/helpdesk_types.py
@@ -1,10 +1,10 @@
# -*- coding: utf-8 -*-
-################################################################################
+#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
-# Copyright (C) 2024-TODAY Cybrosys Technologies()
-# Author: Bhagyadev KP ()
+# Copyright (C) 2023-TODAY Cybrosys Technologies()
+# Author: Cybrosys Techno Solutions()
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
@@ -18,13 +18,13 @@
# (LGPL v3) along with this program.
# If not, see .
#
-################################################################################
+#############################################################################
from odoo import fields, models
-class HelpdeskType(models.Model):
- """Helpdesk type """
- _name = 'helpdesk.type'
- _description = 'Helpdesk Type'
+class HelpdeskTypes(models.Model):
+ """Its handle to control helpdesk ticket types """
+ _name = 'helpdesk.types'
+ _description = 'Helpdesk Types'
- name = fields.Char(string='Type', help='Types of help desk.')
+ name = fields.Char(string='Type', help='Types helpdesk tickets')
diff --git a/odoo_website_helpdesk/models/mail_compose_message.py b/odoo_website_helpdesk/models/mail_compose_message.py
index 7159622e1..de16c4861 100644
--- a/odoo_website_helpdesk/models/mail_compose_message.py
+++ b/odoo_website_helpdesk/models/mail_compose_message.py
@@ -1,10 +1,10 @@
# -*- coding: utf-8 -*-
-################################################################################
+#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
-# Copyright (C) 2024-TODAY Cybrosys Technologies()
-# Author: Bhagyadev KP ()
+# Copyright (C) 2023-TODAY Cybrosys Technologies()
+# Author: Cybrosys Techno Solutions()
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
@@ -18,25 +18,25 @@
# (LGPL v3) along with this program.
# If not, see .
#
-################################################################################
+#############################################################################
from odoo import fields, models
class MailComposeMessage(models.TransientModel):
- """Inheriting the Mail compose message"""
+ """ This class extends the functionality of the 'mail.compose.message'
+ model to include custom behavior for sending emails related to help tickets.
+ """
_inherit = 'mail.compose.message'
def _action_send_mail(self, auto_commit=False):
- """Send mail function"""
- if self.model == 'ticket.helpdesk':
- try:
- res_ids_list = eval(self.res_ids)
- if not isinstance(res_ids_list, list):
- raise ValueError("Invalid format for res_ids")
- except Exception as e:
- raise ValueError(
- "Error converting res_ids to list: {}".format(e))
- ticket_ids = self.env['ticket.helpdesk'].browse(res_ids_list)
- ticket_ids.replied_date = fields.Date.today()
+ """Override of the base '_action_send_mail' method to include additional
+ logic when sending emails related to help tickets.
+
+ If the model associated with the mail is 'help.ticket', update the
+ 'replied_date' field of the associated help ticket to the current date.
+ """
+ if self.model == 'help.ticket':
+ ticket_id = self.env['help.ticket'].browse(self.res_id)
+ ticket_id.replied_date = fields.Date.today()
return super(MailComposeMessage, self)._action_send_mail(
auto_commit=auto_commit)
diff --git a/odoo_website_helpdesk/models/merge_ticket.py b/odoo_website_helpdesk/models/merge_tickets.py
similarity index 68%
rename from odoo_website_helpdesk/models/merge_ticket.py
rename to odoo_website_helpdesk/models/merge_tickets.py
index ff37be365..4c9afb47c 100644
--- a/odoo_website_helpdesk/models/merge_ticket.py
+++ b/odoo_website_helpdesk/models/merge_tickets.py
@@ -1,10 +1,10 @@
# -*- coding: utf-8 -*-
-################################################################################
+#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
-# Copyright (C) 2024-TODAY Cybrosys Technologies()
-# Author: Bhagyadev KP ()
+# Copyright (C) 2023-TODAY Cybrosys Technologies()
+# Author: Cybrosys Techno Solutions()
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
@@ -18,60 +18,64 @@
# (LGPL v3) along with this program.
# If not, see .
#
-################################################################################
+#############################################################################
from odoo import api, fields, models
-class MergeTicket(models.Model):
- """Tickets merging class"""
- _name = 'merge.ticket'
- _description = 'Merging the selected tickets'
+class MergeTickets(models.Model):
+ """Tickets merging class
+ This class allows users to merge support tickets or create new ones.
+ It provides functionality to consolidate information from multiple tickets.
+ """
+ _name = 'merge.tickets'
+ _description = 'Merge Tickets'
_rec_name = 'support_ticket_id'
user_id = fields.Many2one('res.partner',
string='Responsible User',
- help='User name of responsible person.',
+ help='Responsible user name',
default=lambda self: self.env.user.partner_id.id)
- support_team_id = fields.Many2one('team.helpdesk',
+ support_team_id = fields.Many2one('help.team',
string='Support Team',
- help='Name of the support team.')
- customer_id = fields.Many2one('res.partner', string='Customer',
- help='Name of the Customer ')
- support_ticket_id = fields.Many2one('ticket.helpdesk',
- string='Support Ticket',
- help="Name of the support ticket")
+ help='Support Team Name')
+ customer_id = fields.Many2one('res.partner',
+ string='Customer',
+ help='Customer Name'
+ )
+ support_ticket_id = fields.Many2one('help.ticket',
+ string='Support Ticket')
new_ticket = fields.Boolean(string='Create New Ticket ?',
help='Creating new tickets or not.',
- default=False)
+ )
subject = fields.Char(string='Subject', help='Enter the New Ticket Subject')
- merge_reason = fields.Char(string='Merge Reason',
- help='Reason for Merging the tickets. ')
- support_ticket_ids = fields.One2many('support.ticket',
+ merge_reason = fields.Char(string='Merge Reason', help='Merging Reason')
+ support_ticket_ids = fields.One2many('support.tickets',
'support_ticket_id',
string='Support Tickets',
- help='Merged tickets')
- active = fields.Boolean(string='Disable Record', help='Disable Record',
- default=True)
+ helps='Merged tickets')
+ active = fields.Boolean(string='Disable Record', help='Disable Record')
def default_get(self, fields_list):
- """Override the default_get method to provide default values for fields
- when creating a new record."""
- defaults = super(MergeTicket, self).default_get(fields_list)
+ """It handles to get the default pre-filled the values """
+ defaults = super().default_get(fields_list)
active_ids = self._context.get('active_ids', [])
- selected_tickets = self.env['ticket.helpdesk'].browse(active_ids)
+ selected_tickets = self.env['help.ticket'].browse(active_ids)
customer_ids = selected_tickets.mapped('customer_id')
subjects = selected_tickets.mapped('subject')
display_names = selected_tickets.mapped('display_name')
helpdesk_team = selected_tickets.mapped('team_id')
descriptions = selected_tickets.mapped('description')
+ # Ensure both selected records have the same customer
if len(customer_ids):
defaults.update({
'customer_id': customer_ids[0].id,
'support_team_id': helpdesk_team,
+
'support_ticket_ids': [(0, 0, {
'subject': subject,
'display_name': display_name,
'description': description,
+
}) for subject, display_name, description in
zip(subjects, display_names,
descriptions)]
@@ -82,10 +86,11 @@ class MergeTicket(models.Model):
"""Merging the tickets or creating new tickets"""
if self.new_ticket:
description = "\n\n".join(
- f"{ticket.subject}\n{'-' * len(ticket.subject)}\n{ticket.description}"
+ f"{ticket.subject}\n{'-' * len(ticket.subject)}\n"
+ f"{ticket.description}"
for ticket in self.support_ticket_ids
)
- self.env['ticket.helpdesk'].create({
+ self.env['help.ticket'].create({
'subject': self.subject,
'description': description,
'customer_id': self.customer_id.id,
@@ -94,9 +99,12 @@ class MergeTicket(models.Model):
else:
if len(self.support_ticket_ids):
description = "\n\n".join(
- f"{ticket.subject}\n{'-' * len(ticket.subject)}\n{ticket.description}"
+ f"{ticket.subject}\n{'-' * len(ticket.subject)}\n"
+ f"{ticket.description}"
for ticket in self.support_ticket_ids
)
+ # Update the existing support_ticket with the combined
+ # Information
self.support_ticket_id.write({
'description': description,
'merge_ticket_invisible': True,
diff --git a/odoo_website_helpdesk/models/project_task.py b/odoo_website_helpdesk/models/project_task.py
index a626abcd6..38e3c4d23 100644
--- a/odoo_website_helpdesk/models/project_task.py
+++ b/odoo_website_helpdesk/models/project_task.py
@@ -1,10 +1,10 @@
# -*- coding: utf-8 -*-
-################################################################################
+#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
-# Copyright (C) 2024-TODAY Cybrosys Technologies()
-# Author: Bhagyadev KP ()
+# Copyright (C) 2023-TODAY Cybrosys Technologies()
+# Author: Cybrosys Techno Solutions()
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
@@ -18,15 +18,25 @@
# (LGPL v3) along with this program.
# If not, see .
#
-################################################################################
+#############################################################################
from odoo import fields, models
class ProjectTask(models.Model):
- """Inheriting the project task"""
+ """
+ This class extends the 'project.task' model in Odoo to add a custom field
+ called 'ticket_billed' and 'ticket_id'.
+ ticket_billed: A boolean field indicating whether the ticket has
+ been billed or not.
+ ticket_id : A many2One field to link the task
+ with a help ticket
+ """
_inherit = 'project.task'
- ticket_id = fields.Many2one('ticket.helpdesk', string='Ticket',
- help='ID of the ticket .')
- ticket_billed = fields.Boolean('Billed', default=False,
- help='Billed Tickets')
+ ticket_billed = fields.Boolean(string='Billed',
+ help='Whether the Ticket has been Invoiced'
+ 'or Not')
+ ticket_id = fields.Many2one('help.ticket', string='Ticket',
+ help='The help ticket associated with this '
+ 'recordThis field allows you to link '
+ 'this record to an existing help ticket.')
diff --git a/odoo_website_helpdesk/models/res_config_settings.py b/odoo_website_helpdesk/models/res_config_settings.py
index d3262529f..0d30e44f4 100644
--- a/odoo_website_helpdesk/models/res_config_settings.py
+++ b/odoo_website_helpdesk/models/res_config_settings.py
@@ -1,10 +1,10 @@
# -*- coding: utf-8 -*-
-################################################################################
+#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
-# Copyright (C) 2024-TODAY Cybrosys Technologies()
-# Author: Bhagyadev KP ()
+# Copyright (C) 2023-TODAY Cybrosys Technologies()
+# Author: Cybrosys Techno Solutions()
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
@@ -18,68 +18,74 @@
# (LGPL v3) along with this program.
# If not, see .
#
-################################################################################
+#############################################################################
from odoo import api, fields, models
class ResConfigSettings(models.TransientModel):
- """Inheriting the res config settings model"""
+ """This class extends the functionality of the 'res.config.settings' model
+ to provide configuration options for various settings related to the
+ helpdesk module.
+ """
_inherit = 'res.config.settings'
- show_create_task = fields.Boolean(string="Create Tasks",
- config_parameter='odoo_website_helpdesk.show_create_task',
- help='Enable this option to allow users'
- 'to create tasks directly from the '
- 'helpdesk module. When activated, users '
- 'will have the ability to generate and '
- 'assign tasks as part of their workflow '
- 'within the helpdesk interface.')
- show_category = fields.Boolean(string="Category",
- config_parameter='odoo_website_helpdesk.show_category',
- help='Enable this option to display the '
- 'category field in the helpdesk tickets. '
- 'This can be useful for organizing and '
- 'filtering tickets based on their category.',
- implied_group='odoo_website_helpdesk.group_show_category')
- product_website = fields.Boolean(string="Product On Website",
- config_parameter='odoo_website_helpdesk.product_website',
- help='Product on website')
- auto_close_ticket = fields.Boolean(string="Auto Close Ticket",
- config_parameter='odoo_website_helpdesk.auto_close_ticket',
- help='Auto Close ticket')
- no_of_days = fields.Integer(string="No Of Days",
- config_parameter='odoo_website_helpdesk.no_of_days',
- help='No of Days')
- closed_stage_id = fields.Many2one(
+ show_create_task = fields.Boolean(
+ string="Create Tasks",
+ config_parameter='odoo_website_helpdesk.show_create_task',
+ help='When enabling this field yu can create a task under the ticket')
+ show_category = fields.Boolean(
+ string="Category",
+ config_parameter='odoo_website_helpdesk.show_category',
+ help='When enabling this its show the category of ticket',
+ implied_group='odoo_website_helpdesk.group_show_category')
+ product_website = fields.Boolean(
+ string="Product On Website",
+ config_parameter='odoo_website_helpdesk.product_website',
+ help='When enabling this feature you can mention the product on website'
+ ' at time of creating the ticketProduct on website')
+ auto_close_ticket = fields.Boolean(
+ string="Auto Close Ticket",
+ config_parameter='odoo_website_helpdesk.auto_close_ticket',
+ help='Automatically Close ticket if the condition is satisfied')
+ no_of_days = fields.Integer(
+ string="No Of Days",
+ config_parameter='odoo_website_helpdesk.no_of_days',
+ help='After this date the ticket will closing automatically ')
+ closed_stage = fields.Many2one(
'ticket.stage', string='Closing stage',
- help='Closing Stage of the ticket.',
- config_parameter='odoo_website_helpdesk.closed_stage_id')
+ help='Closing Stage',
+ config_parameter='odoo_website_helpdesk.closed_stage')
- reply_template_id = fields.Many2one('mail.template',
- domain="[('model', '=', 'ticket.helpdesk')]",
- config_parameter='odoo_website_helpdesk.reply_template_id',
- help='Reply Template of the helpdesk'
- ' ticket.')
- helpdesk_menu_show = fields.Boolean('Helpdesk Menu',
- config_parameter=
- 'odoo_website_helpdesk.helpdesk_menu_show',
- help='Helpdesk menu')
+ reply_template_id = fields.Many2one(
+ 'mail.template',
+ string='Relaid ID',
+ domain="[('model', '=', 'help.ticket')]",
+ config_parameter='odoo_website_helpdesk.reply_template_id',
+ help='Reply Template')
+ helpdesk_menu_show = fields.Boolean(
+ string='Helpdesk Menu',
+ config_parameter='odoo_website_helpdesk.helpdesk_menu_show',
+ help='When enabling this option to visible Helpdesk menu in website')
- @api.onchange('closed_stage_id')
- def _onchange_closed_stage_id(self):
- """Closing stage function"""
- if self.closed_stage_id:
- stage = self.closed_stage_id.id
- in_stage = self.env['ticket.stage'].search([('id', '=', stage)])
- not_in_stage = self.env['ticket.stage'].search(
- [('id', '!=', stage)])
- in_stage.closing_stage = True
- for each in not_in_stage:
- each.closing_stage = False
+ @api.onchange('closed_stage')
+ def closed_stage_a(self):
+ """This method is triggered when the 'closed_stage' field is changed.
+ It updates the 'closing_stage' attribute of the selected stage and
+ clears it for other stages.
+ """
+ stage = self.closed_stage.id
+ in_stage = self.env['ticket.stage'].search([('id', '=', stage)])
+ not_in_stage = self.env['ticket.stage'].search([('id', '!=', stage)])
+ in_stage.closing_stage = True
+ for each in not_in_stage:
+ each.closing_stage = False
@api.constrains('show_category')
- def _constrains_show_category_subcategory(self):
- """Show category and the sub category"""
+ def show_category_subcategory(self):
+ """ This constraint method is triggered when the 'show_category' field
+ is changed. It updates the users in the 'group_show_category' based on
+ the 'show_category' value.
+ """
if self.show_category:
group_cat = self.env.ref(
'odoo_website_helpdesk.group_show_category')
diff --git a/odoo_website_helpdesk/models/support_ticket.py b/odoo_website_helpdesk/models/support_tickets.py
similarity index 73%
rename from odoo_website_helpdesk/models/support_ticket.py
rename to odoo_website_helpdesk/models/support_tickets.py
index 296408676..5d5460b39 100644
--- a/odoo_website_helpdesk/models/support_ticket.py
+++ b/odoo_website_helpdesk/models/support_tickets.py
@@ -1,10 +1,10 @@
# -*- coding: utf-8 -*-
-################################################################################
+#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
-# Copyright (C) 2024-TODAY Cybrosys Technologies()
-# Author: Bhagyadev KP ()
+# Copyright (C) 2023-TODAY Cybrosys Technologies()
+# Author: Cybrosys Techno Solutions()
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
@@ -18,22 +18,22 @@
# (LGPL v3) along with this program.
# If not, see .
#
-################################################################################
+#############################################################################
from odoo import fields, models
-class SupportTicket(models.Model):
- """Creating onetoMany model"""
- _name = 'support.ticket'
+class SupportTickets(models.Model):
+ """Creating onetoMany model to handle the merging ticket"""
+ _name = 'support.tickets'
_description = 'Support Tickets'
subject = fields.Char(string='Subject', help='Subject of the merged '
- 'tickets.')
+ 'tickets')
display_name = fields.Char(string='Display Name',
- help='Display name of the merged tickets.')
+ help='Display name of the merged tickets')
description = fields.Char(string='Description',
- help='Description of the tickets.')
- support_ticket_id = fields.Many2one('merge.ticket',
+ help='Description of the tickets')
+ support_ticket_id = fields.Many2one('merge.tickets',
string='Support Tickets',
help='Support tickets')
merged_ticket = fields.Integer(string='Merged Ticket ID',
diff --git a/odoo_website_helpdesk/models/team_helpdesk.py b/odoo_website_helpdesk/models/team_helpdesk.py
deleted file mode 100644
index c9ede6880..000000000
--- a/odoo_website_helpdesk/models/team_helpdesk.py
+++ /dev/null
@@ -1,59 +0,0 @@
-# -*- coding: utf-8 -*-
-################################################################################
-#
-# Cybrosys Technologies Pvt. Ltd.
-#
-# Copyright (C) 2024-TODAY Cybrosys Technologies()
-# Author: Bhagyadev KP ()
-#
-# You can modify it under the terms of the GNU LESSER
-# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
-#
-# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
-# (LGPL v3) along with this program.
-# If not, see .
-#
-################################################################################
-from odoo import api, fields, models
-
-
-class TeamHelpDesk(models.Model):
- """Helpdesk team"""
- _name = 'team.helpdesk'
- _description = 'Helpdesk Team'
-
- name = fields.Char('Name', help='Helpdesk Team Name')
- team_lead_id = fields.Many2one('res.users', string='Team Leader',
- help='Team Leader Name',
- domain=lambda self: [
- ('groups_id', 'in', self.env.ref(
- 'odoo_website_helpdesk.helpdesk_team_leader').id)])
- member_ids = fields.Many2many('res.users', string='Members',
- help='Team Members',
- domain=lambda self: [
- ('groups_id', 'in', self.env.ref(
- 'odoo_website_helpdesk.helpdesk_user').id)])
- email = fields.Char('Email', help='Email of the team member.')
- project_id = fields.Many2one('project.project',
- string='Project',
- help='Projects related helpdesk team.')
- create_task = fields.Boolean(string="Create Task",
- help="Task created or not")
-
- @api.onchange('team_lead_id')
- def _onchange_team_lead_id(self):
- """Members selection function"""
- fetch_members = self.env['res.users'].search([])
- filtered_members = fetch_members.filtered(
- lambda x: x.id != self.team_lead_id.id)
- return {'domain': {'member_ids':
- [('id', '=', filtered_members.ids), (
- 'groups_id', 'in',
- self.env.ref('base.group_user').id),
- ('groups_id', 'not in', self.env.ref(
- 'odoo_website_helpdesk.helpdesk_team_leader').id)]}}
diff --git a/odoo_website_helpdesk/models/ticket_helpdesk.py b/odoo_website_helpdesk/models/ticket_helpdesk.py
deleted file mode 100644
index c6195b2df..000000000
--- a/odoo_website_helpdesk/models/ticket_helpdesk.py
+++ /dev/null
@@ -1,387 +0,0 @@
-# -*- coding: utf-8 -*-
-################################################################################
-#
-# Cybrosys Technologies Pvt. Ltd.
-#
-# Copyright (C) 2024-TODAY Cybrosys Technologies()
-# Author: Bhagyadev KP ()
-#
-# You can modify it under the terms of the GNU LESSER
-# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
-#
-# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
-# (LGPL v3) along with this program.
-# If not, see .
-#
-################################################################################
-import logging
-from odoo import api, fields, models, _
-from odoo.exceptions import UserError
-from odoo.exceptions import ValidationError
-
-_logger = logging.getLogger(__name__)
-
-PRIORITIES = [
- ('0', 'Very Low'),
- ('1', 'Low'),
- ('2', 'Normal'),
- ('3', 'High'),
- ('4', 'Very High'),
-]
-RATING = [
- ('0', 'Very Low'),
- ('1', 'Low'),
- ('2', 'Normal'),
- ('3', 'High'),
- ('4', 'Very High'),
- ('5', 'Extreme High')
-]
-
-
-class TicketHelpDesk(models.Model):
- """Help_ticket model"""
- _name = 'ticket.helpdesk'
- _description = 'Helpdesk Ticket'
- _inherit = ['mail.thread', 'mail.activity.mixin']
-
- def _default_show_create_task(self):
- """Task creation"""
- return self.env['ir.config_parameter'].sudo().get_param(
- 'odoo_website_helpdesk.show_create_task')
-
- def _default_show_category(self):
- """Show category default"""
- return self.env['ir.config_parameter'].sudo().get_param(
- 'odoo_website_helpdesk.show_category')
-
- name = fields.Char('Name', default=lambda self: self.env['ir.sequence'].
- next_by_code('ticket.helpdesk') or _('New'),
- help='Ticket Name')
- customer_id = fields.Many2one('res.partner',
- string='Customer Name',
- help='Customer Name')
- customer_name = fields.Char('Customer Name', help='Customer Name')
- subject = fields.Text('Subject', required=True,
- help='Subject of the Ticket')
- description = fields.Text('Description', required=True,
- help='Description')
- email = fields.Char('Email', help='Email')
- phone = fields.Char('Phone', help='Contact Number')
- team_id = fields.Many2one('team.helpdesk', string='Helpdesk Team',
- help='Helpdesk Team Name')
- product_ids = fields.Many2many('product.template',
- string='Product',
- help='Product Name')
- project_id = fields.Many2one('project.project',
- string='Project',
- readonly=False,
- related='team_id.project_id',
- store=True,
- help='Project Name')
- priority = fields.Selection(PRIORITIES, default='1', help='Priority of the'
- ' Ticket')
- stage_id = fields.Many2one('ticket.stage', string='Stage',
- tracking=True,
- group_expand='_read_group_stage_ids',
- help='Stages')
- user_id = fields.Many2one('res.users',
- default=lambda self: self.env.user,
- check_company=True,
- index=True, tracking=True,
- help='Login User', string='User')
- cost = fields.Float('Cost per hour', help='Cost Per Unit')
- service_product_id = fields.Many2one('product.product',
- string='Service Product',
- help='Service Product',
- domain=[
- ('type', '=', 'service')])
- create_date = fields.Datetime('Creation Date', help='Created date')
- start_date = fields.Datetime('Start Date', help='Start Date')
- end_date = fields.Datetime('End Date', help='End Date')
- public_ticket = fields.Boolean(string="Public Ticket",
- help='Public Ticket')
- invoice_ids = fields.Many2many('account.move',
- string='Invoices',
- help='Invoicing id'
- )
- task_ids = fields.Many2many('project.task',
- string='Tasks',
- help='Task id')
- color = fields.Integer(string="Color", help='Color')
- replied_date = fields.Datetime('Replied date', help='Replied Date')
- last_update_date = fields.Datetime('Last Update Date',
- help='Last Update Date')
- ticket_type_id = fields.Many2one('helpdesk.type',
- string='Ticket Type', help='Ticket Type')
- team_head_id = fields.Many2one('res.users', string='Team Leader',
- compute='_compute_team_head_id',
- help='Team Leader Name')
- assigned_user_id = fields.Many2one('res.users', string='Assigned User',
- domain=lambda self: [('groups_id', 'in',
- self.env.ref(
- 'odoo_website_helpdesk.helpdesk_user').id)],
- help='Assigned User Name')
- category_id = fields.Many2one('helpdesk.category', string='Category',
- help='Category')
- tags_ids = fields.Many2many('helpdesk.tag', help='Tags', string='Tags')
- assign_user = fields.Boolean(default=False, help='Assign User',
- string='Assign User')
- attachment_ids = fields.One2many('ir.attachment', 'res_id',
- help='Attachment Line',
- string='Attachments')
- merge_ticket_invisible = fields.Boolean(string='Merge Ticket',
- help='Merge Ticket Invisible or '
- 'Not', default=False)
- merge_count = fields.Integer(string='Merge Count', help='Merged Tickets '
- 'Count')
- active = fields.Boolean(default=True, help='Active', string='Active')
-
- show_create_task = fields.Boolean(string="Show Create Task",
- help='Show created task or not',
- default=_default_show_create_task,
- compute='_compute_show_create_task')
- create_task = fields.Boolean(string="Create Task", readonly=False,
- help='Create task or not',
- related='team_id.create_task', store=True)
- billable = fields.Boolean(string="Billable", default=False,
- help='Is billable or not', )
- show_category = fields.Boolean(default=_default_show_category,
- string="Show Category",
- help='Show category or not',
- compute='_compute_show_category')
- customer_rating = fields.Selection(RATING, default='0', readonly=True)
- review = fields.Char('Review', readonly=True, help='Ticket review')
- kanban_state = fields.Selection([
- ('normal', 'Ready'),
- ('done', 'In Progress'),
- ('blocked', 'Blocked'), ], default='normal')
-
- @api.onchange('team_id', 'team_head_id')
- def _onchange_team_id(self):
- """Changing the team leader when selecting the team"""
- li = self.team_id.member_ids.mapped(id)
- return {'domain': {'assigned_user_id': [('id', 'in', li)]}}
-
- @api.depends('team_id')
- def _compute_team_head_id(self):
- """Compute the team head function"""
- self.team_head_id = self.team_id.team_lead_id.id
-
- @api.onchange('stage_id')
- def _onchange_stage_id(self):
- """Sending mail to the user function"""
- rec_id = self._origin.id
- data = self.env['ticket.helpdesk'].search([('id', '=', rec_id)])
- data.last_update_date = fields.Datetime.now()
- if self.stage_id.starting_stage:
- data.start_date = fields.Datetime.now()
- if self.stage_id.closing_stage or self.stage_id.cancel_stage:
- data.end_date = fields.Datetime.now()
- if self.stage_id.template_id:
- mail_template = self.stage_id.template_id
- mail_template.send_mail(self._origin.id, force_send=True)
-
- def assign_to_teamleader(self):
- """Assigning team leader function"""
- if self.team_id:
- self.team_head_id = self.team_id.team_lead_id.id
- mail_template = self.env.ref(
- 'odoo_website_helpdesk.odoo_website_helpdesk_assign')
- mail_template.sudo().write({
- 'email_to': self.team_head_id.email,
- 'subject': self.name
- })
- mail_template.sudo().send_mail(self.id, force_send=True)
- else:
- raise ValidationError("Please choose a Helpdesk Team")
-
- def _compute_show_category(self):
- """Compute show category"""
- show_category = self._default_show_category()
- for rec in self:
- rec.show_category = show_category
-
- def _compute_show_create_task(self):
- """Compute the created task"""
- show_create_task = self._default_show_create_task()
- for record in self:
- record.show_create_task = show_create_task
-
- def auto_close_ticket(self):
- """Automatically closing the ticket"""
- auto_close = self.env['ir.config_parameter'].sudo().get_param(
- 'odoo_website_helpdesk.auto_close_ticket')
- if auto_close:
- no_of_days = self.env['ir.config_parameter'].sudo().get_param(
- 'odoo_website_helpdesk.no_of_days')
- records = self.env['ticket.helpdesk'].search([])
- for rec in records:
- days = (fields.Datetime.today() - rec.create_date).days
- if days >= int(no_of_days):
- close_stage_id = self.env['ticket.stage'].search(
- [('closing_stage', '=', True)])
- if close_stage_id:
- rec.stage_id = close_stage_id
-
- def default_stage_id(self):
- """Method to return the default stage"""
- return self.env['ticket.stage'].search(
- [('name', '=', 'Draft')], limit=1).id
-
- def _read_group_stage_ids(self, stages, domain):
- """
- return the stages to stage_ids
- """
- stage_ids = self.env['ticket.stage'].search([])
- return stage_ids
-
- @api.model_create_multi
- def create(self, vals_list):
- """Create function"""
- for vals in vals_list:
- if vals.get('name', _('New')) == _('New'):
- vals['name'] = self.env['ir.sequence'].next_by_code(
- 'ticket.helpdesk')
- return super(TicketHelpDesk, self).create(vals_list)
-
- def write(self, vals):
- """Write function"""
- result = super(TicketHelpDesk, self).write(vals)
- return result
-
- def action_create_invoice(self):
- """Create Invoice based on the ticket"""
- tasks = self.env['project.task'].search(
- [('project_id', '=', self.project_id.id),
- ('ticket_id', '=', self.id)]).filtered(
- lambda line: not line.ticket_billed)
- if not tasks:
- raise UserError('No Tasks to Bill')
- total = sum(x.effective_hours for x in tasks if
- x.effective_hours > 0 and not x.some_flag)
- invoice_no = self.env['ir.sequence'].next_by_code(
- 'ticket.invoice')
- self.env['account.move'].create([
- {
- 'name': invoice_no,
- 'move_type': 'out_invoice',
- 'partner_id': self.customer_id.id,
- 'ticket_id': self.id,
- 'date': fields.Date.today(),
- 'invoice_date': fields.Date.today(),
- 'invoice_line_ids': [(0, 0,
- {
- 'product_id': self.service_product_id.id,
- 'name': self.service_product_id.name,
- 'quantity': total,
- 'product_uom_id': self.service_product_id.uom_id.id,
- 'price_unit': self.cost,
- 'account_id': self.service_product_id.categ_id.property_account_income_categ_id.id,
- })],
- }, ])
- for task in tasks:
- task.ticket_billed = True
- return {
- 'effect': {
- 'fadeout': 'medium',
- 'message': 'Billed Successfully!',
- 'type': 'rainbow_man',
- }
- }
-
- def action_create_tasks(self):
- """Task creation"""
- task_id = self.env['project.task'].create({
- 'name': self.name + '-' + self.subject,
- 'project_id': self.project_id.id,
- 'company_id': self.env.company.id,
- 'ticket_id': self.id,
- })
- self.write({
- 'task_ids': [(4, task_id.id)]
- })
- return {
- 'name': 'Tasks',
- 'res_model': 'project.task',
- 'view_id': False,
- 'res_id': task_id.id,
- 'view_mode': 'form',
- 'type': 'ir.actions.act_window',
- 'target': 'new',
- }
-
- def action_open_tasks(self):
- """View the Created task """
- return {
- 'name': 'Tasks',
- 'domain': [('ticket_id', '=', self.id)],
- 'res_model': 'project.task',
- 'view_id': False,
- 'view_mode': 'list,form',
- 'type': 'ir.actions.act_window',
- }
-
- def action_open_invoices(self):
- """View the Created invoice"""
- return {
- 'name': 'Invoice',
- 'domain': [('ticket_id', '=', self.id)],
- 'res_model': 'account.move',
- 'view_id': False,
- 'view_mode': 'list,form',
- 'type': 'ir.actions.act_window',
- }
-
- def action_open_merged_tickets(self):
- """Open the merged tickets list view"""
- ticket_ids = self.env['support.ticket'].search(
- [('merged_ticket', '=', self.id)])
- helpdesk_ticket_ids = ticket_ids.mapped('display_name')
- help_ticket_records = self.env['ticket.helpdesk'].search(
- [('name', 'in', helpdesk_ticket_ids)])
- return {
- 'type': 'ir.actions.act_window',
- 'name': 'Helpdesk Ticket',
- 'view_mode': 'list,form',
- 'res_model': 'ticket.helpdesk',
- 'domain': [('id', 'in', help_ticket_records.ids)],
- 'context': self.env.context,
- }
-
- def action_send_reply(self):
- """Action to sent reply button"""
- template_id = self.env['ir.config_parameter'].sudo().get_param(
- 'odoo_website_helpdesk.reply_template_id'
- )
- template_id = self.env['mail.template'].browse(int(template_id))
- if template_id:
- return {
- 'type': 'ir.actions.act_window',
- 'name': 'mail',
- 'res_model': 'mail.compose.message',
- 'view_mode': 'form',
- 'target': 'new',
- 'views': [[False, 'form']],
- 'context': {
- 'default_model': 'ticket.helpdesk',
- 'default_res_ids': self.ids,
- 'default_template_id': template_id.id
- }
- }
- return {
- 'type': 'ir.actions.act_window',
- 'name': 'mail',
- 'res_model': 'mail.compose.message',
- 'view_mode': 'form',
- 'target': 'new',
- 'views': [[False, 'form']],
- 'context': {
- 'default_model': 'ticket.helpdesk',
- 'default_res_ids': self.ids,
- }
- }
diff --git a/odoo_website_helpdesk/models/ticket_stage.py b/odoo_website_helpdesk/models/ticket_stage.py
index 34c893d4c..30545c33b 100644
--- a/odoo_website_helpdesk/models/ticket_stage.py
+++ b/odoo_website_helpdesk/models/ticket_stage.py
@@ -1,10 +1,10 @@
# -*- coding: utf-8 -*-
-################################################################################
+#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
-# Copyright (C) 2024-TODAY Cybrosys Technologies()
-# Author: Bhagyadev KP ()
+# Copyright (C) 2023-TODAY Cybrosys Technologies()
+# Author: Cybrosys Techno Solutions()
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
@@ -18,40 +18,72 @@
# (LGPL v3) along with this program.
# If not, see .
#
-################################################################################
+#############################################################################
from odoo import fields, models, _
from odoo.exceptions import UserError
class TicketStage(models.Model):
- """Stage Ticket model """
+ """This model represents the stages of a helpdesk ticket. A stage is used to
+ indicate the current state of a ticket, such as 'New', 'In Progress',
+ 'Resolved', or 'Closed'. Stages are used to organize and track the
+ progress of tickets throughout their lifecycle."""
+
_name = 'ticket.stage'
_description = 'Ticket Stage'
_order = 'sequence, id'
_fold_name = 'fold'
- name = fields.Char('Name', help='Name of the ticket stage')
- active = fields.Boolean(string='Active', default=True, help='Active option'
- 'for ticket '
- 'stage.')
- sequence = fields.Integer(string='Sequence', default=50,
- help='Sequence number of the ticket stage.')
- closing_stage = fields.Boolean('Closing Stage', default=False,
- help='Closing stage of the ticket.')
- cancel_stage = fields.Boolean('Cancel Stage', default=False,
- help='Cancel stage of the ticket.')
- starting_stage = fields.Boolean('Start Stage', default=False,
- help='Starting Stage of the ticket.')
- folded = fields.Boolean('Folded in Kanban', default=False,
- help='Folded Stage of the ticket.')
+ name = fields.Char(string='Name', help='The name of the stage. This field'
+ ' is used to identify the stage and'
+ ' is displayed in various views '
+ 'and reports.')
+ active = fields.Boolean(default=True,
+ string='Active',
+ help='Whether the stage is active or not. If this '
+ 'field is set to False,the stage will not be '
+ 'displayed in various views and reports.')
+ sequence = fields.Integer(string='Sequence',
+ default=50,
+ help='The sequence number of the stage. This '
+ 'field is used to specify the order in which'
+ ' the stages are displayed in various views '
+ 'and reports.', )
+ closing_stage = fields.Boolean(string='Closing Stage',
+ help='Whether the stage is a closing stage '
+ 'or not. A closing stage is a stage '
+ 'that indicates that the helpdesk '
+ 'ticket has been resolved or closed.'
+ ' This field is used to identify the '
+ 'closing stage and is used in various '
+ 'calculations and reports.')
+ cancel_stage = fields.Boolean(string='Cancel Stage',
+ help='Whether the stage is a cancel stage '
+ 'or not. A cancel stage is a stage that'
+ 'indicate the helpdesk tickets has been '
+ 'cancelled or removed')
+ starting_stage = fields.Boolean(string='Start Stage',
+ help='Starting ticket Stage')
+ folded = fields.Boolean(string='Folded in Kanban',
+ help='Whether the stage is folded in the Kanban '
+ 'view or not. If this field is set to True,'
+ ' the stage will be displayed in a collapsed '
+ 'state in the Kanban view, which can be '
+ 'expanded by clicking on it.This field is '
+ 'used to control the behavior of the '
+ 'Kanban view.')
template_id = fields.Many2one('mail.template',
- help='Templates', string='Template',
- domain="[('model', '=', 'ticket.helpdesk')]")
- group_ids = fields.Many2many('res.groups', help='Group', string='Groups')
- fold = fields.Boolean(string='Fold', help='Folded option in ticket.')
+ string='Template',
+ help='Choose the template',
+ domain="[('model', '=', 'help.ticket')]")
+ group_ids = fields.Many2many('res.groups',
+ string='Group',
+ help='Choose the group ID')
+ fold = fields.Boolean(string='Fold', help='When enabling this the ticket '
+ 'stage will folded on the view')
def unlink(self):
- """Unlinking Function to unlink the stage"""
+ """Deleting the helpdesk tickets from various stage."""
for rec in self:
tickets = rec.search([])
sequence = tickets.mapped('sequence')
diff --git a/odoo_website_helpdesk/models/website_menu.py b/odoo_website_helpdesk/models/website_menu.py
index e6a0906ce..d0b47a395 100644
--- a/odoo_website_helpdesk/models/website_menu.py
+++ b/odoo_website_helpdesk/models/website_menu.py
@@ -1,10 +1,10 @@
# -*- coding: utf-8 -*-
-################################################################################
+#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
-# Copyright (C) 2024-TODAY Cybrosys Technologies()
-# Author: Bhagyadev KP ()
+# Copyright (C) 2023-TODAY Cybrosys Technologies()
+# Author: Cybrosys Techno Solutions()
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
@@ -18,22 +18,44 @@
# (LGPL v3) along with this program.
# If not, see .
#
-################################################################################
+#############################################################################
from odoo import models
class WebsiteMenu(models.Model):
- """Inheriting the website menu"""
+ """
+ Inheriting the website menu.
+
+ This class inherits from the 'website.menu' model and extends its
+ functionality to compute the visibility of the menu
+ item based on the value of the 'odoo_website_helpdesk.helpdesk_menu_show'
+ configuration parameter.
+
+ Attributes:
+ _inherit (str): The name of the model being inherited.
+ """
_inherit = "website.menu"
def _compute_visible(self):
- """Compute function for to visible the menu based on the boolean
- field visibility"""
+ """
+ Compute the visibility of the menu item.
+
+ This method is used to determine whether the menu item should be
+ visible or hidden based on the value of the
+ 'odoo_website_helpdesk.helpdesk_menu_show' configuration parameter.
+
+ Returns:
+ None
+
+ Side Effects:
+ Sets the 'is_visible' field of the menu item record to True or
+ False accordingly.
+ """
super()._compute_visible()
show_menu_header = self.env['ir.config_parameter'].sudo().get_param(
'odoo_website_helpdesk.helpdesk_menu_show')
for menu in self:
- if menu.name == 'Helpdesk' and not show_menu_header:
+ if menu.name == 'Helpdesk' and show_menu_header is False:
menu.is_visible = False
- if menu.name == 'Helpdesk' and show_menu_header:
+ if menu.name == 'Helpdesk' and show_menu_header is True:
menu.is_visible = True
diff --git a/odoo_website_helpdesk/report/help_ticket_templates.xml b/odoo_website_helpdesk/report/help_ticket_templates.xml
new file mode 100644
index 000000000..5d01bd1c4
--- /dev/null
+++ b/odoo_website_helpdesk/report/help_ticket_templates.xml
@@ -0,0 +1,110 @@
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+ Customer :
+
+
+ Description :
+
+
+ Priority :
+
+
+ Products :
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tasks
+
+
+
+
+
+
+ Task Name
+
+
+ Analytic Account
+
+
+ Assigned to
+
+
+ Total Hours Spend
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Helpdesk Ticket Report
+ help.ticket
+ qweb-pdf
+ odoo_website_helpdesk.report_helpdesk_ticket
+ odoo_website_helpdesk.report_helpdesk_ticket
+ report
+
+
diff --git a/odoo_website_helpdesk/security/ir.model.access.csv b/odoo_website_helpdesk/security/ir.model.access.csv
index 6be3b5de7..1b50406b5 100644
--- a/odoo_website_helpdesk/security/ir.model.access.csv
+++ b/odoo_website_helpdesk/security/ir.model.access.csv
@@ -1,24 +1,17 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
-
-access_help_ticket,access.ticket.helpdesk,model_ticket_helpdesk,,1,1,1,1
-
-access_help_ticket_teams_user,access.team.helpdesk,model_team_helpdesk,odoo_website_helpdesk.helpdesk_user,1,0,0,0
-access_help_ticket_teams_leader,access.team.helpdesk,model_team_helpdesk,odoo_website_helpdesk.helpdesk_team_leader,1,0,0,0
-access_help_ticket_teams_manager,access.team.helpdesk,model_team_helpdesk,odoo_website_helpdesk.helpdesk_manager,1,1,1,1
-
-access_helpdesk_tag_user,access.helpdesk.tag,model_helpdesk_tag,odoo_website_helpdesk.helpdesk_user,1,0,0,0
-access_helpdesk_tag_leader,access.helpdesk.tag,model_helpdesk_tag,odoo_website_helpdesk.helpdesk_team_leader,1,1,1,1
-access_helpdesk_tag_manager,access.helpdesk.tag,model_helpdesk_tag,odoo_website_helpdesk.helpdesk_manager,1,1,1,1
-
-access_help_ticket_stage_user,access.ticket.stage,model_ticket_stage,odoo_website_helpdesk.helpdesk_user,1,1,1,1
-
-access_helpdesk_type_user,access.helpdesk.type,model_helpdesk_type,odoo_website_helpdesk.helpdesk_user,1,0,0,0
-access_helpdesk_type_leader,access.helpdesk.type,model_helpdesk_type,odoo_website_helpdesk.helpdesk_team_leader,1,1,1,1
-access_helpdesk_type_manager,access.helpdesk.type,model_helpdesk_type,odoo_website_helpdesk.helpdesk_manager,1,1,1,1
-
-access_helpdesk_category_user,access_helpdesk_category,model_helpdesk_category,odoo_website_helpdesk.helpdesk_user,1,0,0,0
-access_helpdesk_category_leader,access_helpdesk_category,model_helpdesk_category,odoo_website_helpdesk.helpdesk_team_leader,1,1,1,1
-access_helpdesk_category_manager,access_helpdesk_category,model_helpdesk_category,odoo_website_helpdesk.helpdesk_manager,1,1,1,1
-
-merge_tickets,merge.ticket,model_merge_ticket,odoo_website_helpdesk.helpdesk_manager,1,1,1,1
-support_tickets,support.ticket,model_support_ticket,odoo_website_helpdesk.helpdesk_manager,1,1,1,1
+access_help_ticket_user,access.help.ticket.user,model_help_ticket,base.group_user,1,1,1,1
+access_help_ticket_teams_user,access.help.team.user,model_help_team,odoo_website_helpdesk.helpdesk_user,1,0,0,0
+access_help_ticket_teams_leader,access.help.team.leader,model_help_team,odoo_website_helpdesk.helpdesk_team_leader,1,0,0,0
+access_help_ticket_teams_manager,access.help.team.manager,model_help_team,odoo_website_helpdesk.helpdesk_manager,1,1,1,1
+access_helpdesk_tag_user,access.helpdesk.tag.user,model_helpdesk_tag,odoo_website_helpdesk.helpdesk_user,1,0,0,0
+access_helpdesk_tag_leader,access.helpdesk.tag.leader,model_helpdesk_tag,odoo_website_helpdesk.helpdesk_team_leader,1,1,1,1
+access_helpdesk_tag_manager,access.helpdesk.tag.manager,model_helpdesk_tag,odoo_website_helpdesk.helpdesk_manager,1,1,1,1
+access_helpdesk_types_user,access.helpdesk.types.user,model_helpdesk_types,odoo_website_helpdesk.helpdesk_user,1,0,0,0
+access_helpdesk_types_leader,access.helpdesk.types.leader,model_helpdesk_types,odoo_website_helpdesk.helpdesk_team_leader,1,1,1,1
+access_helpdesk_types_manager,access.helpdesk.types.manager,model_helpdesk_types,odoo_website_helpdesk.helpdesk_manager,1,1,1,1
+access_helpdesk_categories_user,access.helpdesk.categories.user,model_helpdesk_categories,odoo_website_helpdesk.helpdesk_user,1,0,0,0
+access_helpdesk_categories_leader,access.helpdesk.categories.leader,model_helpdesk_categories,odoo_website_helpdesk.helpdesk_team_leader,1,1,1,1
+access_helpdesk_categories_manager,access.helpdesk.categories.manager,model_helpdesk_categories,odoo_website_helpdesk.helpdesk_manager,1,1,1,1
+merge_tickets_manager,merge.tickets.manager,model_merge_tickets,odoo_website_helpdesk.helpdesk_manager,1,1,1,1
+support_tickets_manager,support.tickets.manager,model_support_tickets,odoo_website_helpdesk.helpdesk_manager,1,1,1,1
+access_help_ticket_stage_user,access.ticket.stage.user,model_ticket_stage,base.group_user,1,1,1,1
diff --git a/odoo_website_helpdesk/security/odoo_website_helpdesk_groups.xml b/odoo_website_helpdesk/security/odoo_website_helpdesk_groups.xml
deleted file mode 100644
index 15afcca2d..000000000
--- a/odoo_website_helpdesk/security/odoo_website_helpdesk_groups.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-
-
-
-
- Helpdesk
- Helpdesk Access Groups
- 20
-
-
-
- User
-
-
-
-
- Team Leader
-
-
-
-
-
- Manager
-
-
-
-
-
- group_show_category
-
-
-
- group_show_subcategory
-
-
-
-
-
-
diff --git a/odoo_website_helpdesk/security/odoo_website_helpdesk_security.xml b/odoo_website_helpdesk/security/odoo_website_helpdesk_security.xml
index f0e9aa87c..01cf87086 100644
--- a/odoo_website_helpdesk/security/odoo_website_helpdesk_security.xml
+++ b/odoo_website_helpdesk/security/odoo_website_helpdesk_security.xml
@@ -1,25 +1,51 @@
-
+
-
+
+ Helpdesk
+ Helpdesk Access Groups
+ 20
+
+
+
+ User
+
+
+
+
+ Team Leader
+
+
+
+
+
+ Manager
+
+
+
+
+ group_show_category
+
+
+ group_show_subcategory
+
+
Record Rule for team leader
-
+
- ['&', ('team_head_id.id', '=', user.id), ('stage_id.group_ids.users', 'in',
- user.id)]
-
+ ['&', ('team_head.id', '=', user.id), ('stage_id.group_ids.users', 'in', user.id)]
-
+
Record Rule for manager
-
+ [(1, '=', 1)]
@@ -28,23 +54,21 @@
-
+
Record Rule for user
-
+
- ['&', ('assigned_user_id', '=', user.id), ('stage_id.group_ids.users', 'in',
- user.id)]
-
+ ['&', ('assigned_user', '=', user.id), ('stage_id.group_ids.users', 'in', user.id)]
-
-
+ Record Rule stages leader
@@ -56,8 +80,8 @@
-
-
+ Record Rule stages manager
@@ -69,8 +93,8 @@
-
-
+ Record Rule stages user
@@ -82,4 +106,7 @@
+
+
+
diff --git a/odoo_website_helpdesk/static/description/assets/cybro-icon.png b/odoo_website_helpdesk/static/description/assets/cybro-icon.png
deleted file mode 100644
index 06e73e11d..000000000
Binary files a/odoo_website_helpdesk/static/description/assets/cybro-icon.png and /dev/null differ
diff --git a/odoo_website_helpdesk/static/description/assets/cybro-odoo.png b/odoo_website_helpdesk/static/description/assets/cybro-odoo.png
deleted file mode 100644
index ed02e07a4..000000000
Binary files a/odoo_website_helpdesk/static/description/assets/cybro-odoo.png and /dev/null differ
diff --git a/odoo_website_helpdesk/static/description/assets/h2.png b/odoo_website_helpdesk/static/description/assets/h2.png
deleted file mode 100644
index 0bfc4707d..000000000
Binary files a/odoo_website_helpdesk/static/description/assets/h2.png and /dev/null differ
diff --git a/odoo_website_helpdesk/static/description/assets/icons/arrows-repeat.svg b/odoo_website_helpdesk/static/description/assets/icons/arrows-repeat.svg
deleted file mode 100644
index 1d7efabc5..000000000
--- a/odoo_website_helpdesk/static/description/assets/icons/arrows-repeat.svg
+++ /dev/null
@@ -1,10 +0,0 @@
-
diff --git a/odoo_website_helpdesk/static/description/assets/icons/banner-1.png b/odoo_website_helpdesk/static/description/assets/icons/banner-1.png
deleted file mode 100644
index c180db172..000000000
Binary files a/odoo_website_helpdesk/static/description/assets/icons/banner-1.png and /dev/null differ
diff --git a/odoo_website_helpdesk/static/description/assets/icons/banner-2.svg b/odoo_website_helpdesk/static/description/assets/icons/banner-2.svg
deleted file mode 100644
index e606d97d9..000000000
--- a/odoo_website_helpdesk/static/description/assets/icons/banner-2.svg
+++ /dev/null
@@ -1,73 +0,0 @@
-
diff --git a/odoo_website_helpdesk/static/description/assets/icons/banner-bg.png b/odoo_website_helpdesk/static/description/assets/icons/banner-bg.png
deleted file mode 100644
index a8238d3c0..000000000
Binary files a/odoo_website_helpdesk/static/description/assets/icons/banner-bg.png and /dev/null differ
diff --git a/odoo_website_helpdesk/static/description/assets/icons/banner-bg.svg b/odoo_website_helpdesk/static/description/assets/icons/banner-bg.svg
deleted file mode 100644
index b1378103e..000000000
--- a/odoo_website_helpdesk/static/description/assets/icons/banner-bg.svg
+++ /dev/null
@@ -1,9 +0,0 @@
-
diff --git a/odoo_website_helpdesk/static/description/assets/icons/banner-call.svg b/odoo_website_helpdesk/static/description/assets/icons/banner-call.svg
deleted file mode 100644
index 96c687e81..000000000
--- a/odoo_website_helpdesk/static/description/assets/icons/banner-call.svg
+++ /dev/null
@@ -1,5 +0,0 @@
-
diff --git a/odoo_website_helpdesk/static/description/assets/icons/banner-mail.svg b/odoo_website_helpdesk/static/description/assets/icons/banner-mail.svg
deleted file mode 100644
index cbf0d158d..000000000
--- a/odoo_website_helpdesk/static/description/assets/icons/banner-mail.svg
+++ /dev/null
@@ -1,5 +0,0 @@
-
diff --git a/odoo_website_helpdesk/static/description/assets/icons/banner-pattern.svg b/odoo_website_helpdesk/static/description/assets/icons/banner-pattern.svg
deleted file mode 100644
index 9c1c7e101..000000000
--- a/odoo_website_helpdesk/static/description/assets/icons/banner-pattern.svg
+++ /dev/null
@@ -1,343 +0,0 @@
-
diff --git a/odoo_website_helpdesk/static/description/assets/icons/banner-promo.svg b/odoo_website_helpdesk/static/description/assets/icons/banner-promo.svg
deleted file mode 100644
index d52791b11..000000000
--- a/odoo_website_helpdesk/static/description/assets/icons/banner-promo.svg
+++ /dev/null
@@ -1,147 +0,0 @@
-
diff --git a/odoo_website_helpdesk/static/description/assets/icons/brand-pair.svg b/odoo_website_helpdesk/static/description/assets/icons/brand-pair.svg
deleted file mode 100644
index d8db7fc1e..000000000
--- a/odoo_website_helpdesk/static/description/assets/icons/brand-pair.svg
+++ /dev/null
@@ -1,41 +0,0 @@
-
diff --git a/odoo_website_helpdesk/static/description/assets/icons/close-icon.svg b/odoo_website_helpdesk/static/description/assets/icons/close-icon.svg
deleted file mode 100644
index df8cce37a..000000000
--- a/odoo_website_helpdesk/static/description/assets/icons/close-icon.svg
+++ /dev/null
@@ -1,5 +0,0 @@
-
diff --git a/odoo_website_helpdesk/static/description/assets/icons/collabarate-icon.svg b/odoo_website_helpdesk/static/description/assets/icons/collabarate-icon.svg
deleted file mode 100644
index dd4e10518..000000000
--- a/odoo_website_helpdesk/static/description/assets/icons/collabarate-icon.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
diff --git a/odoo_website_helpdesk/static/description/assets/icons/cybro-logo.png b/odoo_website_helpdesk/static/description/assets/icons/cybro-logo.png
deleted file mode 100644
index ff4b78220..000000000
Binary files a/odoo_website_helpdesk/static/description/assets/icons/cybro-logo.png and /dev/null differ
diff --git a/odoo_website_helpdesk/static/description/assets/icons/down.svg b/odoo_website_helpdesk/static/description/assets/icons/down.svg
deleted file mode 100644
index f21c36271..000000000
--- a/odoo_website_helpdesk/static/description/assets/icons/down.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/odoo_website_helpdesk/static/description/assets/icons/faq.png b/odoo_website_helpdesk/static/description/assets/icons/faq.png
deleted file mode 100644
index 4250b5b81..000000000
Binary files a/odoo_website_helpdesk/static/description/assets/icons/faq.png and /dev/null differ
diff --git a/odoo_website_helpdesk/static/description/assets/icons/feature-icon.svg b/odoo_website_helpdesk/static/description/assets/icons/feature-icon.svg
deleted file mode 100644
index fa0ea6850..000000000
--- a/odoo_website_helpdesk/static/description/assets/icons/feature-icon.svg
+++ /dev/null
@@ -1,10 +0,0 @@
-
diff --git a/odoo_website_helpdesk/static/description/assets/icons/feature.png b/odoo_website_helpdesk/static/description/assets/icons/feature.png
deleted file mode 100644
index ac7a785c0..000000000
Binary files a/odoo_website_helpdesk/static/description/assets/icons/feature.png and /dev/null differ
diff --git a/odoo_website_helpdesk/static/description/assets/icons/gear.svg b/odoo_website_helpdesk/static/description/assets/icons/gear.svg
deleted file mode 100644
index 0cc66b6ea..000000000
--- a/odoo_website_helpdesk/static/description/assets/icons/gear.svg
+++ /dev/null
@@ -1,10 +0,0 @@
-
diff --git a/odoo_website_helpdesk/static/description/assets/icons/hero.gif b/odoo_website_helpdesk/static/description/assets/icons/hero.gif
deleted file mode 100644
index 380654dfe..000000000
Binary files a/odoo_website_helpdesk/static/description/assets/icons/hero.gif and /dev/null differ
diff --git a/odoo_website_helpdesk/static/description/assets/icons/hire-odoo.svg b/odoo_website_helpdesk/static/description/assets/icons/hire-odoo.svg
deleted file mode 100644
index e1ac089b0..000000000
--- a/odoo_website_helpdesk/static/description/assets/icons/hire-odoo.svg
+++ /dev/null
@@ -1,12 +0,0 @@
-
diff --git a/odoo_website_helpdesk/static/description/assets/icons/life-ring-icon.svg b/odoo_website_helpdesk/static/description/assets/icons/life-ring-icon.svg
deleted file mode 100644
index 3ae6e1d89..000000000
--- a/odoo_website_helpdesk/static/description/assets/icons/life-ring-icon.svg
+++ /dev/null
@@ -1,13 +0,0 @@
-
diff --git a/odoo_website_helpdesk/static/description/assets/icons/logo.png b/odoo_website_helpdesk/static/description/assets/icons/logo.png
new file mode 100644
index 000000000..478462d3e
Binary files /dev/null and b/odoo_website_helpdesk/static/description/assets/icons/logo.png differ
diff --git a/odoo_website_helpdesk/static/description/assets/icons/mail.svg b/odoo_website_helpdesk/static/description/assets/icons/mail.svg
deleted file mode 100644
index 1eedde695..000000000
--- a/odoo_website_helpdesk/static/description/assets/icons/mail.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
diff --git a/odoo_website_helpdesk/static/description/assets/icons/notes.png b/odoo_website_helpdesk/static/description/assets/icons/notes.png
deleted file mode 100644
index ee5e95404..000000000
Binary files a/odoo_website_helpdesk/static/description/assets/icons/notes.png and /dev/null differ
diff --git a/odoo_website_helpdesk/static/description/assets/icons/notification icon.svg b/odoo_website_helpdesk/static/description/assets/icons/notification icon.svg
deleted file mode 100644
index 053189973..000000000
--- a/odoo_website_helpdesk/static/description/assets/icons/notification icon.svg
+++ /dev/null
@@ -1,10 +0,0 @@
-
diff --git a/odoo_website_helpdesk/static/description/assets/icons/odoo-consultancy.svg b/odoo_website_helpdesk/static/description/assets/icons/odoo-consultancy.svg
deleted file mode 100644
index e05f65bde..000000000
--- a/odoo_website_helpdesk/static/description/assets/icons/odoo-consultancy.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
diff --git a/odoo_website_helpdesk/static/description/assets/icons/odoo-licencing.svg b/odoo_website_helpdesk/static/description/assets/icons/odoo-licencing.svg
deleted file mode 100644
index 2606c88b0..000000000
--- a/odoo_website_helpdesk/static/description/assets/icons/odoo-licencing.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
diff --git a/odoo_website_helpdesk/static/description/assets/icons/odoo-logo.png b/odoo_website_helpdesk/static/description/assets/icons/odoo-logo.png
deleted file mode 100644
index 0e4d0eb5a..000000000
Binary files a/odoo_website_helpdesk/static/description/assets/icons/odoo-logo.png and /dev/null differ
diff --git a/odoo_website_helpdesk/static/description/assets/icons/patter.svg b/odoo_website_helpdesk/static/description/assets/icons/patter.svg
deleted file mode 100644
index 25c9c0a8f..000000000
--- a/odoo_website_helpdesk/static/description/assets/icons/patter.svg
+++ /dev/null
@@ -1,9 +0,0 @@
-
diff --git a/odoo_website_helpdesk/static/description/assets/icons/pattern1.png b/odoo_website_helpdesk/static/description/assets/icons/pattern1.png
deleted file mode 100644
index 09ab0fb2d..000000000
Binary files a/odoo_website_helpdesk/static/description/assets/icons/pattern1.png and /dev/null differ
diff --git a/odoo_website_helpdesk/static/description/assets/icons/puzzle-piece-icon.svg b/odoo_website_helpdesk/static/description/assets/icons/puzzle-piece-icon.svg
deleted file mode 100644
index 3e9ad9373..000000000
--- a/odoo_website_helpdesk/static/description/assets/icons/puzzle-piece-icon.svg
+++ /dev/null
@@ -1,10 +0,0 @@
-
diff --git a/odoo_website_helpdesk/static/description/assets/icons/replace-icon.svg b/odoo_website_helpdesk/static/description/assets/icons/replace-icon.svg
deleted file mode 100644
index d0e3a7af1..000000000
--- a/odoo_website_helpdesk/static/description/assets/icons/replace-icon.svg
+++ /dev/null
@@ -1,10 +0,0 @@
-
diff --git a/odoo_website_helpdesk/static/description/assets/icons/screenshot-main.png b/odoo_website_helpdesk/static/description/assets/icons/screenshot-main.png
deleted file mode 100644
index 575f8e676..000000000
Binary files a/odoo_website_helpdesk/static/description/assets/icons/screenshot-main.png and /dev/null differ
diff --git a/odoo_website_helpdesk/static/description/assets/icons/screenshot.png b/odoo_website_helpdesk/static/description/assets/icons/screenshot.png
deleted file mode 100644
index cef272529..000000000
Binary files a/odoo_website_helpdesk/static/description/assets/icons/screenshot.png and /dev/null differ
diff --git a/odoo_website_helpdesk/static/description/assets/icons/skype-fill.svg b/odoo_website_helpdesk/static/description/assets/icons/skype-fill.svg
deleted file mode 100644
index c17423639..000000000
--- a/odoo_website_helpdesk/static/description/assets/icons/skype-fill.svg
+++ /dev/null
@@ -1,10 +0,0 @@
-
diff --git a/odoo_website_helpdesk/static/description/assets/icons/skype.png b/odoo_website_helpdesk/static/description/assets/icons/skype.png
deleted file mode 100644
index 51b409fb3..000000000
Binary files a/odoo_website_helpdesk/static/description/assets/icons/skype.png and /dev/null differ
diff --git a/odoo_website_helpdesk/static/description/assets/icons/skype.svg b/odoo_website_helpdesk/static/description/assets/icons/skype.svg
deleted file mode 100644
index df3dad39b..000000000
--- a/odoo_website_helpdesk/static/description/assets/icons/skype.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
diff --git a/odoo_website_helpdesk/static/description/assets/icons/star-1.svg b/odoo_website_helpdesk/static/description/assets/icons/star-1.svg
deleted file mode 100644
index 7e55ab162..000000000
--- a/odoo_website_helpdesk/static/description/assets/icons/star-1.svg
+++ /dev/null
@@ -1,53 +0,0 @@
-
-
-
diff --git a/odoo_website_helpdesk/static/description/assets/icons/star-2.svg b/odoo_website_helpdesk/static/description/assets/icons/star-2.svg
deleted file mode 100644
index 5ae9f507a..000000000
--- a/odoo_website_helpdesk/static/description/assets/icons/star-2.svg
+++ /dev/null
@@ -1,9 +0,0 @@
-
diff --git a/odoo_website_helpdesk/static/description/assets/icons/test-1 - Copy.png b/odoo_website_helpdesk/static/description/assets/icons/test-1 - Copy.png
deleted file mode 100644
index f6a902663..000000000
Binary files a/odoo_website_helpdesk/static/description/assets/icons/test-1 - Copy.png and /dev/null differ
diff --git a/odoo_website_helpdesk/static/description/assets/icons/test-1.png b/odoo_website_helpdesk/static/description/assets/icons/test-1.png
deleted file mode 100644
index 0908add2b..000000000
Binary files a/odoo_website_helpdesk/static/description/assets/icons/test-1.png and /dev/null differ
diff --git a/odoo_website_helpdesk/static/description/assets/icons/test-2.png b/odoo_website_helpdesk/static/description/assets/icons/test-2.png
deleted file mode 100644
index 4671fe91e..000000000
Binary files a/odoo_website_helpdesk/static/description/assets/icons/test-2.png and /dev/null differ
diff --git a/odoo_website_helpdesk/static/description/assets/icons/translate.svg b/odoo_website_helpdesk/static/description/assets/icons/translate.svg
deleted file mode 100644
index af9c8a1aa..000000000
--- a/odoo_website_helpdesk/static/description/assets/icons/translate.svg
+++ /dev/null
@@ -1,10 +0,0 @@
-
diff --git a/odoo_website_helpdesk/static/description/assets/icons/video.png b/odoo_website_helpdesk/static/description/assets/icons/video.png
deleted file mode 100644
index 576705b17..000000000
Binary files a/odoo_website_helpdesk/static/description/assets/icons/video.png and /dev/null differ
diff --git a/odoo_website_helpdesk/static/description/assets/icons/wrench-icon.svg b/odoo_website_helpdesk/static/description/assets/icons/wrench-icon.svg
deleted file mode 100644
index 174b5a465..000000000
--- a/odoo_website_helpdesk/static/description/assets/icons/wrench-icon.svg
+++ /dev/null
@@ -1,10 +0,0 @@
-
diff --git a/odoo_website_helpdesk/static/description/assets/misc/categories.png b/odoo_website_helpdesk/static/description/assets/misc/categories.png
new file mode 100644
index 000000000..bedf1e0b1
Binary files /dev/null and b/odoo_website_helpdesk/static/description/assets/misc/categories.png differ
diff --git a/odoo_website_helpdesk/static/description/assets/misc/check-box.png b/odoo_website_helpdesk/static/description/assets/misc/check-box.png
new file mode 100644
index 000000000..42caf24b9
Binary files /dev/null and b/odoo_website_helpdesk/static/description/assets/misc/check-box.png differ
diff --git a/odoo_website_helpdesk/static/description/assets/misc/compass.png b/odoo_website_helpdesk/static/description/assets/misc/compass.png
new file mode 100644
index 000000000..d5fed8faa
Binary files /dev/null and b/odoo_website_helpdesk/static/description/assets/misc/compass.png differ
diff --git a/odoo_website_helpdesk/static/description/assets/misc/corporate.png b/odoo_website_helpdesk/static/description/assets/misc/corporate.png
new file mode 100644
index 000000000..2eb13edbf
Binary files /dev/null and b/odoo_website_helpdesk/static/description/assets/misc/corporate.png differ
diff --git a/odoo_website_helpdesk/static/description/assets/misc/customer-support.png b/odoo_website_helpdesk/static/description/assets/misc/customer-support.png
new file mode 100644
index 000000000..79efc72ed
Binary files /dev/null and b/odoo_website_helpdesk/static/description/assets/misc/customer-support.png differ
diff --git a/odoo_website_helpdesk/static/description/assets/misc/cybrosys-logo.png b/odoo_website_helpdesk/static/description/assets/misc/cybrosys-logo.png
new file mode 100644
index 000000000..cc3cc0ccf
Binary files /dev/null and b/odoo_website_helpdesk/static/description/assets/misc/cybrosys-logo.png differ
diff --git a/odoo_website_helpdesk/static/description/assets/misc/features.png b/odoo_website_helpdesk/static/description/assets/misc/features.png
new file mode 100644
index 000000000..b41769f77
Binary files /dev/null and b/odoo_website_helpdesk/static/description/assets/misc/features.png differ
diff --git a/odoo_website_helpdesk/static/description/assets/misc/logo.png b/odoo_website_helpdesk/static/description/assets/misc/logo.png
new file mode 100644
index 000000000..478462d3e
Binary files /dev/null and b/odoo_website_helpdesk/static/description/assets/misc/logo.png differ
diff --git a/odoo_website_helpdesk/static/description/assets/misc/pictures.png b/odoo_website_helpdesk/static/description/assets/misc/pictures.png
new file mode 100644
index 000000000..56d255fe9
Binary files /dev/null and b/odoo_website_helpdesk/static/description/assets/misc/pictures.png differ
diff --git a/odoo_website_helpdesk/static/description/assets/misc/pie-chart.png b/odoo_website_helpdesk/static/description/assets/misc/pie-chart.png
new file mode 100644
index 000000000..426e05244
Binary files /dev/null and b/odoo_website_helpdesk/static/description/assets/misc/pie-chart.png differ
diff --git a/odoo_website_helpdesk/static/description/assets/misc/right-arrow.png b/odoo_website_helpdesk/static/description/assets/misc/right-arrow.png
new file mode 100644
index 000000000..730984a06
Binary files /dev/null and b/odoo_website_helpdesk/static/description/assets/misc/right-arrow.png differ
diff --git a/odoo_website_helpdesk/static/description/assets/misc/star.png b/odoo_website_helpdesk/static/description/assets/misc/star.png
new file mode 100644
index 000000000..2eb9ab29f
Binary files /dev/null and b/odoo_website_helpdesk/static/description/assets/misc/star.png differ
diff --git a/odoo_website_helpdesk/static/description/assets/icons/support.png b/odoo_website_helpdesk/static/description/assets/misc/support.png
similarity index 100%
rename from odoo_website_helpdesk/static/description/assets/icons/support.png
rename to odoo_website_helpdesk/static/description/assets/misc/support.png
diff --git a/odoo_website_helpdesk/static/description/assets/icons/whatsapp.png b/odoo_website_helpdesk/static/description/assets/misc/whatsapp.png
similarity index 100%
rename from odoo_website_helpdesk/static/description/assets/icons/whatsapp.png
rename to odoo_website_helpdesk/static/description/assets/misc/whatsapp.png
diff --git a/odoo_website_helpdesk/static/description/assets/modules/1.gif b/odoo_website_helpdesk/static/description/assets/modules/1.gif
deleted file mode 100644
index ae3a880a2..000000000
Binary files a/odoo_website_helpdesk/static/description/assets/modules/1.gif and /dev/null differ
diff --git a/odoo_website_helpdesk/static/description/assets/modules/1.jpg b/odoo_website_helpdesk/static/description/assets/modules/1.jpg
new file mode 100644
index 000000000..291635d04
Binary files /dev/null and b/odoo_website_helpdesk/static/description/assets/modules/1.jpg differ
diff --git a/odoo_website_helpdesk/static/description/assets/modules/2.gif b/odoo_website_helpdesk/static/description/assets/modules/2.gif
deleted file mode 100644
index d19e2b352..000000000
Binary files a/odoo_website_helpdesk/static/description/assets/modules/2.gif and /dev/null differ
diff --git a/odoo_website_helpdesk/static/description/assets/modules/2.jpg b/odoo_website_helpdesk/static/description/assets/modules/2.jpg
new file mode 100644
index 000000000..157e5a4d4
Binary files /dev/null and b/odoo_website_helpdesk/static/description/assets/modules/2.jpg differ
diff --git a/odoo_website_helpdesk/static/description/assets/modules/3.png b/odoo_website_helpdesk/static/description/assets/modules/3.png
index 8513873ea..6e487b48c 100644
Binary files a/odoo_website_helpdesk/static/description/assets/modules/3.png and b/odoo_website_helpdesk/static/description/assets/modules/3.png differ
diff --git a/odoo_website_helpdesk/static/description/assets/modules/4.png b/odoo_website_helpdesk/static/description/assets/modules/4.png
index 3bedf7981..bd1a82caa 100644
Binary files a/odoo_website_helpdesk/static/description/assets/modules/4.png and b/odoo_website_helpdesk/static/description/assets/modules/4.png differ
diff --git a/odoo_website_helpdesk/static/description/assets/modules/5.jpg b/odoo_website_helpdesk/static/description/assets/modules/5.jpg
new file mode 100755
index 000000000..15892a150
Binary files /dev/null and b/odoo_website_helpdesk/static/description/assets/modules/5.jpg differ
diff --git a/odoo_website_helpdesk/static/description/assets/modules/5.png b/odoo_website_helpdesk/static/description/assets/modules/5.png
deleted file mode 100644
index 0e311ca87..000000000
Binary files a/odoo_website_helpdesk/static/description/assets/modules/5.png and /dev/null differ
diff --git a/odoo_website_helpdesk/static/description/assets/modules/6.jpg b/odoo_website_helpdesk/static/description/assets/modules/6.jpg
deleted file mode 100644
index 67c7f7062..000000000
Binary files a/odoo_website_helpdesk/static/description/assets/modules/6.jpg and /dev/null differ
diff --git a/odoo_website_helpdesk/static/description/assets/modules/7.jpg b/odoo_website_helpdesk/static/description/assets/modules/7.jpg
new file mode 100644
index 000000000..483dd03a4
Binary files /dev/null and b/odoo_website_helpdesk/static/description/assets/modules/7.jpg differ
diff --git a/odoo_website_helpdesk/static/description/assets/screenshots/1.png b/odoo_website_helpdesk/static/description/assets/screenshots/1.png
deleted file mode 100644
index 32e8547e7..000000000
Binary files a/odoo_website_helpdesk/static/description/assets/screenshots/1.png and /dev/null differ
diff --git a/odoo_website_helpdesk/static/description/assets/screenshots/10.png b/odoo_website_helpdesk/static/description/assets/screenshots/10.png
deleted file mode 100644
index 5804656cf..000000000
Binary files a/odoo_website_helpdesk/static/description/assets/screenshots/10.png and /dev/null differ
diff --git a/odoo_website_helpdesk/static/description/assets/screenshots/11.png b/odoo_website_helpdesk/static/description/assets/screenshots/11.png
deleted file mode 100644
index d4f9f1b90..000000000
Binary files a/odoo_website_helpdesk/static/description/assets/screenshots/11.png and /dev/null differ
diff --git a/odoo_website_helpdesk/static/description/assets/screenshots/12.png b/odoo_website_helpdesk/static/description/assets/screenshots/12.png
deleted file mode 100644
index b239f27a1..000000000
Binary files a/odoo_website_helpdesk/static/description/assets/screenshots/12.png and /dev/null differ
diff --git a/odoo_website_helpdesk/static/description/assets/screenshots/13.png b/odoo_website_helpdesk/static/description/assets/screenshots/13.png
deleted file mode 100644
index b4353deed..000000000
Binary files a/odoo_website_helpdesk/static/description/assets/screenshots/13.png and /dev/null differ
diff --git a/odoo_website_helpdesk/static/description/assets/screenshots/14.png b/odoo_website_helpdesk/static/description/assets/screenshots/14.png
deleted file mode 100644
index a71fba592..000000000
Binary files a/odoo_website_helpdesk/static/description/assets/screenshots/14.png and /dev/null differ
diff --git a/odoo_website_helpdesk/static/description/assets/screenshots/15.png b/odoo_website_helpdesk/static/description/assets/screenshots/15.png
deleted file mode 100644
index 07ad28ec9..000000000
Binary files a/odoo_website_helpdesk/static/description/assets/screenshots/15.png and /dev/null differ
diff --git a/odoo_website_helpdesk/static/description/assets/screenshots/16.png b/odoo_website_helpdesk/static/description/assets/screenshots/16.png
deleted file mode 100644
index 90d0b5b9d..000000000
Binary files a/odoo_website_helpdesk/static/description/assets/screenshots/16.png and /dev/null differ
diff --git a/odoo_website_helpdesk/static/description/assets/screenshots/17.png b/odoo_website_helpdesk/static/description/assets/screenshots/17.png
deleted file mode 100644
index a644c7b3e..000000000
Binary files a/odoo_website_helpdesk/static/description/assets/screenshots/17.png and /dev/null differ
diff --git a/odoo_website_helpdesk/static/description/assets/screenshots/18.png b/odoo_website_helpdesk/static/description/assets/screenshots/18.png
deleted file mode 100644
index ea342b4a7..000000000
Binary files a/odoo_website_helpdesk/static/description/assets/screenshots/18.png and /dev/null differ
diff --git a/odoo_website_helpdesk/static/description/assets/screenshots/19.png b/odoo_website_helpdesk/static/description/assets/screenshots/19.png
deleted file mode 100644
index b5fe68e68..000000000
Binary files a/odoo_website_helpdesk/static/description/assets/screenshots/19.png and /dev/null differ
diff --git a/odoo_website_helpdesk/static/description/assets/screenshots/2.png b/odoo_website_helpdesk/static/description/assets/screenshots/2.png
deleted file mode 100644
index 7cd0b4c63..000000000
Binary files a/odoo_website_helpdesk/static/description/assets/screenshots/2.png and /dev/null differ
diff --git a/odoo_website_helpdesk/static/description/assets/screenshots/20.png b/odoo_website_helpdesk/static/description/assets/screenshots/20.png
deleted file mode 100644
index 3609c0828..000000000
Binary files a/odoo_website_helpdesk/static/description/assets/screenshots/20.png and /dev/null differ
diff --git a/odoo_website_helpdesk/static/description/assets/screenshots/21.png b/odoo_website_helpdesk/static/description/assets/screenshots/21.png
deleted file mode 100644
index 698ac9a6b..000000000
Binary files a/odoo_website_helpdesk/static/description/assets/screenshots/21.png and /dev/null differ
diff --git a/odoo_website_helpdesk/static/description/assets/screenshots/22.png b/odoo_website_helpdesk/static/description/assets/screenshots/22.png
deleted file mode 100644
index bd1bf564a..000000000
Binary files a/odoo_website_helpdesk/static/description/assets/screenshots/22.png and /dev/null differ
diff --git a/odoo_website_helpdesk/static/description/assets/screenshots/23.png b/odoo_website_helpdesk/static/description/assets/screenshots/23.png
deleted file mode 100644
index 8a4f8029d..000000000
Binary files a/odoo_website_helpdesk/static/description/assets/screenshots/23.png and /dev/null differ
diff --git a/odoo_website_helpdesk/static/description/assets/screenshots/24.png b/odoo_website_helpdesk/static/description/assets/screenshots/24.png
deleted file mode 100644
index b24f82499..000000000
Binary files a/odoo_website_helpdesk/static/description/assets/screenshots/24.png and /dev/null differ
diff --git a/odoo_website_helpdesk/static/description/assets/screenshots/25.png b/odoo_website_helpdesk/static/description/assets/screenshots/25.png
deleted file mode 100644
index 6a22e6b66..000000000
Binary files a/odoo_website_helpdesk/static/description/assets/screenshots/25.png and /dev/null differ
diff --git a/odoo_website_helpdesk/static/description/assets/screenshots/26.png b/odoo_website_helpdesk/static/description/assets/screenshots/26.png
deleted file mode 100644
index 596fcdc68..000000000
Binary files a/odoo_website_helpdesk/static/description/assets/screenshots/26.png and /dev/null differ
diff --git a/odoo_website_helpdesk/static/description/assets/screenshots/27.png b/odoo_website_helpdesk/static/description/assets/screenshots/27.png
deleted file mode 100644
index aee1613a7..000000000
Binary files a/odoo_website_helpdesk/static/description/assets/screenshots/27.png and /dev/null differ
diff --git a/odoo_website_helpdesk/static/description/assets/screenshots/3.png b/odoo_website_helpdesk/static/description/assets/screenshots/3.png
deleted file mode 100644
index cbac4c1ea..000000000
Binary files a/odoo_website_helpdesk/static/description/assets/screenshots/3.png and /dev/null differ
diff --git a/odoo_website_helpdesk/static/description/assets/screenshots/4.png b/odoo_website_helpdesk/static/description/assets/screenshots/4.png
deleted file mode 100644
index e6674ce66..000000000
Binary files a/odoo_website_helpdesk/static/description/assets/screenshots/4.png and /dev/null differ
diff --git a/odoo_website_helpdesk/static/description/assets/screenshots/5.png b/odoo_website_helpdesk/static/description/assets/screenshots/5.png
deleted file mode 100644
index c40041c9e..000000000
Binary files a/odoo_website_helpdesk/static/description/assets/screenshots/5.png and /dev/null differ
diff --git a/odoo_website_helpdesk/static/description/assets/screenshots/6.png b/odoo_website_helpdesk/static/description/assets/screenshots/6.png
deleted file mode 100644
index 063e3c7d3..000000000
Binary files a/odoo_website_helpdesk/static/description/assets/screenshots/6.png and /dev/null differ
diff --git a/odoo_website_helpdesk/static/description/assets/screenshots/7.png b/odoo_website_helpdesk/static/description/assets/screenshots/7.png
deleted file mode 100644
index 171264b48..000000000
Binary files a/odoo_website_helpdesk/static/description/assets/screenshots/7.png and /dev/null differ
diff --git a/odoo_website_helpdesk/static/description/assets/screenshots/8.png b/odoo_website_helpdesk/static/description/assets/screenshots/8.png
deleted file mode 100644
index 5f57c2d44..000000000
Binary files a/odoo_website_helpdesk/static/description/assets/screenshots/8.png and /dev/null differ
diff --git a/odoo_website_helpdesk/static/description/assets/screenshots/9.png b/odoo_website_helpdesk/static/description/assets/screenshots/9.png
deleted file mode 100644
index 641045d74..000000000
Binary files a/odoo_website_helpdesk/static/description/assets/screenshots/9.png and /dev/null differ
diff --git a/odoo_website_helpdesk/static/description/assets/screenshots/Screenshot1.png b/odoo_website_helpdesk/static/description/assets/screenshots/Screenshot1.png
new file mode 100644
index 000000000..7ac48fe4a
Binary files /dev/null and b/odoo_website_helpdesk/static/description/assets/screenshots/Screenshot1.png differ
diff --git a/odoo_website_helpdesk/static/description/assets/screenshots/Screenshot2.png b/odoo_website_helpdesk/static/description/assets/screenshots/Screenshot2.png
new file mode 100644
index 000000000..9e7c1aa68
Binary files /dev/null and b/odoo_website_helpdesk/static/description/assets/screenshots/Screenshot2.png differ
diff --git a/odoo_website_helpdesk/static/description/assets/screenshots/Screenshot3.png b/odoo_website_helpdesk/static/description/assets/screenshots/Screenshot3.png
new file mode 100644
index 000000000..689ab757a
Binary files /dev/null and b/odoo_website_helpdesk/static/description/assets/screenshots/Screenshot3.png differ
diff --git a/odoo_website_helpdesk/static/description/assets/screenshots/Screenshot4.png b/odoo_website_helpdesk/static/description/assets/screenshots/Screenshot4.png
new file mode 100644
index 000000000..3c900491e
Binary files /dev/null and b/odoo_website_helpdesk/static/description/assets/screenshots/Screenshot4.png differ
diff --git a/odoo_website_helpdesk/static/description/assets/screenshots/billed.png b/odoo_website_helpdesk/static/description/assets/screenshots/billed.png
new file mode 100644
index 000000000..758d514f8
Binary files /dev/null and b/odoo_website_helpdesk/static/description/assets/screenshots/billed.png differ
diff --git a/odoo_website_helpdesk/static/description/assets/screenshots/catagory.png b/odoo_website_helpdesk/static/description/assets/screenshots/catagory.png
new file mode 100644
index 000000000..af879c398
Binary files /dev/null and b/odoo_website_helpdesk/static/description/assets/screenshots/catagory.png differ
diff --git a/odoo_website_helpdesk/static/description/assets/screenshots/create-new-ticket.png b/odoo_website_helpdesk/static/description/assets/screenshots/create-new-ticket.png
new file mode 100644
index 000000000..fc412fcc5
Binary files /dev/null and b/odoo_website_helpdesk/static/description/assets/screenshots/create-new-ticket.png differ
diff --git a/odoo_website_helpdesk/static/description/assets/screenshots/enable_billing.png b/odoo_website_helpdesk/static/description/assets/screenshots/enable_billing.png
new file mode 100644
index 000000000..22e01a791
Binary files /dev/null and b/odoo_website_helpdesk/static/description/assets/screenshots/enable_billing.png differ
diff --git a/odoo_website_helpdesk/static/description/assets/screenshots/enable_helpdesk.png b/odoo_website_helpdesk/static/description/assets/screenshots/enable_helpdesk.png
new file mode 100644
index 000000000..e20abb2f3
Binary files /dev/null and b/odoo_website_helpdesk/static/description/assets/screenshots/enable_helpdesk.png differ
diff --git a/odoo_website_helpdesk/static/description/assets/screenshots/enable_settings_task.png b/odoo_website_helpdesk/static/description/assets/screenshots/enable_settings_task.png
new file mode 100644
index 000000000..103a8a831
Binary files /dev/null and b/odoo_website_helpdesk/static/description/assets/screenshots/enable_settings_task.png differ
diff --git a/odoo_website_helpdesk/static/description/assets/screenshots/enable_task.png b/odoo_website_helpdesk/static/description/assets/screenshots/enable_task.png
new file mode 100644
index 000000000..51e812d90
Binary files /dev/null and b/odoo_website_helpdesk/static/description/assets/screenshots/enable_task.png differ
diff --git a/odoo_website_helpdesk/static/description/assets/screenshots/hero.gif b/odoo_website_helpdesk/static/description/assets/screenshots/hero.gif
deleted file mode 100644
index 06397aeea..000000000
Binary files a/odoo_website_helpdesk/static/description/assets/screenshots/hero.gif and /dev/null differ
diff --git a/odoo_website_helpdesk/static/description/assets/screenshots/invoice.png b/odoo_website_helpdesk/static/description/assets/screenshots/invoice.png
new file mode 100644
index 000000000..25eebb852
Binary files /dev/null and b/odoo_website_helpdesk/static/description/assets/screenshots/invoice.png differ
diff --git a/odoo_website_helpdesk/static/description/assets/screenshots/kanban_view.png b/odoo_website_helpdesk/static/description/assets/screenshots/kanban_view.png
new file mode 100644
index 000000000..73146add0
Binary files /dev/null and b/odoo_website_helpdesk/static/description/assets/screenshots/kanban_view.png differ
diff --git a/odoo_website_helpdesk/static/description/assets/screenshots/merge-action.png b/odoo_website_helpdesk/static/description/assets/screenshots/merge-action.png
new file mode 100644
index 000000000..d1e91f637
Binary files /dev/null and b/odoo_website_helpdesk/static/description/assets/screenshots/merge-action.png differ
diff --git a/odoo_website_helpdesk/static/description/assets/screenshots/model.png b/odoo_website_helpdesk/static/description/assets/screenshots/model.png
new file mode 100644
index 000000000..994363485
Binary files /dev/null and b/odoo_website_helpdesk/static/description/assets/screenshots/model.png differ
diff --git a/odoo_website_helpdesk/static/description/assets/screenshots/open-model.png b/odoo_website_helpdesk/static/description/assets/screenshots/open-model.png
new file mode 100644
index 000000000..4dd72bf4d
Binary files /dev/null and b/odoo_website_helpdesk/static/description/assets/screenshots/open-model.png differ
diff --git a/odoo_website_helpdesk/static/description/assets/screenshots/open-new-ticket.png b/odoo_website_helpdesk/static/description/assets/screenshots/open-new-ticket.png
new file mode 100644
index 000000000..908d7bd32
Binary files /dev/null and b/odoo_website_helpdesk/static/description/assets/screenshots/open-new-ticket.png differ
diff --git a/odoo_website_helpdesk/static/description/assets/screenshots/printing.png b/odoo_website_helpdesk/static/description/assets/screenshots/printing.png
new file mode 100644
index 000000000..647023f7a
Binary files /dev/null and b/odoo_website_helpdesk/static/description/assets/screenshots/printing.png differ
diff --git a/odoo_website_helpdesk/static/description/assets/screenshots/report.png b/odoo_website_helpdesk/static/description/assets/screenshots/report.png
new file mode 100644
index 000000000..a0a91df2f
Binary files /dev/null and b/odoo_website_helpdesk/static/description/assets/screenshots/report.png differ
diff --git a/odoo_website_helpdesk/static/description/assets/screenshots/stages.png b/odoo_website_helpdesk/static/description/assets/screenshots/stages.png
new file mode 100644
index 000000000..51421c8f0
Binary files /dev/null and b/odoo_website_helpdesk/static/description/assets/screenshots/stages.png differ
diff --git a/odoo_website_helpdesk/static/description/assets/screenshots/tags.png b/odoo_website_helpdesk/static/description/assets/screenshots/tags.png
new file mode 100644
index 000000000..2760e2884
Binary files /dev/null and b/odoo_website_helpdesk/static/description/assets/screenshots/tags.png differ
diff --git a/odoo_website_helpdesk/static/description/assets/screenshots/task_creation.png b/odoo_website_helpdesk/static/description/assets/screenshots/task_creation.png
new file mode 100644
index 000000000..47b2c5952
Binary files /dev/null and b/odoo_website_helpdesk/static/description/assets/screenshots/task_creation.png differ
diff --git a/odoo_website_helpdesk/static/description/assets/screenshots/teams.png b/odoo_website_helpdesk/static/description/assets/screenshots/teams.png
new file mode 100644
index 000000000..5a25c2c42
Binary files /dev/null and b/odoo_website_helpdesk/static/description/assets/screenshots/teams.png differ
diff --git a/odoo_website_helpdesk/static/description/assets/screenshots/ticket.png b/odoo_website_helpdesk/static/description/assets/screenshots/ticket.png
new file mode 100644
index 000000000..fb42133f2
Binary files /dev/null and b/odoo_website_helpdesk/static/description/assets/screenshots/ticket.png differ
diff --git a/odoo_website_helpdesk/static/description/assets/screenshots/types.png b/odoo_website_helpdesk/static/description/assets/screenshots/types.png
new file mode 100644
index 000000000..b9c9ca218
Binary files /dev/null and b/odoo_website_helpdesk/static/description/assets/screenshots/types.png differ
diff --git a/odoo_website_helpdesk/static/description/assets/screenshots/v16-hero.gif b/odoo_website_helpdesk/static/description/assets/screenshots/v16-hero.gif
new file mode 100644
index 000000000..a49a30854
Binary files /dev/null and b/odoo_website_helpdesk/static/description/assets/screenshots/v16-hero.gif differ
diff --git a/odoo_website_helpdesk/static/description/assets/y18.jpg b/odoo_website_helpdesk/static/description/assets/y18.jpg
deleted file mode 100644
index eea1714f2..000000000
Binary files a/odoo_website_helpdesk/static/description/assets/y18.jpg and /dev/null differ
diff --git a/odoo_website_helpdesk/static/description/banner.jpg b/odoo_website_helpdesk/static/description/banner.jpg
deleted file mode 100644
index ccfb168db..000000000
Binary files a/odoo_website_helpdesk/static/description/banner.jpg and /dev/null differ
diff --git a/odoo_website_helpdesk/static/description/banner.png b/odoo_website_helpdesk/static/description/banner.png
new file mode 100644
index 000000000..e90228872
Binary files /dev/null and b/odoo_website_helpdesk/static/description/banner.png differ
diff --git a/odoo_website_helpdesk/static/description/icon.png b/odoo_website_helpdesk/static/description/icon.png
index 0a91806ff..a58b3d431 100644
Binary files a/odoo_website_helpdesk/static/description/icon.png and b/odoo_website_helpdesk/static/description/icon.png differ
diff --git a/odoo_website_helpdesk/static/description/index.html b/odoo_website_helpdesk/static/description/index.html
index be4e8a1e9..04a7925e6 100644
--- a/odoo_website_helpdesk/static/description/index.html
+++ b/odoo_website_helpdesk/static/description/index.html
@@ -1,1526 +1,764 @@
-
-
-
-
-
- Website Helpdesk Support Ticket Management
-
-
-
-
-
-
-
-
-
-
-
In the "Configuration" menu, you can see "Teams" to allocate teams to Helpdesk Tickets. To create a new team, select the "NEW" button.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
This is the Helpdesk Teams form, where you can configure the team.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Under the tab "Other Information" on the Helpdesk Ticket form view, there is a "Helpdesk Team" option where we can mention the matching team to the Helpdesk ticket.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Helpdesk
- Tags
-
-
-
-
In the "Configuration" menu, you can see "Tags" to allocate tags to Helpdesk Tickets.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Using the "NEW" button you can create new tags.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- On the Helpdesk Ticket form view, there is a "Tags" option where we can mention the matching tags to the Helpdesk ticket.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Helpdesk
- Stages
-
-
-
-
In the "Configuration" menu, you can see "Stages" to allocate stages to Helpdesk Tickets. Using the "NEW" button you can create new stages.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
On the Helpdesk Ticket form view, we can see the stages of the tickets based on the settings we configured in the Configuration.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Helpdesk
- Types.
-
-
-
-
In the "Configuration" menu, you can see "Types" to allocate types to Helpdesk Tickets. Using the "NEW" button you can create new types.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
On the Helpdesk Ticket form view, there is a "Ticket Type" option where we can mention the matching type to the Helpdesk ticket.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Create
- Tasks
-
-
-
-
The option "Create Tasks" may be found in the "Configuration > Settings" menu; by enabling it, you can generate tasks from the Helpdesk Ticket.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
To create the task from the helpdesk ticket form view, enable the "Create Task" option and select the "Service Product".
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
You may also produce a bill for a helpdesk ticket by activating the "Billable" option.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Categories
-
-
-
-
The option "Categories" may be found in the "Configuration > Settings" menu; by enabling it, you will get an additional menu as "Categories" in the "Configuration" menu.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
You can also create new "Categories" from the "NEW" button.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
In the Helpdesk Ticket form view under the "Other Information" tab you will have the option called "Category" there you can mention the corresponding category to the Helpdesk Ticket.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Helpdesk
- Menu
-
-
-
-
The option "Helpdesk Menu" may be found in the "Configuration > Settings" menu; by enabling it, you create the helpdesk ticket through odoo website.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Then you can see a new option as "Helpdesk" in the odoo website. So you can enter the relevant datas for the helpdesk ticket.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
After completing the details regarding the helpdesk ticket. You can click on the "Submit" button.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Then you may see the ticket's Reference Code in the Thank You page that appears when the helpdesk ticket is generated.
-
-
A confirmation email will be sent to the customer upon ticket creation.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Product on
- Website
-
-
-
-
The option "Product on Website" may be found in the "Configuration > Settings" menu; by enabling it, you can select the product along with helpdesk ticket.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
As you can see on the website form view for creating the helpdesk ticket, a new option has been added as "Products" to add the products to the helpdesk ticket while this option is enabled.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Auto Close
- Ticket
-
-
-
-
Enable the "Auto Close Ticket" option in the "Configuration > Settings" menu to automatically close tickets when the number of days reaches a certain threshold specified in the "No of Days" field.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Close
- Stage
-
-
-
-
The option "Close Stage" may be found in the "Configuration > Settings" menu; by configuring it, you can select default closing stage for the helpdesk ticket.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Reply
- Template
-
-
-
-
The option "Reply Template" may be found in the "Configuration > Settings" menu; by configuring it, you can select default Reply Template for the helpdesk ticket.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Report
-
-
-
-
The "Report" option displays the ticket reports.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Website Ticket Creation.
-
+
+
+
+
+
+
+ Our Services
+
+
+
+
+
+
+
+
+
+ Odoo
+ Customization
+
-
-
-
-
-
-
-
-
-
View created tickets from portal.
-
-
-
-
-
-
-
-
-
-
Create Tasks for the project linked to the Ticket.
-
-
-
-
-
-
-
-
-
-
Link a project to the Ticket and invoice based on the tasks timesheet.
-
-
-
-
-
-
-
-
-
-
Tickets can be viewed and managed from backend
-
-
-
-
-
-
-
-
-
-
Customise stages or use predefined stages for seeing the status of ticket
-
-
-
-
-
-
+
diff --git a/odoo_website_helpdesk/static/src/cdn/.browserslistrc b/odoo_website_helpdesk/static/src/cdn/.browserslistrc
new file mode 100644
index 000000000..9f18c9fb6
--- /dev/null
+++ b/odoo_website_helpdesk/static/src/cdn/.browserslistrc
@@ -0,0 +1,10 @@
+> 0.25%
+not dead
+Chrome >= 45
+Firefox >= 38
+Edge >= 12
+Explorer >= 10
+iOS >= 9
+Safari >= 9
+Android >= 4.4
+Opera >= 30
\ No newline at end of file
diff --git a/odoo_website_helpdesk/static/src/cdn/.deepsource.toml b/odoo_website_helpdesk/static/src/cdn/.deepsource.toml
new file mode 100644
index 000000000..8c0ec867e
--- /dev/null
+++ b/odoo_website_helpdesk/static/src/cdn/.deepsource.toml
@@ -0,0 +1,5 @@
+version = 1
+
+[[analyzers]]
+name = "javascript"
+enabled = true
\ No newline at end of file
diff --git a/odoo_website_helpdesk/static/src/cdn/.editorconfig b/odoo_website_helpdesk/static/src/cdn/.editorconfig
new file mode 100644
index 000000000..88bf97c50
--- /dev/null
+++ b/odoo_website_helpdesk/static/src/cdn/.editorconfig
@@ -0,0 +1,12 @@
+# EditorConfig is awesome: https://EditorConfig.org
+
+# top-most EditorConfig file
+root = true
+
+[*]
+indent_style = space
+indent_size = 2
+end_of_line = crlf
+charset = utf-8
+trim_trailing_whitespace = false
+insert_final_newline = false
\ No newline at end of file
diff --git a/odoo_website_helpdesk/static/src/cdn/.eslintrc b/odoo_website_helpdesk/static/src/cdn/.eslintrc
new file mode 100644
index 000000000..ce03e3170
--- /dev/null
+++ b/odoo_website_helpdesk/static/src/cdn/.eslintrc
@@ -0,0 +1,25 @@
+{
+ "env": {
+ "es6": true,
+ "browser": true
+ },
+ "ignorePatterns": ["**/*.min.js", "gpr-hack.js"],
+ "extends": "eslint:recommended",
+ "rules": {
+ "no-extra-boolean-cast": "error",
+ "semi": "error",
+ "no-var": "error",
+ "object-shorthand": "error",
+ "prefer-template": "error",
+ "radix": "error",
+ "eqeqeq": "error",
+ "default-case": "error",
+ "prefer-arrow-callback": "error",
+ "no-param-reassign": "error",
+ "prefer-destructuring": "error",
+ "dot-location": ["error", "property"],
+ "no-shadow": "error",
+ "no-implicit-coercion": "off",
+ "no-throw-literal": "error"
+ }
+}
\ No newline at end of file
diff --git a/odoo_website_helpdesk/static/src/cdn/.github/CODEOWNERS b/odoo_website_helpdesk/static/src/cdn/.github/CODEOWNERS
new file mode 100644
index 000000000..e9fd6e493
--- /dev/null
+++ b/odoo_website_helpdesk/static/src/cdn/.github/CODEOWNERS
@@ -0,0 +1 @@
+* @Zenoo
\ No newline at end of file
diff --git a/odoo_website_helpdesk/static/src/cdn/.github/workflows/codeql-analysis.yml b/odoo_website_helpdesk/static/src/cdn/.github/workflows/codeql-analysis.yml
new file mode 100644
index 000000000..a30e01d0e
--- /dev/null
+++ b/odoo_website_helpdesk/static/src/cdn/.github/workflows/codeql-analysis.yml
@@ -0,0 +1,72 @@
+# For most projects, this workflow file will not need changing; you simply need
+# to commit it to your repository.
+#
+# You may wish to alter this file to override the set of languages analyzed,
+# or to provide custom queries or build logic.
+#
+# ******** NOTE ********
+# We have attempted to detect the languages in your repository. Please check
+# the `language` matrix defined below to confirm you have the correct set of
+# supported CodeQL languages.
+#
+name: "CodeQL"
+
+on:
+ push:
+ branches: [ master ]
+ pull_request:
+ # The branches below must be a subset of the branches above
+ branches: [ master ]
+ schedule:
+ - cron: '15 14 * * 5'
+
+jobs:
+ analyze:
+ name: Analyze
+ runs-on: ubuntu-latest
+ permissions:
+ actions: read
+ contents: read
+ security-events: write
+
+ strategy:
+ fail-fast: false
+ matrix:
+ language: [ 'javascript' ]
+ # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ]
+ # Learn more:
+ # https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed
+
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v2
+
+ # Initializes the CodeQL tools for scanning.
+ - name: Initialize CodeQL
+ uses: github/codeql-action/init@v1
+ with:
+ languages: ${{ matrix.language }}
+ paths-ignore: "docs"
+ # If you wish to specify custom queries, you can do so here or in a config file.
+ # By default, queries listed here will override any specified in a config file.
+ # Prefix the list here with "+" to use these queries and those in the config file.
+ # queries: ./path/to/local/query, your-org/your-repo/queries@main
+
+ # Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
+ # If this step fails, then you should remove it and run the build manually (see below)
+ - name: Autobuild
+ uses: github/codeql-action/autobuild@v1
+
+ # ℹ️ Command-line programs to run using the OS shell.
+ # 📚 https://git.io/JvXDl
+
+ # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
+ # and modify them (or add more) to build your code if your project
+ # uses a compiled language
+
+ #- run: |
+ # make bootstrap
+ # make release
+
+ - name: Perform CodeQL Analysis
+ uses: github/codeql-action/analyze@v1
\ No newline at end of file
diff --git a/odoo_website_helpdesk/static/src/cdn/.github/workflows/github-release-publish.yml b/odoo_website_helpdesk/static/src/cdn/.github/workflows/github-release-publish.yml
new file mode 100644
index 000000000..1071ec06b
--- /dev/null
+++ b/odoo_website_helpdesk/static/src/cdn/.github/workflows/github-release-publish.yml
@@ -0,0 +1,43 @@
+name: GitHub Release
+
+on:
+ push:
+ tags:
+ - 'v*.*.*'
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v2
+ - name: Release
+ uses: softprops/action-gh-release@v1
+ with:
+ body: |
+ See [CHANGELOG.md](./CHANGELOG.md) for changes.
+ draft: false
+ prerelease: false
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+
+ - uses: actions/checkout@v2
+ - uses: actions/setup-node@v2
+ with:
+ node-version: 14
+ registry-url: 'https://registry.npmjs.org'
+ - run: npm ci
+ - run: npm publish
+ env:
+ NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
+ - uses: actions/checkout@v2
+ - uses: actions/setup-node@v2
+ with:
+ node-version: 14
+ registry-url: https://npm.pkg.github.com/
+ scope: "@hemantnegi"
+ - run: node gpr-hack.js
+ - run: npm ci
+ - run: npm publish
+ env:
+ NODE_AUTH_TOKEN: ${{secrets.GITHUB_TOKEN}}
\ No newline at end of file
diff --git a/odoo_website_helpdesk/static/src/cdn/.gitignore b/odoo_website_helpdesk/static/src/cdn/.gitignore
new file mode 100644
index 000000000..7e087fe57
--- /dev/null
+++ b/odoo_website_helpdesk/static/src/cdn/.gitignore
@@ -0,0 +1,2 @@
+.idea/
+node_modules
diff --git a/odoo_website_helpdesk/static/src/cdn/.vscode/settings.json b/odoo_website_helpdesk/static/src/cdn/.vscode/settings.json
new file mode 100644
index 000000000..4447fe32e
--- /dev/null
+++ b/odoo_website_helpdesk/static/src/cdn/.vscode/settings.json
@@ -0,0 +1,3 @@
+{
+ "es6-css-minify.minifyOnSave": "no"
+}
\ No newline at end of file
diff --git a/odoo_website_helpdesk/static/src/cdn/CHANGELOG.md b/odoo_website_helpdesk/static/src/cdn/CHANGELOG.md
new file mode 100644
index 000000000..530d22dd8
--- /dev/null
+++ b/odoo_website_helpdesk/static/src/cdn/CHANGELOG.md
@@ -0,0 +1,362 @@
+# Changelog
+
+All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
+
+### [3.4.8](https://github.com/HemantNegi/jquery.sumoselect/compare/v3.4.7...v3.4.8) (2022-07-29)
+
+### [3.4.7](https://github.com/HemantNegi/jquery.sumoselect/compare/v3.4.6...v3.4.7) (2022-07-29)
+
+
+### Bug Fixes
+
+* Placeholder text not in sync with `triggerChangeCombined` set to `false`. Fixes [#331](https://github.com/HemantNegi/jquery.sumoselect/issues/331) ([b24ff0f](https://github.com/HemantNegi/jquery.sumoselect/commit/b24ff0fced30b98c75513a13808ce7444360b076))
+
+### [3.4.6](https://github.com/HemantNegi/jquery.sumoselect/compare/v3.4.5...v3.4.6) (2022-04-15)
+
+
+### Bug Fixes
+
+* Select all not working on mobile. [#323](https://github.com/HemantNegi/jquery.sumoselect/issues/323) ([aacfa2e](https://github.com/HemantNegi/jquery.sumoselect/commit/aacfa2e805b22d5530cc0610b1ce319910fa38cb))
+
+### [3.4.5](https://github.com/HemantNegi/jquery.sumoselect/compare/v3.4.4...v3.4.5) (2022-02-10)
+
+
+### Bug Fixes
+
+* Update npm dependencies ([d567466](https://github.com/HemantNegi/jquery.sumoselect/commit/d567466c127a320ded7ffbcbcacbd89f89c16fa7))
+
+### [3.4.4](https://github.com/HemantNegi/jquery.sumoselect/compare/v3.4.3...v3.4.4) (2022-02-10)
+
+### [3.4.3](https://github.com/HemantNegi/jquery.sumoselect/compare/v3.4.2...v3.4.3) (2022-02-09)
+
+
+### Bug Fixes
+
+* Rename isCloseAfterClearAll to closeAfterClearAll ([046fe2d](https://github.com/HemantNegi/jquery.sumoselect/commit/046fe2d68acd0df8d295ed77fc2ea26842d15623))
+
+### [3.4.2](https://github.com/HemantNegi/jquery.sumoselect/compare/v3.4.1...v3.4.2) (2022-01-04)
+
+
+### Bug Fixes
+
+* Console cleanup ([a43da6a](https://github.com/HemantNegi/jquery.sumoselect/commit/a43da6a7b80abe469cb82e550adbbff7f2474e3f))
+
+### [3.4.1](https://github.com/HemantNegi/jquery.sumoselect/compare/v3.4.0...v3.4.1) (2022-01-04)
+
+
+### Bug Fixes
+
+* Select disappearing on reload on mobile. Fixes [#318](https://github.com/HemantNegi/jquery.sumoselect/issues/318) ([dd8ce18](https://github.com/HemantNegi/jquery.sumoselect/commit/dd8ce1830fe1f71af4e754fc2f4c3b8dea6a27bd))
+
+## [3.4.0](https://github.com/HemantNegi/jquery.sumoselect/compare/v3.3.30...v3.4.0) (2022-01-04)
+
+
+### Features
+
+* New selectAllPartialCheck option ([db9dc39](https://github.com/HemantNegi/jquery.sumoselect/commit/db9dc39bdc449eee10b5b4d614d0a78887ed401f))
+
+### [3.3.30](https://github.com/HemantNegi/jquery.sumoselect/compare/v3.3.29...v3.3.30) (2021-10-30)
+
+
+### Bug Fixes
+
+* Force event bubbling up.Fixes [#316](https://github.com/HemantNegi/jquery.sumoselect/issues/316) ([620ba23](https://github.com/HemantNegi/jquery.sumoselect/commit/620ba2334e3e5a836434b2378fe7dcf16fc68948))
+
+### [3.3.29](https://github.com/HemantNegi/jquery.sumoselect/compare/v3.3.28...v3.3.29) (2021-09-02)
+
+
+### Bug Fixes
+
+* Search text not showing up. Fixes [#312](https://github.com/HemantNegi/jquery.sumoselect/issues/312) ([a7ed02c](https://github.com/HemantNegi/jquery.sumoselect/commit/a7ed02c9caeceb2c882715b8ab884bbf073fd2d1))
+
+### [3.3.28](https://github.com/HemantNegi/jquery.sumoselect/compare/v3.3.27...v3.3.28) (2021-08-10)
+
+
+### Bug Fixes
+
+* Placeholder not changing on click on select all. Fixes [#311](https://github.com/HemantNegi/jquery.sumoselect/issues/311) ([569faf7](https://github.com/HemantNegi/jquery.sumoselect/commit/569faf7dfd48d3247142b9f1b175086d21230497))
+
+### [3.3.27](https://github.com/HemantNegi/jquery.sumoselect/compare/v3.3.26...v3.3.27) (2021-08-04)
+
+### [3.3.26](https://github.com/HemantNegi/jquery.sumoselect/compare/v3.3.25...v3.3.26) (2021-07-12)
+
+
+### Bug Fixes
+
+* Warning on IE. [#307](https://github.com/HemantNegi/jquery.sumoselect/issues/307) ([0e96ea6](https://github.com/HemantNegi/jquery.sumoselect/commit/0e96ea67ead1d0cb78713f0c9fa90f2d5d81e885))
+
+### [3.3.25](https://github.com/HemantNegi/jquery.sumoselect/compare/v3.3.24...v3.3.25) (2021-07-12)
+
+
+### Bug Fixes
+
+* Error on IE. Fixes [#307](https://github.com/HemantNegi/jquery.sumoselect/issues/307) ([bb785d1](https://github.com/HemantNegi/jquery.sumoselect/commit/bb785d179e531c89f254ead2845d8ba6dd6052c4))
+
+### [3.3.24](https://github.com/HemantNegi/jquery.sumoselect/compare/v3.3.23...v3.3.24) (2021-07-05)
+
+
+### Bug Fixes
+
+* Reselect preselected options for IE too. Fixes [#306](https://github.com/HemantNegi/jquery.sumoselect/issues/306) ([88c444c](https://github.com/HemantNegi/jquery.sumoselect/commit/88c444c00da6229cfb58f24f74ead0ffceb8d4de))
+
+### [3.3.23](https://github.com/HemantNegi/jquery.sumoselect/compare/v3.3.22...v3.3.23) (2021-07-05)
+
+
+### Bug Fixes
+
+* Bug where you can't initialize sumo with multiple options selected. Fixes [#306](https://github.com/HemantNegi/jquery.sumoselect/issues/306) ([1691d71](https://github.com/HemantNegi/jquery.sumoselect/commit/1691d713b5b692f6a89e10124cd782d68513a9ee))
+
+### [3.3.22](https://github.com/HemantNegi/jquery.sumoselect/compare/v3.3.21...v3.3.22) (2021-06-30)
+
+### [3.3.21](https://github.com/HemantNegi/jquery.sumoselect/compare/v3.3.20...v3.3.21) (2021-06-27)
+
+
+### Bug Fixes
+
+* No uppercases in scope ([425bc1e](https://github.com/HemantNegi/jquery.sumoselect/commit/425bc1e5d5a780aae770397144f635aed1ae4ce1))
+
+### [3.3.20](https://github.com/HemantNegi/jquery.sumoselect/compare/v3.3.19...v3.3.20) (2021-06-27)
+
+
+### Bug Fixes
+
+* package.json access point in GPR hack ([bbea8fb](https://github.com/HemantNegi/jquery.sumoselect/commit/bbea8fb4811a197a82539099a46420cdbc595bd1))
+
+### [3.3.19](https://github.com/HemantNegi/jquery.sumoselect/compare/v3.3.18...v3.3.19) (2021-06-27)
+
+
+### Bug Fixes
+
+* Wrong package.json link ([50a6229](https://github.com/HemantNegi/jquery.sumoselect/commit/50a62294832a63ac86eb4c6408b795d8ca104b76))
+
+### [3.3.18](https://github.com/HemantNegi/jquery.sumoselect/compare/v3.3.17...v3.3.18) (2021-06-27)
+
+
+### Bug Fixes
+
+* GPR hack mjs to js ([e577ecd](https://github.com/HemantNegi/jquery.sumoselect/commit/e577ecdcd3221b541086941d5ef7016d64d1487d))
+
+### [3.3.17](https://github.com/HemantNegi/jquery.sumoselect/compare/v3.3.16...v3.3.17) (2021-06-27)
+
+
+### Bug Fixes
+
+* Remove permission specifications ([b54e7d5](https://github.com/HemantNegi/jquery.sumoselect/commit/b54e7d5c6ae6837969be6a61f15dd2fc8714b64a))
+
+### [3.3.16](https://github.com/HemantNegi/jquery.sumoselect/compare/v3.3.15...v3.3.16) (2021-06-27)
+
+
+### Bug Fixes
+
+* Update node for npm publish run ([87f3b64](https://github.com/HemantNegi/jquery.sumoselect/commit/87f3b64e1cdb0adbd47c071a3bcde3abb27471be))
+
+### [3.3.15](https://github.com/HemantNegi/jquery.sumoselect/compare/v3.3.14...v3.3.15) (2021-06-27)
+
+
+### Bug Fixes
+
+* Package name & scope ([87f8c9d](https://github.com/HemantNegi/jquery.sumoselect/commit/87f8c9d87bfd0a0cf1f7344bf0519965c577e615))
+
+### [3.3.14](https://github.com/HemantNegi/jquery.sumoselect/compare/v3.3.13...v3.3.14) (2021-06-27)
+
+
+### Bug Fixes
+
+* GIthub package name ([846652c](https://github.com/HemantNegi/jquery.sumoselect/commit/846652c0af5244087b8ee29528ce78028e98b6d2))
+
+### [3.3.13](https://github.com/HemantNegi/jquery.sumoselect/compare/v3.3.12...v3.3.13) (2021-06-27)
+
+
+### Bug Fixes
+
+* publish script fix ([08a6d95](https://github.com/HemantNegi/jquery.sumoselect/commit/08a6d956a80138ba99bd298aa8427bfd2b508d9b))
+
+### [3.3.12](https://github.com/HemantNegi/jquery.sumoselect/compare/v3.3.11...v3.3.12) (2021-06-27)
+
+### [3.3.11](https://github.com/HemantNegi/jquery.sumoselect/compare/v3.3.10...v3.3.11) (2021-06-27)
+
+
+### Bug Fixes
+
+* Destructuring errors ([0008972](https://github.com/HemantNegi/jquery.sumoselect/commit/00089724651d4c536833845f920d819ad30182f2))
+* Enforce default in switches ([5fdf684](https://github.com/HemantNegi/jquery.sumoselect/commit/5fdf6841dd30bf8eb644e66cdad2bc2de5c4be3e))
+* no extra boolean cast ([afbbe29](https://github.com/HemantNegi/jquery.sumoselect/commit/afbbe29712d3ceeed1f951bb20d428f06f5d9e2e))
+* No param reassign ([26d5d60](https://github.com/HemantNegi/jquery.sumoselect/commit/26d5d608ba58157e845f1d4728a09b196958b380))
+* No shadow declarations ([5e25c58](https://github.com/HemantNegi/jquery.sumoselect/commit/5e25c58ec90b353563db8164797e0c7b9a08b323))
+* Throw errors instead of literals ([006ebf8](https://github.com/HemantNegi/jquery.sumoselect/commit/006ebf87e09ff454074beb812491386f83b1bdce))
+* Use `let` or `const` over `var` ([80fbe29](https://github.com/HemantNegi/jquery.sumoselect/commit/80fbe2941ac9ecbf6a5e5e0ff7bc26d12628dccd))
+* Use arrow functions where possible ([c9eee06](https://github.com/HemantNegi/jquery.sumoselect/commit/c9eee066a92dbea4c14a2740ade44192b3c76077))
+* Use destructuring ([c9758b1](https://github.com/HemantNegi/jquery.sumoselect/commit/c9758b189fde438b7c29d4a0fbbed7586f001695))
+* Use object shorthands ([b0fd988](https://github.com/HemantNegi/jquery.sumoselect/commit/b0fd98858fb9bbd740a99b2b172751cf2d0abeca))
+* Use parseInt shorthand ([00811a1](https://github.com/HemantNegi/jquery.sumoselect/commit/00811a1410538e4877dcb61720899225db2dbb31))
+* Use strict equality operators ([69ffb8a](https://github.com/HemantNegi/jquery.sumoselect/commit/69ffb8af00827190d37cb838468d1d5f094a3284))
+* Use template literals ([a26fd19](https://github.com/HemantNegi/jquery.sumoselect/commit/a26fd197f8413f0608e62c1147ee64c51aa5ceab))
+
+### [3.3.10](https://github.com/HemantNegi/jquery.sumoselect/compare/v3.3.9...v3.3.10) (2021-06-20)
+
+### [3.3.9](https://github.com/HemantNegi/jquery.sumoselect/compare/v3.3.8...v3.3.9) (2021-06-20)
+
+
+### Bug Fixes
+
+* Remove unwanted class after unload ([2b98214](https://github.com/HemantNegi/jquery.sumoselect/commit/2b982143f571477128ca921d8db303cf8accefee))
+
+### [3.3.8](https://github.com/HemantNegi/jquery.sumoselect/compare/v3.3.7...v3.3.8) (2021-06-20)
+
+
+### Bug Fixes
+
+* Hide opt groups with no matches on search. Fixes [#242](https://github.com/HemantNegi/jquery.sumoselect/issues/242) ([276d4ce](https://github.com/HemantNegi/jquery.sumoselect/commit/276d4ce5439686148781becc1e6606fea01e2ff6))
+
+### [3.3.7](https://github.com/HemantNegi/jquery.sumoselect/compare/v3.3.6...v3.3.7) (2021-06-20)
+
+
+### Bug Fixes
+
+* unSelectAll on single select. Fixes [#238](https://github.com/HemantNegi/jquery.sumoselect/issues/238) ([c60c8c4](https://github.com/HemantNegi/jquery.sumoselect/commit/c60c8c43d04645b14a75c8d484238ba3a184ad69))
+
+### [3.3.6](https://github.com/HemantNegi/jquery.sumoselect/compare/v3.3.5...v3.3.6) (2021-06-20)
+
+
+### Bug Fixes
+
+* Wrong li selection. Fixes [#227](https://github.com/HemantNegi/jquery.sumoselect/issues/227) ([10dab24](https://github.com/HemantNegi/jquery.sumoselect/commit/10dab243aa7f91ac457598b5127373c2256fcb69))
+
+### [3.3.5](https://github.com/HemantNegi/jquery.sumoselect/compare/v3.3.4...v3.3.5) (2021-06-20)
+
+
+### Bug Fixes
+
+* Stop form autocompletion on searches. Fixes [#223](https://github.com/HemantNegi/jquery.sumoselect/issues/223) ([7d298be](https://github.com/HemantNegi/jquery.sumoselect/commit/7d298beaf055ed8f74ba8bb7e20305323f054e99))
+
+### [3.3.4](https://github.com/HemantNegi/jquery.sumoselect/compare/v3.3.3...v3.3.4) (2021-06-20)
+
+
+### Bug Fixes
+
+* IE resetting selectedIndex from -1 to 0. Fixes [#221](https://github.com/HemantNegi/jquery.sumoselect/issues/221) ([8629388](https://github.com/HemantNegi/jquery.sumoselect/commit/8629388db1e0f86d827e7aba7d6ccfc42ef093c5))
+
+### [3.3.3](https://github.com/HemantNegi/jquery.sumoselect/compare/v3.3.2...v3.3.3) (2021-06-20)
+
+
+### Bug Fixes
+
+* Multiple :not selector not supported in IE / Safari. Fixes [#216](https://github.com/HemantNegi/jquery.sumoselect/issues/216) ([b553b91](https://github.com/HemantNegi/jquery.sumoselect/commit/b553b912116d59dd325fea8a3373b8da593680f0))
+
+### [3.3.2](https://github.com/HemantNegi/jquery.sumoselect/compare/v3.3.1...v3.3.2) (2021-06-20)
+
+
+### Bug Fixes
+
+* Optimize selectAll/ unSelectAll performance. Fixes [#209](https://github.com/HemantNegi/jquery.sumoselect/issues/209) ([91aba7b](https://github.com/HemantNegi/jquery.sumoselect/commit/91aba7b1139fb4df1b0cb9a7fcc7d1197a3a6967))
+
+### [3.3.1](https://github.com/HemantNegi/jquery.sumoselect/compare/v3.3.0...v3.3.1) (2021-06-20)
+
+
+### Bug Fixes
+
+* csvDispCount displaying one less than planned. Fixes [#267](https://github.com/HemantNegi/jquery.sumoselect/issues/267) ([dd00654](https://github.com/HemantNegi/jquery.sumoselect/commit/dd0065450620e4ee147306de1e9a14ac40e1b999))
+* Trailing comma in placeholder ([fdfe2cd](https://github.com/HemantNegi/jquery.sumoselect/commit/fdfe2cde1cf7123688043b2e293d1a08c50e52de))
+
+## [3.3.0](https://github.com/HemantNegi/jquery.sumoselect/compare/v3.2.6...v3.3.0) (2021-06-20)
+
+
+### Features
+
+* New custom `
` renderer. Fixes [#272](https://github.com/HemantNegi/jquery.sumoselect/issues/272) ([d0ffdfb](https://github.com/HemantNegi/jquery.sumoselect/commit/d0ffdfb79a1b9dc59bb12a0c07676c255a8bf53d))
+
+### [3.2.6](https://github.com/HemantNegi/jquery.sumoselect/compare/v3.2.5...v3.2.6) (2021-06-19)
+
+### [3.2.5](https://github.com/HemantNegi/jquery.sumoselect/compare/v3.2.4...v3.2.5) (2021-06-19)
+
+### [3.2.4](https://github.com/HemantNegi/jquery.sumoselect/compare/v3.2.3...v3.2.4) (2021-06-19)
+
+### [3.2.3](https://github.com/HemantNegi/jquery.sumoselect/compare/v3.2.2...v3.2.3) (2021-06-19)
+
+
+### Bug Fixes
+
+* XSS vulnerabilities ([cd19c62](https://github.com/HemantNegi/jquery.sumoselect/commit/cd19c625d98858e2d9f6edef3c343d402ddf32bd))
+
+### [3.2.2](https://github.com/HemantNegi/jquery.sumoselect/compare/v3.2.1...v3.2.2) (2021-06-19)
+
+
+### Bug Fixes
+
+* Max settings disabling every option ([8dcf535](https://github.com/HemantNegi/jquery.sumoselect/commit/8dcf5352c66c0f6b310e070693e5a2d8923b6b85))
+
+### [3.2.1](https://github.com/HemantNegi/jquery.sumoselect/compare/v3.2.0...v3.2.1) (2021-06-19)
+
+## [3.2.0](https://github.com/HemantNegi/jquery.sumoselect/compare/v3.1.6...v3.2.0) (2021-06-19)
+
+
+### Features
+
+* New `max` options for maximum number of selected options. Fixes [#268](https://github.com/HemantNegi/jquery.sumoselect/issues/268) ([a973aaf](https://github.com/HemantNegi/jquery.sumoselect/commit/a973aaf0b68de650ef3a84f0c47f4bdfdb07090b))
+
+### [3.1.6](https://github.com/HemantNegi/jquery.sumoselect/compare/v3.1.5...v3.1.6) (2021-06-17)
+
+
+### Bug Fixes
+
+* CSS update on release + Remove useless files ([71524af](https://github.com/HemantNegi/jquery.sumoselect/commit/71524af391bbad55de5239129982f137926b2854))
+* Stop copying missing file ([586ea5b](https://github.com/HemantNegi/jquery.sumoselect/commit/586ea5b07d2686a5c5510d3844a179fb6a019478))
+
+### [3.1.5](https://github.com/HemantNegi/jquery.sumoselect/compare/v3.1.4...v3.1.5) (2021-06-17)
+
+
+### Bug Fixes
+
+* Stop force focusing the select after close. Fixes [#277](https://github.com/HemantNegi/jquery.sumoselect/issues/277) ([ce71b8b](https://github.com/HemantNegi/jquery.sumoselect/commit/ce71b8bf1d3816674347fd9ad607de1773f4dd55))
+
+### [3.1.4](https://github.com/HemantNegi/jquery.sumoselect/compare/v3.1.3...v3.1.4) (2021-06-17)
+
+
+### Bug Fixes
+
+* Ignore minified files with eslint ([5e4691d](https://github.com/HemantNegi/jquery.sumoselect/commit/5e4691d471e49da06de51af67147f5910998f296))
+
+### [3.1.3](https://github.com/HemantNegi/jquery.sumoselect/compare/v3.1.2...v3.1.3) (2021-06-17)
+
+
+### Bug Fixes
+
+* Remove uglify & browserify ([0c207eb](https://github.com/HemantNegi/jquery.sumoselect/commit/0c207ebd0eca1381b2aaf2f3de4e1822ab3d87bf))
+* Use babel preset env ([be9d3db](https://github.com/HemantNegi/jquery.sumoselect/commit/be9d3dbbd87c659a62c0b861ffd0556a12965a75))
+
+### [3.1.2](https://github.com/HemantNegi/jquery.sumoselect/compare/v3.1.1...v3.1.2) (2021-06-17)
+
+### [3.1.1](https://github.com/HemantNegi/jquery.sumoselect/compare/v3.1.0...v3.1.1) (2021-06-17)
+
+
+### Bug Fixes
+
+* Git not committing files ([3f6f90d](https://github.com/HemantNegi/jquery.sumoselect/commit/3f6f90d43718ddc33f8089a6a3a3ede669e4990a))
+* IE compatible minification ([f22242f](https://github.com/HemantNegi/jquery.sumoselect/commit/f22242f0df0beaa2d503e29d33a7cc069f6acf5c))
+
+## [3.1.0](https://github.com/HemantNegi/jquery.sumoselect/compare/v3.0.6...v3.1.0) (2021-06-17)
+
+
+### Features
+
+* Pass origin class to generated element. Fixes [#294](https://github.com/HemantNegi/jquery.sumoselect/issues/294) ([6cd3963](https://github.com/HemantNegi/jquery.sumoselect/commit/6cd3963639ca3108c0cb3efcd3d67515d08d2607))
+
+### [3.0.6](https://github.com/HemantNegi/jquery.sumoselect/compare/v3.0.5...v3.0.6) (2021-06-17)
+
+
+### Bug Fixes
+
+* Selected options on safari ([c759fd3](https://github.com/HemantNegi/jquery.sumoselect/commit/c759fd384cf4084d5309edb29427540f01290c6f))
+
+### [3.0.5](https://github.com/HemantNegi/jquery.sumoselect/compare/v3.0.4...v3.0.5) (2021-06-17)
+
+### [3.0.4](https://github.com/HemantNegi/jquery.sumoselect/compare/v3.0.2...v3.0.4) (2021-06-17)
+
+
+### Bug Fixes
+
+* Add 'var' for vars sels and i ([e94bfb3](https://github.com/HemantNegi/jquery.sumoselect/commit/e94bfb3f84ceab339119e2edb2d26ddb67384e8c))
+* Don't fail script if nothing to commit ([9192fc5](https://github.com/HemantNegi/jquery.sumoselect/commit/9192fc5badcd5cbabc52e0a964b6c817fcdd6935))
+* Typo ([78f9f7a](https://github.com/HemantNegi/jquery.sumoselect/commit/78f9f7aae57078c5cb967c9a452a7e87ee9d1549))
+* Update minified files ([a623e94](https://github.com/HemantNegi/jquery.sumoselect/commit/a623e946ded96b133a1173af108d251d7db2ea72))
+* var i ([e564c6d](https://github.com/HemantNegi/jquery.sumoselect/commit/e564c6d28087b81fe35adb1aba198a7d83b2e2d8))
diff --git a/odoo_website_helpdesk/static/src/cdn/README.md b/odoo_website_helpdesk/static/src/cdn/README.md
new file mode 100644
index 000000000..55c50c907
--- /dev/null
+++ b/odoo_website_helpdesk/static/src/cdn/README.md
@@ -0,0 +1,220 @@
+jquery.sumoselect
+=============
+
+jquery.sumoselect.js - A beautiful cross device Single/Multi Select jQuery Select plugin.
+-------------------------------------------------------------------------------
+A jQuery plugin that progressively enhances an HTML Select Box into a Single/Multiple option dropdown list. The dropdown list can be fully customizable using simple css.
+It can adapt itself according to any device, keeping in mind that the User Experience is not broken.
+
+# View Live [Demo Here](https://hemantnegi.github.io/jquery.sumoselect/sumoselect_demo.html)
+
+Documentaion [Documentation Here](https://hemantnegi.github.io/jquery.sumoselect/)
+
+Latest stable : [Download from here](https://github.com/HemantNegi/jquery.sumoselect/releases)
+
+**CDNJS**
+
+The folks at CDNJS host a copy of the library. The CDN is updated after the release is made public, which means there is a delay between the publishing of a release and its availability on the CDN, so keep that in mind. Just use these links:
+
+```html
+
+
+
+
+
+```
+
+
+**Notable Features**
+ - Inline Search.
+
+ - Optgroup support.
+
+ - Single and Multi select option.
+
+ - Fully customizable by simple css.
+
+ - Supports almost all devices.
+
+ - Intelligently Renders itself according to the devices.
+
+ - Renders native Single/Multiple pop up on Android, ios, Windows and other devices.
+
+ - Custom postback data format (Multiple select data can be passed either as csv or default select)
+
+ - Selected, Disabled, and Placeholder Support
+
+ - Easily extendable to allow developers to create new widgets
+
+## Requirements
+jQuery 1.8.3+ (It is always recommended to use the latest version of jQuery)
+
+
+## Desktop Browser Support
+IE8+, Firefox 4+, Chrome, Safari 4+, Opera 11+ (Other browsers may work, but I did not test on them)
+
+
+## Mobile/Tablet Browser Support
+iOs 3+, Android 2.1+ , Windows Mobile (Other browsers may work, but I did not test on them)
+
+
+## Forking
+If you find that you need a feature that SumoSelect does not currently support, either let me know via the SumoSelect issue tracker, or fork SumoSelect on Github and easily extend SumoSelect to create your own widget!
+
+## Usage
+
+*To just go with the default options simply do*
+
+```javascript
+$(document).ready(function () {
+ $('.selectBox').SumoSelect();
+});
+```
+
+*To provide optional settings, simply pass a settings object to SumoSelect()*
+
+```javascript
+$(document).ready(function () {
+ $('.selectBox').SumoSelect({
+ placeholder: 'This is a placeholder',
+ csvDispCount: 3
+ });
+});
+```
+
+*You can also use data attributes to set options*
+
+```html
+