Files
CenterPes/Base/Metrics/DashboardAdmin/get_sum_of_stone.py
2026-01-02 09:19:43 -03:00

37 lines
1.5 KiB
Python

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