[MVPTN-126] feat(Pedido): Cria endpoints e recursos para estornar e ativar um item do pedido

This commit is contained in:
Keven 2025-12-05 11:09:22 -03:00
parent 6d8468a4e2
commit 571e59bfb8
5 changed files with 208 additions and 21 deletions

View file

@ -3,6 +3,7 @@ from packages.v1.servicos.balcao.schemas.t_servico_itempedido_schema import (
TServicoItemIndexSchema, TServicoItemIndexSchema,
TServicoItemPedidoSaveSchema, TServicoItemPedidoSaveSchema,
TServicoItemPedidoSaveSituacaoSchema, TServicoItemPedidoSaveSituacaoSchema,
TServicoItemPedidoSituacaoSchema,
TServicoItemPedidoUpdateSchema, TServicoItemPedidoUpdateSchema,
TServicoItemPedidoIdSchema, TServicoItemPedidoIdSchema,
) )
@ -79,7 +80,7 @@ class TServicoItemPedidoController:
# ---------------------------------------------------- # ----------------------------------------------------
# Cadastra um novo registro em T_SERVICO_ITEMPEDIDO # Cadastra um novo registro em T_SERVICO_ITEMPEDIDO
# ---------------------------------------------------- # ----------------------------------------------------
def cancelar(self, data: TServicoItemPedidoIdSchema): def cancelar(self, data: TServicoItemPedidoSituacaoSchema):
# Importação da classe desejada # Importação da classe desejada
cancelar_service = self.dynamic_import.service( cancelar_service = self.dynamic_import.service(
@ -96,6 +97,26 @@ class TServicoItemPedidoController:
"data": self.cancelar_service.execute(data), "data": self.cancelar_service.execute(data),
} }
# ----------------------------------------------------
# Cadastra um novo registro em T_SERVICO_ITEMPEDIDO
# ----------------------------------------------------
def ativar(self, data: TServicoItemPedidoIdSchema):
# Importação da classe desejada
ativar_service = self.dynamic_import.service(
"t_servico_itempedido_ativar_service",
"TServicoItemPedidoAtivarService",
)
# 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_ITEMPEDIDO # Atualiza um registro existente de T_SERVICO_ITEMPEDIDO
# ---------------------------------------------------- # ----------------------------------------------------

View file

