first commit

This commit is contained in:
2026-01-02 09:19:43 -03:00
parent 63cf724aaf
commit cc44b7ef4f
187 changed files with 2484 additions and 686 deletions

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

View File

@@ -7,8 +7,9 @@ from Base.models import (
from Movement.models import (
Calendar,
Product,
Expense,
Stock
ExpenseOrCredit,
Stock,
Transition
)
def metric():
@@ -36,31 +37,46 @@ def metric():
# pegando total de Desspesas
sum_expense = {}
for bank in banks:
sum_bank = Expense.objects.filter(
sum_bank = ExpenseOrCredit.objects.filter(
# active=True,
firm=True,
# firm=True,
debit=True,
credit=False,
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 = {}
# pegando total de Desspesas Profissinal
sum_expense_credit = {}
for bank in banks:
sum_bank = Expense.objects.filter(
sum_bank = ExpenseOrCredit.objects.filter(
# active=True,
firm=False,
# firm=True,
debit=False,
credit=True,
bank__name=bank.name,
).aggregate(Sum('gross_value'))['gross_value__sum'] or 0
sum_expense_prof[bank.name] = sum_bank
sum_expense_credit[bank.name] = sum_bank
# Valores de entrada do estoque
sum_stock = {}
# Valores trans. de entrada
sum_transition_credit = {}
for bank in banks:
sum_bank = Stock.objects.filter(
sum_bank = Transition.objects.filter(
# active=True,
bank__name=bank.name,
bank_credit__name=bank.name,
).aggregate(Sum('gross_value'))['gross_value__sum'] or 0
sum_stock[bank.name] = sum_bank
sum_transition_credit[bank.name] = sum_bank
# Valores trans. de saida
sum_transition_debit = {}
for bank in banks:
sum_bank = Transition.objects.filter(
# active=True,
bank_debit__name=bank.name,
).aggregate(Sum('gross_value'))['gross_value__sum'] or 0
sum_transition_debit[bank.name] = sum_bank
# saldo total de tudo
sum_total = {}
@@ -68,15 +84,23 @@ def metric():
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_expense_credit_get = sum_expense_credit.get(str(bank.name))
sum_sum_transition_credit = sum_transition_credit.get(str(bank.name))
sum_sum_transition_debit = sum_transition_debit.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
sum_mov_prod_get +
sum_expense_credit_get +
sum_sum_transition_credit -
sum_sum_transition_debit -
sum_expense_get
)
return sum_total
sum_all = sum(sum_total.values()) or 0
return {
'sum_total':sum_total,
'sum_all':sum_all,
}

View File

@@ -0,0 +1,46 @@
from django.db.models import Sum
from django.utils import timezone
from Base.models import (
BankAccount,
ChartOfAccount
)
from Movement.models import (
ExpenseOrCredit,
)
def metric():
# Lista de Bancos
current_month = timezone.localtime(timezone.now()).month
current_year = timezone.localtime(timezone.now()).year
banks = ChartOfAccount.objects.filter(
debit=False,
credit=True,
firm=False,
)
# pegando total de Desspesas Profissinal
sum_expense_prof = {}
for bank in banks:
sum_bank = ExpenseOrCredit.objects.filter(
# active=True,
date__month=current_month,
date__year=current_year,
firm=False,
debit=False,
credit=True,
chart_of_account__name=bank.name,
).aggregate(Sum('gross_value'))['gross_value__sum'] or 0
if sum_bank > 0:
sum_expense_prof[bank.name] = sum_bank
# saldo total de tudo
sum_total = {}
for bank in sum_expense_prof:
sum_expense_get = sum_expense_prof.get(str(bank))
sum_total[bank] = sum_expense_get
sum_all = sum(sum_total.values()) or 0
return {
'sum_total':sum_total,
'sum_all':sum_all,
}

View File

@@ -0,0 +1,45 @@
from django.db.models import Sum
from django.utils import timezone
from collections import defaultdict
from datetime import date
from Base.models import (
BankAccount,
ChartOfAccount
)
from Movement.models import (
ExpenseOrCredit,
)
def metric():
today = date.today()
expenses = ExpenseOrCredit.objects.filter(
firm=True,
debit=True,
date__month=today.month,
date__year=today.year
).select_related('bank', 'chart_of_account').order_by('bank', 'date')
# Estrutura: { 'Nome do Banco': {'registros': [...], 'total_banco': 0} }
grouped_data = {}
total_geral = 0
for expense in expenses:
bank_name = expense.bank.name
if bank_name not in grouped_data:
grouped_data[bank_name] = {'registros': [], 'total_banco': 0}
grouped_data[bank_name]['registros'].append(expense)
# Soma os valores
valor = float(expense.gross_value)
grouped_data[bank_name]['total_banco'] += valor
total_geral += valor
return {
'grouped_data': grouped_data,
'total_geral': total_geral,
}

View File

@@ -0,0 +1,46 @@
from django.db.models import Sum
from django.utils import timezone
from Base.models import (
BankAccount,
ChartOfAccount
)
from Movement.models import (
ExpenseOrCredit,
)
def metric():
# Lista de Bancos
current_month = timezone.localtime(timezone.now()).month
current_year = timezone.localtime(timezone.now()).year
banks = ChartOfAccount.objects.filter(
debit=True,
credit=False,
firm=False,
)
# pegando total de Desspesas Profissinal
sum_expense_prof = {}
for bank in banks:
sum_bank = ExpenseOrCredit.objects.filter(
# active=True,
date__month=current_month,
date__year=current_year,
firm=False,
debit=True,
credit=False,
chart_of_account__name=bank.name,
).aggregate(Sum('gross_value'))['gross_value__sum'] or 0
if sum_bank > 0:
sum_expense_prof[bank.name] = sum_bank
# saldo total de tudo
sum_total = {}
for bank in sum_expense_prof:
sum_expense_get = sum_expense_prof.get(str(bank))
sum_total[bank] = sum_expense_get
sum_all = sum(sum_total.values()) or 0
return {
'sum_total':sum_total,
'sum_all':sum_all,
}

View File

@@ -0,0 +1,36 @@
from django.db.models import Sum,Count
from django.utils import timezone
from Base.models import (
ServiceList,
)
from Movement.models import (
Calendar,
)
def metric():
now = timezone.localtime(timezone.now())
current_month = now.month
current_year = now.year
# Criamos um queryset base para evitar repetição de filtros
base_queryset = Calendar.objects.filter(
date__month=current_month,
date__year=current_year
)
# Breakdown (Agrupado por profissional e serviço)
services_breakdown = base_queryset.values(
'professional__name',
'service__name'
).annotate(
quantidade_feitas=Count('id'),
lucro_liquido=Sum('value_cash')
).order_by('professional__name', 'service__name')
# Total geral de lucro no mês
total_geral = base_queryset.aggregate(total=Sum('value_cash'))['total'] or 0
return {
'services': services_breakdown,
'total': total_geral
}

View File

@@ -1,39 +1,59 @@
from django.db.models import Sum
from django.utils import timezone
from Base.models import Professional
from Movement.models import Calendar, Expense
from Movement.models import Calendar, ExpenseOrCredit
def metric():
Professionals = Professional.objects.all()
# current_month = timezone.localtime(timezone.now()).month
# current_year = timezone.localtime(timezone.now()).year
current_month = timezone.localtime(timezone.now()).month
current_year = timezone.localtime(timezone.now()).year
sum_expense_prof = {}
for Prof in Professionals:
sum_ = Expense.objects.filter(
# active=True,
firm=False,
professional__name=Prof.name,
# date__month=current_month,
# date__year=current_year
).aggregate(Sum('gross_value'))['gross_value__sum'] or 0
sum_expense_prof[Prof.name] = sum_
sum_serv_prof = {}
for Prof in Professionals:
sum_ = Calendar.objects.filter(
# active=True,
professional__name=Prof.name,
# date__month=current_month,
# date__year=current_year
professional__id=Prof.id,
date__month= current_month,
date__year= current_year
).aggregate(Sum('prof_money'))['prof_money__sum'] or 0
sum_serv_prof[Prof.name] = sum_
sum_expense_prof[Prof.name] = sum_
sum_serv_prof_credit = {}
for Prof in Professionals:
sum_ = ExpenseOrCredit.objects.filter(
# active=True,
firm=False,
debit=False,
credit=True,
professional__id=Prof.id,
date__month= current_month,
date__year= current_year
).aggregate(Sum('gross_value'))['gross_value__sum'] or 0
sum_serv_prof_credit[Prof.name] = sum_
sum_serv_prof_debit = {}
for Prof in Professionals:
sum_ = ExpenseOrCredit.objects.filter(
# active=True,
firm=False,
debit=True,
credit=False,
professional__id=Prof.id,
date__month= current_month,
date__year= current_year
).aggregate(Sum('gross_value'))['gross_value__sum'] or 0
sum_serv_prof_debit[Prof.name] = sum_
sum_total = {}
for total in Professionals:
sum1 = sum_serv_prof.get(str(total.name))
sum2 = sum_expense_prof.get(str(total.name))
sum_total[total.name] = ( sum1 - sum2 )
sum1 = sum_expense_prof.get(str(total.name))
sum2 = sum_serv_prof_credit.get(str(total.name))
sum3 = sum_serv_prof_debit.get(str(total.name))
sum_total[total.name] = ( sum1 + sum2 - sum3 )
return sum_total
sum_all = sum(sum_total.values()) or 0
return {
'sum_total':sum_total,
'sum_all':sum_all,
}