Files
CenterPes/Base/Metrics/Dashboard/get_sum_of_professional_detail.py
2026-01-02 09:19:43 -03:00

53 lines
2.0 KiB
Python

from Base.models import Professional , ServiceList
from Movement.models import Calendar
# from django.utils import timezone
from django.db.models import Sum
def metric(Day):
professionals = Professional.objects.all()
services = ServiceList.objects.all()
# Importante: removi o .values() aqui para podermos acessar os objetos relacionados (como cliente)
service_movement = Calendar.objects.filter(date=Day)
professionals_report = {}
for professional in professionals:
professionals_report[professional.name] = {}
for service in services:
# Filtramos os agendamentos específicos deste profissional e serviço
service_sum = service_movement.filter(
professional=professional,
service=service,
)
# Cálculo dos totais
servSum = service_sum.aggregate(Sum('gross_value'))['gross_value__sum'] or 0
servCont = service_sum.count()
# --- NOVA PARTE: Detalhamento dos clientes ---
# Criamos uma lista com o nome completo de cada cliente atendido
clients_list = []
for appointment in service_sum:
client_name = f"{appointment.client.first_name} {appointment.client.last_name}"
clients_list.append({
'name': client_name,
'time': appointment.time.strftime('%H:%M'), # Opcional: mostra o horário
'value': appointment.gross_value
})
# ---------------------------------------------
professionals_report[professional.name][service.name] = {
'servSum': servSum,
'servCont': servCont,
'clients': clients_list, # Aqui estão os detalhes que você pediu
}
# Cálculo do total geral simplificado
sum_of_prof = service_movement.aggregate(Sum('gross_value'))['gross_value__sum'] or 0
return {
'professionals_report': professionals_report,
'sum_of_prof': sum_of_prof,
}