| @ -0,0 +1,45 @@ | |||
| .. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg | |||
|     :target: https://www.gnu.org/licenses/agpl-3.0-standalone.html | |||
|     :alt: License: AGPL-3 | |||
| 
 | |||
| Website Helpdesk Dashboard | |||
| ========================== | |||
| *This module provides the dashboard view for the Website Helpdesk Support Ticket Management module* | |||
| 
 | |||
| Installation | |||
| ============ | |||
|     - www.odoo.com/documentation/14.0/setup/install.html | |||
|     - Install our custom addon | |||
| 
 | |||
| License | |||
| ------- | |||
| GNU AFFERO GENERAL PUBLIC LICENSE Version 3 (AGPL v3) | |||
| (https://www.gnu.org/licenses/agpl-3.0-standalone.html) | |||
| 
 | |||
| Company | |||
| ------- | |||
| * `Cybrosys Techno Solutions <https://cybrosys.com/>`__ | |||
| 
 | |||
| Credits | |||
| ------- | |||
| * Developer: (V14) Sruthi MK, Contact: odoo@cybrosys.com | |||
| 
 | |||
| Contacts | |||
| -------- | |||
| * Mail Contact : odoo@cybrosys.com | |||
| 
 | |||
| Bug Tracker | |||
| ----------- | |||
| Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. | |||
| 
 | |||
| Maintainer | |||
| ========== | |||
| .. image:: https://cybrosys.com/images/logo.png | |||
|    :target: https://cybrosys.com | |||
| This module is maintained by Cybrosys Technologies. | |||
| 
 | |||
| For support and more information, please visit https://www.cybrosys.com | |||
| 
 | |||
| Further information | |||
| =================== | |||
| HTML Description: `<static/description/index.html>`__ | |||
| @ -0,0 +1,23 @@ | |||
| # -*- coding: utf-8 -*- | |||
| ############################################################################### | |||
| # | |||
| #    Cybrosys Technologies Pvt. Ltd. | |||
| # | |||
| #    Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) | |||
| #    Author: Cybrosys Techno Solutions (odoo@cybrosys.com) | |||
| # | |||
| #    You can modify it under the terms of the GNU AFFERO | |||
| #    GENERAL PUBLIC LICENSE (AGPL 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 AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. | |||
| # | |||
| #    You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE | |||
| #    (AGPL v3) along with this program. | |||
| #    If not, see <http://www.gnu.org/licenses/>. | |||
| # | |||
| ############################################################################### | |||
| from . import controllers | |||
| from . import models | |||
| @ -0,0 +1,53 @@ | |||
| # -*- coding: utf-8 -*- | |||
| ############################################################################### | |||
| # | |||
| #    Cybrosys Technologies Pvt. Ltd. | |||
| # | |||
| #    Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) | |||
| #    Author: Cybrosys Techno Solutions (odoo@cybrosys.com) | |||
| # | |||
| #    You can modify it under the terms of the GNU AFFERO | |||
| #    GENERAL PUBLIC LICENSE (AGPL 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 AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. | |||
| # | |||
| #    You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE | |||
| #    (AGPL v3) along with this program. | |||
| #    If not, see <http://www.gnu.org/licenses/>. | |||
| # | |||
| ############################################################################### | |||
| { | |||
|     'name': "Website Helpdesk Dashboard", | |||
|     'version': '14.0.1.0.0', | |||
|     'category': 'Website', | |||
|     'summary': 'Website HelpDesk Dashboard module Brings a multipurpose ' | |||
|                'graphical dashboard for Website Helpdesk Support Ticket ' | |||
|                'Management module', | |||
|     'description': 'Helps to show a dashboard view of Website Helpdesk Support ' | |||
|                    'Ticket Management module.We will get the details of ' | |||
|                    'helpdesk teams, received tickets, tickets based on month, ' | |||
|                    'ticket count ratio by teams, tickets by project ratio, ' | |||
|                    'Billed tasks by team ratio, Resolved tickets and  New, ' | |||
|                    'In-progress and Closed tickets.', | |||
|     'author': "Cybrosys Techno Solutions", | |||
|     'company': 'Cybrosys Techno Solutions', | |||
|     'maintainer': 'Cybrosys Techno Solutions', | |||
|     'website': "https://www.cybrosys.com", | |||
|     'depends': ['odoo_website_helpdesk', 'base'], | |||
|     'data': [ | |||
|         'views/help_ticket_views.xml', | |||
|         'views/assets.xml', | |||
|         'views/dashboard_templates.xml' | |||
|     ], | |||
|     'qweb': [ | |||
|         "static/src/xml/helpdesk_dashboard_templates.xml" | |||
|     ], | |||
|     'images': ['static/description/banner.png'], | |||
|     'license': 'AGPL-3', | |||
|     'installable': True, | |||
|     'auto_install': False, | |||
|     'application': False, | |||
| } | |||
| @ -0,0 +1,22 @@ | |||
| # -*- coding: utf-8 -*- | |||
| ############################################################################### | |||
| # | |||
| #    Cybrosys Technologies Pvt. Ltd. | |||
| # | |||
| #    Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) | |||
| #    Author: Cybrosys Techno Solutions (odoo@cybrosys.com) | |||
| # | |||
| #    You can modify it under the terms of the GNU AFFERO | |||
| #    GENERAL PUBLIC LICENSE (AGPL 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 AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. | |||
| # | |||
| #    You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE | |||
| #    (AGPL v3) along with this program. | |||
| #    If not, see <http://www.gnu.org/licenses/>. | |||
| # | |||
| ############################################################################### | |||
| from . import odoo_website_helpdesk_dashboard | |||
| @ -0,0 +1,42 @@ | |||
| # -*- coding: utf-8 -*- | |||
| ############################################################################### | |||
| # | |||
| #    Cybrosys Technologies Pvt. Ltd. | |||
| # | |||
| #    Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) | |||
| #    Author: Cybrosys Techno Solutions (odoo@cybrosys.com) | |||
| # | |||
| #    You can modify it under the terms of the GNU AFFERO | |||
| #    GENERAL PUBLIC LICENSE (AGPL 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 AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. | |||
| # | |||
| #    You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE | |||
| #    (AGPL v3) along with this program. | |||
| #    If not, see <http://www.gnu.org/licenses/>. | |||
| # | |||
| ############################################################################### | |||
| from odoo import http | |||
| from odoo.http import request | |||
| 
 | |||
| 
 | |||
| class HelpDeskTickets(http.Controller): | |||
|     """HelpDeskTickets will be used to provide information about tickets | |||
|      in a dashboard""" | |||
| 
 | |||
|     @http.route(['/help/tickets'], type="json", auth="user") | |||
|     def elearning_snippet(self): | |||
|         """Retrieves help tickets from the database and renders the helpdesk | |||
|          dashboard template. | |||
|         :return: Rendered helpdesk dashboard template as a JSON response.""" | |||
|         tickets = [ | |||
|             {'name': ticket.name, 'subject': ticket.subject, 'id': ticket.id} | |||
|             for ticket in request.env['help.ticket'].sudo().search( | |||
|                 [('stage_id.name', '=', 'Inbox')])] | |||
|         response = http.Response( | |||
|             template='odoo_website_helpdesk_dashboard.dashboard_tickets', | |||
|             qcontext={'h_tickets': tickets}) | |||
|         return response.render() | |||
| @ -0,0 +1,6 @@ | |||
| ## Module <odoo_website_helpdesk_dashboard> | |||
| 
 | |||
| #### 09.08.2023 | |||
| #### Version 14.0.1.0.0 | |||
| #### ADD | |||
| - Initial commit for Website Helpdesk Dashboard | |||
| @ -0,0 +1,22 @@ | |||
| # -*- coding: utf-8 -*- | |||
| ############################################################################### | |||
| # | |||
| #    Cybrosys Technologies Pvt. Ltd. | |||
| # | |||
| #    Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) | |||
| #    Author: Cybrosys Techno Solutions (odoo@cybrosys.com) | |||
| # | |||
| #    You can modify it under the terms of the GNU AFFERO | |||
| #    GENERAL PUBLIC LICENSE (AGPL 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 AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. | |||
| # | |||
| #    You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE | |||
| #    (AGPL v3) along with this program. | |||
| #    If not, see <http://www.gnu.org/licenses/>. | |||
| # | |||
| ############################################################################### | |||
| from . import help_ticket | |||
| @ -0,0 +1,153 @@ | |||
| # -*- coding: utf-8 -*- | |||
| ############################################################################### | |||
| # | |||
| #    Cybrosys Technologies Pvt. Ltd. | |||
| # | |||
| #    Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) | |||
| #    Author: Cybrosys Techno Solutions (odoo@cybrosys.com) | |||
| # | |||
| #    You can modify it under the terms of the GNU AFFERO | |||
| #    GENERAL PUBLIC LICENSE (AGPL 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 AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. | |||
| # | |||
| #    You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE | |||
| #    (AGPL v3) along with this program. | |||
| #    If not, see <http://www.gnu.org/licenses/>. | |||
| # | |||
| ############################################################################### | |||
| import calendar | |||
| from odoo import api, models | |||
| 
 | |||
| 
 | |||
| class HelpTicket(models.Model): | |||
|     """HelpTicket class helps to create new tickets and inside this class | |||
|      it will show the tickets with different stages. Get ticket information | |||
|       easily.""" | |||
|     _inherit = 'help.ticket' | |||
| 
 | |||
|     @api.model | |||
|     def get_tickets_count(self): | |||
|         """Get the count of tickets based on their stages.""" | |||
|         values = { | |||
|             'inbox_count': self.env['help.ticket'].search_count( | |||
|                 [('stage_id.name', 'in', ['Inbox', 'Draft'])]), | |||
|             'progress_count': self.env['help.ticket'].search_count( | |||
|                 [('stage_id.name', '=', 'In Progress')]), | |||
|             'done_count': self.env['help.ticket'].search_count( | |||
|                 [('stage_id.name', '=', 'Done')]), | |||
|             'team_count': self.env['help.team'].search_count([]), | |||
|             'p_tickets': [ticket.name for ticket in | |||
|                           self.env['help.ticket'].search( | |||
|                               [('stage_id.name', 'in', ['Inbox', 'Draft'])])] | |||
|         } | |||
|         return values | |||
| 
 | |||
|     @api.model | |||
|     def get_tickets_view(self): | |||
|         """Get detailed information about tickets.""" | |||
|         values = { | |||
|             'inbox_count': self.env['help.ticket'].search_count( | |||
|                 [('stage_id.name', 'in', ['Inbox', 'Draft'])]), | |||
|             'progress_count': self.env['help.ticket'].search_count( | |||
|                 [('stage_id.name', '=', 'In Progress')]), | |||
|             'done_count': self.env['help.ticket'].search_count( | |||
|                 [('stage_id.name', '=', 'Done')]), | |||
|             'team_count': self.env['help.team'].search_count([]), | |||
|             'new_ticket': ["{} : {}".format(ticket.name, ticket.subject) for | |||
|                            ticket in self.env['help.ticket'].search( | |||
|                     [('stage_id.name', 'in', ['Inbox', 'Draft'])])], | |||
|             'progress': ["{} : {}".format(ticket.name, ticket.subject) for | |||
|                          ticket in self.env['help.ticket'].search( | |||
|                     [('stage_id.name', '=', 'In Progress')])], | |||
|             'done': ["{} : {}".format(ticket.name, ticket.subject) for ticket in | |||
|                      self.env['help.ticket'].search( | |||
|                          [('stage_id.name', '=', 'Done')])], | |||
|             'teams': [team.name for team in self.env['help.team'].search([])], | |||
|             'p_tickets': [ticket.name for ticket in | |||
|                           self.env['help.ticket'].search( | |||
|                               [('stage_id.name', 'in', ['Inbox', 'Draft'])])] | |||
|         } | |||
|         return values | |||
| 
 | |||
|     @api.model | |||
|     def get_ticket_month_pie(self): | |||
|         """Get ticket counts per month as a pie chart.""" | |||
|         month_count = [rec.create_date.month for rec in | |||
|                        self.env['help.ticket'].search([])] | |||
|         month_val = [{'label': calendar.month_name[month], | |||
|                       'value': month_count.count(month)} for month in | |||
|                      list(set(month_count))] | |||
|         name = [record['label'] for record in month_val] | |||
|         count = [record['value'] for record in month_val] | |||
|         return [count, name] | |||
| 
 | |||
|     @api.model | |||
|     def get_team_ticket_count_pie(self): | |||
|         """Get ticket counts per team as a bar chart""" | |||
|         ticket_count = [] | |||
|         team_list = [] | |||
|         for rec in self.env['help.ticket'].search([]): | |||
|             if rec.team_id: | |||
|                 team = rec.team_id.name | |||
|                 if team not in team_list: | |||
|                     team_list.append(team) | |||
|                 ticket_count.append(team) | |||
|         team_val = [{'label': team_name, 'value': ticket_count.count(team_name)} | |||
|                     for team_name in team_list] | |||
|         return [[record['value'] for record in team_val], | |||
|                 [record['label'] for record in team_val]] | |||
| 
 | |||
|     @api.model | |||
|     def get_project_ticket_count(self): | |||
|         """Get ticket counts per project as a bar chart""" | |||
|         ticket_count = [] | |||
|         project_list = [] | |||
|         for rec in self.env['help.ticket'].search([]): | |||
|             if rec.project_id: | |||
|                 project = rec.project_id.name | |||
|                 if project not in project_list: | |||
|                     project_list.append(project) | |||
|                 ticket_count.append(project) | |||
|         project_val = [ | |||
|             {'label': project_name, 'value': ticket_count.count(project_name)} | |||
|             for project_name in project_list] | |||
|         return [[record['value'] for record in project_val], | |||
|                 [record['label'] for record in project_val]] | |||
| 
 | |||
|     @api.model | |||
|     def get_billed_task_team_chart(self): | |||
|         """Get billed task counts per team as a polarArea chart""" | |||
|         ticket_count = [] | |||
|         team_list = [] | |||
|         tasks = [rec.ticket_id.id for rec in self.env['project.task'].search( | |||
|             [('ticket_billed', '=', True)])] | |||
|         for rec in self.env['help.ticket'].search([('id', 'in', tasks)]): | |||
|             team = rec.team_id.name | |||
|             if team not in team_list: | |||
|                 team_list.append(team) | |||
|             ticket_count.append(team) | |||
|         team_val = [{'label': team_name, 'value': ticket_count.count(team_name)} | |||
|                     for team_name in team_list] | |||
|         return [[record['value'] for record in team_val], | |||
|                 [record['label'] for record in team_val]] | |||
| 
 | |||
|     @api.model | |||
|     def get_team_ticket_done_pie(self): | |||
|         """Get ticket counts per completed tickets as a bar chart""" | |||
|         ticket_count = [] | |||
|         team_list = [] | |||
|         for rec in self.env['help.ticket'].search( | |||
|                 [('stage_id.name', '=', 'Done')]): | |||
|             if rec.team_id: | |||
|                 team = rec.team_id.name | |||
|                 if team not in team_list: | |||
|                     team_list.append(team) | |||
|                 ticket_count.append(team) | |||
|         team_val = [{'label': team_name, 'value': ticket_count.count(team_name)} | |||
|                     for team_name in team_list] | |||
|         return [[record['value'] for record in team_val], | |||
|                 [record['label'] for record in team_val]] | |||
| After Width: | Height: | Size: 1.3 KiB | 
| After Width: | Height: | Size: 1.4 KiB | 
| After Width: | Height: | Size: 576 B | 
| After Width: | Height: | Size: 733 B | 
| After Width: | Height: | Size: 911 B | 
| After Width: | Height: | Size: 1.1 KiB | 
| After Width: | Height: | Size: 1.2 KiB | 
| After Width: | Height: | Size: 3.4 KiB | 
| After Width: | Height: | Size: 673 B | 
| After Width: | Height: | Size: 878 B | 
| After Width: | Height: | Size: 653 B | 
| After Width: | Height: | Size: 905 B | 
| After Width: | Height: | Size: 839 B | 
| After Width: | Height: | Size: 427 B | 
| After Width: | Height: | Size: 627 B | 
| After Width: | Height: | Size: 1.2 KiB | 
| After Width: | Height: | Size: 988 B | 
| After Width: | Height: | Size: 1.2 KiB | 
| After Width: | Height: | Size: 1.5 KiB | 
| After Width: | Height: | Size: 1.1 KiB | 
| After Width: | Height: | Size: 1.9 KiB | 
| After Width: | Height: | Size: 1.1 KiB | 
| After Width: | Height: | Size: 2.1 KiB | 
| After Width: | Height: | Size: 4.4 KiB | 
| After Width: | Height: | Size: 589 B | 
| After Width: | Height: | Size: 3.4 KiB | 
| After Width: | Height: | Size: 1.7 KiB | 
| After Width: | Height: | Size: 2.3 KiB | 
| After Width: | Height: | Size: 967 B | 
| After Width: | Height: | Size: 1.6 KiB | 
| After Width: | Height: | Size: 3.8 KiB | 
| After Width: | Height: | Size: 5.0 KiB | 
| After Width: | Height: | Size: 46 KiB | 
| After Width: | Height: | Size: 58 KiB | 
| After Width: | Height: | Size: 63 KiB | 
| After Width: | Height: | Size: 56 KiB | 
| After Width: | Height: | Size: 49 KiB | 
| After Width: | Height: | Size: 47 KiB | 
| After Width: | Height: | Size: 84 KiB | 
| After Width: | Height: | Size: 134 KiB | 
| After Width: | Height: | Size: 137 KiB | 
| After Width: | Height: | Size: 134 KiB | 
| After Width: | Height: | Size: 78 KiB | 
| After Width: | Height: | Size: 84 KiB | 
| After Width: | Height: | Size: 84 KiB | 
| After Width: | Height: | Size: 83 KiB | 
| After Width: | Height: | Size: 83 KiB | 
| After Width: | Height: | Size: 86 KiB | 
| After Width: | Height: | Size: 105 KiB | 
| After Width: | Height: | Size: 84 KiB | 
| After Width: | Height: | Size: 530 KiB | 
| After Width: | Height: | Size: 47 KiB | 
| After Width: | Height: | Size: 7.2 KiB | 
| @ -0,0 +1,703 @@ | |||
| <div style="background-color: #714B67; min-height: 600px; width: 100%; padding: 15px; position: relative;"> | |||
|     <!-- TITLE BAR --> | |||
|     <div class="d-flex align-items-center justify-content-between" | |||
|          style="border-bottom: 1px solid #875A7B; padding: 15px; display: flex; justify-content: space-between; align-items: center;"> | |||
|         <img src="./assets/misc/cybrosys-logo.png" width="42" height="42" | |||
|              style="width: 42px; height: 42px;"/> | |||
|         <div> | |||
|             <div style="color: #7C7BAD; font-size: 14px; font-family: 'Montserrat', sans-serif; font-weight: bold; background-color: white; display: inline-block; padding: 3px 10px; border-radius: 50px;" | |||
|                  class="mr-2"> | |||
|                 <i class="fa fa-check mr-1"></i>Community | |||
|             </div> | |||
|         </div> | |||
|     </div> | |||
|     <!-- END OF TITLE BAR --> | |||
|     <div class="container"> | |||
|         <div class="row"> | |||
|             <div class="col-sm-12 col-md-12 col-lg-12"> | |||
|                 <!-- APP HERO --> | |||
|                 <h1 style="color: #FFFFFF; font-weight: bolder; font-size: 50px; text-align: center; margin-top: 50px;"> | |||
|                     Website Helpdesk Dashboard</h1> | |||
|                 <p style="color:#FFFFFF; padding: 8px 15px; text-align: center; font-size: 24px;"> | |||
|                     Detailed Dashboard View for Website Helpdesk Support Ticket | |||
|                     Management Module</p> | |||
|                 <!-- END OF APP HERO --> | |||
|                 <img src="assets/screenshots/hero.gif" class="img-responsive" | |||
|                      style="width: 100%; margin-left: auto; margin-right: auto;"/> | |||
|             </div> | |||
|         </div> | |||
|     </div> | |||
| </div> | |||
| 
 | |||
| <!-- NAVIGATION SECTION --> | |||
| <div class="d-flex align-items-center" | |||
|      style="border-bottom: 2px solid #714B67; padding: 15px 0px; margin-top: 300px;"> | |||
|     <div class="d-flex justify-content-center align-items-center mr-2" | |||
|          style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;"> | |||
|         <img src="./assets/misc/compass.png"/> | |||
|     </div> | |||
|     <h2 class="mt-2" | |||
|         style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;"> | |||
|         Explore This | |||
|         Module</h2> | |||
| </div> | |||
| <div class="row my-4" style="font-family: 'Montserrat', sans-serif;"> | |||
|     <div class="col-sm-12 col-md-6 my-3"> | |||
|         <a href="#overview"> | |||
|             <div class="d-flex justify-content-between align-items-center" | |||
|                  style="background-color: #f5f5f5; padding: 30px; width: 100%;"> | |||
|                 <div> | |||
|                     <span style="color: #714B67; font-size: 24px; font-weight: 500; display: block;">Overview</span> | |||
|                     <span | |||
|                             style="color: #714B67; font-size: 16px; font-weight: 400; color:#282F33;  display: block;">Learn | |||
|                         more about this | |||
|                         module</span> | |||
|                 </div> | |||
|                 <img src="./assets/misc/right-arrow.png" width="36" | |||
|                      height="36"/> | |||
|             </div> | |||
|         </a> | |||
|     </div> | |||
|     <div class="col-sm-12 col-md-6 my-3"> | |||
|         <a href="#features"> | |||
|             <div class="d-flex justify-content-between align-items-center" | |||
|                  style="background-color: #f5f5f5; padding: 30px; width: 100%;"> | |||
|                 <div> | |||
|                     <span style="color: #714B67; font-size: 24px; font-weight: 500; display: block;">Features</span> | |||
|                     <span | |||
|                             style="color: #714B67; font-size: 16px; font-weight: 400; color:#282F33;  display: block;">View | |||
|                         features of this | |||
|                         module</span> | |||
|                 </div> | |||
|                 <img src="./assets/misc/right-arrow.png" width="36" | |||
|                      height="36"/> | |||
|             </div> | |||
|         </a> | |||
|     </div> | |||
|     <div class="col-sm-12 col-md-6 my-3"> | |||
|         <a href="#screenshots"> | |||
|             <div class="d-flex justify-content-between align-items-center" | |||
|                  style="background-color: #f5f5f5; padding: 30px; width: 100%;"> | |||
|                 <div> | |||
|                     <span style="color: #714B67; font-size: 24px; font-weight: 500; display: block;">Screenshots</span> | |||
|                     <span | |||
|                             style="color: #714B67; font-size: 16px; font-weight: 400; color:#282F33;  display: block;">View | |||
|                         screenshots for this | |||
|                         module</span> | |||
|                 </div> | |||
|                 <img src="./assets/misc/right-arrow.png" width="36" | |||
|                      height="36"/> | |||
|             </div> | |||
|         </a> | |||
|     </div> | |||
| </div> | |||
| <!-- END OF NAVIGATION SECTION --> | |||
| 
 | |||
| <!-- OVERVIEW SECTION --> | |||
| <div class="d-flex align-items-center" | |||
|      style="border-bottom: 2px solid #714B67; padding: 15px 0px;" id="overview"> | |||
|     <div class="d-flex justify-content-center align-items-center mr-2" | |||
|          style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;"> | |||
|         <img src="./assets/misc/pie-chart.png"/> | |||
|     </div> | |||
|     <h2 class="mt-2" | |||
|         style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;"> | |||
|         Overview | |||
|     </h2> | |||
| </div> | |||
| <div class="row" | |||
|      style="font-family: 'Montserrat', sans-serif; font-weight: 400; font-size: 14px; line-height: 200%;"> | |||
|     <div class="col-sm-12 py-4"> | |||
|         In the Website Helpdesk Dashboard module, one can analyse and easily | |||
|         manage | |||
|         Helpdesk Tickets according to their stages and also Helpdesk teams.<br/> | |||
|         The dashboard provides a visually engaging palate for seamless | |||
|         management of helpdesk management functions. | |||
|     </div> | |||
| </div> | |||
| <!-- END OF OVERVIEW SECTION --> | |||
| 
 | |||
| <!-- FEATURES SECTION --> | |||
| <div class="d-flex align-items-center" | |||
|      style="border-bottom: 2px solid #714B67; padding: 15px 0px;" id="features"> | |||
|     <div class="d-flex justify-content-center align-items-center mr-2" | |||
|          style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;"> | |||
|         <img src="./assets/misc/features.png"/> | |||
|     </div> | |||
|     <h2 class="mt-2" | |||
|         style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;"> | |||
|         Features | |||
|     </h2> | |||
| </div> | |||
| <div class="row" | |||
|      style="font-family: 'Montserrat', sans-serif; font-weight: 400; font-size: 14px; line-height: 200%;"> | |||
|     <div class="col-sm-12 col-md-6"> | |||
|         <div class="d-flex align-items-start" | |||
|              style="margin-top: 40px; margin-bottom: 40px"> | |||
|             <img src="./assets/misc/check-box.png" class="mr-2"/> | |||
|             <div> | |||
|                 <span style="display: block; font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> | |||
|                     Classified tickets according to their stages. | |||
|                 </span> | |||
|             </div> | |||
|         </div> | |||
|         <div class="d-flex align-items-start" | |||
|              style="margin-top: 40px; margin-bottom: 40px"> | |||
|             <img src="./assets/misc/check-box.png" class="mr-2"/> | |||
|             <div> | |||
|                 <span style="display: block; font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> | |||
|                      Manage Tickets in the backend easily. | |||
|                 </span> | |||
|             </div> | |||
|         </div> | |||
|         <div class="d-flex align-items-start" | |||
|              style="margin-top: 40px; margin-bottom: 40px"> | |||
|             <img src="./assets/misc/check-box.png" class="mr-2"/> | |||
|             <div> | |||
|                 <span style="display: block; font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">View tickets that are created by customers, from website in the received tickets list.</span> | |||
|             </div> | |||
|         </div> | |||
|         <div class="d-flex align-items-start" | |||
|              style="margin-top: 40px; margin-bottom: 40px"> | |||
|             <img src="./assets/misc/check-box.png" class="mr-2"/> | |||
|             <div> | |||
|                 <span style="display: block; font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> | |||
|                    View monthly count of tickets in the Doughnut Chart | |||
|                 </span> | |||
|             </div> | |||
|         </div> | |||
|         <div class="d-flex align-items-start" | |||
|              style="margin-top: 40px; margin-bottom: 40px"> | |||
|             <img src="./assets/misc/check-box.png" class="mr-2"/> | |||
|             <div> | |||
|                 <span style="display: block; font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Number of tickets allotted to each team can be seen in the bar chart. | |||
|                 </span> | |||
|             </div> | |||
|         </div> | |||
| 
 | |||
|     </div> | |||
| </div> | |||
| <!-- END OF FEATURES SECTION --> | |||
| 
 | |||
| <!-- SCREENSHOTS SECTION --> | |||
| <div class="d-flex align-items-center" | |||
|      style="border-bottom: 2px solid #714B67; padding: 15px 0px;" | |||
|      id="screenshots"> | |||
|     <div class="d-flex justify-content-center align-items-center mr-2" | |||
|          style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;"> | |||
|         <img src="./assets/misc/pictures.png"/> | |||
|     </div> | |||
|     <h2 class="mt-2" | |||
|         style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;"> | |||
|         Screenshots | |||
|     </h2> | |||
| </div> | |||
| <div class="row"> | |||
|     <div class="col-sm-12"> | |||
| 
 | |||
|         <div style="display: block; margin: 30px auto;"> | |||
|             <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> | |||
|                 View Tickets created from website and also in the draft stage | |||
|                 together inside 'New Tickets' tile along with the count. | |||
|             </h3> | |||
|             <img src="./assets/screenshots/Ticket1.png" | |||
|                  class="img-thumbnail"><br/> | |||
|             <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> | |||
|                 Manage the tickets in backend by clicking on the 'New Tickets' | |||
|                 tiles. | |||
|             </h3> | |||
|             <img src="./assets/screenshots/Ticket2.png" | |||
|                  class="img-thumbnail"> | |||
|         </div> | |||
|         <div style="display: block; margin: 30px auto;"> | |||
|             <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> | |||
|                 View Tickets that are In Progress. | |||
|             </h3> | |||
|             <img src="./assets/screenshots/Ticket3.png" | |||
|                  class="img-thumbnail"> | |||
|         </div> | |||
|         <div style="display: block; margin: 30px auto;"> | |||
|             <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> | |||
|                 View and manage tickets that are in the Done/Completed state. | |||
|             </h3> | |||
|             <img src="./assets/screenshots/Ticket4.png" | |||
|                  class="img-thumbnail"> | |||
|         </div> | |||
|         <div style="display: block; margin: 30px auto;"> | |||
|             <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> | |||
|                 Manage Helpdesk Teams ,also shows the count of teams existing. | |||
|             </h3> | |||
|             <img src="./assets/screenshots/Ticket5.png" | |||
|                  class="img-thumbnail"> | |||
|         </div> | |||
|         <div style="display: block; margin: 30px auto;"> | |||
|             <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> | |||
|                 View tickets created from websites that are in Inbox. | |||
|             </h3> | |||
|             <img src="./assets/screenshots/Ticket6.png" | |||
|                  class="img-thumbnail"> | |||
|         </div> | |||
|     </div> | |||
|     <div class="col-sm-12"> | |||
|         <div style="display: block; margin: 30px auto;"> | |||
|             <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> | |||
|                 With the help of doughnut chart, analyse the Monthly Count of | |||
|                 Tickets. | |||
|             </h3> | |||
|             <img src="./assets/screenshots/Ticket7.png" | |||
|                  class="img-thumbnail"> | |||
|         </div> | |||
|         <div style="display: block; margin: 30px auto;"> | |||
|             <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> | |||
|                 Hover on the segments in the graph to view the count of tickets. | |||
|             </h3> | |||
|             <img src="./assets/screenshots/Ticket8.png" | |||
|                  class="img-thumbnail"> | |||
|         </div> | |||
|         <div style="display: block; margin: 30px auto;"> | |||
|             <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> | |||
|                 With the help of Bar graph, analyse ratio between the Helpdesk | |||
|                 Teams and No. of tickets assigned to them. | |||
|             </h3> | |||
|             <img src="./assets/screenshots/Ticket9.png" | |||
|                  class="img-thumbnail"> | |||
|         </div> | |||
|         <div style="display: block; margin: 30px auto;"> | |||
|             <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> | |||
|                 In the Bar graph, view the ratio between Helpdesk Tickets and | |||
|                 related Projects. | |||
|             </h3> | |||
|             <img src="./assets/screenshots/Ticket10.png" | |||
|                  class="img-thumbnail"> | |||
|         </div> | |||
|         <div style="display: block; margin: 30px auto;"> | |||
|             <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> | |||
|                 With the help of polararea chart, analyse ratio between the | |||
|                 Helpdesk Teams and No. of Billed Tasks. | |||
|             </h3> | |||
|             <img src="./assets/screenshots/Ticket11.png" | |||
|                  class="img-thumbnail"> | |||
|         </div> | |||
|         <div style="display: block; margin: 30px auto;"> | |||
|             <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;"> | |||
|                 The Line chart shows the ratio between Helpdesk Teams and No. of | |||
|                 tickets resolved by them. | |||
|             </h3> | |||
|             <img src="./assets/screenshots/Ticket12.png" | |||
|                  class="img-thumbnail"> | |||
|         </div> | |||
|     </div> | |||
| </div> | |||
| <!-- END OF SCREENSHOTS SECTION --> | |||
| 
 | |||
| <!-- RELATED PRODUCTS --> | |||
| 
 | |||
| <div class="row"> | |||
|     <div class="col-sm-12 col-md-12-col-lg-2"> | |||
|         <h2 style="font-weight: bold; color: #3D3D4E;">Related Modules</h2> | |||
|         <p style="color: #777783;">Explore our related modules</p> | |||
|         <hr/> | |||
|     </div> | |||
|     <div class="carousel-inner"> | |||
|         <div class="carousel-item active" style="min-height:0px"> | |||
|             <div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" | |||
|                  style="float:left"> | |||
|                 <a href="https://apps.odoo.com/apps/modules/14.0/website_product_attachments/" | |||
|                    target="_blank"> | |||
|                     <div style="border-radius:10px"> | |||
|                         <img class="img img-responsive center-block" | |||
|                              style="border-top-left-radius:10px; border-top-right-radius:10px" | |||
|                              src="./assets/modules/web_2.png"> | |||
|                     </div> | |||
|                 </a> | |||
|             </div> | |||
|             <div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" | |||
|                  style="float:left"> | |||
|                 <a href="https://apps.odoo.com/apps/modules/14.0/insta_feed_snippet/" | |||
|                    target="_blank"> | |||
|                     <div style="border-radius:10px"> | |||
|                         <img class="img img-responsive center-block" | |||
|                              style="border-top-left-radius:10px; border-top-right-radius:10px" | |||
|                              src="./assets/modules/web_3.png"> | |||
|                     </div> | |||
|                 </a> | |||
|             </div> | |||
|             <div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" | |||
|                  style="float:left"> | |||
|                 <a href="https://apps.odoo.com/apps/modules/14.0/featured_brand_snippet/" | |||
|                    target="_blank"> | |||
|                     <div style="border-radius:10px"> | |||
|                         <img class="img img-responsive center-block" | |||
|                              style="border-top-left-radius:10px; border-top-right-radius:10px" | |||
|                              src="./assets/modules/web_4.png"> | |||
|                     </div> | |||
|                 </a> | |||
|             </div> | |||
|         </div> | |||
|         <div class="carousel-item" style="min-height:0px"> | |||
|             <div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" | |||
|                  style="float:left"> | |||
|                 <a href="https://apps.odoo.com/apps/modules/14.0/website_return_management/" | |||
|                    target="_blank"> | |||
|                     <div style="border-radius:10px"> | |||
|                         <img class="img img-responsive center-block" | |||
|                              style="border-top-left-radius:10px; border-top-right-radius:10px" | |||
|                              src="./assets/modules/web_5.png"> | |||
|                     </div> | |||
|                 </a> | |||
|             </div> | |||
|             <div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" | |||
|                  style="float:left"> | |||
|                 <a href="https://apps.odoo.com/apps/modules/14.0/website_product_publish/" | |||
|                    target="_blank"> | |||
|                     <div style="border-radius:10px"> | |||
|                         <img class="img img-responsive center-block" | |||
|                              style="border-top-left-radius:10px; border-top-right-radius:10px" | |||
|                              src="./assets/modules/web_6.png"> | |||
|                     </div> | |||
|                 </a> | |||
|             </div> | |||
|             <div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" | |||
|                  style="float:left"> | |||
|                 <a href="https://apps.odoo.com/apps/modules/14.0/website_multi_product_return_management/" | |||
|                    target="_blank"> | |||
|                     <div style="border-radius:10px"> | |||
|                         <img class="img img-responsive center-block" | |||
|                              style="border-top-left-radius:10px; border-top-right-radius:10px" | |||
|                              src="./assets/modules/web_1.png"> | |||
|                     </div> | |||
|                 </a> | |||
|             </div> | |||
|         </div> | |||
|     </div> | |||
| </div> | |||
| <!-- END OF RELATED PRODUCTS --> | |||
| 
 | |||
| <!-- OUR SERVICES --> | |||
| 
 | |||
| <div class="d-flex align-items-center" | |||
|      style="border-bottom: 2px solid #714B67; padding: 15px 0px;"> | |||
|     <div class="d-flex justify-content-center align-items-center mr-2" | |||
|          style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;"> | |||
|         <img src="./assets/misc/star.png"/> | |||
|     </div> | |||
|     <h2 class="mt-2" | |||
|         style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;"> | |||
|         Our Services | |||
|     </h2> | |||
| </div> | |||
| 
 | |||
| <div class="container my-5"> | |||
|     <div class="row"> | |||
|         <div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> | |||
|             <div class="d-flex justify-content-center align-items-center mx-3 my-3" | |||
|                  style="background-color: #1dd1a1 !important; border-radius: 15px !important; height: 80px; width: 80px;"> | |||
|                 <img src="assets/icons/cogs.png" class="img-responsive" | |||
|                      height="48px" width="48px"> | |||
|             </div> | |||
|             <h6 class="text-center" | |||
|                 style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> | |||
|                 Odoo | |||
|                 Customization</h6> | |||
|         </div> | |||
| 
 | |||
|         <div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> | |||
|             <div class="d-flex justify-content-center align-items-center mx-3 my-3" | |||
|                  style="background-color: #ff6b6b !important; border-radius: 15px !important; height: 80px; width: 80px;"> | |||
|                 <img src="assets/icons/wrench.png" class="img-responsive" | |||
|                      height="48px" width="48px"> | |||
|             </div> | |||
|             <h6 class="text-center" | |||
|                 style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> | |||
|                 Odoo | |||
|                 Implementation</h6> | |||
|         </div> | |||
| 
 | |||
|         <div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> | |||
|             <div class="d-flex justify-content-center align-items-center mx-3 my-3" | |||
|                  style="background-color: #6462CD !important; border-radius: 15px !important; height: 80px; width: 80px;"> | |||
|                 <img src="assets/icons/lifebuoy.png" class="img-responsive" | |||
|                      height="48px" width="48px"> | |||
|             </div> | |||
|             <h6 class="text-center" | |||
|                 style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> | |||
|                 Odoo | |||
|                 Support</h6> | |||
|         </div> | |||
| 
 | |||
| 
 | |||
|         <div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> | |||
|             <div class="d-flex justify-content-center align-items-center mx-3 my-3" | |||
|                  style="background-color: #ffa801 !important; border-radius: 15px !important; height: 80px; width: 80px;"> | |||
|                 <img src="assets/icons/user.png" class="img-responsive" | |||
|                      height="48px" width="48px"> | |||
|             </div> | |||
|             <h6 class="text-center" | |||
|                 style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> | |||
|                 Hire | |||
|                 Odoo | |||
|                 Developer</h6> | |||
|         </div> | |||
| 
 | |||
|         <div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> | |||
|             <div class="d-flex justify-content-center align-items-center mx-3 my-3" | |||
|                  style="background-color: #54a0ff  !important; border-radius: 15px !important; height: 80px; width: 80px;"> | |||
|                 <img src="assets/icons/puzzle.png" class="img-responsive" | |||
|                      height="48px" width="48px"> | |||
|             </div> | |||
|             <h6 class="text-center" | |||
|                 style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> | |||
|                 Odoo | |||
|                 Integration</h6> | |||
|         </div> | |||
| 
 | |||
|         <div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> | |||
|             <div class="d-flex justify-content-center align-items-center mx-3 my-3" | |||
|                  style="background-color: #6d7680 !important; border-radius: 15px !important; height: 80px; width: 80px;"> | |||
|                 <img src="assets/icons/update.png" class="img-responsive" | |||
|                      height="48px" width="48px"> | |||
|             </div> | |||
|             <h6 class="text-center" | |||
|                 style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> | |||
|                 Odoo | |||
|                 Migration</h6> | |||
|         </div> | |||
| 
 | |||
| 
 | |||
|         <div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> | |||
|             <div class="d-flex justify-content-center align-items-center mx-3 my-3" | |||
|                  style="background-color: #786fa6 !important; border-radius: 15px !important; height: 80px; width: 80px;"> | |||
|                 <img src="assets/icons/consultation.png" class="img-responsive" | |||
|                      height="48px" width="48px"> | |||
|             </div> | |||
|             <h6 class="text-center" | |||
|                 style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> | |||
|                 Odoo | |||
|                 Consultancy</h6> | |||
|         </div> | |||
| 
 | |||
|         <div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> | |||
|             <div class="d-flex justify-content-center align-items-center mx-3 my-3" | |||
|                  style="background-color: #f8a5c2 !important; border-radius: 15px !important; height: 80px; width: 80px;"> | |||
|                 <img src="assets/icons/training.png" class="img-responsive" | |||
|                      height="48px" width="48px"> | |||
|             </div> | |||
|             <h6 class="text-center" | |||
|                 style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> | |||
|                 Odoo | |||
|                 Implementation</h6> | |||
|         </div> | |||
| 
 | |||
|         <div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> | |||
|             <div class="d-flex justify-content-center align-items-center mx-3 my-3" | |||
|                  style="background-color: #e6be26 !important; border-radius: 15px !important; height: 80px; width: 80px;"> | |||
|                 <img src="assets/icons/license.png" class="img-responsive" | |||
|                      height="48px" width="48px"> | |||
|             </div> | |||
|             <h6 class="text-center" | |||
|                 style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> | |||
|                 Odoo | |||
|                 Licensing Consultancy</h6> | |||
|         </div> | |||
|     </div> | |||
| 
 | |||
| </div> | |||
| 
 | |||
| <!-- END OF OUR SERVICES --> | |||
| 
 | |||
| <!-- OUR INDUSTRIES --> | |||
| 
 | |||
| <div class="d-flex align-items-center" | |||
|      style="border-bottom: 2px solid #714B67; padding: 15px 0px;"> | |||
|     <div class="d-flex justify-content-center align-items-center mr-2" | |||
|          style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;"> | |||
|         <img src="assets/misc/corporate.png"/> | |||
|     </div> | |||
|     <h2 class="mt-2" | |||
|         style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;"> | |||
|         Our | |||
|         Industries | |||
|     </h2> | |||
| </div> | |||
| 
 | |||
| <div class="container my-5"> | |||
|     <div class="row"> | |||
|         <div class="col-lg-3"> | |||
|             <div class="my-4 d-flex flex-column justify-content-center" | |||
|                  style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;"> | |||
|                 <img src="assets/icons/trading-black.png" | |||
|                      class="img-responsive mb-3" height="48px" width="48px"> | |||
|                 <h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> | |||
|                     Trading | |||
|                 </h5> | |||
|                 <p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> | |||
|                     Easily procure | |||
|                     and | |||
|                     sell your products</p> | |||
|             </div> | |||
|         </div> | |||
| 
 | |||
|         <div class="col-lg-3"> | |||
|             <div class="my-4 d-flex flex-column justify-content-center" | |||
|                  style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;"> | |||
|                 <img src="assets/icons/pos-black.png" | |||
|                      class="img-responsive mb-3" height="48px" width="48px"> | |||
|                 <h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> | |||
|                     POS | |||
|                 </h5> | |||
|                 <p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> | |||
|                     Easy | |||
|                     configuration | |||
|                     and convivial experience</p> | |||
|             </div> | |||
|         </div> | |||
| 
 | |||
|         <div class="col-lg-3"> | |||
|             <div class="my-4 d-flex flex-column justify-content-center" | |||
|                  style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;"> | |||
|                 <img src="assets/icons/education-black.png" | |||
|                      class="img-responsive mb-3" height="48px" width="48px"> | |||
|                 <h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> | |||
|                     Education | |||
|                 </h5> | |||
|                 <p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> | |||
|                     A platform for | |||
|                     educational management</p> | |||
|             </div> | |||
|         </div> | |||
| 
 | |||
|         <div class="col-lg-3"> | |||
|             <div class="my-4 d-flex flex-column justify-content-center" | |||
|                  style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;"> | |||
|                 <img src="assets/icons/manufacturing-black.png" | |||
|                      class="img-responsive mb-3" height="48px" width="48px"> | |||
|                 <h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> | |||
|                     Manufacturing | |||
|                 </h5> | |||
|                 <p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> | |||
|                     Plan, track and | |||
|                     schedule your operations</p> | |||
|             </div> | |||
|         </div> | |||
| 
 | |||
|         <div class="col-lg-3"> | |||
|             <div class="my-4 d-flex flex-column justify-content-center" | |||
|                  style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;"> | |||
|                 <img src="assets/icons/ecom-black.png" | |||
|                      class="img-responsive mb-3" height="48px" width="48px"> | |||
|                 <h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> | |||
|                     E-commerce & Website | |||
|                 </h5> | |||
|                 <p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> | |||
|                     Mobile | |||
|                     friendly, | |||
|                     awe-inspiring product pages</p> | |||
|             </div> | |||
|         </div> | |||
| 
 | |||
|         <div class="col-lg-3"> | |||
|             <div class="my-4 d-flex flex-column justify-content-center" | |||
|                  style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;"> | |||
|                 <img src="assets/icons/service-black.png" | |||
|                      class="img-responsive mb-3" height="48px" width="48px"> | |||
|                 <h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> | |||
|                     Service Management | |||
|                 </h5> | |||
|                 <p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> | |||
|                     Keep track of | |||
|                     services and invoice</p> | |||
|             </div> | |||
|         </div> | |||
| 
 | |||
|         <div class="col-lg-3"> | |||
|             <div class="my-4 d-flex flex-column justify-content-center" | |||
|                  style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;"> | |||
|                 <img src="assets/icons/restaurant-black.png" | |||
|                      class="img-responsive mb-3" height="48px" width="48px"> | |||
|                 <h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> | |||
|                     Restaurant | |||
|                 </h5> | |||
|                 <p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> | |||
|                     Run your bar or | |||
|                     restaurant methodically</p> | |||
|             </div> | |||
|         </div> | |||
| 
 | |||
|         <div class="col-lg-3"> | |||
|             <div class="my-4 d-flex flex-column justify-content-center" | |||
|                  style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;"> | |||
|                 <img src="assets/icons/hotel-black.png" | |||
|                      class="img-responsive mb-3" height="48px" width="48px"> | |||
|                 <h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> | |||
|                     Hotel Management | |||
|                 </h5> | |||
|                 <p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> | |||
|                     An | |||
|                     all-inclusive | |||
|                     hotel management application</p> | |||
|             </div> | |||
|         </div> | |||
|     </div> | |||
| </div> | |||
| 
 | |||
| <!-- END OF OUR INDUSTRIES --> | |||
| 
 | |||
| <!-- SUPPORT --> | |||
| <div class="d-flex align-items-center" | |||
|      style="border-bottom: 2px solid #714B67; padding: 15px 0px;"> | |||
|     <div class="d-flex justify-content-center align-items-center mr-2" | |||
|          style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;"> | |||
|         <img src="./assets/misc/customer-support.png"/> | |||
|     </div> | |||
|     <h2 class="mt-2" | |||
|         style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;"> | |||
|         Support | |||
|     </h2> | |||
| </div> | |||
| <div class="container mt-5"> | |||
|     <div class="row"> | |||
|         <div class="col-sm-12 col-md-6"> | |||
|             <div style="background-color: #F6F8F9; padding: 30px; display: flex; align-items: center;"> | |||
|                 <div class="mr-4" | |||
|                      style="background-color: #714B67; display: inline-block; height: 70px; width: 70px; display: flex; align-items: center; justify-content: center;"> | |||
|                     <img src="./assets/misc/support.png" height="48" width="48" | |||
|                          style="width: 42px; height: 42px;"/> | |||
|                 </div> | |||
|                 <div> | |||
|                     <h4>Need Help?</h4> | |||
|                     <p style="line-height: 100%;">Got questions or need help? | |||
|                         Get in touch.</p> | |||
|                     <a href="mailto:odoo@cybrosys.com"> | |||
|                         <p style="font-weight: 400; font-size: 28px; line-height: 80%; color: #714B67;"> | |||
|                             odoo@cybrosys.com</p> | |||
|                     </a> | |||
|                 </div> | |||
|             </div> | |||
|         </div> | |||
|         <div class="col-sm-12 col-md-6"> | |||
|             <div style="background-color: #F6F8F9; padding: 30px; display: flex; align-items: center;"> | |||
|                 <div class="mr-4" | |||
|                      style="background-color: #2AC44D; display: inline-block; height: 70px; width: 70px; display: flex; align-items: center; justify-content: center;"> | |||
|                     <img src="./assets/misc/whatsapp.png" height="52" width="52" | |||
|                          style="width: 52px; height: 52px;"/> | |||
|                 </div> | |||
|                 <div> | |||
|                     <h4>WhatsApp</h4> | |||
|                     <p style="line-height: 100%;">Say hi to us on WhatsApp!</p> | |||
|                     <a href="https://api.whatsapp.com/send?phone=918606827707"> | |||
|                         <p style="font-weight: 400; font-size: 28px; line-height: 80%; color: #714B67;"> | |||
|                             +91 86068 | |||
|                             27707</p> | |||
|                     </a> | |||
|                 </div> | |||
|             </div> | |||
|         </div> | |||
|     </div> | |||
|     <div class="row"> | |||
|         <div class="col-sm-12 my-5 d-flex justify-content-center align-items-center"> | |||
|             <img src="./assets/misc/logo.png" width="144" height="31" | |||
|                  style="width:144px; height: 31px; margin-top: 40px;"/> | |||
|         </div> | |||
|     </div> | |||
| </div> | |||
| <!-- END OF SUPPORT --> | |||
| @ -0,0 +1,232 @@ | |||
| 
 | |||
| .o_action_manager { | |||
|     overflow: auto !important; | |||
| } | |||
| 
 | |||
| .help_dashboards { | |||
|     padding-top: 10px; | |||
|     background-color: #f8faff !important; | |||
| } | |||
| 
 | |||
| .dashboard_card h4 { | |||
|     font-size: 1.1rem; | |||
| } | |||
| 
 | |||
| .main-section { | |||
|     margin-left: 6px; | |||
| } | |||
| 
 | |||
| .breadcrumbs { | |||
|     margin-top: 0; | |||
| } | |||
| 
 | |||
| /*    Widget One | |||
| ---------------------------*/ | |||
| .stat-content { | |||
|     display: inline-block; | |||
|     width: 66%; | |||
| } | |||
| 
 | |||
| .stat-icon { | |||
|     display: inline-block; | |||
| } | |||
| 
 | |||
| .stat-widget-one .stat-icon { | |||
|     vertical-align: top; | |||
|     margin: auto; | |||
|     width: 100%; | |||
|     color: #01c490; | |||
| } | |||
| 
 | |||
| .stat-widget-one .stat-icon i { | |||
|     font-size: 30px; | |||
|     font-weight: 900; | |||
|     display: inline-block; | |||
|     color: #01c490; | |||
| } | |||
| 
 | |||
| .stat-widget-one .stat-text { | |||
|     font-size: 11px; | |||
|     color: #868e96; | |||
|     font-weight: bold; | |||
| } | |||
| 
 | |||
| .stat-widget-one .stat-digit { | |||
|     font-size: 24px; | |||
|     color: #02448b; | |||
| } | |||
| 
 | |||
| .stat-count { | |||
|     font-size: 20px; | |||
|     text-align: center; | |||
|     color: #00438b; | |||
| } | |||
| 
 | |||
| .stat-title { | |||
|     font-size: 17px; | |||
|     text-align: center; | |||
|     color: #00438b; | |||
| } | |||
| 
 | |||
| /*=====================Dashboard===========================*/ | |||
| 
 | |||
| .dashboard_card { | |||
|     padding: 0px; | |||
|     margin-bottom: 1.5rem; | |||
|     border-radius: 0px; | |||
|     box-shadow: none; | |||
|     background: none; | |||
|     transition: transform 0.2s ease, box-shadow 0.2s ease; | |||
|     will-change: transform, box-shadow; | |||
| } | |||
| 
 | |||
| .dashboard_card:hover { | |||
|     transform: translateY(-2px) translateZ(0) !important; | |||
|     box-shadow: 0 10px 10px 0 rgba(62, 57, 107, 0.12), 0 0 0 transparent !important; | |||
| } | |||
| 
 | |||
| .helpdesk { | |||
|     margin-top: 3%; | |||
|     margin-bottom: 2%; | |||
| } | |||
| 
 | |||
| .helpdesk .stat-icon { | |||
|     border-radius: 15px 0 0 15px; | |||
|     width: 30%; | |||
|     height: 100px; | |||
|     text-align: center; | |||
|     padding-top: 11%; | |||
|     background: #4a5c9a; | |||
|     color: #fff; | |||
| } | |||
| 
 | |||
| #team_ico { | |||
|     -webkit-text-stroke: 1px #8e8e8e; | |||
| } | |||
| 
 | |||
| .helpdesk .dashboard_card { | |||
|     border-radius: 15px; | |||
|     transition: transform 0.2s ease, box-shadow 0.2s ease; | |||
|     will-change: transform, box-shadow; | |||
|     box-shadow: 0 10px 40px 0 rgba(62, 57, 107, 0.07), | |||
|     0 2px 9px 0 rgba(62, 57, 107, 0.06); | |||
| } | |||
| 
 | |||
| .stat-widget-one .stat-text { | |||
|     font-size: 14px; | |||
|     color: #314384ff; | |||
|     margin: 2rem 0rem 1rem 0rem; | |||
|     text-align: center; | |||
| } | |||
| 
 | |||
| .stat-widget-one .stat-digit { | |||
|     font-size: 20px; | |||
|     font-weight: bolder; | |||
|     padding: 1px 10px 2px 0; | |||
|     color: #8061a9; | |||
|     text-shadow: 0px 0px 20px #000000; | |||
|     text-align: center; | |||
| } | |||
| 
 | |||
| .stat-widget-one .stat-icon i { | |||
|     font-size: 25px; | |||
|     font-weight: 900; | |||
|     display: inline-block; | |||
|     color: #fff; | |||
| } | |||
| 
 | |||
| .stat-widget-one { | |||
|     border-radius: 15px; | |||
|     background-color: white; | |||
|     text-align: inherit !important; | |||
| } | |||
| 
 | |||
| .stat-widget-one { | |||
|     width: 100%; | |||
| } | |||
| 
 | |||
| 
 | |||
| .inbox_tickets .stat-widget-one .stat-text { | |||
|     color: #706F8E; | |||
| } | |||
| 
 | |||
| .inbox_tickets .stat-icon { | |||
|     background: #706F8E !important; | |||
| } | |||
| 
 | |||
| .inprogress_tickets .stat-widget-one .stat-text { | |||
|     color: #9AA8A8; | |||
| } | |||
| 
 | |||
| .inprogress_tickets .stat-icon { | |||
|     background: #9AA8A8 !important; | |||
| } | |||
| 
 | |||
| .done_tickets .stat-icon { | |||
|     background: #847A9F !important; | |||
| } | |||
| 
 | |||
| .done_tickets .stat-widget-one .stat-text { | |||
|     color: #847A9F; | |||
| } | |||
| 
 | |||
| .team_card .stat-icon { | |||
|     background: #66719a !important; | |||
| } | |||
| 
 | |||
| .team_card .stat-widget-one .stat-text { | |||
|     color: #66719a; | |||
| } | |||
| 
 | |||
| .dashboard_card-body { | |||
|     display: flex; | |||
|     justify-content: space-between; | |||
|     align-items: center; | |||
| } | |||
| 
 | |||
| .pending_detail { | |||
|     width: 75%; | |||
|     padding: 0 0 0 40px; | |||
|     margin: 0 0 0 4px; | |||
| } | |||
| 
 | |||
| .ticket_box { | |||
|     height: 32rem; | |||
|     overflow-y: auto; | |||
| } | |||
| 
 | |||
| .ticket_box_head { | |||
|     text-align: center; | |||
|     padding: 12px 0; | |||
|     color: rgb(73 80 87 / 76%); | |||
|     font-weight: bold; | |||
|     font-size: 20px; | |||
|     background: #b1cccc; | |||
|     margin-bottom: 9px; | |||
| } | |||
| 
 | |||
| .tickets_head { | |||
|     margin-left: 10px; | |||
| } | |||
| 
 | |||
| .pending_tickets { | |||
|     padding-left: 0 ! important; | |||
| } | |||
| 
 | |||
| .tickets_list { | |||
|     font-weight: 500; | |||
|     font-size: 14px; | |||
|     margin: 10px; | |||
|     list-style-type: none; | |||
|     border-radius: 5px; | |||
|     border: 1px solid rgba(69, 72, 103, 0.71); | |||
|     background: #f3f3f3bd; | |||
|     padding: 10px !important; | |||
| } | |||
| 
 | |||
| .half_chart.chart-container.card-shadow { | |||
|     height: 32rem; | |||
| } | |||
| .chart-container.card-shadow { | |||
|     height: 32rem; | |||
| } | |||
| @ -0,0 +1,454 @@ | |||
| odoo.define("odoo_website_helpdesk_dashboard.dashboard_view", function (require) { | |||
|     "use strict"; | |||
|     const AbstractAction = require("web.AbstractAction"); | |||
|     const core = require("web.core"); | |||
|     const rpc = require("web.rpc"); | |||
|     var ajax = require("web.ajax"); | |||
|     const _t = core._t; | |||
|     const QWeb = core.qweb; | |||
|     const DashBoard = AbstractAction.extend({ | |||
|         template: "HelpDesk_Dashboard", | |||
|         events: { | |||
|             "click .inbox_tickets": "tickets_inbox", | |||
|             "click .inprogress_tickets": "tickets_inprogress", | |||
|             "click .done_tickets": "tickets_done", | |||
|             "click .team_card": "helpdesk_teams" | |||
|         }, | |||
| //        Initializes the dashboard and sets the available dashboard templates
 | |||
|         init: function (parent, context) { | |||
|             this._super(parent, context); | |||
|             this.dashboards_templates = ['DashBoardHelpDesk']; | |||
|         }, | |||
| //        Sets the title of the dashboard.Renders the dashboards and graphs.
 | |||
| //        Adds a CSS class to the parent element.
 | |||
|         start: function () { | |||
|             var self = this; | |||
|             this.set("title", 'Dashboard'); | |||
|             return this._super().then(function () { | |||
|                 self.render_dashboards(); | |||
|                 self.render_graphs(); | |||
|                 self.$el.parent().addClass('oe_background_grey'); | |||
|             }); | |||
|         }, | |||
| //        Calls individual methods to render different graphs.
 | |||
|         render_graphs: function () { | |||
|             var self = this; | |||
|             self.render_tickets_month_graph(); | |||
|             self.render_team_ticket_count_graph(); | |||
|             self.render_projects_ticket_graph(); | |||
|             self.render_billed_task_team_graph(); | |||
|             self.render_team_ticket_done_graph(); | |||
|         }, | |||
| //        Fetches data using an RPC call and creates a doughnut chart using
 | |||
| //        the Chart.js library. Renders the ticket month graph.
 | |||
|         render_tickets_month_graph: function () { | |||
|             var self = this | |||
|             var ctx = self.$(".ticket_month"); | |||
|             rpc.query({ | |||
|                 model: "help.ticket", | |||
|                 method: "get_ticket_month_pie", | |||
|             }).then(function (arrays) { | |||
|                 var data = { | |||
|                     labels: arrays[1], | |||
|                     datasets: [{ | |||
|                         label: "", | |||
|                         data: arrays[0], | |||
|                         backgroundColor: [ | |||
|                             "#665191", | |||
|                             "#ff7c43", | |||
|                             "#ffa600", | |||
|                             "#a05195", | |||
|                             "#2f4b7c", | |||
|                             "#f95d6a", | |||
|                             "#6d5c16", | |||
|                             "#003f5c", | |||
|                             "#d45087" | |||
|                         ], | |||
|                         borderColor: [ | |||
|                             "#003f5c", | |||
|                             "#2f4b7c", | |||
|                             "#f95d6a", | |||
|                             "#665191", | |||
|                             "#d45087", | |||
|                             "#ff7c43", | |||
|                             "#ffa600", | |||
|                             "#a05195", | |||
|                             "#6d5c16" | |||
|                         ], | |||
|                         borderWidth: 1 | |||
|                     },] | |||
|                 }; | |||
|                 //Options
 | |||
|                 var options = { | |||
|                     responsive: true, | |||
|                     title: false, | |||
|                     legend: { | |||
|                         display: true, | |||
|                         position: "right", | |||
|                         labels: { | |||
|                             fontColor: "#333", | |||
|                             fontSize: 16 | |||
|                         } | |||
|                     }, | |||
|                     scales: { | |||
|                         yAxes: [{ | |||
|                             gridLines: { | |||
|                                 color: "rgba(0, 0, 0, 0)", | |||
|                                 display: false, | |||
|                             }, | |||
|                             ticks: { | |||
|                                 min: 0, | |||
|                                 display: false, | |||
|                             } | |||
|                         }] | |||
|                     } | |||
|                 }; | |||
|                 //Create Chart class object
 | |||
|                 var chart = new Chart(ctx, { | |||
|                     type: "doughnut", | |||
|                     data: data, | |||
|                     options: options | |||
|                 }); | |||
|             }); | |||
|         }, | |||
| //        Fetches data using an RPC call and get count of pie.
 | |||
| //        Renders the team ticket count graph.
 | |||
|         render_team_ticket_count_graph: function () { | |||
|             var self = this | |||
|             var ctx = self.$(".team_ticket_count"); | |||
|             rpc.query({ | |||
|                 model: "help.ticket", | |||
|                 method: "get_team_ticket_count_pie", | |||
|             }).then(function (arrays) { | |||
|                 var data = { | |||
|                     labels: arrays[1], | |||
|                     datasets: [{ | |||
|                         label: "", | |||
|                         data: arrays[0], | |||
|                         backgroundColor: [ | |||
|                             'rgba(255, 99, 132, 0.2)', | |||
|                             'rgba(255, 159, 64, 0.2)', | |||
|                             'rgba(255, 205, 86, 0.2)', | |||
|                             'rgba(75, 192, 192, 0.2)', | |||
|                             'rgba(54, 162, 235, 0.2)', | |||
|                             'rgba(153, 102, 255, 0.2)', | |||
|                             'rgba(201, 203, 207, 0.2)' | |||
|                         ], | |||
|                         borderColor: ['rgb(255, 99, 132)', | |||
|                             'rgb(255, 159, 64)', | |||
|                             'rgb(255, 205, 86)', | |||
|                             'rgb(75, 192, 192)', | |||
|                             'rgb(54, 162, 235)', | |||
|                             'rgb(153, 102, 255)', | |||
|                             'rgb(201, 203, 207)' | |||
|                         ], | |||
|                         borderWidth: 1 | |||
|                     },] | |||
|                 }; | |||
| 
 | |||
|                 //Options
 | |||
|                 var options = { | |||
|                     responsive: true, | |||
|                     title: false, | |||
|                     maintainAspectRatio: true, | |||
|                     legend: { | |||
|                         display: false | |||
|                     }, | |||
|                     scales: { | |||
|                         yAxes: [{ | |||
|                             display: true, | |||
|                             ticks: { | |||
|                                 beginAtZero: true, | |||
|                                 steps: 10, | |||
|                                 stepValue: 5, | |||
|                             } | |||
|                         }] | |||
|                     } | |||
|                 }; | |||
|                 //Create Chart class object
 | |||
|                 var chart = new Chart(ctx, { | |||
|                     type: "bar", | |||
|                     data: data, | |||
|                     options: options | |||
|                 }); | |||
|             }); | |||
|         }, | |||
| //        Fetches data using an RPC call and get ticket count.
 | |||
| //        Renders the projects ticket graph.
 | |||
|         render_projects_ticket_graph: function () { | |||
|             var self = this | |||
|             var ctx = self.$(".projects_ticket"); | |||
|             rpc.query({ | |||
|                 model: "help.ticket", | |||
|                 method: "get_project_ticket_count", | |||
|             }).then(function (arrays) { | |||
|                 var data = { | |||
|                     labels: arrays[1], | |||
|                     datasets: [{ | |||
|                         label: "", | |||
|                         data: arrays[0], | |||
|                         backgroundColor: [ | |||
|                             "rgba(175,180,255,0.75)", | |||
|                             "rgba(133,208,255,0.9)", | |||
|                             "rgba(113,255,221,0.79)", | |||
|                             "rgba(255,187,95,0.77)", | |||
|                             "#2c7fb8", | |||
|                             "#fa9fb5", | |||
|                             "#2f4b7c", | |||
|                         ], | |||
|                         borderColor: [ | |||
|                             "#003f5c", | |||
|                             "#2f4b7c", | |||
|                             "#f95d6a", | |||
|                             "#665191", | |||
|                             "#d45087", | |||
|                             "#ff7c43", | |||
|                             "#ffa600", | |||
|                             "#a05195", | |||
|                             "#6d5c16" | |||
|                         ], | |||
|                         borderWidth: 1 | |||
|                     },] | |||
|                 }; | |||
|                   //Options
 | |||
|                 var options = { | |||
|                     responsive: true, | |||
|                     title: false, | |||
|                     maintainAspectRatio: true, | |||
|                     legend: { | |||
|                         display: false | |||
|                     }, | |||
|                     scales: { | |||
|                         yAxes: [{ | |||
|                             display: true, | |||
|                             ticks: { | |||
|                                 beginAtZero: true, | |||
|                                 steps: 10, | |||
|                                 stepValue: 5, | |||
|                             } | |||
|                         }] | |||
|                     } | |||
|                 }; | |||
|                 //Create Chart class object
 | |||
|                 var chart = new Chart(ctx, { | |||
|                     type: "bar", | |||
|                     data: data, | |||
|                     options: options | |||
|                 }); | |||
|             }); | |||
|         }, | |||
| //        Fetches data using an RPC call and creates a polar area chart using
 | |||
| //        Chart.js. Renders the billed task team graph
 | |||
|         render_billed_task_team_graph: function () { | |||
|             var self = this | |||
|             var ctx = self.$(".billed_team"); | |||
|             rpc.query({ | |||
|                 model: "help.ticket", | |||
|                 method: "get_billed_task_team_chart", | |||
|             }).then(function (arrays) { | |||
|                 var data = { | |||
|                     labels: arrays[1], | |||
|                     datasets: [{ | |||
|                         label: "", | |||
|                         data: arrays[0], | |||
|                         backgroundColor: [ | |||
|                             "#a07fcd", | |||
|                             "#fea84c", | |||
|                             "#2cb8b1", | |||
|                             "#fa9fb5", | |||
|                             "#2f4b7c", | |||
|                             "#2c7fb8" | |||
|                         ], | |||
|                         borderColor: [ | |||
|                             "#4fc9ff", | |||
|                             "#2f4b7c", | |||
|                             "#f95d6a", | |||
|                             "#665191", | |||
|                             "#d45087", | |||
|                             "#ff7c43", | |||
|                             "#ffa600", | |||
|                             "#a05195", | |||
|                             "#6d5c16" | |||
|                         ], | |||
|                         borderWidth: 1 | |||
|                     },] | |||
|                 }; | |||
|                 //Options
 | |||
|                 var options = { | |||
|                     responsive: true, | |||
|                     title: false, | |||
|                     legend: { | |||
|                         display: true, | |||
|                         position: "right", | |||
|                         labels: { | |||
|                             fontColor: "#333", | |||
|                             fontSize: 16 | |||
|                         } | |||
|                     }, | |||
|                     scales: { | |||
|                         yAxes: [{ | |||
|                             gridLines: { | |||
|                                 color: "rgba(0, 0, 0, 0)", | |||
|                                 display: false, | |||
|                             }, | |||
|                             ticks: { | |||
|                                 min: 0, | |||
|                                 display: false, | |||
|                             } | |||
|                         }] | |||
|                     } | |||
|                 }; | |||
|                 //Create Chart class object
 | |||
|                 var chart = new Chart(ctx, { | |||
|                     type: "polarArea", | |||
|                     data: data, | |||
|                     options: options | |||
|                 }); | |||
|             }); | |||
|         }, | |||
| //        Fetches data using an RPC call and creates a pie chart using Chart.js.
 | |||
| //        Renders the team ticket done graph.
 | |||
|         render_team_ticket_done_graph: function () { | |||
|             var self = this | |||
|             var ctx = self.$(".team_ticket_done"); | |||
|             rpc.query({ | |||
|                 model: "help.ticket", | |||
|                 method: "get_team_ticket_done_pie", | |||
|             }).then(function (arrays) { | |||
|                 var data = { | |||
|                     labels: arrays[1], | |||
|                     datasets: [{ | |||
|                         fill: false, | |||
|                         label: "", | |||
|                         data: arrays[0], | |||
|                         backgroundColor:[ | |||
|                             "#b7c1ff", | |||
|                             "#6159ff", | |||
|                             "#c79bff", | |||
|                             "#0095b2" | |||
|                         ], | |||
|                         borderColor: | |||
|                             'rgba(54,162,235,0.49)' | |||
|                         , | |||
|                         borderWidth: 2 | |||
|                     },] | |||
|                 }; | |||
|                 //Options
 | |||
|                 var options = { | |||
|                     responsive: true, | |||
|                     title: false, | |||
|                     maintainAspectRatio: true, | |||
|                     legend: { | |||
|                         display: false | |||
|                     }, | |||
|                     scales: { | |||
|                         yAxes: [{ | |||
|                             display: true, | |||
|                             ticks: { | |||
|                                 beginAtZero: true, | |||
|                                 steps: 10, | |||
|                                 stepValue: 5, | |||
|                             } | |||
|                         }] | |||
|                     } | |||
|                 }; | |||
|                 //Create Chart class object
 | |||
|                 var chart = new Chart(ctx, { | |||
|                     type: "line", | |||
|                     data: data, | |||
|                     options: options | |||
|                 }); | |||
|             }); | |||
|         }, | |||
| //        Which will render dashboard for helpdesk
 | |||
|         render_dashboards: function () { | |||
|             var self = this; | |||
|             var templates = ['DashBoardHelpDesk']; | |||
|             _.each(templates, function (template) { | |||
|                 self.$('.helpdesk_dashboard_main').append(QWeb.render(template, {widget: self})); | |||
|             }); | |||
|             rpc.query({ | |||
|                 model: "help.ticket", | |||
|                 method: "get_tickets_count", | |||
|                 args: [], | |||
|             }) | |||
|                 .then(function (result) { | |||
|                     $("#inbox_count").append("<span class='stat-digit'>" + result.inbox_count + "</span>"); | |||
|                     $("#inprogress_count").append("<span class='stat-digit'>" + result.progress_count + "</span>"); | |||
|                     $("#done_count").append("<span class='stat-digit'>" + result.done_count + "</span>"); | |||
|                     $("#team_count").append("<span class='stat-digit'>" + result.team_count + "</span>"); | |||
| 
 | |||
|                     ajax.jsonRpc("/help/tickets", "call", {}).then(function (values) { | |||
|                         $('.pending_tickets').append(values); | |||
|                     }); | |||
|                 }); | |||
|         }, | |||
| //        This function opens a new window with the list and form views of
 | |||
| //        the `help.ticket` model. The window displays tickets with the stage
 | |||
| //        names "Inbox" or "Draft". New tickets will have the default stage set
 | |||
| //        to "Draft".
 | |||
|         tickets_inbox: function (ev) { | |||
|             var self = this; | |||
|             ev.stopPropagation(); | |||
|             ev.preventDefault(); | |||
|             this.do_action({ | |||
|                 name: _t("Inbox"), | |||
|                 type: 'ir.actions.act_window', | |||
|                 res_model: 'help.ticket', | |||
|                 view_mode: 'tree,form', | |||
|                 views: [[false, 'list'], [false, 'form']], | |||
|                 domain: [['stage_id.name', 'in', ['Inbox', 'Draft']]], | |||
|                 context: {default_stage_id_name: 'Draft'}, | |||
|                 target: 'current' | |||
|             }); | |||
|         }, | |||
| //        Which will show all In-progress tickets
 | |||
|         tickets_inprogress: function (ev) { | |||
|             var self = this; | |||
|             ev.stopPropagation(); | |||
|             ev.preventDefault(); | |||
|             this.do_action({ | |||
|                 name: _t("In Progress"), | |||
|                 type: 'ir.actions.act_window', | |||
|                 res_model: 'help.ticket', | |||
|                 view_mode: 'tree,form', | |||
|                 views: [[false, 'list'], [false, 'form']], | |||
|                 domain: [['stage_id.name', '=', 'In Progress']], | |||
|                 context: {create: false}, | |||
|                 target: 'current' | |||
|             }); | |||
|         }, | |||
| //        Which will show all done tickets
 | |||
|         tickets_done: function (ev) { | |||
|             var self = this; | |||
|             ev.stopPropagation(); | |||
|             ev.preventDefault(); | |||
|             this.do_action({ | |||
|                 name: _t("Done"), | |||
|                 type: 'ir.actions.act_window', | |||
|                 res_model: 'help.ticket', | |||
|                 view_mode: 'tree,form', | |||
|                 views: [[false, 'list'], [false, 'form']], | |||
|                 domain: [['stage_id.name', '=', 'Done']], | |||
|                 context: {create: false}, | |||
|                 target: 'current' | |||
|             }); | |||
|         }, | |||
| //        All helpdesk teams
 | |||
|         helpdesk_teams: function (ev) { | |||
|             var self = this; | |||
|             ev.stopPropagation(); | |||
|             ev.preventDefault(); | |||
|             this.do_action({ | |||
|                 name: _t("Teams"), | |||
|                 type: 'ir.actions.act_window', | |||
|                 res_model: 'help.team', | |||
|                 view_mode: 'tree,form', | |||
|                 views: [[false, 'list'], [false, 'form']], | |||
|                 target: 'current' | |||
|             }); | |||
|         }, | |||
|     }); | |||
|     core.action_registry.add("helpdesk_dashboard", DashBoard); | |||
|     return DashBoard; | |||
| }); | |||
| @ -0,0 +1,172 @@ | |||
| <?xml version="1.0" encoding="UTF-8" ?> | |||
| <templates id="template" xml:space="preserve"> | |||
| <!--  DashBoardHelpDesk template--> | |||
|     <t t-name="HelpDesk_Dashboard"> | |||
|       <div class="helpdesk_dashboards"> | |||
|         <div class="container-fluid helpdesk_dashboard_main"/> | |||
|       </div> | |||
|     </t> | |||
|     <t t-name="DashBoardHelpDesk"> | |||
|         <link rel="stylesheet" | |||
|               href="/odoo_website_helpdesk_dashboard/static/src/css/dashboard.css"/> | |||
|         <h2 class="section-header" | |||
|             style="font-size: 2em; color:#4a5c9a;margin-top: 19px;margin-bottom: -47px;">HelpDesk Dashboard</h2> | |||
|         <div class="row main-section mt-5"> | |||
|             <div class="col-sm-6 col-md-3-12 col-md-6 col-lg-3 helpdesk inbox_tickets"> | |||
|                 <div class="dashboard_card" data-toggle="collapse"> | |||
|                     <div class="dashboard_card-body panel panel-new"> | |||
|                         <div class="stat-widget-one"> | |||
|                             <div class="stat-icon"> | |||
|                                 <i class="fa fa-inbox"/> | |||
|                             </div> | |||
|                             <div class="stat-content"> | |||
|                                 <div class="stat-text">New Tickets</div> | |||
|                                 <div class="stat-digit" id="inbox_count"/> | |||
|                             </div> | |||
|                         </div> | |||
|                     </div> | |||
|                     <div class="panel-new-collapse collapse"> | |||
|                         <div id="help_new_tickets" | |||
|                              style="border:none; font-size:14px; padding:0 15px 15px 15px;"> | |||
|                             <br/> | |||
|                             <br/> | |||
|                             <p style="font-style:italic; font-weight:700;"/> | |||
|                         </div> | |||
|                     </div> | |||
|                 </div> | |||
|             </div> | |||
|             <div class="col-sm-6 col-md-3-12 col-md-6 col-lg-3 salon_spa_orders helpdesk inprogress_tickets"> | |||
|                 <div class="dashboard_card" data-toggle="collapse"> | |||
|                     <div class="dashboard_card-body panel panel-progress"> | |||
|                         <div class="stat-widget-one"> | |||
|                             <div class="stat-icon"> | |||
|                                 <i class="fa fa-spinner"/> | |||
|                             </div> | |||
|                             <div class="stat-content"> | |||
|                                 <div class="stat-text">Tickets In Progress</div> | |||
|                                 <div class="stat-digit" id="inprogress_count"> | |||
|                                 </div> | |||
|                             </div> | |||
|                         </div> | |||
|                     </div> | |||
|                     <div class="panel-progress-collapse collapse"> | |||
|                         <div id="help_progress_tickets" | |||
|                              style="border:none; font-size:14px; padding:0 15px 15px 15px;"> | |||
|                             <br/> | |||
|                             <br/> | |||
|                             <p style="font-style:italic; font-weight:700;"/> | |||
|                         </div> | |||
|                     </div> | |||
|                 </div> | |||
|             </div> | |||
|             <div class="col-sm-6 col-md-3-12 col-md-6 col-lg-3 helpdesk done_tickets"> | |||
|                 <div class="dashboard_card" data-toggle="collapse"> | |||
|                     <div class="dashboard_card-body panel panel-done"> | |||
|                         <div class="stat-widget-one"> | |||
|                             <div class="stat-icon"> | |||
|                                 <i class="fa fa-check"/> | |||
|                             </div> | |||
|                             <div class="stat-content"> | |||
|                                 <div class="stat-text">Closed Tickets</div> | |||
|                                 <div class="stat-digit" id="done_count"> | |||
|                                 </div> | |||
|                             </div> | |||
|                         </div> | |||
|                     </div> | |||
|                     <div class="panel-done-collapse collapse"> | |||
|                         <div id="help_done_tickets" | |||
|                              style="border:none; font-size:14px; padding:0 15px 15px 15px;"> | |||
|                             <br/> | |||
|                             <br/> | |||
|                             <p style="font-style:italic; font-weight:700;"/> | |||
|                         </div> | |||
|                     </div> | |||
|                 </div> | |||
|             </div> | |||
|             <div class="col-sm-6 col-md-3-12 col-md-6 col-lg-3 helpdesk team_card"> | |||
|                 <div class="dashboard_card" data-toggle="collapse"> | |||
|                     <div class="dashboard_card-body panel panel-team"> | |||
|                         <div class="stat-widget-one"> | |||
|                             <div class="stat-icon"> | |||
|                                 <i class="fa fa-group" id="team_ico"/> | |||
|                             </div> | |||
|                             <div class="stat-content"> | |||
|                                 <div class="stat-text">HelpDesk Teams</div> | |||
|                                 <div class="stat-digit" id="team_count"> | |||
|                                 </div> | |||
|                             </div> | |||
|                         </div> | |||
|                     </div> | |||
|                     <div class="panel-team-collapse collapse"> | |||
|                         <div id="help_teams" | |||
|                              style="border:none; font-size:14px; padding:0 15px 15px 15px;"> | |||
|                             <br/> | |||
|                             <br/> | |||
|                             <p style="font-style:italic; font-weight:700;"/> | |||
|                         </div> | |||
|                     </div> | |||
|                 </div> | |||
|             </div> | |||
|             <div class="row ticket-section"> | |||
|                 <div class="col-12 col-sm-12 col-md-4 ticket_box chart-container card-shadow" | |||
|                      style="top: -21px;left: 0;z-index: 999;padding: 20px;box-sizing: border-box;"> | |||
|                     <h2 class="tickets_head">Received Tickets</h2> | |||
|                     <hr/> | |||
|                     <div class="col-xs-12 text-align"> | |||
|                         <div class="text-color"> | |||
|                             <ul class="pending_tickets"/> | |||
|                         </div> | |||
|                     </div> | |||
|                 </div> | |||
|                 <div class="col-12 col-sm-12 col-md-4"> | |||
|                     <div class="leads_month_pie_div half_chart chart-container card-shadow"> | |||
|                         <h2>Tickets by Month</h2> | |||
|                         <hr/> | |||
|                         <div class="graph_canvas"> | |||
|                             <canvas class="ticket_month"/> | |||
|                         </div> | |||
|                     </div> | |||
|                 </div> | |||
|                 <div class="col-12 col-sm-12 col-md-4"> | |||
|                     <div class="team_ticket_div half_chart chart-container card-shadow"> | |||
|                         <h2>Team - Tickets Count Ratio</h2> | |||
|                         <hr/> | |||
|                         <div class="graph_canvas"> | |||
|                             <canvas class="team_ticket_count"/> | |||
|                         </div> | |||
|                     </div> | |||
|                 </div> | |||
|                 <div class="col-12 col-sm-12 col-md-4"> | |||
|                     <div class="projects_ticket_div half_chart chart-container card-shadow"> | |||
|                         <h2>Tickets - Projects Ratio</h2> | |||
|                         <hr/> | |||
|                         <div class="graph_canvas"> | |||
|                             <canvas class="projects_ticket" width="150" | |||
|                                     height="120"/> | |||
|                         </div> | |||
|                     </div> | |||
|                 </div> | |||
|                 <div class="col-12 col-sm-12 col-md-4"> | |||
|                     <div class="billed_team_div half_chart chart-container card-shadow"> | |||
|                         <h2>Billed Task - Team ratio</h2> | |||
|                         <hr/> | |||
|                         <div class="graph_canvas"> | |||
|                             <canvas class="billed_team" width="150" | |||
|                                     height="120"/> | |||
|                         </div> | |||
|                     </div> | |||
|                 </div> | |||
|                 <div class="col-12 col-sm-12 col-md-4"> | |||
|                     <div class="team_ticket_div half_chart chart-container card-shadow"> | |||
|                         <h2>Team - Resolved Tickets</h2> | |||
|                         <hr/> | |||
|                         <div class="graph_canvas"> | |||
|                             <canvas class="team_ticket_done" width="150" | |||
|                                     height="100"/> | |||
|                         </div> | |||
|                     </div> | |||
|                 </div> | |||
|             </div> | |||
|         </div> | |||
|     </t> | |||
| </templates> | |||
| @ -0,0 +1,11 @@ | |||
| <?xml version="1.0" encoding="UTF-8" ?> | |||
| <odoo> | |||
| <!--    Website helpdesk assets--> | |||
|     <template id="help_desk_assets_backend" name="website_helpdesk assets" inherit_id="web.assets_backend"> | |||
|         <xpath expr="." position="inside"> | |||
|             <link rel="stylesheet" href="/odoo_website_helpdesk_dashboard/static/src/css/helpdesk_dashboard.css"/> | |||
|             <script type="text/javascript" src="/odoo_website_helpdesk_dashboard/static/src/js/lib/Chart.bundle.js"/> | |||
|             <script type="text/javascript" src="/odoo_website_helpdesk_dashboard/static/src/js/helpdesk_dashboard.js"/> | |||
|         </xpath> | |||
|     </template> | |||
| </odoo> | |||
| @ -0,0 +1,47 @@ | |||
| <?xml version="1.0" encoding="UTF-8" ?> | |||
| <odoo> | |||
|     <!--        Website Pending Tickets template--> | |||
|     <template id="dashboard_tickets" name="Pending Tickets template"> | |||
|         <t t-foreach="h_tickets" t-as="ticket"> | |||
|             <div class="tickets_list" t-att-id="ticket['id']" | |||
|                  t-att-value="ticket['id']"> | |||
|                 <t t-esc="ticket['name']+' | '+ticket['subject']"/> | |||
|             </div> | |||
|         </t> | |||
|     </template> | |||
|     <!--        Tickets template--> | |||
|     <template id="dashboard_ticket_detailed" name="Tickets template"> | |||
|         <t t-foreach="h_tickets" t-as="ticket"> | |||
|             <div class="col-xs-12 " style="padding:0;"> | |||
|                 <div class="ticket_box_head"> | |||
|                     <t t-esc="ticket['name']+' - ('+ticket['create_date'].strftime('%d-%b-%y')"/> | |||
|                     ) | |||
|                 </div> | |||
|             </div> | |||
|             <div class="row m-4 pt-3 w-75"> | |||
|                 <div class="col-sm-6 col-md-3-12 col-md-6 col-lg-6 "> | |||
|                     <h3 class="ticket_name"> | |||
|                         Ticket Name : | |||
|                         <t t-esc="ticket['name']"/> | |||
|                     </h3> | |||
|                     <h3 class="ticket_subject"> | |||
|                         Ticket Issue : | |||
|                         <t t-esc="ticket['subject']"/> | |||
|                     </h3> | |||
|                 </div> | |||
|                 <div class="col-sm-6 col-md-3-12 col-md-6 col-lg-3"> | |||
|                     <h4 class="ticket_customer"> | |||
|                         <t t-if="ticket['customer_name']"> | |||
|                             Customer : | |||
|                             <t t-esc="ticket['customer_name']"/> | |||
|                         </t> | |||
|                     </h4> | |||
|                     <h4 class="ticket_subject"> | |||
|                         Description : | |||
|                         <t t-esc="ticket['description']"/> | |||
|                     </h4> | |||
|                 </div> | |||
|             </div> | |||
|         </t> | |||
|     </template> | |||
| </odoo> | |||
| @ -0,0 +1,14 @@ | |||
| <?xml version="1.0" encoding="UTF-8" ?> | |||
| <odoo> | |||
|     <!--        HelpDesk Ticket action--> | |||
|     <record id="helpdesk_dashboard_action" model="ir.actions.client"> | |||
|         <field name="name">HelpDesk</field> | |||
|         <field name="tag">helpdesk_dashboard</field> | |||
|     </record> | |||
|     <menuitem id="odoo_website_helpdesk.helpdesk_menu" name="Helpdesk" | |||
|               action="helpdesk_dashboard_action" | |||
|               sequence="5"/> | |||
|     <menuitem name="Dashboard" id="helpdesk_dashboard_menu" | |||
|               parent="odoo_website_helpdesk.helpdesk_menu" sequence="0" | |||
|               action="helpdesk_dashboard_action"/> | |||
| </odoo> | |||