[MVPTN-126] fix(Importação): Corrige a importação de pacotes

This commit is contained in:
Keven 2025-11-10 18:20:24 -03:00
parent 4485488ef4
commit 42d76991b0
32 changed files with 136 additions and 69 deletions

View file

@ -1,7 +1,10 @@
from typing import Tuple, Dict, Any
from pydantic import BaseModel
def prepare_update_data(schema: BaseModel, exclude_fields: list[str] = None, id_field: str = "id") -> Tuple[Dict[str, Any], str]:
def prepare_update_data(
schema: BaseModel, exclude_fields: list[str] = None, id_field: str = "id"
) -> Tuple[Dict[str, Any], str]:
"""
Gera dinamicamente os dados e SQL para update com base em um schema Pydantic.
@ -21,11 +24,7 @@ def prepare_update_data(schema: BaseModel, exclude_fields: list[str] = None, id_
data_dict = schema.model_dump(exclude_unset=True)
# Monta lista dinâmica de campos para o SET
update_fields = [
f"{k} = :{k}"
for k in data_dict.keys()
if k not in exclude_fields
]
update_fields = [f"{k} = :{k}" for k in data_dict.keys() if k not in exclude_fields]
update_sql = ", ".join(update_fields)
return data_dict, update_sql
return data_dict, update_sql

View file

@ -1,4 +1,4 @@
from api.abstracts.action import BaseAction
from abstracts.action import BaseAction
from packages.v1.administrativo.repositories.t_pessoa_representante.t_pessoa_representante_index_repository import (
TPessoaRepresentanteIndexRepository,
)

View file

@ -1,4 +1,4 @@
from api.abstracts.action import BaseAction
from abstracts.action import BaseAction
from packages.v1.administrativo.repositories.t_pessoa_representante.t_pessoa_representante_update_repository import (
TPessoaRepresentanteUpdateRepository,
)

View file

@ -1,6 +1,6 @@
from fastapi import HTTPException, status
from abstracts.repository import BaseRepository
from api.actions.data.generate_insert_sql import generate_insert_sql
from actions.data.generate_insert_sql import generate_insert_sql
from packages.v1.administrativo.schemas.g_cartorio_schema import GCartorioSaveSchema

View file

@ -1,5 +1,5 @@
from abstracts.repository import BaseRepository
from api.actions.data.prepare_update_data import prepare_update_data
from actions.data.prepare_update_data import prepare_update_data
from fastapi import HTTPException, status
from packages.v1.administrativo.schemas.g_cartorio_schema import GCartorioUpdateSchema

View file

@ -1,6 +1,6 @@
from fastapi import HTTPException, status
from abstracts.repository import BaseRepository
from api.actions.data.generate_insert_sql import generate_insert_sql
from actions.data.generate_insert_sql import generate_insert_sql
from packages.v1.administrativo.schemas.g_emolumento_schema import GEmolumentoSaveSchema

View file

@ -1,5 +1,5 @@
from abstracts.repository import BaseRepository
from api.actions.data.prepare_update_data import prepare_update_data
from actions.data.prepare_update_data import prepare_update_data
from fastapi import HTTPException, status
from packages.v1.administrativo.schemas.g_emolumento_schema import (

View file

@ -1,6 +1,6 @@
from fastapi import HTTPException, status
from abstracts.repository import BaseRepository
from api.actions.data.generate_insert_sql import generate_insert_sql
from actions.data.generate_insert_sql import generate_insert_sql
from packages.v1.administrativo.schemas.g_emolumento_item_schema import (
GEmolumentoItemSaveSchema,
)

View file

@ -1,5 +1,5 @@
from abstracts.repository import BaseRepository
from api.actions.data.prepare_update_data import prepare_update_data
from actions.data.prepare_update_data import prepare_update_data
from fastapi import HTTPException, status
from packages.v1.administrativo.schemas.g_emolumento_item_schema import (

View file

@ -1,6 +1,6 @@
from fastapi import HTTPException, status
from abstracts.repository import BaseRepository
from api.actions.data.generate_insert_sql import generate_insert_sql
from actions.data.generate_insert_sql import generate_insert_sql
from packages.v1.administrativo.schemas.g_emolumento_periodo_schema import (
GEmolumentoPeriodoSaveSchema,
)

View file

@ -1,5 +1,5 @@
from abstracts.repository import BaseRepository
from api.actions.data.prepare_update_data import prepare_update_data
from actions.data.prepare_update_data import prepare_update_data
from fastapi import HTTPException, status
from packages.v1.administrativo.schemas.g_emolumento_periodo_schema import (

View file

@ -1,6 +1,6 @@
from fastapi import HTTPException, status
from abstracts.repository import BaseRepository
from api.actions.data.generate_insert_sql import generate_insert_sql
from actions.data.generate_insert_sql import generate_insert_sql
from packages.v1.administrativo.schemas.g_gramatica_schema import GGramaticaSaveSchema

View file

@ -1,5 +1,5 @@
from abstracts.repository import BaseRepository
from api.actions.data.prepare_update_data import prepare_update_data
from actions.data.prepare_update_data import prepare_update_data
from fastapi import HTTPException, status
from packages.v1.administrativo.schemas.g_gramatica_schema import GGramaticaUpdateSchema

View file

@ -1,6 +1,6 @@
from fastapi import HTTPException, status
from abstracts.repository import BaseRepository
from api.actions.data.generate_insert_sql import generate_insert_sql
from actions.data.generate_insert_sql import generate_insert_sql
from packages.v1.administrativo.schemas.g_natureza_titulo_schema import (
GNaturezaTituloSaveSchema,
)

View file

@ -1,5 +1,5 @@
from abstracts.repository import BaseRepository
from api.actions.data.prepare_update_data import prepare_update_data
from actions.data.prepare_update_data import prepare_update_data
from fastapi import HTTPException, status
from packages.v1.administrativo.schemas.g_natureza_titulo_schema import (

View file

@ -1,6 +1,6 @@
from fastapi import HTTPException, status
from abstracts.repository import BaseRepository
from api.actions.data.generate_insert_sql import generate_insert_sql
from actions.data.generate_insert_sql import generate_insert_sql
from packages.v1.administrativo.schemas.g_selo_grupo_schema import GSeloGrupoSaveSchema

View file

@ -1,5 +1,5 @@
from abstracts.repository import BaseRepository
from api.actions.data.prepare_update_data import prepare_update_data
from actions.data.prepare_update_data import prepare_update_data
from fastapi import HTTPException, status
from packages.v1.administrativo.schemas.g_selo_grupo_schema import (

View file

@ -1,6 +1,8 @@
from abstracts.repository import BaseRepository
from api.actions.data.prepare_update_data import prepare_update_data
from packages.v1.administrativo.schemas.t_ato_partetipo_schema import TAtoParteTipoUpdateSchema
from actions.data.prepare_update_data import prepare_update_data
from packages.v1.administrativo.schemas.t_ato_partetipo_schema import (
TAtoParteTipoUpdateSchema,
)
from fastapi import HTTPException, status
@ -9,11 +11,11 @@ class TAtoParteTipoUpdateRepository(BaseRepository):
def execute(self, t_ato_partetipo_update_schema: TAtoParteTipoUpdateSchema):
try:
params, update_columns = prepare_update_data(
t_ato_partetipo_update_schema,
exclude_fields=["ato_partipo_id"],
id_field="ato_partipo_id"
id_field="ato_partipo_id",
)
sql = f"""
@ -38,5 +40,5 @@ class TAtoParteTipoUpdateRepository(BaseRepository):
except Exception as e:
raise HTTPException(
status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
detail=f"Erro ao atualizar o imóvel: {str(e)}"
detail=f"Erro ao atualizar o imóvel: {str(e)}",
)

