feat(): Ajustes nos detalhes do pedido de Balcão

This commit is contained in:
Keven 2025-12-16 15:06:47 -03:00
parent 25d904b0bb
commit 9b784f8d1a
10 changed files with 79 additions and 89 deletions

View file

@ -1,76 +1,36 @@
from dotenv import dotenv_values, load_dotenv
import os import os
import json
from types import SimpleNamespace
from typing import Any, Dict
class EnvConfigLoader: class EnvConfigLoader:
""" """
Carrega variáveis de ambiente com um prefixo comum Classe para carregar todas as variáveis de ambiente (.env)
e permite acessá-las diretamente via ponto, sem agrupar subníveis. e permitir acesso via atributo (settings.VAR).
""" """
def __init__(self, prefix: str): def __init__(self, env_file: str = ".env"):
self.prefix = prefix.upper().strip("_")
self._data = self._load()
# transforma o dicionário em objeto (sem agrupar)
self._object = SimpleNamespace(**self._data)
# ------------------------------- # Garante que o .env será carregado no ambiente do sistema
# Conversão de valores automáticos load_dotenv(env_file)
# -------------------------------
def _convert_value(self, value: str) -> Any:
value = value.strip()
# Boolean # Lê todas as variáveis (do arquivo + sistema)
if value.lower() in ["true", "false"]: self._values = {
return value.lower() == "true" **dotenv_values(env_file), # Conteúdo do .env
**os.environ, # Variáveis já existentes no ambiente
}
# Integer def __getattr__(self, name: str):
if value.isdigit(): """Permite acessar como settings.VAR"""
return int(value) # 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 def __repr__(self):
try: """Exibe todas as variáveis carregadas"""
return float(value) return f"<Settings {self._values}>"
except ValueError:
pass
# JSON (dicts, arrays) def all(self) -> dict:
try: """Retorna todas as variáveis como dicionário"""
return json.loads(value) return dict(self._values)
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)

View file

@ -11,27 +11,27 @@ class Firebird:
def get_engine(cls) -> Engine: def get_engine(cls) -> Engine:
# Instancia o loader com o prefixo correto # Instancia o loader com o prefixo correto
env_database = EnvConfigLoader(prefix="ORIUS_API_FDB") env_database = EnvConfigLoader(".env")
# Cria a engine apenas uma vez # Cria a engine apenas uma vez
if cls._engine is None: if cls._engine is None:
# DSN para o SQLAlchemy usando firebird-driver # DSN para o SQLAlchemy usando firebird-driver
dsn = ( dsn = (
f"firebird+firebird://{env_database.user}:" f"firebird+firebird://{env_database.ORIUS_API_FDB_USER}:"
f"{env_database.password}@" f"{env_database.ORIUS_API_FDB_PASSWORD}@"
f"{env_database.host}:" f"{env_database.ORIUS_API_FDB_HOST}:"
f"{env_database.port}/" f"{env_database.ORIUS_API_FDB_PORT}/"
f"{env_database.name}" f"{env_database.ORIUS_API_FDB_NAME}"
) )
# Criação da engine SQLAlchemy # Criação da engine SQLAlchemy
cls._engine = create_engine( cls._engine = create_engine(
dsn, dsn,
connect_args={"charset": env_database.charset}, connect_args={"charset": env_database.ORIUS_API_FDB_CHARSET},
pool_pre_ping=bool(env_database.pool_pre_ping), pool_pre_ping=bool(env_database.ORIUS_API_FDB_POOL_PRE_PING),
pool_size=env_database.pool_size, pool_size=int(env_database.ORIUS_API_FDB_POOL_SIZE),
max_overflow=env_database.pool_max_overflow, max_overflow=int(env_database.ORIUS_API_FDB_POOL_MAX_OVERFLOW),
) )
return cls._engine return cls._engine

View file

