You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							162 lines
						
					
					
						
							7.5 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							162 lines
						
					
					
						
							7.5 KiB
						
					
					
				| # -*- coding: utf-8 -*- | |
| ################################################################################ | |
| # | |
| #    Cybrosys Technologies Pvt. Ltd. | |
| # | |
| #    Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) | |
| #    Author: Bhagyadev KP (<https://www.cybrosys.com>) | |
| # | |
| #    You can modify it under the terms of the GNU LESSER | |
| #    GENERAL PUBLIC LICENSE (LGPL v3), Version 3. | |
| # | |
| #    This program is distributed in the hope that it will be useful, | |
| #    but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | |
| #    GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. | |
| # | |
| #    You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE | |
| #    (LGPL v3) along with this program. | |
| #    If not, see <http://www.gnu.org/licenses/>. | |
| # | |
| ################################################################################ | |
| import datetime as DT | |
| from odoo import http | |
| from odoo.http import request | |
| 
 | |
| 
 | |
| class HelpDeskDashboard(http.Controller): | |
|     """Controller for handling Help Desk dashboard requests.""" | |
| 
 | |
|     @http.route(['/helpdesk_dashboard'], type='json', auth="public") | |
|     def helpdesk_dashboard(self): | |
|         """Retrieves statistics for tickets in different stages. | |
|         Returns:dict: Dashboard statistics including counts and IDs for each | |
|         stage. | |
|         """ | |
|         stage_names = ['Inbox', 'Draft', 'In Progress', 'Canceled', 'Done', | |
|                        'Closed'] | |
|         stage_ids = { | |
|             name: request.env['ticket.stage'].search([('name', '=', name)], | |
|                                                      limit=1).id for name in | |
|             stage_names} | |
|         new_stages = [stage_ids['Inbox'], stage_ids['Draft']] | |
|         def get_ticket_data(stage_ids): | |
|             tickets = request.env["ticket.helpdesk"].search( | |
|                 [('stage_id', 'in', stage_ids)]) | |
|             return len(tickets), [ticket.id for ticket in tickets] | |
|         dashboard_values = { | |
|             'new': (get_ticket_data(new_stages))[0], | |
|             'new_id': (get_ticket_data(new_stages))[1], | |
|             'in_progress': (get_ticket_data([stage_ids['In Progress']]))[0], | |
|             'in_progress_id': (get_ticket_data([stage_ids['In Progress']]))[1], | |
|             'canceled': (get_ticket_data([stage_ids['Canceled']]))[0], | |
|             'canceled_id': (get_ticket_data([stage_ids['Canceled']]))[1], | |
|             'done': (get_ticket_data([stage_ids['Done']]))[0], | |
|             'done_id': (get_ticket_data([stage_ids['Done']]))[1], | |
|             'closed': (get_ticket_data([stage_ids['Closed']]))[0], | |
|             'closed_id': (get_ticket_data([stage_ids['Closed']]))[1]} | |
|         return dashboard_values | |
| 
 | |
|     def helpdesk_dashboard_week(self): | |
|         """ Retrieves statistics for tickets created in the past week. | |
|         Returns: | |
|         dict: Dashboard statistics including counts and IDs for each stage.""" | |
|         today = DT.date.today() | |
|         week_ago = str(today - DT.timedelta(days=7)) + ' ' | |
|         stage_names = ['Inbox', 'Draft', 'In Progress', 'Canceled', 'Done', | |
|                        'Closed'] | |
|         stages = { | |
|             name: request.env['ticket.stage'].search([('name', '=', name)], | |
|                                                      limit=1).id for name in | |
|             stage_names} | |
|         stage_ids = [stages['Inbox'], stages['Draft']] | |
|         def get_ticket_data(stage_id): | |
|             count = request.env["ticket.helpdesk"].search_count( | |
|                 [('stage_id', '=', stage_id), ('create_date', '>', week_ago)]) | |
|             ids = request.env["ticket.helpdesk"].search( | |
|                 [('stage_id', '=', stage_id), | |
|                  ('create_date', '>', week_ago)]).ids | |
|             return count, ids | |
|         new_count, new_ids = get_ticket_data(stage_ids) | |
|         in_progress_count, in_progress_ids = get_ticket_data( | |
|             stages['In Progress']) | |
|         canceled_count, canceled_ids = get_ticket_data(stages['Canceled']) | |
|         done_count, done_ids = get_ticket_data(stages['Done']) | |
|         closed_count, closed_ids = get_ticket_data(stages['Closed']) | |
|         dashboard_values = { | |
|             'new': new_count, | |
|             'in_progress': in_progress_count, | |
|             'canceled': canceled_count, | |
|             'done': done_count, | |
|             'closed': closed_count, | |
|             'new_id': new_ids, | |
|             'in_progress_id': in_progress_ids, | |
|             'canceled_id': canceled_ids, | |
|             'done_id': done_ids, | |
|             'closed_id': closed_ids, | |
|         } | |
|         return dashboard_values | |
| 
 | |
