feat(): Ajustes nos detalhes do pedido de Balcão
This commit is contained in:
parent
25d904b0bb
commit
9b784f8d1a
10 changed files with 79 additions and 89 deletions
88
actions/env/env_config_loader.py
vendored
88
actions/env/env_config_loader.py
vendored
|
|
@ -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"<Settings {self._values}>"
|
||||
|
||||
# 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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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"],
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
)
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue