from django.db.models import Sum from django.utils import timezone from Base.models import Professional from Movement.models import Calendar, ExpenseOrCredit def metric(): Professionals = Professional.objects.all() current_month = timezone.localtime(timezone.now()).month current_year = timezone.localtime(timezone.now()).year sum_expense_prof = {} for Prof in Professionals: sum_ = Calendar.objects.filter( # active=True, professional__id=Prof.id, date__month= current_month, date__year= current_year ).aggregate(Sum('prof_money'))['prof_money__sum'] or 0 sum_expense_prof[Prof.name] = sum_ sum_serv_prof_credit = {} for Prof in Professionals: sum_ = ExpenseOrCredit.objects.filter( # active=True, firm=False, debit=False, credit=True, professional__id=Prof.id, date__month= current_month, date__year= current_year ).aggregate(Sum('gross_value'))['gross_value__sum'] or 0 sum_serv_prof_credit[Prof.name] = sum_ sum_serv_prof_debit = {} for Prof in Professionals: sum_ = ExpenseOrCredit.objects.filter( # active=True, firm=False, debit=True, credit=False, professional__id=Prof.id, date__month= current_month, date__year= current_year ).aggregate(Sum('gross_value'))['gross_value__sum'] or 0 sum_serv_prof_debit[Prof.name] = sum_ sum_total = {} for total in Professionals: sum1 = sum_expense_prof.get(str(total.name)) sum2 = sum_serv_prof_credit.get(str(total.name)) sum3 = sum_serv_prof_debit.get(str(total.name)) sum_total[total.name] = ( sum1 + sum2 - sum3 ) sum_all = sum(sum_total.values()) or 0 return { 'sum_total':sum_total, 'sum_all':sum_all, }