diff --git a/app/parametros.py b/app/parametros.py index fa8f9af..ae53256 100644 --- a/app/parametros.py +++ b/app/parametros.py @@ -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): diff --git a/app/templates/parametros.html b/app/templates/parametros.html index 8ec0ab3..8023df0 100755 --- a/app/templates/parametros.html +++ b/app/templates/parametros.html @@ -24,7 +24,7 @@ - +
@@ -88,6 +88,7 @@

Nenhuma fórmula cadastrada.

{% endfor %}
+
@@ -107,11 +108,11 @@ - {% for item in (selic_dados or selic or []) %} - + {% for item in selic_dados %} + - + {% endfor %}
CompetênciaFator
{{ "%02d"|format(item.mes) }}/{{ item.ano }} {{ "%.4f"|format(item.percentual) }}
@@ -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 } });