from django.db.models import Sum from django.utils import timezone from Base.models import ( PayMethod, BankAccount, ) from Movement.models import ( Calendar, Product, Expense, Stock ) 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 = Expense.objects.filter( # active=True, firm=True, 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_prof = {} for bank in banks: sum_bank = Expense.objects.filter( # active=True, firm=False, bank__name=bank.name, ).aggregate(Sum('gross_value'))['gross_value__sum'] or 0 sum_expense_prof[bank.name] = sum_bank # Valores de entrada do estoque sum_stock = {} for bank in banks: sum_bank = Stock.objects.filter( # active=True, bank__name=bank.name, ).aggregate(Sum('gross_value'))['gross_value__sum'] or 0 sum_stock[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_prof_get = sum_expense_prof.get(str(bank.name)) sum_sum_stock = sum_stock.get(str(bank.name)) sum_total[bank.name] = ( sum_mov_serv_get + sum_mov_prod_get - sum_expense_get - sum_expense_prof_get - sum_sum_stock ) return sum_total