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.
		
		
		
		
		
			
		
			
				
					
					
						
							102 lines
						
					
					
						
							4.2 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							102 lines
						
					
					
						
							4.2 KiB
						
					
					
				| # -*- coding: utf-8 -*- | |
| ############################################################################### | |
| # | |
| #    Cybrosys Technologies Pvt. Ltd. | |
| # | |
| #    Copyright (C) 2025-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) | |
| #    Author: Anfas Faisal K (odoo@cybrosys.com) | |
| # | |
| #    This program is under the terms of the Odoo Proprietary License v1.0(OPL-1) | |
| #    It is forbidden to publish, distribute, sublicense, or sell copies of the | |
| #    Software or modified copies of the Software. | |
| # | |
| #    THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |
| #    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |
| #    FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL | |
| #    THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,DAMAGES OR OTHER | |
| #    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,ARISING | |
| #    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER | |
| #    DEALINGS IN THE SOFTWARE. | |
| # | |
| ############################################################################### | |
| from odoo import api, models | |
| from datetime import datetime, timedelta | |
| 
 | |
| 
 | |
| class FleetDashboard(models.Model): | |
|     """ | |
|     Model for the Fleet Dashboard, providing various statistics and data | |
|     related to the fleet vehicles, contracts, and invoices. | |
|     """ | |
|     _name = 'fleet.dashboard' | |
|     _description = 'Fleet Dashboard' | |
| 
 | |
|     @api.model | |
|     def get_datas(self): | |
|         """ | |
|         Retrieves overall statistics related to fleet vehicles, contracts, | |
|         and invoices. | |
|         """ | |
|         total_vehicles = self.env['fleet.vehicle'].search_count([]) | |
|         operational_vehicles = self.env['fleet.vehicle'].search_count( | |
|             [('status', '=', 'operational')]) | |
|         maintenance_vehicles = self.env['fleet.vehicle'].search_count( | |
|             [('status', '=', 'undermaintenance')]) | |
|         all_invoices = self.env['account.move'].search_count( | |
|             [('vehicle_rental_id', '!=', False)]) | |
|         pending_invoices = self.env['account.move'].search_count([ | |
|             ('vehicle_rental_id', '!=', False), | |
|             ('state', '=', 'posted'), | |
|             ('payment_state', '!=', 'paid') | |
|         ]) | |
|         total_contracts = self.env['fleet.rental.contract'].search_count([]) | |
|         total_contract_working = self.env[ | |
|             'fleet.rental.contract'].search_count( | |
|             [('state', '=', 'in_progress')]) | |
|         total_contract_returned = self.env[ | |
|             'fleet.rental.contract'].search_count( | |
|             [('state', '=', 'return')]) | |
|         total_contract_cancel = self.env['fleet.rental.contract'].search_count( | |
|             [('state', '=', 'cancel')]) | |
| 
 | |
|         return { | |
|             'total_vehicles': total_vehicles, | |
|             'total_contracts': total_contracts, | |
|             'total_contract_working': total_contract_working, | |
|             'total_contract_return': total_contract_returned, | |
|             'total_contract_cancel': total_contract_cancel, | |
|             'operational': operational_vehicles, | |
|             'under_maintenance': maintenance_vehicles, | |
|             'all_customers': self.env['res.partner'].search_count([]), | |
|             'all_invoices': all_invoices, | |
|             'pending_invoices': pending_invoices, | |
|         } | |
| 
 | |
|     @api.model | |
|     def get_monthly_contract_invoices(self): | |
|         """ | |
|         Retrieves the count of posted invoices for each month of the | |
|         current year related to vehicle rentals. | |
|         """ | |
|         current_year = datetime.now().year | |
|         data = [] | |
|         labels = ['January', 'February', 'March', 'April', 'May', 'June', | |
|                   'July', 'August', 'September', 'October', 'November', | |
|                   'December'] | |
| 
 | |
|         for month in range(1, 13): | |
|             start_date = datetime(current_year, month, 1) | |
|             end_date = (start_date + timedelta(days=32)).replace( | |
|                 day=1) - timedelta(days=1) | |
| 
 | |
|             invoice_count = self.env['account.move'].search_count([ | |
|                 ('vehicle_rental_id', '!=', False), | |
|                 ('invoice_date', '>=', start_date), | |
|                 ('invoice_date', '<=', end_date), | |
|                 ('state', '=', 'posted') | |
|             ]) | |
|             data.append(invoice_count) | |
|         return { | |
|             'labels': labels, | |
|             'data': data | |
|         }
 | |
| 
 |