from Base.models import ProductList from Movement.models import Stock , Product from django.db.models import Avg, Sum def metric(): products_list = ProductList.objects.all() stones = Stock.objects.all() vendas = Product.objects.all() stones_report = [] for prod in products_list: # --- QUANTIDADES --- total_comprado = stones.filter(product__id=prod.id).aggregate(Sum('quantity'))['quantity__sum'] or 0 total_vendido = vendas.filter(product__id=prod.id).aggregate(Sum('quantity'))['quantity__sum'] or 0 estoque_atual = total_comprado - total_vendido # Média dos valores de gross_value vezes o estoque_atual media_gross = stones.filter(product__id=prod.id).aggregate(Avg('unit_value'))['unit_value__avg'] or 0 custo_total_estoque = media_gross * estoque_atual # Média dos valores de net_value vezes o estoque_atual media_net = vendas.filter(product__id=prod.id).aggregate(Avg('net_value'))['net_value__avg'] or 0 valor_liquido_vendas_estoque = media_net * estoque_atual if total_comprado > 0 or total_vendido > 0: stones_report.append({ 'produto': prod.name, 'quantidade_estoque': estoque_atual, 'valor_total_estoque_bruto': valor_liquido_vendas_estoque, 'valor_total_estoque_liquido': custo_total_estoque, 'valor_unitario_compra_medio': media_gross, # Alterado para refletir que é uma média }) return { 'Stone': stones_report, }