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.
 
 
 
 
 

310 lines
15 KiB

# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
# Author: Gayathri V (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 fields, models
from odoo.tools import date_utils
class CleaningManagementDashBoard(models.Model):
"""Creating new model to extract counts for bookings, cleanings,
and dirty states, intended for visualization on a dashboard."""
_name = "cleaning.management.dashboard"
_description = "Cleaning Management Dashboard"
def get_dashboard_count(self):
"""Getting count of bookings,teams,cleaning and dirty count"""
bookings = self.env['cleaning.booking'].search_count([
('state', '=', 'booked')])
teams = self.env['cleaning.team'].search_count([])
cleaning_counts = self.env['cleaning.inspection'].search_count([
('state', '=', 'cleaned')])
dirty_counts = self.env['cleaning.inspection'].search_count([
('state', '=', 'dirty')])
values = {
'bookings': bookings,
'teams': teams,
'cleaned': cleaning_counts,
'dirty': dirty_counts
}
return values
def get_the_booking_year(self):
"""Get year wise booking"""
cleaning = self.env['cleaning.booking']
total_booking_stage_year = cleaning.search([]).filtered(
lambda l: l.booking_date.year == fields.date.today().year).mapped(
'state')
year_stage = [*set(total_booking_stage_year)]
order_of_stages = ['draft', 'booked', 'cleaned', 'cancelled']
# Sort the stages based on the predefined order
sorted_stages = sorted(year_stage,
key=lambda x: order_of_stages.index(x))
year_booking_stages = [stage.capitalize() for stage in sorted_stages]
total_booking_stage_draft_year = cleaning.search([
('state', '=', 'draft')]).filtered(
lambda l: l.booking_date.year == fields.date.today().year)
total_booking_stage_booked_year = cleaning.search([
('state', '=', 'booked')]).filtered(
lambda l: l.booking_date.year == fields.date.today().year)
total_booking_stage_cleaned_year = cleaning.search([
('state', '=', 'cleaned')]).filtered(
lambda l: l.booking_date.year == fields.date.today().year)
total_booking_stage_canceled_year = cleaning.search([
('state', '=', 'cancelled')]).filtered(
lambda l: l.booking_date.year == fields.date.today().year)
return {
'total_booking_stage_year': year_booking_stages,
'total_booking_stage_draft_year': len(
total_booking_stage_draft_year),
'total_booking_stage_booked_year': len(
total_booking_stage_booked_year),
'total_booking_stage_cleaned_year': len(
total_booking_stage_cleaned_year),
'total_booking_stage_canceled_year': len(
total_booking_stage_canceled_year)
}
def get_the_booking_month(self):
"""Get month wise booking"""
cleaning = self.env['cleaning.booking']
total_booking_stage_month = cleaning.search([]).filtered(
lambda l: l.booking_date.month == fields.date.today().month).mapped(
'state')
month_stage = [*set(total_booking_stage_month)]
order_of_stages = ['draft', 'booked', 'cleaned', 'cancelled']
# Sort the stages based on the predefined order
sorted_stages = sorted(month_stage,
key=lambda x: order_of_stages.index(x))
monthly_booking_stages = [stage.capitalize() for stage in sorted_stages]
total_booking_stage_draft_month = cleaning.search(
[('state', '=', 'draft')]).filtered(
lambda l: l.booking_date.month == fields.date.today().month)
total_booking_stage_booked_month = cleaning.search([
('state', '=', 'booked')]).filtered(
lambda l: l.booking_date.month == fields.date.today().month)
total_booking_stage_cleaned_month = cleaning.search([
('state', '=', 'cleaned')]).filtered(
lambda l: l.booking_date.month == fields.date.today().month)
total_booking_stage_canceled_month = cleaning.search([
('state', '=', 'cancelled')]).filtered(
lambda l: l.booking_date.month == fields.date.today().month)
return {
'total_booking_stage_month': monthly_booking_stages,
'total_booking_stage_draft_month': len(
total_booking_stage_draft_month),
'total_booking_stage_booked_month': len(
total_booking_stage_booked_month),
'total_booking_stage_cleaned_month': len(
total_booking_stage_cleaned_month),
'total_booking_stage_canceled_month': len(
total_booking_stage_canceled_month),
}
def get_the_booking_week(self):
"""Get week wise booking"""
cleaning = self.env['cleaning.booking']
total_booking_stage_week = cleaning.search([]).filtered(
lambda l: l.booking_date.isocalendar()[1] ==
fields.date.today().isocalendar()[1]).mapped('state')
week_stage = [*set(total_booking_stage_week)]
order_of_stages = ['draft', 'booked', 'cleaned', 'cancelled']
# Sort the stages based on the predefined order
sorted_stages = sorted(week_stage,
key=lambda x: order_of_stages.index(x))
weekly_booking_stages = [stage.capitalize() for stage in sorted_stages]
total_booking_stage_draft_week = cleaning.search([
('state', '=', 'draft')]).filtered(
lambda l: l.booking_date.isocalendar()[1] ==
fields.date.today().isocalendar()[1])
total_booking_stage_booked_week = cleaning.search([
('state', '=', 'booked')]).filtered(
lambda l: l.booking_date.isocalendar()[1] ==
fields.date.today().isocalendar()[1])
total_booking_stage_cleaned_week = cleaning.search([
('state', '=', 'cleaned')]).filtered(
lambda l: l.booking_date.isocalendar()[1] ==
fields.date.today().isocalendar()[1])
total_booking_stage_canceled_week = cleaning.search([
('state', '=', 'cancelled')]).filtered(
lambda l: l.booking_date.isocalendar()[1] ==
fields.date.today().isocalendar()[1])
return {
'total_booking_stage_week': weekly_booking_stages,
'total_booking_stage_draft_week': len(
total_booking_stage_draft_week),
'total_booking_stage_booked_week': len(
total_booking_stage_booked_week),
'total_booking_stage_cleaned_week': len(
total_booking_stage_cleaned_week),
'total_booking_stage_canceled_week': len(
total_booking_stage_canceled_week),
}
def get_the_booking_quarter(self):
"""Get quarter wise booking"""
cleaning = self.env['cleaning.booking']
start_date, end_date = date_utils.get_quarter(fields.date.today())
total_booking_stage_quarter = cleaning.search([]).filtered(
lambda l: start_date <= l.booking_date <= end_date).mapped('state')
quarter_stage = [*set(total_booking_stage_quarter)]
order_of_stages = ['draft', 'booked', 'cleaned', 'cancelled']
# Sort the stages based on the predefined order
sorted_stages = sorted(quarter_stage,
key=lambda x: order_of_stages.index(x))
quarterly_booking_stages = [stage.capitalize() for stage in sorted_stages]
total_booking_stage_draft_quarter = cleaning.search([
('state', '=', 'draft')]).filtered(
lambda l: start_date <= l.booking_date <= end_date)
total_booking_stage_booked_quarter = cleaning.search([
('state', '=', 'booked')]).filtered(
lambda l: start_date <= l.booking_date <= end_date)
total_booking_stage_cleaned_quarter = cleaning.search([
('state', '=', 'cleaned')]).filtered(
lambda l: start_date <= l.booking_date <= end_date)
total_booking_stage_canceled_quarter = cleaning.search([
('state', '=', 'cancelled')]).filtered(
lambda l: start_date <= l.booking_date <= end_date)
return {
'total_booking_stage_quarter': quarterly_booking_stages,
'total_booking_stage_draft_quarter': len(
total_booking_stage_draft_quarter),
'total_booking_stage_booked_quarter': len(
total_booking_stage_booked_quarter),
'total_booking_stage_cleaned_quarter': len(
total_booking_stage_cleaned_quarter),
'total_booking_stage_canceled_quarter': len(
total_booking_stage_canceled_quarter),
}
def quality_year(self):
"""Get year wise quality of cleaning"""
quality = self.env['cleaning.inspection']
quality_year = quality.search([]).filtered(
lambda
l: l.inspection_date_and_time.year == fields.date.today().year).mapped(
'state')
year_stage = [*set(quality_year)]
order_of_stages = ['cleaned', 'dirty']
# Sort the stages based on the predefined order
sorted_stages = sorted(year_stage,
key=lambda x: order_of_stages.index(x))
yearly_quality_stages = [stage.capitalize() for stage in sorted_stages]
cleaned_quality_year = quality.search([
('state', '=', 'cleaned')]).filtered(
lambda
l: l.inspection_date_and_time.year == fields.date.today().year)
dirty_quality_year = quality.search([('state', '=', 'dirty')]).filtered(
lambda
l: l.inspection_date_and_time.year == fields.date.today().year)
return {
'quality_year': yearly_quality_stages,
'cleaned_quality_year': len(cleaned_quality_year),
'dirty_quality_year': len(dirty_quality_year)
}
def quality_month(self):
"""Get month wise quality of cleaning"""
quality = self.env['cleaning.inspection'].search([])
quality_month = quality.search([]).filtered(
lambda
l: l.inspection_date_and_time.month == fields.date.today().month).mapped(
'state')
month_stage = [*set(quality_month)]
order_of_stages = ['cleaned', 'dirty']
# Sort the stages based on the predefined order
sorted_stages = sorted(month_stage,
key=lambda x: order_of_stages.index(x))
monthly_quality_stages = [stage.capitalize() for stage in sorted_stages]
cleaned_quality_month = quality.search([
('state', '=', 'cleaned')]).filtered(
lambda
l: l.inspection_date_and_time.month == fields.date.today().month)
dirty_quality_month = quality.search(
[('state', '=', 'dirty')]).filtered(
lambda
l: l.inspection_date_and_time.month == fields.date.today().month)
return {
'quality_month': monthly_quality_stages,
'cleaned_quality_month': len(cleaned_quality_month),
'dirty_quality_month': len(dirty_quality_month)
}
def quality_week(self):
"""Get week wise quality of cleaning"""
quality = self.env['cleaning.inspection']
quality_week = quality.search([]).filtered(
lambda l: l.inspection_date_and_time.isocalendar()[1] ==
fields.date.today().isocalendar()[1]).mapped('state')
week_stage = [*set(quality_week)]
order_of_stages = ['cleaned', 'dirty']
# Sort the stages based on the predefined order
sorted_stages = sorted(week_stage,
key=lambda x: order_of_stages.index(x))
capitalized_stages = [stage.capitalize() for stage in sorted_stages]
cleaned_quality_week = quality.search([
('state', '=', 'cleaned')]).filtered(
lambda l: l.inspection_date_and_time.isocalendar()[1] ==
fields.date.today().isocalendar()[1])
dirty_quality_week = quality.search([
('state', '=', 'dirty')]).filtered(
lambda l: l.inspection_date_and_time.isocalendar()[1] ==
fields.date.today().isocalendar()[1])
return {
'quality_week': capitalized_stages,
'cleaned_quality_week': len(cleaned_quality_week),
'dirty_quality_week': len(dirty_quality_week)
}
def quality_quarter(self):
"""Get quarter wise quality of cleaning"""
start_date, end_date = date_utils.get_quarter(fields.datetime.today())
quality = self.env['cleaning.inspection']
quality_quarter = quality.search([]).filtered(
lambda
l: start_date <= l.inspection_date_and_time <= end_date).mapped(
'state')
quarter_stage = [*set(quality_quarter)]
order_of_stages = ['cleaned', 'dirty']
# Sort the stages based on the predefined order
sorted_stages = sorted(quarter_stage,
key=lambda x: order_of_stages.index(x))
capitalized_stages = [stage.capitalize() for stage in sorted_stages]
cleaned_quality_quarter = quality.search([
('state', '=', 'cleaned')]).filtered(
lambda l: start_date <= l.inspection_date_and_time <= end_date)
dirty_quality_quarter = quality.search([
('state', '=', 'dirty')]).filtered(
lambda l: start_date <= l.inspection_date_and_time <= end_date)
return {
'quality_quarter': capitalized_stages,
'cleaned_quality_quarter': len(cleaned_quality_quarter),
'dirty_quality_quarter': len(dirty_quality_quarter)
}
def cleaning_count(self):
"""Creating a function to retrieve the counts of bookings,
cleanings, and dirty states."""
return {
'bookings': [rec for rec in
self.env['cleaning.booking'].search([])],
'inspections': [rec for rec in
self.env['cleaning.inspection'].search([])]
}