feat: primeira versão da produção
Some checks failed
continuous-integration/drone/push Build is failing
Some checks failed
continuous-integration/drone/push Build is failing
This commit is contained in:
84
app/routes/relatorios.py
Executable file
84
app/routes/relatorios.py
Executable file
@@ -0,0 +1,84 @@
|
||||
# app/relatorios.py
|
||||
from fastapi import APIRouter, Depends, Query
|
||||
from fastapi.responses import StreamingResponse
|
||||
from sqlalchemy.orm import Session
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
from sqlalchemy.future import select
|
||||
from database import get_session
|
||||
from models import Fatura, ParametrosFormula, AliquotaUF
|
||||
from io import BytesIO
|
||||
import pandas as pd
|
||||
from datetime import datetime
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
def calcular_pis_cofins_corretos(base, icms, aliquota):
|
||||
try:
|
||||
return round((base - (base - icms)) * aliquota, 5)
|
||||
except:
|
||||
return 0.0
|
||||
|
||||
|
||||
@router.get("/relatorio-exclusao-icms")
|
||||
async def relatorio_exclusao_icms(cliente: str = Query(None), db: AsyncSession = Depends(get_session)):
|
||||
faturas = db.query(Fatura).all()
|
||||
dados = []
|
||||
for f in faturas:
|
||||
if f.base_pis == f.base_icms == f.base_cofins:
|
||||
pis_corr = calcular_pis_cofins_corretos(f.base_pis, f.valor_icms, f.aliq_pis)
|
||||
cofins_corr = calcular_pis_cofins_corretos(f.base_cofins, f.valor_icms, f.aliq_cofins)
|
||||
dados.append({
|
||||
"Classificacao": f.classificacao,
|
||||
"Nome": f.nome,
|
||||
"UC": f.uc,
|
||||
"Competencia": f.referencia,
|
||||
"Valor Total": f.valor_total,
|
||||
"Alíquota PIS": f.aliq_pis,
|
||||
"Alíquota ICMS": f.aliq_icms,
|
||||
"Alíquota COFINS": f.aliq_cofins,
|
||||
"Valor PIS": f.valor_pis,
|
||||
"Valor ICMS": f.valor_icms,
|
||||
"Valor COFINS": f.valor_cofins,
|
||||
"Base PIS": f.base_pis,
|
||||
"Base ICMS": f.base_icms,
|
||||
"PIS Corrigido": pis_corr,
|
||||
"COFINS Corrigido": cofins_corr,
|
||||
"Arquivo": f.arquivo
|
||||
})
|
||||
|
||||
df = pd.DataFrame(dados)
|
||||
excel_file = BytesIO()
|
||||
df.to_excel(excel_file, index=False)
|
||||
excel_file.seek(0)
|
||||
return StreamingResponse(excel_file, media_type="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", headers={"Content-Disposition": "attachment; filename=relatorio_exclusao_icms.xlsx"})
|
||||
|
||||
|
||||
@router.get("/relatorio-aliquota-incorreta")
|
||||
async def relatorio_icms_errado(cliente: str = Query(None), db: AsyncSession = Depends(get_session)):
|
||||
result = await db.execute(select(Fatura))
|
||||
faturas = result.scalars().all()
|
||||
dados = []
|
||||
for f in faturas:
|
||||
aliq_registrada = db.query(AliquotaUF).filter_by(uf=f.estado, exercicio=f.referencia[-4:]).first()
|
||||
if aliq_registrada and abs(f.aliq_icms - aliq_registrada.aliquota) > 0.001:
|
||||
icms_corr = round((f.base_icms * aliq_registrada.aliquota), 5)
|
||||
dados.append({
|
||||
"Classificacao": f.classificacao,
|
||||
"Nome": f.nome,
|
||||
"UC": f.uc,
|
||||
"Competencia": f.referencia,
|
||||
"Valor Total": f.valor_total,
|
||||
"Alíquota ICMS (Fatura)": f.aliq_icms,
|
||||
"Alíquota ICMS (Correta)": aliq_registrada.aliquota,
|
||||
"Base ICMS": f.base_icms,
|
||||
"Valor ICMS": f.valor_icms,
|
||||
"ICMS Corrigido": icms_corr,
|
||||
"Arquivo": f.arquivo
|
||||
})
|
||||
|
||||
df = pd.DataFrame(dados)
|
||||
excel_file = BytesIO()
|
||||
df.to_excel(excel_file, index=False)
|
||||
excel_file.seek(0)
|
||||
return StreamingResponse(excel_file, media_type="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", headers={"Content-Disposition": "attachment; filename=relatorio_icms_errado.xlsx"})
|
||||
Reference in New Issue
Block a user