Ajustado abas tela parâmetro
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
2025-08-11 23:02:55 -03:00
parent bc05faafea
commit fb08efed1d
2 changed files with 58 additions and 40 deletions

View File

@@ -23,8 +23,11 @@ import pandas as pd
from io import BytesIO from io import BytesIO
from sqlalchemy import select from sqlalchemy import select
from decimal import Decimal from decimal import Decimal
from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy import text
templates = Jinja2Templates(directory="app/templates")
router = APIRouter() router = APIRouter()
# === Schemas === # === Schemas ===
@@ -53,41 +56,57 @@ class SelicMensalSchema(BaseModel):
from_attributes = True from_attributes = True
# === Rotas === # === Rotas ===
templates = Jinja2Templates(directory="app/templates")
@router.get("/parametros") @router.get("/parametros")
async def parametros_page(request: Request): async def parametros_page(
async with AsyncSessionLocal() as session: request: Request,
# Consulta das fórmulas session: AsyncSession = Depends(get_session),
result = await session.execute(select(ParametrosFormula)) ):
parametros = result.scalars().all() # Fórmulas
result_formula = await session.execute(
# Consulta da tabela selic_mensal text("SELECT id, nome, formula, ativo FROM faturas.parametros_formula ORDER BY id DESC")
selic_result = await session.execute(
select(SelicMensal).order_by(SelicMensal.ano.desc(), SelicMensal.mes.desc())
) )
selic_dados = selic_result.scalars().all() formulas = [dict(row) for row in result_formula.mappings()]
# Pega última data # SELIC (dados + última competência)
ultima_data_selic = "-" result_selic = await session.execute(
if selic_dados: text("SELECT ano, mes, percentual FROM faturas.selic_mensal ORDER BY ano DESC, mes DESC")
ultima = selic_dados[0] )
ultima_data_selic = f"{ultima.mes:02d}/{ultima.ano}" selic_dados = [dict(row) for row in result_selic.mappings()]
ultima_data_selic = (
f"{selic_dados[0]['mes']:02d}/{selic_dados[0]['ano']}" if selic_dados else None
)
# Campos numéricos da fatura # Alíquotas por UF
campos = [ result_aliquotas = await session.execute(
col.name for col in Fatura.__table__.columns text("""
if col.type.__class__.__name__ in ['Integer', 'Float', 'Numeric'] SELECT uf,
] exercicio,
aliq_icms AS aliquota
FROM faturas.aliquotas_uf
ORDER BY uf ASC, exercicio DESC
""")
)
aliquotas_uf = [dict(row) for row in result_aliquotas.mappings()]
return templates.TemplateResponse("parametros.html", {
# Campos disponíveis da tabela Fatura para o editor
campos_fatura = [c.name for c in Fatura.__table__.columns]
return templates.TemplateResponse(
"parametros.html",
{
"request": request, "request": request,
"lista_parametros": parametros, "parametros": None, # evita erro no Jinja
"parametros": {}, "formulas": formulas, # <-- usado no template
"campos_fatura": campos, "selic_dados": selic_dados, # <-- usado no template
"selic_dados": selic_dados, "aliquotas_uf": aliquotas_uf, # se precisar em JS
"ultima_data_selic": ultima_data_selic "ultima_data_selic": ultima_data_selic,
}) "data_maxima": None,
"campos_fatura": campos_fatura,
},
)
@router.post("/parametros/editar/{param_id}") @router.post("/parametros/editar/{param_id}")
async def editar_parametro(param_id: int, request: Request): async def editar_parametro(param_id: int, request: Request):

View File

@@ -88,6 +88,7 @@
<p style="color:gray;">Nenhuma fórmula cadastrada.</p> <p style="color:gray;">Nenhuma fórmula cadastrada.</p>
{% endfor %} {% endfor %}
</div> </div>
</div>
<!-- ABA SELIC --> <!-- ABA SELIC -->
<div id="selic" class="tab-content"> <div id="selic" class="tab-content">
@@ -107,7 +108,7 @@
<table class="selic-table"> <table class="selic-table">
<thead><tr><th>Competência</th><th>Fator</th></tr></thead> <thead><tr><th>Competência</th><th>Fator</th></tr></thead>
<tbody> <tbody>
{% for item in (selic_dados or selic or []) %} {% for item in selic_dados %}
<tr> <tr>
<td>{{ "%02d"|format(item.mes) }}/{{ item.ano }}</td> <td>{{ "%02d"|format(item.mes) }}/{{ item.ano }}</td>
<td>{{ "%.4f"|format(item.percentual) }}</td> <td>{{ "%.4f"|format(item.percentual) }}</td>
@@ -671,13 +672,11 @@
} }
window.addEventListener("DOMContentLoaded", () => { window.addEventListener("DOMContentLoaded", () => {
const abaUrl = new URLSearchParams(window.location.search).get("aba"); const aba = new URLSearchParams(window.location.search).get("aba");
if (abaUrl === "selic") { if (aba === "formulas" || aba === "selic" || aba === "aliquotas") {
document.querySelector(".tab.active")?.classList.remove("active"); switchTab(aba);
document.querySelector(".tab-content.active")?.classList.remove("active"); } else {
switchTab("formulas"); // padrão
document.querySelector(".tab:nth-child(2)").classList.add("active"); // Ativa o botão da aba
document.getElementById("selic").classList.add("active"); // Ativa o conteúdo da aba
} }
}); });