Ajustado abas tela parâmetro
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
@@ -23,8 +23,11 @@ import pandas as pd
|
||||
from io import BytesIO
|
||||
from sqlalchemy import select
|
||||
from decimal import Decimal
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
from sqlalchemy import text
|
||||
|
||||
|
||||
templates = Jinja2Templates(directory="app/templates")
|
||||
router = APIRouter()
|
||||
|
||||
# === Schemas ===
|
||||
@@ -53,41 +56,57 @@ class SelicMensalSchema(BaseModel):
|
||||
from_attributes = True
|
||||
|
||||
# === Rotas ===
|
||||
templates = Jinja2Templates(directory="app/templates")
|
||||
|
||||
@router.get("/parametros")
|
||||
async def parametros_page(request: Request):
|
||||
async with AsyncSessionLocal() as session:
|
||||
# Consulta das fórmulas
|
||||
result = await session.execute(select(ParametrosFormula))
|
||||
parametros = result.scalars().all()
|
||||
async def parametros_page(
|
||||
request: Request,
|
||||
session: AsyncSession = Depends(get_session),
|
||||
):
|
||||
# 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_result = await session.execute(
|
||||
select(SelicMensal).order_by(SelicMensal.ano.desc(), SelicMensal.mes.desc())
|
||||
)
|
||||
selic_dados = selic_result.scalars().all()
|
||||
# SELIC (dados + última competência)
|
||||
result_selic = await session.execute(
|
||||
text("SELECT ano, mes, percentual FROM faturas.selic_mensal ORDER BY ano DESC, mes DESC")
|
||||
)
|
||||
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
|
||||
ultima_data_selic = "-"
|
||||
if selic_dados:
|
||||
ultima = selic_dados[0]
|
||||
ultima_data_selic = f"{ultima.mes:02d}/{ultima.ano}"
|
||||
# Alíquotas por UF
|
||||
result_aliquotas = await session.execute(
|
||||
text("""
|
||||
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()]
|
||||
|
||||
# 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,
|
||||
"lista_parametros": parametros,
|
||||
"parametros": {},
|
||||
"campos_fatura": campos,
|
||||
"selic_dados": selic_dados,
|
||||
"ultima_data_selic": ultima_data_selic
|
||||
})
|
||||
"parametros": None, # evita erro no Jinja
|
||||
"formulas": formulas, # <-- usado no template
|
||||
"selic_dados": selic_dados, # <-- usado no template
|
||||
"aliquotas_uf": aliquotas_uf, # se precisar em JS
|
||||
"ultima_data_selic": ultima_data_selic,
|
||||
"data_maxima": None,
|
||||
"campos_fatura": campos_fatura,
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
|
||||
@router.post("/parametros/editar/{param_id}")
|
||||
async def editar_parametro(param_id: int, request: Request):
|
||||
|
||||
@@ -88,6 +88,7 @@
|
||||
<p style="color:gray;">Nenhuma fórmula cadastrada.</p>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- ABA SELIC -->
|
||||
<div id="selic" class="tab-content">
|
||||
@@ -107,11 +108,11 @@
|
||||
<table class="selic-table">
|
||||
<thead><tr><th>Competência</th><th>Fator</th></tr></thead>
|
||||
<tbody>
|
||||
{% for item in (selic_dados or selic or []) %}
|
||||
<tr>
|
||||
{% for item in selic_dados %}
|
||||
<tr>
|
||||
<td>{{ "%02d"|format(item.mes) }}/{{ item.ano }}</td>
|
||||
<td>{{ "%.4f"|format(item.percentual) }}</td>
|
||||
</tr>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
@@ -671,13 +672,11 @@
|
||||
}
|
||||
|
||||
window.addEventListener("DOMContentLoaded", () => {
|
||||
const abaUrl = new URLSearchParams(window.location.search).get("aba");
|
||||
if (abaUrl === "selic") {
|
||||
document.querySelector(".tab.active")?.classList.remove("active");
|
||||
document.querySelector(".tab-content.active")?.classList.remove("active");
|
||||
|
||||
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
|
||||
const aba = new URLSearchParams(window.location.search).get("aba");
|
||||
if (aba === "formulas" || aba === "selic" || aba === "aliquotas") {
|
||||
switchTab(aba);
|
||||
} else {
|
||||
switchTab("formulas"); // padrão
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user