@ -350,14 +350,14 @@ api_router.include_router(
# Inclui as rotas de g_emolumento periodo # Inclui as rotas de g_emolumento periodo
api_router.include_router( api_router.include_router(
t_servico_pedido_endpoint.router, t_servico_pedido_endpoint.router,
prefix="/servicos/balcao/t_servico_pedido", prefix="/servicos/pedidos/t_servico_pedido",
tags=["Pedido"], tags=["Pedido"],
) )
# Inclui as rotas de g_emolumento periodo # Inclui as rotas de g_emolumento periodo
api_router.include_router( api_router.include_router(
t_servico_itempedido_endpoint.router, t_servico_itempedido_endpoint.router,
prefix="/servicos/balcao/t_servico_itempedido", prefix="/servicos/pedidos/t_servico_itempedido",
tags=["Itens do Pedido"], tags=["Itens do Pedido"],
) )
@ -365,7 +365,7 @@ api_router.include_router(
# Inclui as rotas de g_emolumento periodo # Inclui as rotas de g_emolumento periodo
api_router.include_router( api_router.include_router(
t_pessoa_cartao_endpoint.router, t_pessoa_cartao_endpoint.router,
prefix="/servicos/balcao/t_pessoa_cartao", prefix="/servicos/pedidos/t_pessoa_cartao",
tags=["Pessoa Cartao"], tags=["Pessoa Cartao"],
) )

View file

@ -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 ( from packages.v1.servicos.balcao.repositories.t_servico_itempedido.t_servico_itempedido_save_situacao_repository import (
TServicoItemPedidoSaveSituacaoRepository, TServicoItemPedidoSaveSituacaoRepository,
) )
from packages.v1.servicos.balcao.schemas.t_servico_itempedido_schema import (
TServicoItemPedidoSaveSituacaoSchema,
)
class TServicoItemPedidoSaveSituacaoAction: class TServicoItemPedidoSaveSituacaoAction:

View file

@ -6,6 +6,9 @@ from packages.v1.servicos.balcao.schemas.t_servico_itempedido_schema import (
TServicoItemPedidoUpdateSchema, TServicoItemPedidoUpdateSchema,
TServicoItemPedidoIdSchema, TServicoItemPedidoIdSchema,
) )
from packages.v1.servicos.balcao.services.t_servico_itempedido.go.t_servico_itempedido_cancelar_service import (
TServicoItemPedidoCancelarService,
)
class TServicoItemPedidoController: class TServicoItemPedidoController:
@ -83,8 +86,7 @@ class TServicoItemPedidoController:
# Importação da classe desejada # Importação da classe desejada
cancelar_service = self.dynamic_import.service( cancelar_service = self.dynamic_import.service(
"t_servico_itempedido_cancelar_service", "t_servico_itempedido_cancelar_service", "TServicoItemPedidoCancelarService"
"TServicoItemPedidoCancelarService",
) )
# Instância da classe service # Instância da classe service

View file

@ -115,6 +115,28 @@ class TServicoItemPedidoSaveSchema(TServicoItemPedidoSchema):
from_attributes = True 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 TServicoItemPedidoUpdateSchema(TServicoItemPedidoSchema):
class Config: class Config:

View file

@ -1,5 +1,5 @@
from pydantic import BaseModel from pydantic import BaseModel
from typing import Annotated, Optional from typing import Annotated, List, Optional
from decimal import Decimal from decimal import Decimal
from datetime import datetime from datetime import datetime
@ -7,6 +7,9 @@ from pydantic.config import ConfigDict
from pydantic.functional_validators import BeforeValidator from pydantic.functional_validators import BeforeValidator
from packages.v1.parametros.schemas.g_config_schema import GConfigNomeSchema from packages.v1.parametros.schemas.g_config_schema import GConfigNomeSchema
from packages.v1.servicos.balcao.schemas.t_servico_itempedido_schema import (
TServicoItemPedidoSaveSchema,
)
# ---------- Utilidades ---------- # ---------- Utilidades ----------
@ -42,6 +45,7 @@ class TServicoPedidoSchema(BaseModel):
nfse_id: Optional[Decimal] = None nfse_id: Optional[Decimal] = None
chave_importacao: Optional[Decimal] = None chave_importacao: Optional[Decimal] = None
cpfcnpj_apresentante: Optional[str] = None cpfcnpj_apresentante: Optional[str] = None
itens: Optional[List[TServicoItemPedidoSaveSchema]] = None
model_config = ConfigDict(from_attributes=True) model_config = ConfigDict(from_attributes=True)

View file

@ -9,12 +9,14 @@ from packages.v1.servicos.balcao.actions.t_servico_itempedido.t_servico_itempedi
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,
TServicoItemPedidoSituacaoSchema, TServicoItemPedidoSituacaoSchema,
) )
from packages.v1.administrativo.services.c_caixa_item.go.c_caixa_item_save_service import ( from packages.v1.administrativo.services.c_caixa_item.go.c_caixa_item_save_service import (
SaveService, SaveService,
) )
from packages.v1.servicos.balcao.schemas.t_servico_itempedido_schema import (
TServicoItemPedidoSaveSituacaoSchema,
)
from packages.v1.servicos.balcao.schemas.t_servico_pedido_schema import ( from packages.v1.servicos.balcao.schemas.t_servico_pedido_schema import (
TServicoPedidoIdSchema, TServicoPedidoIdSchema,
) )

View file

@ -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 ( from packages.v1.administrativo.schemas.t_servico_tipo_schema import (
TServicoTipoIdSchema, 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 ( from packages.v1.administrativo.services.t_servico_tipo.go.t_servico_tipo_show_service import (
ShowService, 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.schemas.t_servico_itempedido_schema import (
TServicoItemPedidoSaveSituacaoSchema, TServicoItemPedidoSaveSituacaoSchema,
TServicoItemPedidoSituacaoSchema, 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 ( from packages.v1.servicos.balcao.schemas.t_servico_pedido_schema import (
TServicoPedidoIdSchema, TServicoPedidoIdSchema,
) )

View file

@ -85,7 +85,7 @@ class TServicoPedidoSaveService:
for item in t_servico_pedido_save_schema.itens: for item in t_servico_pedido_save_schema.itens:
# Define o id do item do serviço # 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 # Define o id do item do usuario
item.usuario_id = response_pedido.usuario_id item.usuario_id = response_pedido.usuario_id