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(
text("SELECT id, nome, formula, ativo FROM faturas.parametros_formula ORDER BY id DESC")
)
formulas = [dict(row) for row in result_formula.mappings()]
# Consulta da tabela selic_mensal # SELIC (dados + última competência)
selic_result = await session.execute( result_selic = await session.execute(
select(SelicMensal).order_by(SelicMensal.ano.desc(), SelicMensal.mes.desc()) text("SELECT ano, mes, percentual FROM faturas.selic_mensal ORDER BY ano DESC, mes DESC")
) )
selic_dados = selic_result.scalars().all() 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
)
# Pega última data # Alíquotas por UF
ultima_data_selic = "-" result_aliquotas = await session.execute(
if selic_dados: text("""
ultima = selic_dados[0] SELECT uf,
ultima_data_selic = f"{ultima.mes:02d}/{ultima.ano}" 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()]
# Campos numéricos da fatura
campos = [
col.name for col in Fatura.__table__.columns
if col.type.__class__.__name__ in ['Integer', 'Float', 'Numeric']
]
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

@@ -24,7 +24,7 @@
<label for="aliquota_icms">Alíquota de ICMS (%):</label> <label for="aliquota_icms">Alíquota de ICMS (%):</label>
<input type="text" id="aliquota" name="aliquota" inputmode="decimal" pattern="[0-9]+([,][0-9]+)?" placeholder="Ex: 20,7487"> <input type="text" id="aliquota" name="aliquota" inputmode="decimal" pattern="[0-9]+([,][0-9]+)?" placeholder="Ex: 20,7487">
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="formula">Fórmula:</label> <label for="formula">Fórmula:</label>
@@ -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,11 +108,11 @@
<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>
</tr> </tr>
{% endfor %} {% endfor %}
</tbody> </tbody>
</table> </table>
@@ -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
} }
}); });