View file

@ -1,5 +1,5 @@
from abstracts.repository import BaseRepository
from api.actions.data.prepare_update_data import prepare_update_data
from actions.data.prepare_update_data import prepare_update_data
from fastapi import HTTPException, status
from packages.v1.administrativo.schemas.t_censec_qualidadeato_schema import (
TCensecQualidadeAtoUpdateSchema,

View file

@ -1,5 +1,5 @@
from abstracts.repository import BaseRepository
from api.actions.data.prepare_update_data import prepare_update_data
from actions.data.prepare_update_data import prepare_update_data
from fastapi import HTTPException, status
from packages.v1.administrativo.schemas.t_censec_tipoato_schema import (

View file

@ -1,5 +1,5 @@
from abstracts.repository import BaseRepository
from api.actions.data.prepare_update_data import prepare_update_data
from actions.data.prepare_update_data import prepare_update_data
from fastapi import HTTPException, status
from packages.v1.administrativo.schemas.t_censec_tiponatureza_schema import (

View file

@ -1,5 +1,5 @@
from abstracts.repository import BaseRepository
from api.actions.data.prepare_update_data import prepare_update_data
from actions.data.prepare_update_data import prepare_update_data
from packages.v1.administrativo.schemas.t_imovel_schema import TImovelUpdateSchema
from fastapi import HTTPException, status
@ -9,11 +9,11 @@ class TImovelUpdateRepository(BaseRepository):
def execute(self, t_imovel_update_schema: TImovelUpdateSchema):
try:
params, update_columns = prepare_update_data(
t_imovel_update_schema,
exclude_fields=["imovel_id"],
id_field="imovel_id"
id_field="imovel_id",
)
sql = f"""
@ -31,5 +31,5 @@ class TImovelUpdateRepository(BaseRepository):
except Exception as e:
raise HTTPException(
status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
detail=f"Erro ao atualizar o imóvel: {str(e)}"
detail=f"Erro ao atualizar o imóvel: {str(e)}",
)

View file

@ -1,8 +1,11 @@
from abstracts.repository import BaseRepository
from api.actions.data.prepare_update_data import prepare_update_data
from packages.v1.administrativo.schemas.t_imovel_unidade_schema import TImovelUnidadeUpdateSchema
from actions.data.prepare_update_data import prepare_update_data
from packages.v1.administrativo.schemas.t_imovel_unidade_schema import (
TImovelUnidadeUpdateSchema,
)
from fastapi import HTTPException, status
class TImovelUnidadeUpdateRepository(BaseRepository):
"""
Repositório para a operação de atualização na tabela T_CENSEC_QUALIDADE.
@ -11,39 +14,39 @@ class TImovelUnidadeUpdateRepository(BaseRepository):
def execute(self, t_imovel_unidade_update_schema: TImovelUnidadeUpdateSchema):
"""
Executa a atualização de um registro na tabela.
Args:
t_imovel_unidade_id (int): O ID do registro a ser atualizado.
t_imovel_unidade_schema (TImovelUnidadeUpdateSchema): O esquema com os dados a serem atualizados.
Returns:
O registro atualizado.
Raises:
HTTPException: Se o registro não for encontrado ou ocorrer um erro na atualização.
"""
try:
params, update_columns = prepare_update_data(
t_imovel_unidade_update_schema,
exclude_fields=["imovel_unidade_id"],
id_field="imovel_unidade_id"
id_field="imovel_unidade_id",
)
sql = f"""
UPDATE T_IMOVEL_UNIDADE
SET {update_columns}
WHERE IMOVEL_UNIDADE_ID = :imovel_unidade_id
RETURNING IMOVEL_UNIDADE_ID
RETURNING IMOVEL_UNIDADE_ID
"""
# Executa o update
# Executa o update
response = self.run_and_return(sql, params)
return response
except Exception as e:
raise HTTPException(
status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
detail=f"Erro ao atualizar o imóvel unidade: {str(e)}"
)
detail=f"Erro ao atualizar o imóvel unidade: {str(e)}",
)

View file

@ -1,4 +1,4 @@
from api.actions.data.prepare_update_data import prepare_update_data
from actions.data.prepare_update_data import prepare_update_data
from packages.v1.administrativo.schemas.t_pessoa_schema import TPessoaSaveSchema
from fastapi import HTTPException, status
from abstracts.repository import BaseRepository

View file

@ -1,4 +1,4 @@
from api.actions.dynamic_import.dynamic_import import DynamicImport
from actions.dynamic_import.dynamic_import import DynamicImport
from packages.v1.administrativo.actions.t_censec_qualidadeato.t_censec_qualidadeato_save_action import (
TCensecQualidadeAtoSaveAction,
)

View file

@ -1,4 +1,4 @@
from api.actions.dynamic_import.dynamic_import import DynamicImport
from actions.dynamic_import.dynamic_import import DynamicImport
from packages.v1.administrativo.actions.t_censec_tipoato.t_censec_tipoato_save_action import (
TCensecTipoAtoSaveAction,
)

View file

@ -1,5 +1,5 @@
from datetime import datetime
from api.actions.dynamic_import.dynamic_import import DynamicImport
from actions.dynamic_import.dynamic_import import DynamicImport
from packages.v1.administrativo.actions.t_imovel.t_imovel_save_action import (
TImovelSaveAction,
)

View file

@ -33,7 +33,7 @@ class TServicoPedidoUpdateRepository(BaseRepository):
# ----------------------------------------------------
params, update_columns = prepare_update_data(
t_servico_pedido_update_schema,
exclude_fields=["servico_pedido_id"],
exclude_fields=["servico_pedido_id", "itens"],
id_field="servico_pedido_id",
)

View file

@ -1,13 +1,33 @@
from pydantic import BaseModel
from typing import Optional, List
from typing import Annotated, Optional, List
from decimal import Decimal
from datetime import datetime
from pydantic.functional_validators import BeforeValidator
from packages.v1.servicos.balcao.schemas.t_servico_itempedido_schema import (
TServicoItemPedidoSchema,
)
# ---------- Utilidades ----------
def _zero_to_none(v):
# Trate 0, 0.0, "0", "" como None
return None if v in (0, 0.0, "0", "", None) else v
def _to_decimal(v):
if v in (None, "", "0", 0, 0.0):
return Decimal("0") # ou None, se preferir
# Sempre usar str para evitar floating point issues
return Decimal(str(v))
ZeroNoneInt = Annotated[Optional[int], BeforeValidator(_zero_to_none)]
Money = Annotated[Optional[Decimal], BeforeValidator(_to_decimal)]
Fk = ZeroNoneInt # só para semântica
# ----------------------------------------------------
# Schema base - representa a tabela T_SERVICO_PEDIDO
# ----------------------------------------------------
@ -51,13 +71,13 @@ class TServicoPedidoSaveSchema(BaseModel):
valor_pago: Optional[Decimal] = None
usuario_id: Optional[Decimal] = None
data_pedido: Optional[datetime] = None
mensalista_livrocaixa_id: Optional[Decimal] = None
mensalista_livrocaixa_id: Fk = None
observacao: Optional[str] = None
escrevente_id: Optional[Decimal] = None
situacao: Optional[str] = None
estornado: Optional[str] = None
apresentante: Optional[str] = None
nfse_id: Optional[Decimal] = None
nfse_id: Fk = None
chave_importacao: Optional[Decimal] = None
cpfcnpj_apresentante: Optional[str] = None
itens: Optional[List[TServicoItemPedidoSchema]] = None
@ -76,15 +96,16 @@ class TServicoPedidoUpdateSchema(BaseModel):
valor_pago: Optional[Decimal] = None
usuario_id: Optional[Decimal] = None
data_pedido: Optional[datetime] = None
mensalista_livrocaixa_id: Optional[Decimal] = None
mensalista_livrocaixa_id: Fk = None
observacao: Optional[str] = None
escrevente_id: Optional[Decimal] = None
situacao: Optional[str] = None
estornado: Optional[str] = None
apresentante: Optional[str] = None
nfse_id: Optional[Decimal] = None
nfse_id: Fk = None
chave_importacao: Optional[Decimal] = None
cpfcnpj_apresentante: Optional[str] = None
itens: Optional[List[TServicoItemPedidoSchema]] = None
class Config:
from_attributes = True

View file

@ -32,6 +32,7 @@ class TServicoItemPedidoSaveService:
# Geração automática de ID (sequência)
# ----------------------------------------------------
if not t_servico_itempedido_save_schema.servico_itempedido_id:
# Cria o schema de sequência
sequencia_schema = GSequenciaSchema()
sequencia_schema.tabela = "T_SERVICO_ITEMPEDIDO"

View file

@ -47,11 +47,6 @@ class TServicoPedidoSaveService:
# Atualiza o ID no schema
t_servico_pedido_save_schema.servico_pedido_id = sequencia.sequencia
# Verifica se tem a data do pedido
if not t_servico_pedido_save_schema.data_pedido:
t_servico_pedido_save_schema.data_pedido = datetime.now()
# ----------------------------------------------------
# Instanciamento e execução da Action de salvamento
# ----------------------------------------------------
@ -60,21 +55,26 @@ class TServicoPedidoSaveService:
# Obtenho a resposta da operação
response = t_servico_pedido_save_action.execute(t_servico_pedido_save_schema)
# Verifica se tem a data do pedido
if not t_servico_pedido_save_schema.data_pedido:
t_servico_pedido_save_schema.data_pedido = datetime.now()
# Verifica se o pedido foi salvo
if (
response.servico_pedido_id > 0
and len(t_servico_pedido_save_schema.itens) > 0
):
# Import a classe de salvar os intes
t_servico_itempedido_service = TServicoItemPedidoSaveService()
# Percorre todos os itens salvos
for item in t_servico_pedido_save_schema.itens:
# Define o id do item do serviço
item.servico_pedido_id = response.servico_pedido_id
# Import a classe de salvar os intes
t_servico_itempedido_service = TServicoItemPedidoSaveService()
# Salva o item do pedido
t_servico_itempedido_service.execute(item)

View file

@ -1,9 +1,16 @@
from datetime import datetime
from packages.v1.servicos.balcao.actions.t_servico_pedido.t_servico_pedido_update_action import (
TServicoPedidoUpdateAction,
)
from packages.v1.servicos.balcao.schemas.t_servico_pedido_schema import (
TServicoPedidoUpdateSchema,
)
from packages.v1.servicos.balcao.services.t_servico_itempedido.go.t_servico_itempedido_save_service import (
TServicoItemPedidoSaveService,
)
from packages.v1.servicos.balcao.services.t_servico_itempedido.go.t_servico_itempedido_update_service import (
TServicoItemPedidoUpdateService,
)
class TServicoPedidoUpdateService:
@ -28,7 +35,41 @@ class TServicoPedidoUpdateService:
# ----------------------------------------------------
t_servico_pedido_update_action = TServicoPedidoUpdateAction()
# ----------------------------------------------------
# Execução da ação e retorno do resultado
# ----------------------------------------------------
return t_servico_pedido_update_action.execute(t_servico_pedido_update_schema)
# Obtenho a resposta da operação
response = t_servico_pedido_update_action.execute(
t_servico_pedido_update_schema
)
# Verifica se tem a data do pedido
if not t_servico_pedido_update_schema.data_pedido:
t_servico_pedido_update_schema.data_pedido = datetime.now()
# Verifica se o pedido foi salvo
if (
response.servico_pedido_id > 0
and len(t_servico_pedido_update_schema.itens) > 0
):
# Percorre todos os itens salvos
for item in t_servico_pedido_update_schema.itens:
# Define o id do item do serviço
item.servico_pedido_id = response.servico_pedido_id
t_servico_itempedido_service = None
if item.servico_itempedido_id:
# Import a classe de salvar os intes
t_servico_itempedido_service = TServicoItemPedidoUpdateService()
else:
# Import a classe de atualizar os itens
t_servico_itempedido_service = TServicoItemPedidoSaveService()
# Salva o item do pedido
t_servico_itempedido_service.execute(item)
return response