[MVPTN-100] fix(Diversos): Ajustes diversos
This commit is contained in:
parent
2f1461d1e0
commit
355dda6f53
6 changed files with 95 additions and 167 deletions
|
|
@ -24,40 +24,41 @@ class TImovelUnidadeUpdateRepository(BaseRepository):
|
|||
try:
|
||||
# Dicionário de mapeamento: atributo → coluna SQL
|
||||
field_map = {
|
||||
"imovel_id": "IMOVEL_ID",
|
||||
"numero_unidade": "NUMERO_UNIDADE",
|
||||
"quadra": "QUADRA",
|
||||
"area": "AREA",
|
||||
"superquadra": "SUPERQUADRA",
|
||||
"conjunto": "CONJUNTO",
|
||||
"bloco": "BLOCO",
|
||||
"area_descritiva": "AREA_DESCRITIVA",
|
||||
"caracteristica": "CARACTERISTICA",
|
||||
"reserva_florestal": "RESERVA_FLORESTAL",
|
||||
"geo_referenciamento": "GEO_REFERENCIAMENTO",
|
||||
"logradouro": "LOGRADOURO",
|
||||
"tb_tipologradouro_id": "TB_TIPOLOGRADOURO_ID",
|
||||
"selecionado": "SELECIONADO",
|
||||
"complemento": "COMPLEMENTO",
|
||||
"tipo_imovel": "TIPO_IMOVEL",
|
||||
"tipo_construcao": "TIPO_CONSTRUCAO",
|
||||
"texto": "TEXTO",
|
||||
"numero_edificacao": "NUMERO_EDIFICACAO",
|
||||
"iptu": "IPTU",
|
||||
"ccir": "CCIR",
|
||||
"nirf": "NIRF",
|
||||
"lote": "LOTE",
|
||||
"torre": "TORRE",
|
||||
"nomeloteamento": "NOMELOTEAMENTO",
|
||||
"nomecondominio": "NOMECONDOMINIO",
|
||||
"numero": "NUMERO",
|
||||
"cnm_numero": "CNM_NUMERO",
|
||||
"imovel_publico_uniao": "IMOVEL_PUBLICO_UNIAO",
|
||||
"spu_rip": "SPU_RIP",
|
||||
"cat": "CAT",
|
||||
"inscricao_municipal": "INSCRICAO_MUNICIPAL",
|
||||
"cib": "CIB",
|
||||
"area_construida": "AREA_CONSTRUIDA"
|
||||
"imovel_unidade_id" : "IMOVEL_UNIDADE_ID",
|
||||
"imovel_id" : "IMOVEL_ID",
|
||||
"numero_unidade" : "NUMERO_UNIDADE",
|
||||
"quadra" : "QUADRA",
|
||||
"area" : "AREA",
|
||||
"superquadra" : "SUPERQUADRA",
|
||||
"conjunto" : "CONJUNTO",
|
||||
"bloco" : "BLOCO",
|
||||
"area_descritiva" : "AREA_DESCRITIVA",
|
||||
"caracteristica" : "CARACTERISTICA",
|
||||
"reserva_florestal" : "RESERVA_FLORESTAL",
|
||||
"geo_referenciamento" : "GEO_REFERENCIAMENTO",
|
||||
"logradouro" : "LOGRADOURO",
|
||||
"tb_tipologradouro_id" : "TB_TIPOLOGRADOURO_ID",
|
||||
"selecionado" : "SELECIONADO",
|
||||
"complemento" : "COMPLEMENTO",
|
||||
"tipo_imovel" : "TIPO_IMOVEL",
|
||||
"tipo_construcao" : "TIPO_CONSTRUCAO",
|
||||
"texto" : "TEXTO",
|
||||
"numero_edificacao" : "NUMERO_EDIFICACAO",
|
||||
"iptu" : "IPTU",
|
||||
"ccir" : "CCIR",
|
||||
"nirf" : "NIRF",
|
||||
"lote" : "LOTE",
|
||||
"torre" : "TORRE",
|
||||
"nomeloteamento" : "NOMELOTEAMENTO",
|
||||
"nomecondominio" : "NOMECONDOMINIO",
|
||||
"numero" : "NUMERO",
|
||||
"cnm_numero" : "CNM_NUMERO",
|
||||
"imovel_publico_uniao" : "IMOVEL_PUBLICO_UNIAO",
|
||||
"spu_rip" : "SPU_RIP",
|
||||
"cat" : "CAT",
|
||||
"inscricao_municipal" : "INSCRICAO_MUNICIPAL",
|
||||
"cib" : "CIB",
|
||||
"area_construida" : "AREA_CONSTRUIDA",
|
||||
}
|
||||
|
||||
# Lista de campos que serão atualizados
|
||||
|
|
|
|||
|
|
@ -45,56 +45,21 @@ class TImovelIdSchema(BaseModel):
|
|||
# ----------------------------------------------------
|
||||
class TImovelSaveSchema(BaseModel):
|
||||
imovel_id: Optional[int] = None
|
||||
tipo_classe: str
|
||||
tipo_registro: str
|
||||
data_registro: datetime
|
||||
tipo_classe: Optional[str] = None
|
||||
tipo_registro: Optional[str] = None
|
||||
data_registro: Optional[datetime] = None
|
||||
numero: float
|
||||
numero_letra: Optional[str] = None
|
||||
cidade: str
|
||||
cidade: Optional[str] = None
|
||||
cep: Optional[float] = None
|
||||
uf: str
|
||||
uf: Optional[str] = None
|
||||
tb_bairro_id: Optional[int] = None
|
||||
cartorio: Optional[str] = None
|
||||
livro: Optional[str] = None
|
||||
cns: Optional[float] = None
|
||||
|
||||
# Sanitiza os campos textuais
|
||||
@field_validator('tipo_classe', 'tipo_registro', 'numero_letra', 'cidade', 'uf', 'cartorio', 'livro')
|
||||
def sanitize_fields(cls, v):
|
||||
if v:
|
||||
return Text.sanitize_input(v)
|
||||
return v
|
||||
|
||||
# Validações adicionais
|
||||
@model_validator(mode='after')
|
||||
def validate_fields(self):
|
||||
errors = []
|
||||
|
||||
if not self.tipo_classe or len(self.tipo_classe.strip()) == 0:
|
||||
errors.append({'input': 'tipo_classe', 'message': 'O tipo de classe é obrigatório.'})
|
||||
|
||||
if not self.tipo_registro or len(self.tipo_registro.strip()) == 0:
|
||||
errors.append({'input': 'tipo_registro', 'message': 'O tipo de registro é obrigatório.'})
|
||||
|
||||
if not self.data_registro:
|
||||
errors.append({'input': 'data_registro', 'message': 'A data de registro é obrigatória.'})
|
||||
|
||||
if not self.numero:
|
||||
errors.append({'input': 'numero', 'message': 'O número é obrigatório.'})
|
||||
|
||||
if not self.cidade or len(self.cidade.strip()) == 0:
|
||||
errors.append({'input': 'cidade', 'message': 'A cidade é obrigatória.'})
|
||||
|
||||
if not self.uf or len(self.uf.strip()) == 0:
|
||||
errors.append({'input': 'uf', 'message': 'A UF é obrigatória.'})
|
||||
|
||||
if errors:
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
|
||||
detail=errors
|
||||
)
|
||||
|
||||
return self
|
||||
class Config:
|
||||
from_attributes = True
|
||||
|
||||
# ----------------------------------------------------
|
||||
# Schema para atualização de IMÓVEL (PUT)
|
||||
|
|
|
|||
|
|
@ -70,91 +70,8 @@ class TImovelUnidadeIdSchema(BaseModel):
|
|||
# Schema para criação de nova unidade (POST)
|
||||
# ----------------------------------------------------
|
||||
class TImovelUnidadeSaveSchema(BaseModel):
|
||||
imovel_id: int
|
||||
imovel_unidade_id: Optional[int] = None
|
||||
numero_unidade: str
|
||||
area: float
|
||||
logradouro: str
|
||||
tb_tipologradouro_id: int
|
||||
texto: Optional[bytes] = None
|
||||
|
||||
# Outros campos opcionais
|
||||
quadra: Optional[str] = None
|
||||
superquadra: Optional[str] = None
|
||||
conjunto: Optional[str] = None
|
||||
bloco: Optional[str] = None
|
||||
area_descritiva: Optional[str] = None
|
||||
caracteristica: Optional[str] = None
|
||||
reserva_florestal: Optional[str] = None
|
||||
geo_referenciamento: Optional[str] = None
|
||||
selecionado: Optional[str] = None
|
||||
complemento: Optional[str] = None
|
||||
tipo_imovel: Optional[int] = None
|
||||
tipo_construcao: Optional[int] = None
|
||||
numero_edificacao: Optional[str] = None
|
||||
iptu: Optional[str] = None
|
||||
ccir: Optional[str] = None
|
||||
nirf: Optional[str] = None
|
||||
lote: Optional[str] = None
|
||||
torre: Optional[str] = None
|
||||
nomeloteamento: Optional[str] = None
|
||||
nomecondominio: Optional[str] = None
|
||||
numero: Optional[float] = None
|
||||
cnm_numero: Optional[str] = None
|
||||
imovel_publico_uniao: Optional[str] = None
|
||||
spu_rip: Optional[str] = None
|
||||
cat: Optional[str] = None
|
||||
inscricao_municipal: Optional[str] = None
|
||||
cib: Optional[str] = None
|
||||
area_construida: Optional[float] = None
|
||||
|
||||
# Sanitiza campos textuais
|
||||
@field_validator(
|
||||
'numero_unidade', 'quadra', 'superquadra', 'conjunto', 'bloco',
|
||||
'area_descritiva', 'caracteristica', 'reserva_florestal', 'geo_referenciamento',
|
||||
'logradouro', 'selecionado', 'complemento', 'numero_edificacao',
|
||||
'iptu', 'ccir', 'nirf', 'lote', 'torre', 'nomeloteamento', 'nomecondominio',
|
||||
'cnm_numero', 'imovel_publico_uniao', 'spu_rip', 'cat', 'inscricao_municipal', 'cib'
|
||||
)
|
||||
def sanitize_fields(cls, v):
|
||||
if v:
|
||||
return Text.sanitize_input(v)
|
||||
return v
|
||||
|
||||
# Valida campo BLOB
|
||||
@field_validator('texto')
|
||||
def validate_blob(cls, v):
|
||||
if v is not None and not isinstance(v, bytes):
|
||||
raise ValueError('O campo TEXTO deve ser do tipo bytes.')
|
||||
return v
|
||||
|
||||
# Valida campos obrigatórios
|
||||
@model_validator(mode='after')
|
||||
def validate_required_fields(self):
|
||||
errors = []
|
||||
|
||||
if not self.imovel_id:
|
||||
errors.append({'input': 'imovel_id', 'message': 'O ID do imóvel é obrigatório.'})
|
||||
if not self.numero_unidade or len(self.numero_unidade.strip()) == 0:
|
||||
errors.append({'input': 'numero_unidade', 'message': 'O número da unidade é obrigatório.'})
|
||||
if not self.area:
|
||||
errors.append({'input': 'area', 'message': 'A área é obrigatória.'})
|
||||
if not self.logradouro or len(self.logradouro.strip()) == 0:
|
||||
errors.append({'input': 'logradouro', 'message': 'O logradouro é obrigatório.'})
|
||||
if not self.tb_tipologradouro_id:
|
||||
errors.append({'input': 'tb_tipologradouro_id', 'message': 'O tipo de logradouro é obrigatório.'})
|
||||
|
||||
if errors:
|
||||
raise HTTPException(status_code=status.HTTP_422_UNPROCESSABLE_ENTITY, detail=errors)
|
||||
return self
|
||||
|
||||
|
||||
# ----------------------------------------------------
|
||||
# Schema para atualização de unidade (PUT)
|
||||
# ----------------------------------------------------
|
||||
class TImovelUnidadeUpdateSchema(BaseModel):
|
||||
imovel_unidade_id: Optional[int] = None
|
||||
imovel_id: Optional[int] = None
|
||||
imovel_unidade_id: Optional[int] = None
|
||||
numero_unidade: Optional[str] = None
|
||||
area: Optional[float] = None
|
||||
logradouro: Optional[str] = None
|
||||
|
|
@ -193,3 +110,46 @@ class TImovelUnidadeUpdateSchema(BaseModel):
|
|||
|
||||
class Config:
|
||||
from_attributes = True
|
||||
|
||||
# ----------------------------------------------------
|
||||
# Schema para atualização de unidade (PUT)
|
||||
# ----------------------------------------------------
|
||||
class TImovelUnidadeUpdateSchema(BaseModel):
|
||||
imovel_unidade_id: Optional[int] = None
|
||||
imovel_id: Optional[int] = None
|
||||
numero_unidade: Optional[str] = None
|
||||
area: Optional[float] = None
|
||||
logradouro: Optional[str] = None
|
||||
tb_tipologradouro_id: Optional[int] = None
|
||||
texto: Optional[bytes] = None
|
||||
quadra: Optional[str] = None
|
||||
superquadra: Optional[str] = None
|
||||
conjunto: Optional[str] = None
|
||||
bloco: Optional[str] = None
|
||||
area_descritiva: Optional[str] = None
|
||||
caracteristica: Optional[str] = None
|
||||
reserva_florestal: Optional[str] = None
|
||||
geo_referenciamento: Optional[str] = None
|
||||
selecionado: Optional[str] = None
|
||||
complemento: Optional[str] = None
|
||||
tipo_imovel: Optional[int] = None
|
||||
tipo_construcao: Optional[int] = None
|
||||
numero_edificacao: Optional[str] = None
|
||||
iptu: Optional[str] = None
|
||||
ccir: Optional[str] = None
|
||||
nirf: Optional[str] = None
|
||||
lote: Optional[str] = None
|
||||
torre: Optional[str] = None
|
||||
nomeloteamento: Optional[str] = None
|
||||
nomecondominio: Optional[str] = None
|
||||
numero: Optional[float] = None
|
||||
cnm_numero: Optional[str] = None
|
||||
imovel_publico_uniao: Optional[str] = None
|
||||
spu_rip: Optional[str] = None
|
||||
cat: Optional[str] = None
|
||||
inscricao_municipal: Optional[str] = None
|
||||
cib: Optional[str] = None
|
||||
area_construida: Optional[float] = None
|
||||
|
||||
class Config:
|
||||
from_attributes = True
|
||||
|
|
@ -1,9 +1,9 @@
|
|||
from datetime import datetime
|
||||
from api.actions.dynamic_import.dynamic_import import DynamicImport
|
||||
from api.packages.v1.administrativo.actions.t_imovel.t_imovel_save_action import TImovelSaveAction
|
||||
from api.packages.v1.sequencia.schemas.g_sequencia import GSequenciaSchema
|
||||
from api.packages.v1.administrativo.schemas.t_imovel_schema import TImovelSaveSchema
|
||||
from api.packages.v1.sequencia.services.g_sequencia.checkout_service import GenerateService
|
||||
from fastapi import HTTPException, status
|
||||
from api.packages.v1.sequencia.services.g_sequencia.generate_service import GenerateService
|
||||
|
||||
class TImovelSaveService:
|
||||
|
||||
|
|
@ -21,15 +21,17 @@ class TImovelSaveService:
|
|||
# Cadastra o novo CENSEC_QUALIDADE
|
||||
def execute(self, t_imovel_save_schema: TImovelSaveSchema):
|
||||
|
||||
t_imovel_save_schema.data_registro = datetime.now()
|
||||
|
||||
# Verifica se precisa gerar o ID de sequência
|
||||
# Coluna primária ajustada
|
||||
# Coluna primária ajustadaA
|
||||
if not t_imovel_save_schema.imovel_id:
|
||||
|
||||
# Crio um objeto de sequencia
|
||||
sequencia_schema = GSequenciaSchema()
|
||||
|
||||
# Define os dados para atualizar a sequencia
|
||||
sequencia_schema.tabela = 'T_IMOVEL' # Nome da tabela ajustado
|
||||
sequencia_schema.tabela = 'T_IMOVEL'
|
||||
|
||||
# Busco a sequência atualizada
|
||||
generate = GenerateService()
|
||||
|
|
@ -38,7 +40,7 @@ class TImovelSaveService:
|
|||
sequencia = generate.execute(sequencia_schema)
|
||||
|
||||
# Atualiza os dados da chave primária
|
||||
t_imovel_save_schema.imovel_id = sequencia.sequencia # Coluna primária ajustada
|
||||
t_imovel_save_schema.imovel_id = sequencia.sequencia
|
||||
|
||||
# Instanciamento de ações
|
||||
# Ação já é importada como SaveAction
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ from actions.dynamic_import.dynamic_import import DynamicImport
|
|||
from api.packages.v1.administrativo.actions.t_pessoa.t_pessoa_save_action import TPessoaSaveAction
|
||||
from api.packages.v1.administrativo.schemas.t_pessoa_schema import TPessoaSaveSchema
|
||||
from api.packages.v1.sequencia.schemas.g_sequencia import GSequenciaSchema
|
||||
from api.packages.v1.sequencia.services.g_sequencia.checkout_service import GenerateService
|
||||
from api.packages.v1.sequencia.services.g_sequencia.generate_service import GenerateService
|
||||
|
||||
class TPessoaSaveService:
|
||||
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ from actions.dynamic_import.dynamic_import import DynamicImport
|
|||
from api.packages.v1.administrativo.actions.t_pessoa_representante.t_pessoa_representante_save_action import TPessoaRepresentanteSaveAction
|
||||
from api.packages.v1.administrativo.schemas.t_pessoa_representante_schema import TPessoaRepresentanteSaveSchema
|
||||
from api.packages.v1.sequencia.schemas.g_sequencia import GSequenciaSchema
|
||||
from api.packages.v1.sequencia.services.g_sequencia.checkout_service import GenerateService
|
||||
from api.packages.v1.sequencia.services.g_sequencia.generate_service import GenerateService
|
||||
|
||||
class TPessoaRepresentanteSaveService:
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue