37 lines
1.5 KiB
Python
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,
|
|
}
|