Commit Inicial
This commit is contained in:
commit
0f47953453
24 changed files with 1366 additions and 0 deletions
0
app/v1/scardua/modules/compras/config.py
Normal file
0
app/v1/scardua/modules/compras/config.py
Normal file
10
app/v1/scardua/modules/compras/router.py
Normal file
10
app/v1/scardua/modules/compras/router.py
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
from fastapi import APIRouter
|
||||
|
||||
from .schemas import DadosCompras
|
||||
from .service import processar_compras
|
||||
|
||||
router = APIRouter(prefix="/compras", tags=["compras"])
|
||||
|
||||
@router.post("/dados")
|
||||
async def dados_compras(dados: DadosCompras):
|
||||
return await processar_compras(dados)
|
||||
77
app/v1/scardua/modules/compras/schemas.py
Normal file
77
app/v1/scardua/modules/compras/schemas.py
Normal file
|
|
@ -0,0 +1,77 @@
|
|||
from datetime import datetime
|
||||
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
|
||||
class Parcela(BaseModel):
|
||||
valor: float
|
||||
vencimento: datetime | None = None
|
||||
|
||||
|
||||
class ComprasProperties(BaseModel):
|
||||
protocolo: str
|
||||
pedido_linx: str = Field(alias="PEDIDO_LINX")
|
||||
fornecedor: str = Field(alias="Fornecedores")
|
||||
tipo_compra: str = Field(alias="Tipo de Compra")
|
||||
cnpj: str = Field(alias="CNPJ")
|
||||
nf_entrada: str = Field(alias="NUMERO NF ENTRADA")
|
||||
|
||||
num_parcelas: int | None = Field(default=None, alias="num. parcelas")
|
||||
|
||||
parcela1: float | None = Field(default=None, alias="parcela1")
|
||||
parcela2: float | None = Field(default=None, alias="parcela2")
|
||||
parcela3: float | None = Field(default=None, alias="parcela3")
|
||||
parcela4: float | None = Field(default=None, alias="parcela4")
|
||||
parcela5: float | None = Field(default=None, alias="parcela5")
|
||||
parcela6: float | None = Field(default=None, alias="parcela6")
|
||||
parcela7: float | None = Field(default=None, alias="parcela7")
|
||||
parcela8: float | None = Field(default=None, alias="parcela8")
|
||||
parcela9: float | None = Field(default=None, alias="parcela9")
|
||||
parcela10: float | None = Field(default=None, alias="parcela10")
|
||||
parcela11: float | None = Field(default=None, alias="parcela11")
|
||||
parcela12: float | None = Field(default=None, alias="parcela12")
|
||||
|
||||
vencimento1: datetime | None = Field(default=None, alias="vencimento parcela1")
|
||||
vencimento2: datetime | None = Field(default=None, alias="vencimento parcela2")
|
||||
vencimento3: datetime | None = Field(default=None, alias="vencimento parcela3")
|
||||
vencimento4: datetime | None = Field(default=None, alias="vencimento parcela4")
|
||||
vencimento5: datetime | None = Field(default=None, alias="vencimento parcela5")
|
||||
vencimento6: datetime | None = Field(default=None, alias="vencimento parcela6")
|
||||
vencimento7: datetime | None = Field(default=None, alias="vencimento parcela7")
|
||||
vencimento8: datetime | None = Field(default=None, alias="vencimento parcela8")
|
||||
vencimento9: datetime | None = Field(default=None, alias="vencimento parcela9")
|
||||
vencimento10: datetime | None = Field(default=None, alias="vencimento parcela10")
|
||||
vencimento11: datetime | None = Field(default=None, alias="vencimento parcela11")
|
||||
vencimento12: datetime | None = Field(default=None, alias="vencimento parcela12")
|
||||
|
||||
@property
|
||||
def parcelas(self) -> dict[int, Parcela]:
|
||||
"""Junta parcelaN + vencimento parcelaN, ignorando os slots vazios."""
|
||||
parcelas = {}
|
||||
for n in range(1, 13):
|
||||
valor = getattr(self, f"parcela{n}")
|
||||
if valor is None:
|
||||
continue
|
||||
parcelas[n] = Parcela(
|
||||
valor=valor,
|
||||
vencimento=getattr(self, f"vencimento{n}"),
|
||||
)
|
||||
return parcelas
|
||||
|
||||
@property
|
||||
def total_parcelas(self) -> float:
|
||||
return round(sum(p.valor for p in self.parcelas.values()), 2)
|
||||
|
||||
class DadosCompras(BaseModel):
|
||||
id: str
|
||||
properties: ComprasProperties
|
||||
|
||||
class PayloadCompras(BaseModel):
|
||||
cnpj: str
|
||||
pedido_linx: str
|
||||
fornecedor: str
|
||||
tipo: str
|
||||
nf_entrada: str
|
||||
aprovador: str
|
||||
valor_total: float
|
||||
parcelas: dict[int, Parcela]
|
||||
26
app/v1/scardua/modules/compras/service.py
Normal file
26
app/v1/scardua/modules/compras/service.py
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
from .schemas import DadosCompras, PayloadCompras
|
||||
from .service import processar_compras
|
||||
from app.services.api_cliente import
|
||||
from app.services.holmes import
|
||||
|
||||
|
||||
async def processar_compras(
|
||||
dados: DadosCompras
|
||||
) -> dict:
|
||||
payload = montar_payload(dados)
|
||||
|
||||
ok, retorno = await apollo.enviar_compra(payload.model_dump(mode="json"), conn)
|
||||
if not ok:
|
||||
raise HTTPException(502, f"Falha ao enviar para a API externa: {retorno}")
|
||||
return {"status": "enviado", "id_processo": dados.id, "retorno": retorno}
|
||||
|
||||
def montar_payload(dados: DadosCompras) -> PayloadCompras:
|
||||
p = dados.properties
|
||||
return PayloadCompras(
|
||||
cnpj=p.cnpj,
|
||||
pedido_linx=p.pedido_linx,
|
||||
fornecedor=p.fornecedor,
|
||||
tipo=p.tipo_compra,
|
||||
valor_total=p.total_parcelas,
|
||||
parcelas=p.parcelas,
|
||||
)
|
||||
Loading…
Add table
Add a link
Reference in a new issue