from django.db.models import Sum from django.utils import timezone from Base.models import ( PayMethod, BankAccount, ) from Movement.models import ( Calendar, Product, ExpenseOrCredit, Stock, Transition ) def metric(): # Lista de Bancos banks = BankAccount.objects.all() # pegando total de Serviços sum_mov_serv = {} for bank in banks: sum_bank = Calendar.objects.filter( # active = True, pay_method__bank__name = bank.name, ).aggregate(Sum('net_value'))['net_value__sum'] or 0 sum_mov_serv[bank.name] = sum_bank # pegando total de Produtos sum_mov_prod = {} for bank in banks: sum_bank = Product.objects.filter( # active=True, pay_method__bank__name=bank.name, ).aggregate(Sum('net_value'))['net_value__sum'] or 0 sum_mov_prod[bank.name] = sum_bank # pegando total de Desspesas sum_expense = {} for bank in banks: sum_bank = ExpenseOrCredit.objects.filter( # active=True, # firm=True, debit=True, credit=False, bank__name=bank.name, ).aggregate(Sum('gross_value'))['gross_value__sum'] or 0 sum_expense[bank.name] = sum_bank # pegando total de Desspesas Profissinal sum_expense_credit = {} for bank in banks: sum_bank = ExpenseOrCredit.objects.filter( # active=True, # firm=True, debit=False, credit=True, bank__name=bank.name, ).aggregate(Sum('gross_value'))['gross_value__sum'] or 0 sum_expense_credit[bank.name] = sum_bank # Valores trans. de entrada sum_transition_credit = {} for bank in banks: sum_bank = Transition.objects.filter( # active=True, bank_credit__name=bank.name, ).aggregate(Sum('gross_value'))['gross_value__sum'] or 0 sum_transition_credit[bank.name] = sum_bank # Valores trans. de saida sum_transition_debit = {} for bank in banks: sum_bank = Transition.objects.filter( # active=True, bank_debit__name=bank.name, ).aggregate(Sum('gross_value'))['gross_value__sum'] or 0 sum_transition_debit[bank.name] = sum_bank # saldo total de tudo sum_total = {} for bank in banks: sum_mov_serv_get = sum_mov_serv.get(str(bank.name)) sum_mov_prod_get = sum_mov_prod.get(str(bank.name)) sum_expense_get = sum_expense.get(str(bank.name)) sum_expense_credit_get = sum_expense_credit.get(str(bank.name)) sum_sum_transition_credit = sum_transition_credit.get(str(bank.name)) sum_sum_transition_debit = sum_transition_debit.get(str(bank.name)) sum_total[bank.name] = ( sum_mov_serv_get + sum_mov_prod_get + sum_expense_credit_get + sum_sum_transition_credit - sum_sum_transition_debit - sum_expense_get ) sum_all = sum(sum_total.values()) or 0 return { 'sum_total':sum_total, 'sum_all':sum_all, }