Atualiza exibição do tempo por processo e garante consistência da estrutura em app/
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
2025-07-28 22:31:31 -03:00
parent d863d7f9e2
commit f3c2b08a69
82 changed files with 183 additions and 7786 deletions

View File

@@ -8,12 +8,9 @@ from fastapi.responses import StreamingResponse
from io import BytesIO
import pandas as pd
from sqlalchemy.future import select
from database import AsyncSessionLocal
from models import Fatura
from models import ParametrosFormula
from fastapi import Form
from types import SimpleNamespace
from processor import (
from app.database import AsyncSessionLocal
from app.models import Fatura
from app.processor import (
fila_processamento,
processar_em_lote,
status_arquivos,
@@ -21,8 +18,8 @@ from processor import (
)
app = FastAPI()
templates = Jinja2Templates(directory="templates")
app.mount("/static", StaticFiles(directory="static"), name="static")
templates = Jinja2Templates(directory="app/templates")
app.mount("/static", StaticFiles(directory="app/static"), name="static")
UPLOAD_DIR = "uploads/temp"
os.makedirs(UPLOAD_DIR, exist_ok=True)
@@ -57,20 +54,8 @@ def relatorios_page(request: Request):
return templates.TemplateResponse("relatorios.html", {"request": request})
@app.get("/parametros", response_class=HTMLResponse)
async def parametros_page(request: Request):
async with AsyncSessionLocal() as session:
result = await session.execute(select(ParametrosFormula).limit(1))
parametros = result.scalar_one_or_none()
return templates.TemplateResponse("parametros.html", {
"request": request,
"parametros": parametros or SimpleNamespace(
aliquota_icms=None,
incluir_icms=True,
incluir_pis=True,
incluir_cofins=True
)
})
def parametros_page(request: Request):
return templates.TemplateResponse("parametros.html", {"request": request})
@app.post("/upload-files")
async def upload_files(files: list[UploadFile] = File(...)):
@@ -93,14 +78,24 @@ async def process_queue():
async def get_status():
files = []
for nome, status in status_arquivos.items():
files.append({
"nome": nome,
"status": status,
"mensagem": "---" if status == "Concluído" else status
})
if isinstance(status, dict):
files.append({
"nome": nome,
"status": status.get("status", "Erro"),
"mensagem": status.get("mensagem", "---"),
"tempo": status.get("tempo", "---") # ✅ AQUI
})
else:
files.append({
"nome": nome,
"status": status,
"mensagem": "---" if status == "Concluído" else status,
"tempo": "---" # ✅ AQUI também
})
is_processing = not fila_processamento.empty()
return JSONResponse(content={"is_processing": is_processing, "files": files})
@app.post("/clear-all")
async def clear_all():
limpar_arquivos_processados()
@@ -149,49 +144,3 @@ async def export_excel():
media_type="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
headers={"Content-Disposition": "attachment; filename=relatorio_faturas.xlsx"}
)
@app.post("/parametros", response_class=HTMLResponse)
async def salvar_parametros(
request: Request,
aliquota_icms: float = Form(...),
formula_pis: str = Form(...),
formula_cofins: str = Form(...)
):
async with AsyncSessionLocal() as session:
result = await session.execute(select(ParametrosFormula).limit(1))
existente = result.scalar_one_or_none()
if existente:
existente.aliquota_icms = aliquota_icms
existente.incluir_icms = 1
existente.incluir_pis = 1
existente.incluir_cofins = 1
existente.formula = f"PIS={formula_pis};COFINS={formula_cofins}"
mensagem = "Parâmetros atualizados com sucesso."
else:
novo = ParametrosFormula(
aliquota_icms=aliquota_icms,
incluir_icms=1,
incluir_pis=1,
incluir_cofins=1,
formula=f"PIS={formula_pis};COFINS={formula_cofins}"
)
session.add(novo)
mensagem = "Parâmetros salvos com sucesso."
await session.commit()
parametros = SimpleNamespace(
aliquota_icms=aliquota_icms,
incluir_icms=1,
incluir_pis=1,
incluir_cofins=1,
formula_pis=formula_pis,
formula_cofins=formula_cofins
)
return templates.TemplateResponse("parametros.html", {
"request": request,
"parametros": parametros,
"mensagem": mensagem
})