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 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):
|
||||||
|
|||||||
@@ -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
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user