|     @http.route(['/helpdesk_dashboard_month'], type='json', auth="public") | |
|     def helpdesk_dashboard_month(self): | |
|         """Retrieves statistics for tickets created in the past month. | |
|         Returns: | |
|           dict: Dashboard statistics including counts and IDs for each stage.""" | |
|         today = DT.date.today() | |
|         month_ago = today - DT.timedelta(days=30) | |
|         week_ago = str(month_ago) + ' ' | |
|         stages = request.env['ticket.stage'].search([('name', 'in', | |
|                                                       ['Inbox', 'Draft', | |
|                                                        'In Progress', | |
|                                                        'Canceled', 'Done', | |
|                                                        'Closed'])]) | |
|         stage_ids = {stage.name: stage.id for stage in stages} | |
|         def get_stage_data(stage_names): | |
|             stage_ids_list = [stage_ids[name] for name in stage_names] | |
|             tickets = request.env["ticket.helpdesk"].search( | |
|                 [('stage_id', 'in', stage_ids_list), | |
|                  ('create_date', '>', week_ago)]) | |
|             return len(tickets), [ticket.id for ticket in tickets] | |
|         new_count, new_ids = get_stage_data(['Inbox', 'Draft']) | |
|         in_progress_count, in_progress_ids = get_stage_data(['In Progress']) | |
|         canceled_count, canceled_ids = get_stage_data(['Canceled']) | |
|         done_count, done_ids = get_stage_data(['Done']) | |
|         closed_count, closed_ids = get_stage_data(['Closed']) | |
|         dashboard_values = { | |
|             'new': new_count, | |
|             'in_progress': in_progress_count, | |
|             'canceled': canceled_count, | |
|             'done': done_count, | |
|             'closed': closed_count, | |
|             'new_id': new_ids, | |
|             'in_progress_id': in_progress_ids, | |
|             'canceled_id': canceled_ids, | |
|             'done_id': done_ids, | |
|             'closed_id': closed_ids, | |
|         } | |
|         return dashboard_values | |
| 
 | |
|     @http.route(['/helpdesk_dashboard_year'], type='json', auth="public") | |
|     def helpdesk_dashboard_year(self): | |
|         """Retrieves statistics for tickets created in the past year. | |
|         Returns: | |
|             dict: Dashboard statistics including counts and IDs for each stage. | |
|         """ | |
|         today = DT.date.today() | |
|         year_ago = today - DT.timedelta(days=360) | |
|         stages = ['Inbox', 'Draft', 'In Progress', 'Canceled', 'Done', 'Closed'] | |
|         stage_ids = { | |
|             stage: request.env['ticket.stage'].search([('name', '=', stage)], | |
|                                                       limit=1).id for stage in | |
|             stages} | |
|         def get_ticket_data(stage_name): | |
|             stage_id = stage_ids[stage_name] | |
|             tickets = request.env["ticket.helpdesk"].search( | |
|                 [('stage_id', '=', stage_id), ('create_date', '>', year_ago)]) | |
|             return len(tickets), [ticket.id for ticket in tickets] | |
|         dashboard_values = {} | |
|         for stage in stages: | |
|             count, ids = get_ticket_data(stage) | |
|             dashboard_values[stage.lower()] = count | |
|             dashboard_values[f'{stage.lower()}_id'] = ids | |
|         return dashboard_values
 | |
| 
 |