diff --git a/actions/env/env_config_loader.py b/actions/env/env_config_loader.py index 2557cc3..8a43680 100644 --- a/actions/env/env_config_loader.py +++ b/actions/env/env_config_loader.py @@ -1,76 +1,36 @@ +from dotenv import dotenv_values, load_dotenv import os -import json -from types import SimpleNamespace -from typing import Any, Dict class EnvConfigLoader: """ - Carrega variáveis de ambiente com um prefixo comum - e permite acessá-las diretamente via ponto, sem agrupar subníveis. + Classe para carregar todas as variáveis de ambiente (.env) + e permitir acesso via atributo (settings.VAR). """ - def __init__(self, prefix: str): - self.prefix = prefix.upper().strip("_") - self._data = self._load() - # transforma o dicionário em objeto (sem agrupar) - self._object = SimpleNamespace(**self._data) + def __init__(self, env_file: str = ".env"): - # ------------------------------- - # Conversão de valores automáticos - # ------------------------------- - def _convert_value(self, value: str) -> Any: - value = value.strip() + # Garante que o .env será carregado no ambiente do sistema + load_dotenv(env_file) - # Boolean - if value.lower() in ["true", "false"]: - return value.lower() == "true" + # Lê todas as variáveis (do arquivo + sistema) + self._values = { + **dotenv_values(env_file), # Conteúdo do .env + **os.environ, # Variáveis já existentes no ambiente + } - # Integer - if value.isdigit(): - return int(value) + def __getattr__(self, name: str): + """Permite acessar como settings.VAR""" + # Normaliza o nome para maiúsculo + key = name.upper() + if key in self._values: + return self._values[key] + raise AttributeError(f"A variável '{name}' não existe no .env") - # Float - try: - return float(value) - except ValueError: - pass + def __repr__(self): + """Exibe todas as variáveis carregadas""" + return f"" - # JSON (dicts, arrays) - try: - return json.loads(value) - except Exception: - pass - - return value - - # ------------------------------- - # Carrega variáveis do ambiente - # ------------------------------- - def _load(self) -> Dict[str, Any]: - prefix_match = f"{self.prefix}_" - data = {} - - for key, value in os.environ.items(): - if key.startswith(prefix_match): - subkey = key[len(prefix_match) :].lower() # tudo em minúsculo - data[subkey] = self._convert_value(value) - - return data - - # ------------------------------- - # Permite acesso direto via ponto - # ------------------------------- - def __getattr__(self, name: str) -> Any: - if hasattr(self._object, name): - return getattr(self._object, name) - raise AttributeError(f"'{self.prefix}' não contém '{name}'") - - # ------------------------------- - # Acesso via dicionário - # ------------------------------- - def __getitem__(self, key: str) -> Any: - return getattr(self._object, key.lower(), None) - - def __repr__(self) -> str: - return json.dumps(self._data, indent=2, ensure_ascii=False) + def all(self) -> dict: + """Retorna todas as variáveis como dicionário""" + return dict(self._values) diff --git a/database/firebird.py b/database/firebird.py index 300eaef..d452748 100644 --- a/database/firebird.py +++ b/database/firebird.py @@ -11,27 +11,27 @@ class Firebird: def get_engine(cls) -> Engine: # Instancia o loader com o prefixo correto - env_database = EnvConfigLoader(prefix="ORIUS_API_FDB") + env_database = EnvConfigLoader(".env") # Cria a engine apenas uma vez if cls._engine is None: # DSN para o SQLAlchemy usando firebird-driver dsn = ( - f"firebird+firebird://{env_database.user}:" - f"{env_database.password}@" - f"{env_database.host}:" - f"{env_database.port}/" - f"{env_database.name}" + f"firebird+firebird://{env_database.ORIUS_API_FDB_USER}:" + f"{env_database.ORIUS_API_FDB_PASSWORD}@" + f"{env_database.ORIUS_API_FDB_HOST}:" + f"{env_database.ORIUS_API_FDB_PORT}/" + f"{env_database.ORIUS_API_FDB_NAME}" ) # Criação da engine SQLAlchemy cls._engine = create_engine( dsn, - connect_args={"charset": env_database.charset}, - pool_pre_ping=bool(env_database.pool_pre_ping), - pool_size=env_database.pool_size, - max_overflow=env_database.pool_max_overflow, + connect_args={"charset": env_database.ORIUS_API_FDB_CHARSET}, + pool_pre_ping=bool(env_database.ORIUS_API_FDB_POOL_PRE_PING), + pool_size=int(env_database.ORIUS_API_FDB_POOL_SIZE), + max_overflow=int(env_database.ORIUS_API_FDB_POOL_MAX_OVERFLOW), ) return cls._engine diff --git a/packages/v1/api.py b/packages/v1/api.py index 10e6684..2c41c04 100644 --- a/packages/v1/api.py +++ b/packages/v1/api.py @@ -350,14 +350,14 @@ api_router.include_router( # Inclui as rotas de g_emolumento periodo api_router.include_router( t_servico_pedido_endpoint.router, - prefix="/servicos/balcao/t_servico_pedido", + prefix="/servicos/pedidos/t_servico_pedido", tags=["Pedido"], ) # Inclui as rotas de g_emolumento periodo api_router.include_router( t_servico_itempedido_endpoint.router, - prefix="/servicos/balcao/t_servico_itempedido", + prefix="/servicos/pedidos/t_servico_itempedido", tags=["Itens do Pedido"], ) @@ -365,7 +365,7 @@ api_router.include_router( # Inclui as rotas de g_emolumento periodo api_router.include_router( t_pessoa_cartao_endpoint.router, - prefix="/servicos/balcao/t_pessoa_cartao", + prefix="/servicos/pedidos/t_pessoa_cartao", tags=["Pessoa Cartao"], ) diff --git a/packages/v1/servicos/balcao/actions/t_servico_itempedido/t_servico_itempedido_save_situacao_action.py b/packages/v1/servicos/balcao/actions/t_servico_itempedido/t_servico_itempedido_save_situacao_action.py index 3d7ccc4..700b76c 100644 --- a/packages/v1/servicos/balcao/actions/t_servico_itempedido/t_servico_itempedido_save_situacao_action.py +++ b/packages/v1/servicos/balcao/actions/t_servico_itempedido/t_servico_itempedido_save_situacao_action.py @@ -1,9 +1,9 @@ -from packages.v1.servicos.balcao.controllers.t_servico_itempedido_controller import ( - TServicoItemPedidoSaveSituacaoSchema, -) from packages.v1.servicos.balcao.repositories.t_servico_itempedido.t_servico_itempedido_save_situacao_repository import ( TServicoItemPedidoSaveSituacaoRepository, ) +from packages.v1.servicos.balcao.schemas.t_servico_itempedido_schema import ( + TServicoItemPedidoSaveSituacaoSchema, +) class TServicoItemPedidoSaveSituacaoAction: 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 e759e8e..b7dd52c 100644 --- a/packages/v1/servicos/balcao/controllers/t_servico_itempedido_controller.py +++ b/packages/v1/servicos/balcao/controllers/t_servico_itempedido_controller.py @@ -6,6 +6,9 @@ from packages.v1.servicos.balcao.schemas.t_servico_itempedido_schema import ( TServicoItemPedidoUpdateSchema, TServicoItemPedidoIdSchema, ) +from packages.v1.servicos.balcao.services.t_servico_itempedido.go.t_servico_itempedido_cancelar_service import ( + TServicoItemPedidoCancelarService, +) class TServicoItemPedidoController: @@ -83,8 +86,7 @@ class TServicoItemPedidoController: # Importação da classe desejada cancelar_service = self.dynamic_import.service( - "t_servico_itempedido_cancelar_service", - "TServicoItemPedidoCancelarService", + "t_servico_itempedido_cancelar_service", "TServicoItemPedidoCancelarService" ) # Instância da classe service 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 5445dea..5e7b18c 100644 --- a/packages/v1/servicos/balcao/schemas/t_servico_itempedido_schema.py +++ b/packages/v1/servicos/balcao/schemas/t_servico_itempedido_schema.py @@ -115,6 +115,28 @@ class TServicoItemPedidoSaveSchema(TServicoItemPedidoSchema): from_attributes = True +class TServicoItemPedidoSaveSchema_(TServicoItemPedidoSchema): + + emolumento_id: Optional[Decimal] = None + emolumento_item_id: Optional[Decimal] = None + servico_tipo_id: Optional[Decimal] = None + tipo_item: Optional[str] = None + descricao: Optional[str] = None + tabela: Optional[str] = None + situacao: Optional[str] = None + qtd: Optional[int] = None + valor: Optional[Decimal] = None + emolumento: Optional[Decimal] = None + fundesp: Optional[Decimal] = None + taxa_judiciaria: Optional[Decimal] = None + valor_iss: Optional[Decimal] = None + pessoa_id: Optional[Decimal] = None + index: Optional[int] = None + + class Config: + from_attributes = True + + class TServicoItemPedidoUpdateSchema(TServicoItemPedidoSchema): class Config: diff --git a/packages/v1/servicos/balcao/schemas/t_servico_pedido_schema.py b/packages/v1/servicos/balcao/schemas/t_servico_pedido_schema.py index c02b340..e9a131e 100644 --- a/packages/v1/servicos/balcao/schemas/t_servico_pedido_schema.py +++ b/packages/v1/servicos/balcao/schemas/t_servico_pedido_schema.py @@ -1,5 +1,5 @@ from pydantic import BaseModel -from typing import Annotated, Optional +from typing import Annotated, List, Optional from decimal import Decimal from datetime import datetime @@ -7,6 +7,9 @@ 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 ( + TServicoItemPedidoSaveSchema, +) # ---------- Utilidades ---------- @@ -42,6 +45,7 @@ class TServicoPedidoSchema(BaseModel): nfse_id: Optional[Decimal] = None chave_importacao: Optional[Decimal] = None cpfcnpj_apresentante: Optional[str] = None + itens: Optional[List[TServicoItemPedidoSaveSchema]] = None model_config = ConfigDict(from_attributes=True) 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 index f9adb4e..8c25f89 100644 --- 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 @@ -9,12 +9,14 @@ from packages.v1.servicos.balcao.actions.t_servico_itempedido.t_servico_itempedi 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_itempedido_schema import ( + TServicoItemPedidoSaveSituacaoSchema, +) from packages.v1.servicos.balcao.schemas.t_servico_pedido_schema import ( TServicoPedidoIdSchema, ) 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 e4a3fb9..541b025 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 @@ -2,19 +2,19 @@ from packages.v1.administrativo.schemas.c_caixa_item_schema import CaixaItemSche 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_itempedido.t_servico_itempedido_save_situacao_action import ( TServicoItemPedidoSaveSituacaoAction, ) -from packages.v1.servicos.balcao.controllers.t_servico_itempedido_controller import ( +from packages.v1.servicos.balcao.schemas.t_servico_itempedido_schema 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, ) diff --git a/packages/v1/servicos/balcao/services/t_servico_pedido/go/t_servico_pedido_save_service.py b/packages/v1/servicos/balcao/services/t_servico_pedido/go/t_servico_pedido_save_service.py index 6e6114e..dc3695f 100644 --- a/packages/v1/servicos/balcao/services/t_servico_pedido/go/t_servico_pedido_save_service.py +++ b/packages/v1/servicos/balcao/services/t_servico_pedido/go/t_servico_pedido_save_service.py @@ -85,7 +85,7 @@ class TServicoPedidoSaveService: for item in t_servico_pedido_save_schema.itens: # Define o id do item do serviço - item.servico_pedido_id = response_pedido.servico_pedido_id + item.servico_pedido_id = response_pedido["servico_pedido_id"] # Define o id do item do usuario item.usuario_id = response_pedido.usuario_id