656 lines
32 KiB
Python
656 lines
32 KiB
Python
# Importações de bibliotecas padrão
|
|
from __future__ import annotations
|
|
import enum
|
|
from datetime import datetime
|
|
from typing import List, Annotated
|
|
from uuid import UUID as UuidType
|
|
# from fastapi_users.db import SQLAlchemyBaseUserTable
|
|
from fastapi_users_db_sqlalchemy import SQLAlchemyBaseUserTableUUID
|
|
|
|
# Importações de bibliotecas de terceiros
|
|
from sqlalchemy import Column, String, Boolean, ForeignKey, Table, Integer, Date, Text, Numeric, Enum
|
|
from sqlalchemy import DateTime, FetchedValue, func
|
|
from sqlalchemy.dialects.postgresql import UUID as UuidColumn
|
|
from sqlalchemy.dialects.postgresql import UUID
|
|
from sqlalchemy.ext.compiler import compiles
|
|
from sqlalchemy.orm import relationship, Mapped, mapped_column, with_polymorphic
|
|
from sqlalchemy.sql.expression import FunctionElement
|
|
from sqlalchemy.sql import expression
|
|
from uuid6 import uuid7
|
|
|
|
# from sqlalchemy.ext.asyncio import AsyncAttrs
|
|
|
|
# Importações do seu próprio projeto
|
|
from .session import Base
|
|
|
|
# EXTENSIONS = ["uuid-ossp", "postgis", "postgis_topology"]
|
|
#
|
|
# naming_convention = {
|
|
# "ix": "ix_ct_%(table_name)s_%(column_0_N_name)s",
|
|
# "uq": "uq_ct_%(table_name)s_%(column_0_N_name)s",
|
|
# "ck": "ck_ct_%(table_name)s_%(constraint_name)s",
|
|
# "fk": "fk_ct_%(table_name)s_%(column_0_name)s_%(referred_table_name)s",
|
|
# "pk": "pk_ct_%(table_name)s",
|
|
# }
|
|
#
|
|
#
|
|
# class Base(DeclarativeBase, AsyncAttrs):
|
|
# metadata = MetaData(naming_convention=naming_convention,
|
|
# # Multi Tennat
|
|
# schema="tenant"
|
|
# )
|
|
|
|
|
|
uuid = Annotated[UuidType, mapped_column(primary_key=True)]
|
|
str1 = Annotated[str, mapped_column(String(1), nullable=True)]
|
|
str2 = Annotated[str, mapped_column(String(2), nullable=True)]
|
|
str8 = Annotated[str, mapped_column(String(8), nullable=True)]
|
|
str10 = Annotated[str, mapped_column(String(10), nullable=True)]
|
|
str10_not_null = Annotated[str, mapped_column(String(10), nullable=False)]
|
|
str11 = Annotated[str, mapped_column(String(11), nullable=True)]
|
|
str14 = Annotated[str, mapped_column(String(14), nullable=True)]
|
|
str20 = Annotated[str, mapped_column(String(20), nullable=True)]
|
|
str30_not_null = Annotated[str, mapped_column(String(30), nullable=False)]
|
|
str39_uid = Annotated[str, mapped_column(String(39), nullable=True)]
|
|
str36_uuid = Annotated[str, mapped_column(String(36), nullable=False)]
|
|
str36_uuid_null = Annotated[str, mapped_column(String(36), nullable=True)]
|
|
str50 = Annotated[str, mapped_column(String(50), nullable=True)]
|
|
str50_null = Annotated[str, mapped_column(String(50), nullable=False)]
|
|
str100 = Annotated[str, mapped_column(String(100), nullable=True)]
|
|
str150 = Annotated[str, mapped_column(String(150), nullable=True)]
|
|
str200 = Annotated[str, mapped_column(String(200), nullable=True)]
|
|
url = Annotated[str, mapped_column(String(2083), nullable=True)]
|
|
intpk = Annotated[int, mapped_column(primary_key=True, index=True)]
|
|
valor_monetario = Annotated[float, mapped_column(Numeric(precision=10, scale=2), nullable=True)]
|
|
valor_monetario_not_null = Annotated[float, mapped_column(Numeric(precision=10, scale=2), nullable=False)]
|
|
data = Annotated[Date, mapped_column(Date, nullable=True)]
|
|
data_null = Annotated[Date, mapped_column(Date, nullable=True)]
|
|
data_idx = Annotated[Date, mapped_column(Date, index=True)]
|
|
text = Annotated[Text, mapped_column(Text)]
|
|
text_null = Annotated[Text, mapped_column(Text, nullable=True)]
|
|
boleano = Annotated[Boolean, mapped_column(Boolean, default=True)]
|
|
boleano_false = Annotated[Boolean, mapped_column(Boolean, server_default=expression.false())]
|
|
|
|
|
|
# ------------------------------------------------------INICIO MIXIN----------------------------------------------------
|
|
class utcnow(FunctionElement):
|
|
type = DateTime()
|
|
inherit_cache = True
|
|
|
|
|
|
@compiles(utcnow, "postgresql")
|
|
def pg_utcnow(element, compiler, **kw):
|
|
return "TIMEZONE('utc', CURRENT_TIMESTAMP)"
|
|
|
|
|
|
class UuidMixin:
|
|
uuid: Mapped[UuidType] = mapped_column(
|
|
"uuid",
|
|
UuidColumn(as_uuid=True),
|
|
primary_key=True,
|
|
default=uuid7,
|
|
nullable=False,
|
|
)
|
|
|
|
|
|
class IdMixin:
|
|
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True, nullable=False)
|
|
|
|
|
|
class AtivoMixin:
|
|
ativo = Column(Boolean, nullable=False, server_default=expression.true(), index=True)
|
|
data_ativacao: Mapped[datetime] = mapped_column(
|
|
DateTime,
|
|
nullable=False,
|
|
server_default=utcnow(),
|
|
)
|
|
data_desativacao: Mapped[datetime] = mapped_column(
|
|
DateTime,
|
|
nullable=True,
|
|
index=True,
|
|
onupdate=func.now(),
|
|
server_default=utcnow(),
|
|
server_onupdate=FetchedValue(),
|
|
)
|
|
|
|
|
|
class TimestampMixin:
|
|
created_at: Mapped[datetime] = mapped_column(
|
|
DateTime,
|
|
nullable=False,
|
|
server_default=utcnow(),
|
|
)
|
|
updated_at: Mapped[datetime] = mapped_column(
|
|
DateTime,
|
|
nullable=True,
|
|
index=True,
|
|
onupdate=func.now(),
|
|
server_default=utcnow(),
|
|
server_onupdate=FetchedValue(),
|
|
)
|
|
|
|
|
|
# ------------------------------------------------------FIM MIXIN----------------------------------------------------
|
|
|
|
# ------------------------------------------------------MULTI TENNAT----------------------------------------------------
|
|
class Inquilino(UuidMixin, Base):
|
|
__tablename__ = "inquilinos"
|
|
__table_args__ = ({"schema": "shared"})
|
|
|
|
nome = Column(String(100), nullable=False, unique=False)
|
|
cpf_cnpj = Column(String(14), nullable=False, unique=True)
|
|
pessoa_celular = Column(String(20), nullable=True, unique=False)
|
|
|
|
# Relacionamento com a tabela de usuários
|
|
usuario: Mapped[List["RbacUser"]] = relationship(back_populates="inquilino", passive_deletes=True,
|
|
lazy="selectin",
|
|
join_depth=2)
|
|
|
|
|
|
# ---------------------------------------------------FIM MULTI TENNAT---------------------------------------------------
|
|
|
|
|
|
comercial_relacionamento_pessoa_empresa = Table('comercial_relacionamento_pessoa_empresa',
|
|
Base.metadata,
|
|
Column('relacao_comercial_uuid', UUID(as_uuid=True),
|
|
ForeignKey('comercial_relacoes_comercial.uuid',
|
|
ondelete="CASCADE")),
|
|
Column('pessoa_uuid', UUID(as_uuid=True),
|
|
ForeignKey('comercial_pessoas.uuid', ondelete="CASCADE")),
|
|
)
|
|
|
|
|
|
class ComercialTransacaoComercialEnum(enum.Enum):
|
|
PAGAMENTO = "PAGAMENTO"
|
|
RECEBIMENTO = "RECEBIMENTO"
|
|
AMBOS = "AMBOS"
|
|
|
|
|
|
class ComercialRelacaoComercial(Base, TimestampMixin, UuidMixin, AtivoMixin):
|
|
__tablename__ = "comercial_relacoes_comercial"
|
|
log_auditoria_habilitado = False
|
|
|
|
descricao_relacao_comercial: str = Column(String(30), nullable=False)
|
|
transacao_comercial: Mapped[ComercialTransacaoComercialEnum] = mapped_column(Enum(
|
|
ComercialTransacaoComercialEnum,
|
|
inherit_schema=True
|
|
),
|
|
nullable=False)
|
|
pessoa_relacao: Mapped[List["ComercialPessoa"]] = relationship(secondary=comercial_relacionamento_pessoa_empresa,
|
|
back_populates='rc',
|
|
passive_deletes=True,
|
|
lazy="selectin",
|
|
join_depth=1, )
|
|
|
|
|
|
class ComercialTipoEndereco(Base, TimestampMixin, UuidMixin, AtivoMixin):
|
|
__tablename__ = "comercial_tipos_endereco"
|
|
log_auditoria_habilitado = False
|
|
|
|
tipo_endereco_descricao: str = Column(String(30), nullable=False)
|
|
relacao_endereco_tp: Mapped[List["ComercialEndereco"]] = relationship(back_populates="relacao_tipo_endereco",
|
|
passive_deletes=True,
|
|
lazy="selectin",
|
|
cascade="all, delete-orphan",
|
|
join_depth=1)
|
|
|
|
|
|
class ComercialPessoa(UuidMixin, Base, TimestampMixin, AtivoMixin):
|
|
__tablename__ = "comercial_pessoas"
|
|
log_auditoria_habilitado = False
|
|
|
|
pessoa_status: bool = Column(Boolean, unique=False, default=True)
|
|
pessoa_telefone: Mapped[str20]
|
|
pessoa_celular: Mapped[str20]
|
|
pessoa_tipo: Mapped[str1]
|
|
pessoa_email: Mapped[str150]
|
|
pessoa_local_evento: bool = Column(Boolean, unique=False, default=False)
|
|
|
|
rc: Mapped[List["ComercialRelacaoComercial"]] = relationship(secondary=comercial_relacionamento_pessoa_empresa,
|
|
back_populates='pessoa_relacao',
|
|
passive_deletes=True,
|
|
lazy="selectin", join_depth=1)
|
|
|
|
enderecos: Mapped[List["ComercialEndereco"]] = relationship(back_populates="pessoa",
|
|
passive_deletes=True,
|
|
lazy="selectin",
|
|
join_depth=2)
|
|
# usuario: Mapped[List["RbacUser"]] = relationship(back_populates="pessoa", passive_deletes=True,
|
|
# lazy="selectin",
|
|
# join_depth=2)
|
|
|
|
relacao_conta: Mapped[List["FinanceiroConta"]] = relationship(back_populates="relacao_pessoa",
|
|
passive_deletes=True,
|
|
lazy="selectin",
|
|
cascade="all, delete-orphan",
|
|
join_depth=1)
|
|
|
|
__mapper_args__ = {"polymorphic_identity": "comercial_pessoas",
|
|
"polymorphic_on": "pessoa_tipo",
|
|
}
|
|
|
|
|
|
class ComercialJuridica(ComercialPessoa):
|
|
__tablename__ = "comercial_juridicas"
|
|
log_auditoria_habilitado = False
|
|
|
|
uuid: Mapped[uuid] = mapped_column(ForeignKey("comercial_pessoas.uuid", ondelete="CASCADE"), primary_key=True)
|
|
|
|
juridica_cnpj: Mapped[str14]
|
|
juridica_email_fiscal: Mapped[str100]
|
|
juridica_insc_est: Mapped[str50]
|
|
juridica_ins_mun: Mapped[str50]
|
|
juridica_razao_social: Mapped[str200]
|
|
juridica_representante: Mapped[str100]
|
|
|
|
__mapper_args__ = {
|
|
"polymorphic_identity": "0",
|
|
"polymorphic_load": "selectin"
|
|
}
|
|
|
|
|
|
class ComercialFisica(ComercialPessoa):
|
|
__tablename__ = "comercial_fisicas"
|
|
log_auditoria_habilitado = False
|
|
|
|
uuid: Mapped[uuid] = mapped_column(ForeignKey("comercial_pessoas.uuid", ondelete="CASCADE"), primary_key=True)
|
|
|
|
fisica_cpf: Mapped[str11]
|
|
fisica_rg: Mapped[str20]
|
|
fisica_genero: Mapped[str2]
|
|
fisica_nome: Mapped[str100]
|
|
|
|
__mapper_args__ = {
|
|
"polymorphic_identity": "1",
|
|
"polymorphic_load": "selectin"
|
|
}
|
|
|
|
|
|
class ComercialEndereco(Base, TimestampMixin, UuidMixin):
|
|
__tablename__ = "comercial_enderecos"
|
|
log_auditoria_habilitado = False
|
|
|
|
endereco_pessoa_status: bool = Column(Boolean, unique=False, default=True)
|
|
endereco_pessoa_descricao: Mapped[str50]
|
|
endereco_pessoa_numero: Mapped[str8]
|
|
endereco_pessoa_complemento: Mapped[str50]
|
|
endereco_pessoa_cep: Mapped[str8]
|
|
|
|
fk_pessoa_uuid: Mapped[UuidType] = mapped_column(ForeignKey("comercial_pessoas.uuid",
|
|
ondelete="CASCADE"),
|
|
nullable=False)
|
|
pessoa: Mapped["ComercialPessoa"] = relationship(back_populates="enderecos",
|
|
lazy="selectin",
|
|
join_depth=1)
|
|
|
|
fk_tipo_endereco_uuid: Mapped[UuidType] = mapped_column(ForeignKey("comercial_tipos_endereco.uuid",
|
|
ondelete="CASCADE"), nullable=False)
|
|
relacao_tipo_endereco: Mapped["ComercialTipoEndereco"] = relationship(back_populates="relacao_endereco_tp",
|
|
lazy="selectin",
|
|
join_depth=2)
|
|
|
|
|
|
# __________________________________________USUÁRIOS E PERMISSÃO DE ACESSO______________________________________________
|
|
rbac_papeis_usuario = Table(
|
|
'rbac_papeis_usuario', Base.metadata,
|
|
Column('user_uuid', UUID(as_uuid=True), ForeignKey('shared.rbac_usuarios.id'), primary_key=True),
|
|
Column('papel_uuid', UUID(as_uuid=True), ForeignKey('shared.rbac_papeis.uuid'), primary_key=True),
|
|
# Multi Tennat
|
|
schema='shared'
|
|
)
|
|
|
|
rbac_papel_permissoes = Table(
|
|
'rbac_papel_permissoes', Base.metadata,
|
|
Column('papel_uuid', UUID(as_uuid=True), ForeignKey('shared.rbac_papeis.uuid'), primary_key=True),
|
|
Column('permissao_id', Integer, ForeignKey('shared.rbac_permissoes.id'), primary_key=True),
|
|
# Multi Tennat
|
|
schema='shared'
|
|
|
|
)
|
|
|
|
|
|
class RbacPermissao(Base):
|
|
__tablename__ = "rbac_permissoes"
|
|
log_auditoria_habilitado = False
|
|
id = Column(Integer, primary_key=True, index=True)
|
|
nome: Mapped[str50] = mapped_column(nullable=False, unique=True)
|
|
papeis: Mapped[List["RbacPapel"]] = relationship(secondary=rbac_papel_permissoes,
|
|
back_populates='permissoes',
|
|
passive_deletes=True,
|
|
lazy="selectin",
|
|
join_depth=1, )
|
|
|
|
# Multi Tennat
|
|
__table_args__ = ({"schema": "shared"},)
|
|
|
|
|
|
class RbacPapel(UuidMixin, Base):
|
|
__tablename__ = "rbac_papeis"
|
|
log_auditoria_habilitado = False
|
|
# id = Column(Integer, primary_key=True, index=True, autoincrement=True)
|
|
nome: Mapped[str50] = mapped_column(nullable=False, unique=True)
|
|
permissoes: Mapped[List["RbacPermissao"]] = relationship(secondary=rbac_papel_permissoes,
|
|
back_populates='papeis',
|
|
passive_deletes=True,
|
|
lazy="selectin",
|
|
join_depth=2, )
|
|
usuarios: Mapped[List["RbacUser"]] = relationship(secondary=rbac_papeis_usuario,
|
|
back_populates='papeis',
|
|
passive_deletes=True,
|
|
lazy="selectin",
|
|
join_depth=1, )
|
|
# Multi Tennat
|
|
__table_args__ = ({"schema": "shared"},)
|
|
|
|
|
|
class RbacUser(SQLAlchemyBaseUserTableUUID, Base):
|
|
__tablename__ = "rbac_usuarios"
|
|
log_auditoria_habilitado = False
|
|
|
|
def __init__(self, **kwargs):
|
|
super().__init__(**kwargs)
|
|
|
|
papeis: Mapped[List[RbacPapel]] = relationship(secondary=rbac_papeis_usuario,
|
|
back_populates='usuarios',
|
|
passive_deletes=True,
|
|
lazy="selectin",
|
|
join_depth=1)
|
|
# Multi Tennat
|
|
fk_inquilino_uuid: Mapped[UuidType] = mapped_column(ForeignKey("shared.inquilinos.uuid", ondelete="CASCADE"),
|
|
nullable=False)
|
|
inquilino: Mapped["Inquilino"] = relationship(back_populates="usuario",
|
|
lazy="selectin",
|
|
passive_deletes=True,
|
|
join_depth=1)
|
|
nome_completo: Mapped[str100]
|
|
__table_args__ = ({"schema": "shared"},)
|
|
|
|
|
|
# __________________________________________FINAL USUÁRIOS E PERMISSÃO DE ACESSO________________________________________
|
|
|
|
|
|
# ________________________________________________CONTAS A PAGAR E RECEBER______________________________________________
|
|
|
|
class FinanceiroTipoContaEnum(enum.Enum):
|
|
PAGAR = "PAGAR"
|
|
RECEBER = "RECEBER"
|
|
|
|
|
|
class FinanceiroTipoMovimentacaoEnum(enum.Enum):
|
|
CREDITO = "CREDITO"
|
|
DEBITO = "DEBITO"
|
|
|
|
|
|
class FinanceiroStatus(Base, IdMixin):
|
|
__tablename__ = "financeiro_status"
|
|
log_auditoria_habilitado = False
|
|
|
|
status_nome_status: Mapped[str20]
|
|
status_descricao: Mapped[str200]
|
|
relacao_conta: Mapped[List["FinanceiroConta"]] = relationship(back_populates="relacao_status",
|
|
passive_deletes=True,
|
|
lazy="selectin", cascade="all, delete-orphan",
|
|
join_depth=1)
|
|
relacao_parcelas: Mapped[List["FinanceiroParcela"]] = relationship(back_populates="relacao_status",
|
|
passive_deletes=True,
|
|
lazy="selectin", cascade="all, delete-orphan",
|
|
join_depth=1)
|
|
|
|
|
|
class FinanceiroForma_Pagamento(Base, IdMixin):
|
|
__tablename__ = "financeiro_formas_pagamento"
|
|
log_auditoria_habilitado = False
|
|
|
|
formas_pagamento_descricao: Mapped[str20]
|
|
relacao_pagamentos: Mapped[List["FinanceiroPagamento"]] = relationship(back_populates="relacao_formas_pagamento",
|
|
passive_deletes=True, lazy="selectin",
|
|
cascade="all, delete-orphan", join_depth=1)
|
|
|
|
|
|
class FinanceiroCategoria(Base, IdMixin):
|
|
__tablename__ = "financeiro_categorias"
|
|
log_auditoria_habilitado = False
|
|
|
|
categorias_nome: Mapped[str20]
|
|
|
|
relacao_conta: Mapped[List["FinanceiroConta"]] = relationship(back_populates="relacao_categorias",
|
|
passive_deletes=True,
|
|
lazy="selectin", cascade="all, delete-orphan",
|
|
join_depth=1)
|
|
|
|
|
|
class FinanceiroCentro_Custo(Base, IdMixin):
|
|
__tablename__ = "financeiro_centros_custo"
|
|
log_auditoria_habilitado = False
|
|
|
|
centros_custo_nome: Mapped[str20]
|
|
centros_custo_descricao: Mapped[str100]
|
|
relacao_conta: Mapped[List["FinanceiroConta"]] = relationship(back_populates="relacao_centros_custo",
|
|
passive_deletes=True,
|
|
lazy="selectin", cascade="all, delete-orphan",
|
|
join_depth=1)
|
|
|
|
|
|
class FinanceiroParcela(Base, IdMixin):
|
|
__tablename__ = "financeiro_parcelas"
|
|
log_auditoria_habilitado = True
|
|
|
|
parcelas_numero_parcela: Mapped[int] = mapped_column(Integer, nullable=False)
|
|
parcelas_valor_parcela: Mapped[valor_monetario]
|
|
parcelas_valor_juros: Mapped[valor_monetario]
|
|
parcelas_valor_multa: Mapped[valor_monetario]
|
|
parcelas_valor_desconto: Mapped[valor_monetario]
|
|
parcelas_data_vencimento: Mapped[data_idx]
|
|
fk_contas_id: Mapped[int] = mapped_column(ForeignKey("financeiro_contas.id", ondelete="CASCADE"), nullable=False)
|
|
relacao_conta: Mapped["FinanceiroConta"] = relationship(back_populates="relacao_parcelas", lazy="selectin",
|
|
join_depth=2)
|
|
fk_status_id: Mapped[int] = mapped_column(ForeignKey("financeiro_status.id", ondelete="CASCADE"),
|
|
nullable=False)
|
|
relacao_status: Mapped["FinanceiroStatus"] = relationship(back_populates="relacao_parcelas", lazy="selectin",
|
|
join_depth=2)
|
|
relacao_pagamentos: Mapped[List["FinanceiroPagamento"]] = relationship(back_populates="relacao_parcela",
|
|
passive_deletes=True,
|
|
lazy="selectin",
|
|
cascade="all, delete-orphan",
|
|
join_depth=1)
|
|
|
|
|
|
class FinanceiroPagamento(Base, IdMixin):
|
|
__tablename__ = "financeiro_pagamentos"
|
|
log_auditoria_habilitado = True
|
|
|
|
data_pagamento: Mapped[data_idx]
|
|
valor_pago: Mapped[valor_monetario]
|
|
observacao: Mapped[text]
|
|
fk_parcelas_id: Mapped[int] = mapped_column(ForeignKey("financeiro_parcelas.id", ondelete="CASCADE"),
|
|
nullable=False)
|
|
relacao_parcela: Mapped["FinanceiroParcela"] = relationship(back_populates="relacao_pagamentos", lazy="selectin",
|
|
join_depth=2)
|
|
fk_contas_corrente_id: Mapped[int] = mapped_column(ForeignKey("financeiro_contas_corrente.id",
|
|
ondelete="CASCADE"), nullable=False)
|
|
relacao_contas_corrente: Mapped["FinanceiroConta_Corrente"] = relationship(back_populates="relacao_pagamentos",
|
|
lazy="selectin", join_depth=2)
|
|
fk_formas_pagamento_id: Mapped[int] = mapped_column(ForeignKey("financeiro_formas_pagamento.id",
|
|
ondelete="CASCADE"), nullable=False)
|
|
relacao_formas_pagamento: Mapped["FinanceiroForma_Pagamento"] = relationship(back_populates="relacao_pagamentos",
|
|
lazy="selectin", join_depth=2)
|
|
relacao_movimentacoes_conta: Mapped[List[
|
|
"FinanceiroMovimentacao_Conta"]] = relationship(back_populates="relacao_pagamentos",
|
|
passive_deletes=True,
|
|
lazy="selectin",
|
|
cascade="all, delete-orphan",
|
|
join_depth=1)
|
|
|
|
|
|
class FinanceiroConta(Base, IdMixin):
|
|
__tablename__ = "financeiro_contas"
|
|
log_auditoria_habilitado = True
|
|
|
|
contas_tipo_conta: Mapped[FinanceiroTipoContaEnum] = mapped_column(Enum(FinanceiroTipoContaEnum,
|
|
inherit_schema=True
|
|
),
|
|
nullable=False)
|
|
contas_data_emissao: Mapped[data]
|
|
contas_data_vencimento: Mapped[data]
|
|
contas_valor_total: Mapped[valor_monetario]
|
|
contas_valor_juros: Mapped[valor_monetario]
|
|
contas_valor_multa: Mapped[valor_monetario]
|
|
contas_valor_desconto: Mapped[valor_monetario]
|
|
contas_descricao: Mapped[str200]
|
|
fk_pessoas_uuid: Mapped[int] = mapped_column(ForeignKey("comercial_pessoas.uuid", ondelete="CASCADE"),
|
|
nullable=False)
|
|
relacao_pessoa: Mapped["ComercialPessoa"] = relationship(back_populates="relacao_conta", lazy="selectin",
|
|
join_depth=2)
|
|
fk_status_id: Mapped[int] = mapped_column(ForeignKey("financeiro_status.id", ondelete="CASCADE"),
|
|
nullable=False)
|
|
relacao_status: Mapped["FinanceiroStatus"] = relationship(back_populates="relacao_conta", lazy="selectin",
|
|
join_depth=2)
|
|
fk_categorias_id: Mapped[int] = mapped_column(ForeignKey("financeiro_categorias.id", ondelete="CASCADE"),
|
|
nullable=False)
|
|
relacao_categorias: Mapped["FinanceiroCategoria"] = relationship(back_populates="relacao_conta", lazy="selectin",
|
|
join_depth=2)
|
|
fk_centros_custo_id: Mapped[int] = mapped_column(ForeignKey("financeiro_centros_custo.id", ondelete="CASCADE"),
|
|
nullable=False)
|
|
relacao_centros_custo: Mapped["FinanceiroCentro_Custo"] = relationship(back_populates="relacao_conta",
|
|
lazy="selectin",
|
|
join_depth=2)
|
|
relacao_parcelas: Mapped[List["FinanceiroParcela"]] = relationship(back_populates="relacao_conta",
|
|
passive_deletes=True,
|
|
lazy="selectin", cascade="all, delete-orphan",
|
|
join_depth=1)
|
|
|
|
|
|
class FinanceiroConta_Corrente(Base, IdMixin):
|
|
__tablename__ = "financeiro_contas_corrente"
|
|
log_auditoria_habilitado = True
|
|
|
|
contas_corrente_nome_conta: Mapped[str50]
|
|
contas_corrente_saldo_inicial: Mapped[valor_monetario]
|
|
contas_corrente_data_criacao: Mapped[data_idx]
|
|
contas_corrente_descricao: Mapped[str100]
|
|
relacao_movimentacoes_conta: Mapped[List["FinanceiroMovimentacao_Conta"]] = relationship(
|
|
back_populates="relacao_contas_corrente",
|
|
passive_deletes=True, lazy="selectin",
|
|
cascade="all, delete-orphan", join_depth=1)
|
|
relacao_pagamentos: Mapped[List["FinanceiroPagamento"]] = relationship(back_populates="relacao_contas_corrente",
|
|
passive_deletes=True, lazy="selectin",
|
|
cascade="all, delete-orphan", join_depth=1)
|
|
|
|
|
|
class FinanceiroMovimentacao_Conta(Base, IdMixin):
|
|
__tablename__ = "financeiro_movimentacoes_conta"
|
|
log_auditoria_habilitado = True
|
|
|
|
movimentacoes_conta_tipo_movimentacao: Mapped[FinanceiroTipoMovimentacaoEnum] = mapped_column(
|
|
Enum(FinanceiroTipoMovimentacaoEnum,
|
|
# Multi Tennat
|
|
inherit_schema=True
|
|
# /Multi Tennat
|
|
),
|
|
nullable=False,
|
|
|
|
)
|
|
movimentacoes_conta_valor_movimentacao: Mapped[valor_monetario]
|
|
movimentacoes_conta_data_movimentacao: Mapped[data_idx]
|
|
movimentacoes_conta_descricao: Mapped[str200]
|
|
fk_contas_corrente_id: Mapped[int] = mapped_column(ForeignKey("financeiro_contas_corrente.id", ondelete="CASCADE"),
|
|
nullable=False)
|
|
relacao_contas_corrente: Mapped[
|
|
"FinanceiroConta_Corrente"] = relationship(back_populates="relacao_movimentacoes_conta",
|
|
lazy="selectin", join_depth=2)
|
|
fk_pagamentos_id: Mapped[int] = mapped_column(ForeignKey("financeiro_pagamentos.id", ondelete="CASCADE"),
|
|
nullable=False)
|
|
relacao_pagamentos: Mapped["FinanceiroPagamento"] = relationship(back_populates="relacao_movimentacoes_conta",
|
|
lazy="selectin", join_depth=2)
|
|
|
|
|
|
financeiro_conta_manutencao_equipamentos = Table('financeiro_conta_manutencao_equipamentos', Base.metadata,
|
|
Column('manutencao_uuid', UUID(as_uuid=True),
|
|
ForeignKey('estoque_manutencoes_equipamentos.uuid'),
|
|
primary_key=True),
|
|
Column('conta_id', Integer,
|
|
ForeignKey('financeiro_contas.id'), primary_key=True)
|
|
)
|
|
|
|
|
|
# ______________________________________________FIM CONTAS A PAGAR E RECEBER____________________________________________
|
|
|
|
# _____________________________________________________TABLEAS DE LOG___________________________________________________
|
|
|
|
class HistoricoAlteracoes(Base, UuidMixin):
|
|
__tablename__ = 'historico_alteracoes'
|
|
|
|
tabela: Mapped[str100]
|
|
data_modificacao: Mapped[datetime] = mapped_column(DateTime, nullable=False)
|
|
action: Mapped[str10] # 'update', 'delete'
|
|
usuario_id: Mapped[str36_uuid_null] # Assumindo que o "ID" do usuário é uma "string"
|
|
registro_id: Mapped[str36_uuid] # "ID" do registro que está sendo alterado
|
|
|
|
# Relacionamentos
|
|
updates: Mapped[List["HistoricoUpdate"]] = relationship(back_populates="alteracao", passive_deletes=True,
|
|
lazy="selectin", cascade="all, delete-orphan",
|
|
join_depth=1)
|
|
deletes: Mapped["HistoricoDelete"] = relationship(back_populates="alteracao", passive_deletes=True,
|
|
lazy="selectin", cascade="all, delete-orphan",
|
|
join_depth=1)
|
|
|
|
|
|
class HistoricoUpdate(Base, UuidMixin):
|
|
__tablename__ = 'historico_update'
|
|
|
|
fk_historico_alteracoes_uuid: Mapped[UuidType] = mapped_column(ForeignKey("historico_alteracoes.uuid",
|
|
ondelete="CASCADE"), nullable=False)
|
|
coluna: Mapped[str100]
|
|
valor_antigo: Mapped[str200]
|
|
valor_novo: Mapped[str200]
|
|
# Relacionamento com a tabela principal
|
|
alteracao: Mapped["HistoricoAlteracoes"] = relationship(back_populates="updates", lazy="selectin", join_depth=2)
|
|
|
|
|
|
class HistoricoDelete(Base, UuidMixin):
|
|
__tablename__ = 'historico_delete'
|
|
|
|
fk_historico_alteracoes_uuid: Mapped[UuidType] = mapped_column(ForeignKey("historico_alteracoes.uuid",
|
|
ondelete="CASCADE"), nullable=False)
|
|
registro_deletado: Mapped[text] # Aqui armazenamos o estado completo da linha deletada como JSON
|
|
# Relacionamento com a tabela principal
|
|
alteracao: Mapped["HistoricoAlteracoes"] = relationship(back_populates="deletes", lazy="selectin", join_depth=2)
|
|
|
|
|
|
# ___________________________________________________FIM TABLEAS DE LOG_________________________________________________
|
|
|
|
# ______________________________________________LOCALIZAÇÃO ARQUIVOS S3_________________________________________________
|
|
class S3Arquivo(Base, UuidMixin, TimestampMixin):
|
|
__tablename__ = "s3_arquivos"
|
|
|
|
arquivos_nome_original: Mapped[str200]
|
|
arquivos_nome_armazenado: Mapped[str200]
|
|
|
|
associacoes: Mapped["S3ArquivoAssociacao"] = relationship(back_populates="arquivos", passive_deletes=True,
|
|
lazy="selectin", cascade="all, delete-orphan",
|
|
join_depth=1)
|
|
|
|
|
|
class S3ArquivoAssociacao(Base, UuidMixin, TimestampMixin):
|
|
__tablename__ = "s3_arquivo_associacoes"
|
|
|
|
fk_arquivo_uuid: Mapped[UuidType] = mapped_column(ForeignKey("s3_arquivos.uuid",
|
|
ondelete="CASCADE"), nullable=False)
|
|
arquivo_associacoes_tabela_relacionada: Mapped[str100] # Nome da tabela associada
|
|
arquivo_associacoes_linha_uuid: Mapped[UuidType] # Uuid da linha na tabela associada
|
|
|
|
arquivos: Mapped["S3Arquivo"] = relationship(back_populates="associacoes", lazy="selectin", join_depth=2)
|
|
|
|
|
|
# ____________________________________________FIM LOCALIZAÇÃO ARQUIVOS S3_______________________________________________
|
|
|
|
# __________________________________________________CONFIGURAÇÃO HERANÇA________________________________________________
|
|
# ____________________________________________NECESSÁRIO FICA NO FIM DO CÓDIGO__________________________________________
|
|
|
|
# Definindo a consulta polimórfica
|
|
PESSOA_POLY = with_polymorphic(
|
|
ComercialPessoa, # Modelo base
|
|
[ComercialFisica, ComercialJuridica] # Subclasses
|
|
)
|
|
# ________________________________________________FIM CONFIGURAÇÃO HERANÇA______________________________________________
|