[MVPTN-126] feat(Pedido): Cria endpoints e recursos para estornar e ativar um pedido
This commit is contained in:
parent
571e59bfb8
commit
2dc535c0f9
8 changed files with 322 additions and 65 deletions
|
|
@ -0,0 +1,42 @@
|
|||
from abstracts.action import BaseAction
|
||||
from packages.v1.servicos.balcao.repositories.t_servico_pedido.t_servico_pedido_save_situacao_repository import (
|
||||
TServicoPedidoSaveSituacaoRepository,
|
||||
)
|
||||
from packages.v1.servicos.balcao.schemas.t_servico_pedido_schema import (
|
||||
TServicoPedidoSaveSituacaoSchema,
|
||||
)
|
||||
|
||||
|
||||
class TServicoPedidoSaveSituacaoAction(BaseAction):
|
||||
"""
|
||||
Serviço responsável por encapsular a lógica de negócio para a operação
|
||||
de salvamento de um novo registro na tabela T_SERVICO_PEDIDO.
|
||||
"""
|
||||
|
||||
def execute(self, data: TServicoPedidoSaveSituacaoSchema):
|
||||
"""
|
||||
Executa a operação de salvamento.
|
||||
|
||||
Args:
|
||||
t_servico_pedido_schema (TServicoPedidoSchema):
|
||||
O esquema com os dados a serem persistidos.
|
||||
|
||||
Returns:
|
||||
O resultado da operação de salvamento.
|
||||
"""
|
||||
# ----------------------------------------------------
|
||||
# Instanciamento do repositório
|
||||
# ----------------------------------------------------
|
||||
t_servico_pedido_save_situacao_repository = (
|
||||
TServicoPedidoSaveSituacaoRepository()
|
||||
)
|
||||
|
||||
# ----------------------------------------------------
|
||||
# Execução do repositório
|
||||
# ----------------------------------------------------
|
||||
response = t_servico_pedido_save_situacao_repository.execute(data)
|
||||
|
||||
# ----------------------------------------------------
|
||||
# Retorno da informação
|
||||
# ----------------------------------------------------
|
||||
return response
|
||||
|
|
@ -1,9 +1,13 @@
|
|||
from actions.dynamic_import.dynamic_import import DynamicImport
|
||||
from packages.v1.servicos.balcao.schemas.t_servico_pedido_schema import (
|
||||
TServicoPedidoSaveSchema,
|
||||
TServicoPedidoSituacaoSchema,
|
||||
TServicoPedidoUpdateSchema,
|
||||
TServicoPedidoIdSchema,
|
||||
)
|
||||
from packages.v1.servicos.balcao.services.t_servico_pedido.go.t_servico_pedido_cancelar_service import (
|
||||
TServicoPedidoCancelarService,
|
||||
)
|
||||
|
||||
|
||||
class TServicoPedidoController:
|
||||
|
|
@ -74,6 +78,46 @@ class TServicoPedidoController:
|
|||
"data": self.save_service.execute(t_servico_pedido_save_schema),
|
||||
}
|
||||
|
||||
# ----------------------------------------------------
|
||||
# Cancela um pedido
|
||||
# ----------------------------------------------------
|
||||
def cancelar(self, data: TServicoPedidoSituacaoSchema):
|
||||
|
||||
# Importação da classe desejada
|
||||
cancelar_service = self.dynamic_import.service(
|
||||
"t_servico_pedido_cancelar_service",
|
||||
"TServicoPedidoCancelarService",
|
||||
)
|
||||
|
||||
# Instância da classe service
|
||||
self.cancelar_service = cancelar_service()
|
||||
|
||||
# Execução do salvamento
|
||||
return {
|
||||
"message": "Registro de T_SERVICO_ITEMPEDIDO cancelado com sucesso.",
|
||||
"data": self.cancelar_service.execute(data),
|
||||
}
|
||||
|
||||
# ----------------------------------------------------
|
||||
# Ativa um pedido
|
||||
# ----------------------------------------------------
|
||||
def ativar(self, data: TServicoPedidoSituacaoSchema):
|
||||
|
||||
# Importação da classe desejada
|
||||
ativar_service = self.dynamic_import.service(
|
||||
"t_servico_pedido_ativar_service",
|
||||
"TServicoPedidoAtivarService",
|
||||
)
|
||||
|
||||
# Instância da classe service
|
||||
self.ativar_service = ativar_service()
|
||||
|
||||
# Execução do salvamento
|
||||
return {
|
||||
"message": "Registro de T_SERVICO_ITEMPEDIDO ativado com sucesso.",
|
||||
"data": self.ativar_service.execute(data),
|
||||
}
|
||||
|
||||
# ----------------------------------------------------
|
||||
# Atualiza um registro existente de T_SERVICO_PEDIDO
|
||||
# ----------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ from packages.v1.servicos.balcao.controllers.t_servico_pedido_controller import
|
|||
)
|
||||
from packages.v1.servicos.balcao.schemas.t_servico_pedido_schema import (
|
||||
TServicoPedidoSaveSchema,
|
||||
TServicoPedidoSituacaoSchema,
|
||||
TServicoPedidoUpdateSchema,
|
||||
TServicoPedidoIdSchema,
|
||||
)
|
||||
|
|
@ -121,6 +122,54 @@ async def update(
|
|||
return response
|
||||
|
||||
|
||||
@router.put(
|
||||
"/{servico_pedido_id}/cancelar",
|
||||
status_code=status.HTTP_200_OK,
|
||||
summary="Cancela um T_SERVICO_PEDIDO",
|
||||
response_description="Cancelamento realizado com sucesso",
|
||||
)
|
||||
async def cancelar(
|
||||
servico_pedido_id: int,
|
||||
current_user: dict = Depends(dependency=get_current_user),
|
||||
):
|
||||
"""
|
||||
Cria um novo registro na tabela T_SERVICO_PEDIDO.
|
||||
"""
|
||||
current_user = dict_to_namespace(current_user)
|
||||
|
||||
response = t_servico_pedido_controller.cancelar(
|
||||
TServicoPedidoSituacaoSchema(
|
||||
servico_pedido_id=servico_pedido_id,
|
||||
usuario_id=current_user.data.usuario_id,
|
||||
)
|
||||
)
|
||||
return response
|
||||
|
||||
|
||||
@router.put(
|
||||
"/{servico_pedido_id}/ativar",
|
||||
status_code=status.HTTP_200_OK,
|
||||
summary="Ativa um T_SERVICO_PEDIDO",
|
||||
response_description="Ativação realizado com sucesso",
|
||||
)
|
||||
async def ativar(
|
||||
servico_pedido_id: int,
|
||||
current_user: dict = Depends(dependency=get_current_user),
|
||||
):
|
||||
"""
|
||||
Cria um novo registro na tabela T_SERVICO_PEDIDO.
|
||||
"""
|
||||
current_user = dict_to_namespace(current_user)
|
||||
|
||||
response = t_servico_pedido_controller.ativar(
|
||||
TServicoPedidoSituacaoSchema(
|
||||
servico_pedido_id=servico_pedido_id,
|
||||
usuario_id=current_user.data.usuario_id,
|
||||
)
|
||||
)
|
||||
return response
|
||||
|
||||
|
||||
# ----------------------------------------------------
|
||||
# Exclui um registro de T_SERVICO_PEDIDO
|
||||
# ----------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -0,0 +1,57 @@
|
|||
from fastapi import HTTPException, status
|
||||
from abstracts.repository import BaseRepository
|
||||
from packages.v1.servicos.balcao.schemas.t_servico_pedido_schema import (
|
||||
TServicoPedidoSituacaoSchema,
|
||||
)
|
||||
|
||||
|
||||
class TServicoPedidoSaveSituacaoRepository(BaseRepository):
|
||||
"""
|
||||
Repositório responsável pela operação de salvamento de um novo registro
|
||||
na tabela T_SERVICO_ITEMPEDIDO.
|
||||
"""
|
||||
|
||||
def execute(self, data: TServicoPedidoSituacaoSchema):
|
||||
"""
|
||||
Executa a operação de salvamento no banco de dados.
|
||||
|
||||
Args:
|
||||
t_servico_itempedido_save_schema (TServicoItemPedidoSchema): O esquema com os dados a serem salvos.
|
||||
|
||||
Returns:
|
||||
O registro recém-criado.
|
||||
|
||||
Raises:
|
||||
HTTPException: Caso ocorra um erro na execução da query.
|
||||
"""
|
||||
try:
|
||||
|
||||
# ----------------------------------------------------
|
||||
# Montagem do SQL dinâmico
|
||||
# ----------------------------------------------------
|
||||
sql = """ UPDATE T_SERVICO_PEDIDO TSP
|
||||
SET TSP.SITUACAO = :situacao
|
||||
WHERE
|
||||
TSP.SERVICO_PEDIDO_ID = :servico_pedido_id
|
||||
RETURNING *"""
|
||||
|
||||
# ----------------------------------------------------
|
||||
# Preenchimento dos parâmetros
|
||||
# ----------------------------------------------------
|
||||
params = data.model_dump(
|
||||
exclude_unset=True,
|
||||
)
|
||||
|
||||
# ----------------------------------------------------
|
||||
# Execução do SQL e retorno do registro
|
||||
# ----------------------------------------------------
|
||||
return self.run_and_return(sql, params)
|
||||
|
||||
except Exception as e:
|
||||
# ----------------------------------------------------
|
||||
# Tratamento de erros e lançamento de exceção HTTP
|
||||
# ----------------------------------------------------
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
|
||||
detail=f"Erro ao salvar registro em T_SERVICO_ITEMPEDIDO: {e}",
|
||||
)
|
||||
|
|
@ -100,12 +100,6 @@ class TServicoItemPedidoSituacaoSchema(BaseModel):
|
|||
from_attributes = True
|
||||
|
||||
|
||||
class TServicoItemPedidoSaveSchema(TServicoItemPedidoSchema):
|
||||
|
||||
class Config:
|
||||
from_attributes = True
|
||||
|
||||
|
||||
class TServicoItemPedidoSaveSituacaoSchema(BaseModel):
|
||||
|
||||
servico_itempedido_id: int = None
|
||||
|
|
@ -115,6 +109,12 @@ class TServicoItemPedidoSaveSituacaoSchema(BaseModel):
|
|||
from_attributes = True
|
||||
|
||||
|
||||
class TServicoItemPedidoSaveSchema(TServicoItemPedidoSchema):
|
||||
|
||||
class Config:
|
||||
from_attributes = True
|
||||
|
||||
|
||||
class TServicoItemPedidoUpdateSchema(TServicoItemPedidoSchema):
|
||||
|
||||
class Config:
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
from pydantic import BaseModel
|
||||
from typing import Annotated, Optional, List
|
||||
from typing import Annotated, Optional
|
||||
from decimal import Decimal
|
||||
from datetime import datetime
|
||||
|
||||
|
|
@ -7,9 +7,6 @@ from pydantic.config import ConfigDict
|
|||
from pydantic.functional_validators import BeforeValidator
|
||||
|
||||
from packages.v1.parametros.schemas.g_config_schema import GConfigNomeSchema
|
||||
from packages.v1.servicos.balcao.schemas.t_servico_itempedido_schema import (
|
||||
TServicoItemPedidoSchema,
|
||||
)
|
||||
|
||||
|
||||
# ---------- Utilidades ----------
|
||||
|
|
@ -30,11 +27,8 @@ Money = Annotated[Optional[Decimal], BeforeValidator(_to_decimal)]
|
|||
Fk = ZeroNoneInt # só para semântica
|
||||
|
||||
|
||||
# ----------------------------------------------------
|
||||
# Schema base - representa a tabela T_SERVICO_PEDIDO
|
||||
# ----------------------------------------------------
|
||||
class TServicoPedidoSchema(BaseModel):
|
||||
servico_pedido_id: Decimal
|
||||
servico_pedido_id: Optional[Decimal] = None
|
||||
valor_pedido: Optional[Decimal] = None
|
||||
valor_pago: Optional[Decimal] = None
|
||||
usuario_id: Optional[Decimal] = None
|
||||
|
|
@ -49,68 +43,39 @@ class TServicoPedidoSchema(BaseModel):
|
|||
chave_importacao: Optional[Decimal] = None
|
||||
cpfcnpj_apresentante: Optional[str] = None
|
||||
|
||||
class Config:
|
||||
from_attributes = True
|
||||
model_config = ConfigDict(from_attributes=True)
|
||||
|
||||
|
||||
# ----------------------------------------------------
|
||||
# Schema para localizar um registro pelo ID (GET /{id})
|
||||
# ----------------------------------------------------
|
||||
class TServicoPedidoIdSchema(BaseModel):
|
||||
servico_pedido_id: Decimal
|
||||
|
||||
class Config:
|
||||
from_attributes = True
|
||||
model_config = ConfigDict(from_attributes=True)
|
||||
|
||||
|
||||
# ----------------------------------------------------
|
||||
# Schema para criação (POST)
|
||||
# - normalmente sem o ID (gerado pelo banco)
|
||||
# ----------------------------------------------------
|
||||
class TServicoPedidoSaveSchema(BaseModel):
|
||||
servico_pedido_id: Optional[Decimal] = None
|
||||
valor_pedido: Optional[Decimal] = None
|
||||
valor_pago: Optional[Decimal] = None
|
||||
usuario_id: Optional[Decimal] = None
|
||||
data_pedido: Optional[datetime] = None
|
||||
mensalista_livrocaixa_id: Fk = None
|
||||
observacao: Optional[str] = None
|
||||
escrevente_id: Optional[Decimal] = None
|
||||
situacao: Optional[str] = None
|
||||
estornado: Optional[str] = None
|
||||
apresentante: Optional[str] = None
|
||||
nfse_id: Fk = None
|
||||
chave_importacao: Optional[Decimal] = None
|
||||
cpfcnpj_apresentante: Optional[str] = None
|
||||
itens: Optional[List[TServicoItemPedidoSchema]] = None
|
||||
class TServicoPedidoSaveSchema(TServicoPedidoSchema):
|
||||
|
||||
class Config:
|
||||
from_attributes = True
|
||||
model_config = ConfigDict(from_attributes=True)
|
||||
|
||||
|
||||
# ----------------------------------------------------
|
||||
# Schema para atualização (PUT)
|
||||
# - inclui o ID + campos opcionais para alterar
|
||||
# ----------------------------------------------------
|
||||
class TServicoPedidoUpdateSchema(BaseModel):
|
||||
servico_pedido_id: Optional[Decimal] = None
|
||||
valor_pedido: Optional[Decimal] = None
|
||||
valor_pago: Optional[Decimal] = None
|
||||
usuario_id: Optional[Decimal] = None
|
||||
data_pedido: Optional[datetime] = None
|
||||
mensalista_livrocaixa_id: Fk = None
|
||||
observacao: Optional[str] = None
|
||||
escrevente_id: Optional[Decimal] = None
|
||||
situacao: Optional[str] = None
|
||||
estornado: Optional[str] = None
|
||||
apresentante: Optional[str] = None
|
||||
nfse_id: Fk = None
|
||||
chave_importacao: Optional[Decimal] = None
|
||||
cpfcnpj_apresentante: Optional[str] = None
|
||||
itens: Optional[List[TServicoItemPedidoSchema]] = None
|
||||
class TServicoPedidoSituacaoSchema(BaseModel):
|
||||
|
||||
class Config:
|
||||
from_attributes = True
|
||||
servico_pedido_id: int = None
|
||||
usuario_id: Optional[int] = None
|
||||
|
||||
model_config = ConfigDict(from_attributes=True)
|
||||
|
||||
|
||||
class TServicoPedidoSaveSituacaoSchema(BaseModel):
|
||||
|
||||
servico_pedido_id: int = None
|
||||
situacao: str = None
|
||||
|
||||
model_config = ConfigDict(from_attributes=True)
|
||||
|
||||
|
||||
class TServicoPedidoUpdateSchema(TServicoPedidoSchema):
|
||||
|
||||
model_config = ConfigDict(from_attributes=True)
|
||||
|
||||
|
||||
class TServicoPedidoLoadParams(GConfigNomeSchema):
|
||||
|
|
|
|||
|
|
@ -0,0 +1,47 @@
|
|||
from packages.v1.administrativo.schemas.c_caixa_item_schema import CaixaItemSchema
|
||||
from packages.v1.administrativo.services.c_caixa_item.go.c_caixa_item_save_service import (
|
||||
SaveService,
|
||||
)
|
||||
from packages.v1.servicos.balcao.actions.t_servico_pedido.t_servico_pedido_save_situacao_action import (
|
||||
TServicoPedidoSaveSituacaoAction,
|
||||
)
|
||||
from packages.v1.servicos.balcao.schemas.t_servico_pedido_schema import (
|
||||
TServicoPedidoSaveSituacaoSchema,
|
||||
TServicoPedidoSituacaoSchema,
|
||||
)
|
||||
|
||||
|
||||
class TServicoPedidoAtivarService:
|
||||
|
||||
def execute(self, data: TServicoPedidoSituacaoSchema):
|
||||
|
||||
# Instancia corretamente a Action (classe)
|
||||
save_situacao_action = TServicoPedidoSaveSituacaoAction()
|
||||
|
||||
# Executa o fluxo da action com o schema recebido
|
||||
response = save_situacao_action.execute(
|
||||
data=TServicoPedidoSaveSituacaoSchema(
|
||||
servico_pedido_id=data.servico_pedido_id, situacao="F"
|
||||
)
|
||||
)
|
||||
|
||||
if response:
|
||||
|
||||
# Controle de pedidos
|
||||
c_caixa_item_save_service = SaveService()
|
||||
|
||||
# Salva o serviço no caixa
|
||||
c_caixa_item_save_service.execute(
|
||||
CaixaItemSchema(
|
||||
apresentante=response.apresentante,
|
||||
usuario_servico_id=data.usuario_id,
|
||||
chave_servico=response.servico_pedido_id,
|
||||
descricao="Ativação do Pedido",
|
||||
situacao=3,
|
||||
tipo_transacao="C",
|
||||
valor_servico=response.valor_pedido,
|
||||
valor_pago=response.valor_pago,
|
||||
)
|
||||
)
|
||||
|
||||
return response
|
||||
|
|
@ -0,0 +1,53 @@
|
|||
from packages.v1.administrativo.schemas.c_caixa_item_schema import CaixaItemSchema
|
||||
from packages.v1.administrativo.schemas.t_servico_tipo_schema import (
|
||||
TServicoTipoIdSchema,
|
||||
)
|
||||
from packages.v1.administrativo.services.c_caixa_item.go.c_caixa_item_save_service import (
|
||||
SaveService,
|
||||
)
|
||||
from packages.v1.administrativo.services.t_servico_tipo.go.t_servico_tipo_show_service import (
|
||||
ShowService,
|
||||
)
|
||||
from packages.v1.servicos.balcao.actions.t_servico_pedido.t_servico_pedido_save_situacao_action import (
|
||||
TServicoPedidoSaveSituacaoAction,
|
||||
)
|
||||
from packages.v1.servicos.balcao.schemas.t_servico_pedido_schema import (
|
||||
TServicoPedidoSaveSituacaoSchema,
|
||||
TServicoPedidoSituacaoSchema,
|
||||
)
|
||||
|
||||
|
||||
class TServicoPedidoCancelarService:
|
||||
|
||||
def execute(self, data: TServicoPedidoSituacaoSchema):
|
||||
|
||||
# Instancia corretamente a Action (classe)
|
||||
save_situacao_action = TServicoPedidoSaveSituacaoAction()
|
||||
|
||||
# Executa o fluxo da action com o schema recebido
|
||||
response = save_situacao_action.execute(
|
||||
data=TServicoPedidoSaveSituacaoSchema(
|
||||
servico_pedido_id=data.servico_pedido_id, situacao="C"
|
||||
)
|
||||
)
|
||||
|
||||
if response:
|
||||
|
||||
# Controle de pedidos
|
||||
c_caixa_item_save_service = SaveService()
|
||||
|
||||
# Salva o serviço no caixa
|
||||
c_caixa_item_save_service.execute(
|
||||
CaixaItemSchema(
|
||||
apresentante=response.apresentante,
|
||||
usuario_servico_id=data.usuario_id,
|
||||
chave_servico=response.servico_pedido_id,
|
||||
descricao="Cancelamento Pedido",
|
||||
situacao=3,
|
||||
tipo_transacao="D",
|
||||
valor_servico=response.valor_pedido,
|
||||
valor_pago=response.valor_pago,
|
||||
)
|
||||
)
|
||||
|
||||
return response
|
||||
Loading…
Add table
Reference in a new issue