first commit
This commit is contained in:
36
Base/Metrics/DashboardAdmin/get_sum_of_stone.py
Normal file
36
Base/Metrics/DashboardAdmin/get_sum_of_stone.py
Normal file
@@ -0,0 +1,36 @@
|
||||
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,
|
||||
}
|
||||
Reference in New Issue
Block a user