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, }