@ -1,5 +1,6 @@
# Importação de bibliotecas # Importação de bibliotecas
from fastapi import APIRouter, Depends, status from fastapi import APIRouter, Depends, status
from actions.data.dict_to_namespace import dict_to_namespace
from actions.jwt.get_current_user import get_current_user from actions.jwt.get_current_user import get_current_user
from packages.v1.servicos.balcao.controllers.t_servico_itempedido_controller import ( from packages.v1.servicos.balcao.controllers.t_servico_itempedido_controller import (
TServicoItemPedidoController, TServicoItemPedidoController,
@ -7,6 +8,7 @@ from packages.v1.servicos.balcao.controllers.t_servico_itempedido_controller imp
from packages.v1.servicos.balcao.schemas.t_servico_itempedido_schema import ( from packages.v1.servicos.balcao.schemas.t_servico_itempedido_schema import (
TServicoItemIndexSchema, TServicoItemIndexSchema,
TServicoItemPedidoSaveSchema, TServicoItemPedidoSaveSchema,
TServicoItemPedidoSituacaoSchema,
TServicoItemPedidoUpdateSchema, TServicoItemPedidoUpdateSchema,
TServicoItemPedidoIdSchema, TServicoItemPedidoIdSchema,
) )
@ -119,9 +121,43 @@ async def cancelar(
servico_itempedido_id: int, servico_itempedido_id: int,
current_user: dict = Depends(dependency=get_current_user), 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_itempedido_controller.cancelar( response = t_servico_itempedido_controller.cancelar(
TServicoItemPedidoIdSchema(servico_itempedido_id=servico_itempedido_id) TServicoItemPedidoSituacaoSchema(
servico_itempedido_id=servico_itempedido_id,
usuario_id=current_user.data.usuario_id,
)
)
return response
# ----------------------------------------------------
# Atualiza a situação de um registro de T_SERVICO_ITEMPEDIDO
# ----------------------------------------------------
@router.put(
"/{servico_itempedido_id}/ativar",
status_code=status.HTTP_200_OK,
summary="Ativa um T_SERVICO_ITEMPEDIDO",
response_description="Ativação realizado com sucesso",
)
async def ativar(
servico_itempedido_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_itempedido_controller.ativar(
TServicoItemPedidoSituacaoSchema(
servico_itempedido_id=servico_itempedido_id,
usuario_id=current_user.data.usuario_id,
)
) )
return response return response

View file

@ -4,9 +4,6 @@ from decimal import Decimal
from datetime import datetime from datetime import datetime
# ----------------------------------------------------
# Schema base - representa a tabela T_SERVICO_ITEMPEDIDO
# ----------------------------------------------------
class TServicoItemPedidoSchema(BaseModel): class TServicoItemPedidoSchema(BaseModel):
servico_itempedido_id: Optional[Decimal] = None servico_itempedido_id: Optional[Decimal] = None
servico_pedido_id: Optional[Decimal] = None servico_pedido_id: Optional[Decimal] = None
@ -81,9 +78,6 @@ class TServicoItemPedidoSchema(BaseModel):
from_attributes = True from_attributes = True
# ----------------------------------------------------
# Schema para listagem (GET index)
# ----------------------------------------------------
class TServicoItemIndexSchema(BaseModel): class TServicoItemIndexSchema(BaseModel):
servico_pedido_id: Optional[Decimal] = None servico_pedido_id: Optional[Decimal] = None
@ -91,9 +85,6 @@ class TServicoItemIndexSchema(BaseModel):
from_attributes = True from_attributes = True
# ----------------------------------------------------
# Schema para localizar um registro pelo ID (GET /{id})
# ----------------------------------------------------
class TServicoItemPedidoIdSchema(BaseModel): class TServicoItemPedidoIdSchema(BaseModel):
servico_itempedido_id: Optional[Decimal] = None servico_itempedido_id: Optional[Decimal] = None
@ -101,10 +92,14 @@ class TServicoItemPedidoIdSchema(BaseModel):
from_attributes = True from_attributes = True
# ---------------------------------------------------- class TServicoItemPedidoSituacaoSchema(BaseModel):
# Schema para criação (POST) servico_itempedido_id: Optional[Decimal] = None
# - normalmente sem o ID (gerado pelo banco) usuario_id: Optional[Decimal] = None
# ----------------------------------------------------
class Config:
from_attributes = True
class TServicoItemPedidoSaveSchema(TServicoItemPedidoSchema): class TServicoItemPedidoSaveSchema(TServicoItemPedidoSchema):
class Config: class Config:
@ -120,10 +115,6 @@ class TServicoItemPedidoSaveSituacaoSchema(BaseModel):
from_attributes = True from_attributes = True
# ----------------------------------------------------
# Schema para atualização (PUT)
# - inclui o ID + campos opcionais para alterar
# ----------------------------------------------------
class TServicoItemPedidoUpdateSchema(TServicoItemPedidoSchema): class TServicoItemPedidoUpdateSchema(TServicoItemPedidoSchema):
class Config: class Config:

View file

@ -0,0 +1,82 @@
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.t_servico_tipo.go.t_servico_tipo_show_service import (
ShowService,
)
from packages.v1.servicos.balcao.actions.t_servico_itempedido.t_servico_itempedido_save_situacao_action import (
TServicoItemPedidoSaveSituacaoAction,
)
from packages.v1.servicos.balcao.controllers.t_servico_itempedido_controller import (
TServicoItemPedidoSaveSituacaoSchema,
TServicoItemPedidoSituacaoSchema,
)
from packages.v1.administrativo.services.c_caixa_item.go.c_caixa_item_save_service import (
SaveService,
)
from packages.v1.servicos.balcao.schemas.t_servico_pedido_schema import (
TServicoPedidoIdSchema,
)
from packages.v1.servicos.balcao.services.t_servico_pedido.go.t_servico_pedido_show_service import (
TServicoPedidoShowService,
)
class TServicoItemPedidoAtivarService:
"""
Serviço responsável por cancelar um item de pedido de serviço,
alterando sua situação via Action TServicoItemPedidoSaveSituacaoAction.
"""
def execute(self, data: TServicoItemPedidoSituacaoSchema):
# Instancia corretamente a Action (classe)
save_situacao_action = TServicoItemPedidoSaveSituacaoAction()
# Executa o fluxo da action com o schema recebido
response = save_situacao_action.execute(
TServicoItemPedidoSaveSituacaoSchema(
servico_itempedido_id=data.servico_itempedido_id, situacao="F"
)
)
pedido_show = TServicoPedidoShowService()
# Busca o pedido
response_pedido_show = pedido_show.execute(
TServicoPedidoIdSchema(servico_pedido_id=response.servico_pedido_id)
)
if response:
# Busca os detalhes do serviço do item
t_servico_tipo_show = ShowService()
response_t_servico_tipo_show = t_servico_tipo_show.execute(
TServicoTipoIdSchema(servico_tipo_id=response.servico_tipo_id)
)
# Controle de pedidos
c_caixa_item_save_service = SaveService()
# Salva o serviço no caixa
c_caixa_item_save_service.execute(
CaixaItemSchema(
apresentante=response_pedido_show.apresentante,
usuario_servico_id=data.usuario_id,
chave_servico=response.servico_pedido_id,
descricao=response_t_servico_tipo_show.descricao,
situacao=3,
tipo_transacao="D",
emolumento_item_id=response.emolumento_item_id,
emolumento=response.emolumento,
taxa_judiciaria=response.taxa_judiciaria,
iss=response.valor_iss,
fundesp=response.fundesp,
valor_servico=1,
valor_pago=1,
)
)
return response

View file

@ -1,8 +1,25 @@
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.t_servico_tipo.go.t_servico_tipo_show_service import (
ShowService,
)
from packages.v1.servicos.balcao.actions.t_servico_itempedido.t_servico_itempedido_save_situacao_action import ( from packages.v1.servicos.balcao.actions.t_servico_itempedido.t_servico_itempedido_save_situacao_action import (
TServicoItemPedidoSaveSituacaoAction, TServicoItemPedidoSaveSituacaoAction,
) )
from packages.v1.servicos.balcao.controllers.t_servico_itempedido_controller import ( from packages.v1.servicos.balcao.controllers.t_servico_itempedido_controller import (
TServicoItemPedidoSaveSituacaoSchema, TServicoItemPedidoSaveSituacaoSchema,
TServicoItemPedidoSituacaoSchema,
)
from packages.v1.administrativo.services.c_caixa_item.go.c_caixa_item_save_service import (
SaveService,
)
from packages.v1.servicos.balcao.schemas.t_servico_pedido_schema import (
TServicoPedidoIdSchema,
)
from packages.v1.servicos.balcao.services.t_servico_pedido.go.t_servico_pedido_show_service import (
TServicoPedidoShowService,
) )
@ -12,14 +29,54 @@ class TServicoItemPedidoCancelarService:
alterando sua situação via Action TServicoItemPedidoSaveSituacaoAction. alterando sua situação via Action TServicoItemPedidoSaveSituacaoAction.
""" """
def execute(self, data: TServicoItemPedidoSaveSituacaoSchema): def execute(self, data: TServicoItemPedidoSituacaoSchema):
# Instancia corretamente a Action (classe) # Instancia corretamente a Action (classe)
save_situacao_action = TServicoItemPedidoSaveSituacaoAction() save_situacao_action = TServicoItemPedidoSaveSituacaoAction()
# Executa o fluxo da action com o schema recebido # Executa o fluxo da action com o schema recebido
return save_situacao_action.execute( response = save_situacao_action.execute(
TServicoItemPedidoSaveSituacaoSchema( TServicoItemPedidoSaveSituacaoSchema(
servico_itempedido_id=data.servico_itempedido_id, situacao="C" servico_itempedido_id=data.servico_itempedido_id, situacao="C"
) )
) )
pedido_show = TServicoPedidoShowService()
# Busca o pedido
response_pedido_show = pedido_show.execute(
TServicoPedidoIdSchema(servico_pedido_id=response.servico_pedido_id)
)
if response:
# Busca os detalhes do serviço do item
t_servico_tipo_show = ShowService()
response_t_servico_tipo_show = t_servico_tipo_show.execute(
TServicoTipoIdSchema(servico_tipo_id=response.servico_tipo_id)
)
# Controle de pedidos
c_caixa_item_save_service = SaveService()
# Salva o serviço no caixa
c_caixa_item_save_service.execute(
CaixaItemSchema(
apresentante=response_pedido_show.apresentante,
usuario_servico_id=data.usuario_id,
chave_servico=response.servico_pedido_id,
descricao=response_t_servico_tipo_show.descricao,
situacao=3,
tipo_transacao="D",
emolumento_item_id=response.emolumento_item_id,
emolumento=response.emolumento,
taxa_judiciaria=response.taxa_judiciaria,
iss=response.valor_iss,
fundesp=response.fundesp,
valor_servico=1,
valor_pago=1,
)
)
return response