From 571e59bfb828ec4b99418a26d5023e3ae81290a2 Mon Sep 17 00:00:00 2001 From: Keven Date: Fri, 5 Dec 2025 11:09:22 -0300 Subject: [PATCH] [MVPTN-126] feat(Pedido): Cria endpoints e recursos para estornar e ativar um item do pedido --- .../t_servico_itempedido_controller.py | 23 +++++- .../t_servico_itempedido_endpoint.py | 38 ++++++++- .../schemas/t_servico_itempedido_schema.py | 25 ++---- .../go/t_servico_itempedido_ativar_service.py | 82 +++++++++++++++++++ .../t_servico_itempedido_cancelar_service.py | 61 +++++++++++++- 5 files changed, 208 insertions(+), 21 deletions(-) create mode 100644 packages/v1/servicos/balcao/services/t_servico_itempedido/go/t_servico_itempedido_ativar_service.py diff --git a/packages/v1/servicos/balcao/controllers/t_servico_itempedido_controller.py b/packages/v1/servicos/balcao/controllers/t_servico_itempedido_controller.py index 4f4b1f5..4421656 100644 --- a/packages/v1/servicos/balcao/controllers/t_servico_itempedido_controller.py +++ b/packages/v1/servicos/balcao/controllers/t_servico_itempedido_controller.py @@ -3,6 +3,7 @@ from packages.v1.servicos.balcao.schemas.t_servico_itempedido_schema import ( TServicoItemIndexSchema, TServicoItemPedidoSaveSchema, TServicoItemPedidoSaveSituacaoSchema, + TServicoItemPedidoSituacaoSchema, TServicoItemPedidoUpdateSchema, TServicoItemPedidoIdSchema, ) @@ -79,7 +80,7 @@ class TServicoItemPedidoController: # ---------------------------------------------------- # Cadastra um novo registro em T_SERVICO_ITEMPEDIDO # ---------------------------------------------------- - def cancelar(self, data: TServicoItemPedidoIdSchema): + def cancelar(self, data: TServicoItemPedidoSituacaoSchema): # Importação da classe desejada cancelar_service = self.dynamic_import.service( @@ -96,6 +97,26 @@ class TServicoItemPedidoController: "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 # ---------------------------------------------------- diff --git a/packages/v1/servicos/balcao/endpoints/t_servico_itempedido_endpoint.py b/packages/v1/servicos/balcao/endpoints/t_servico_itempedido_endpoint.py index 3b8b937..bfa6747 100644 --- a/packages/v1/servicos/balcao/endpoints/t_servico_itempedido_endpoint.py +++ b/packages/v1/servicos/balcao/endpoints/t_servico_itempedido_endpoint.py @@ -1,5 +1,6 @@ # Importação de bibliotecas 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 packages.v1.servicos.balcao.controllers.t_servico_itempedido_controller import ( 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 ( TServicoItemIndexSchema, TServicoItemPedidoSaveSchema, + TServicoItemPedidoSituacaoSchema, TServicoItemPedidoUpdateSchema, TServicoItemPedidoIdSchema, ) @@ -119,9 +121,43 @@ async def cancelar( 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.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 diff --git a/packages/v1/servicos/balcao/schemas/t_servico_itempedido_schema.py b/packages/v1/servicos/balcao/schemas/t_servico_itempedido_schema.py index ebd3e92..6fe7293 100644 --- a/packages/v1/servicos/balcao/schemas/t_servico_itempedido_schema.py +++ b/packages/v1/servicos/balcao/schemas/t_servico_itempedido_schema.py @@ -4,9 +4,6 @@ from decimal import Decimal from datetime import datetime -# ---------------------------------------------------- -# Schema base - representa a tabela T_SERVICO_ITEMPEDIDO -# ---------------------------------------------------- class TServicoItemPedidoSchema(BaseModel): servico_itempedido_id: Optional[Decimal] = None servico_pedido_id: Optional[Decimal] = None @@ -81,9 +78,6 @@ class TServicoItemPedidoSchema(BaseModel): from_attributes = True -# ---------------------------------------------------- -# Schema para listagem (GET index) -# ---------------------------------------------------- class TServicoItemIndexSchema(BaseModel): servico_pedido_id: Optional[Decimal] = None @@ -91,9 +85,6 @@ class TServicoItemIndexSchema(BaseModel): from_attributes = True -# ---------------------------------------------------- -# Schema para localizar um registro pelo ID (GET /{id}) -# ---------------------------------------------------- class TServicoItemPedidoIdSchema(BaseModel): servico_itempedido_id: Optional[Decimal] = None @@ -101,10 +92,14 @@ class TServicoItemPedidoIdSchema(BaseModel): from_attributes = True -# ---------------------------------------------------- -# Schema para criação (POST) -# - normalmente sem o ID (gerado pelo banco) -# ---------------------------------------------------- +class TServicoItemPedidoSituacaoSchema(BaseModel): + servico_itempedido_id: Optional[Decimal] = None + usuario_id: Optional[Decimal] = None + + class Config: + from_attributes = True + + class TServicoItemPedidoSaveSchema(TServicoItemPedidoSchema): class Config: @@ -120,10 +115,6 @@ class TServicoItemPedidoSaveSituacaoSchema(BaseModel): from_attributes = True -# ---------------------------------------------------- -# Schema para atualização (PUT) -# - inclui o ID + campos opcionais para alterar -# ---------------------------------------------------- class TServicoItemPedidoUpdateSchema(TServicoItemPedidoSchema): class Config: diff --git a/packages/v1/servicos/balcao/services/t_servico_itempedido/go/t_servico_itempedido_ativar_service.py b/packages/v1/servicos/balcao/services/t_servico_itempedido/go/t_servico_itempedido_ativar_service.py new file mode 100644 index 0000000..f9adb4e --- /dev/null +++ b/packages/v1/servicos/balcao/services/t_servico_itempedido/go/t_servico_itempedido_ativar_service.py @@ -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 diff --git a/packages/v1/servicos/balcao/services/t_servico_itempedido/go/t_servico_itempedido_cancelar_service.py b/packages/v1/servicos/balcao/services/t_servico_itempedido/go/t_servico_itempedido_cancelar_service.py index e54c3d0..e4a3fb9 100644 --- a/packages/v1/servicos/balcao/services/t_servico_itempedido/go/t_servico_itempedido_cancelar_service.py +++ b/packages/v1/servicos/balcao/services/t_servico_itempedido/go/t_servico_itempedido_cancelar_service.py @@ -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 ( 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, ) @@ -12,14 +29,54 @@ class TServicoItemPedidoCancelarService: alterando sua situação via Action TServicoItemPedidoSaveSituacaoAction. """ - def execute(self, data: TServicoItemPedidoSaveSituacaoSchema): + def execute(self, data: TServicoItemPedidoSituacaoSchema): # Instancia corretamente a Action (classe) save_situacao_action = TServicoItemPedidoSaveSituacaoAction() # Executa o fluxo da action com o schema recebido - return save_situacao_action.execute( + response = save_situacao_action.execute( TServicoItemPedidoSaveSituacaoSchema( 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