99 lines
3.1 KiB
Python
99 lines
3.1 KiB
Python
from fastapi.exceptions import HTTPException
|
|
|
|
from sqlalchemy import (
|
|
UUID,
|
|
String,
|
|
text,
|
|
Identity,
|
|
)
|
|
from sqlalchemy.orm import (
|
|
Mapped,
|
|
mapped_column,
|
|
)
|
|
from databases.sql_models.core_mixin import BaseCollection
|
|
|
|
|
|
class ApiEnumDropdown(BaseCollection):
|
|
__tablename__ = "api_enum_dropdown"
|
|
__exclude__fields__ = ["enum_class"]
|
|
|
|
id: Mapped[Identity] = mapped_column(primary_key=True)
|
|
uu_id: Mapped[UUID] = mapped_column(
|
|
UUID, server_default=text("gen_random_uuid()"), index=True, unique=True
|
|
)
|
|
enum_class: Mapped[str] = mapped_column(
|
|
String, nullable=False, comment="Enum Constant Name"
|
|
)
|
|
key: Mapped[str] = mapped_column(String, nullable=False, comment="Enum Key")
|
|
value: Mapped[str] = mapped_column(String, nullable=False, comment="Enum Value")
|
|
description: Mapped[str] = mapped_column(String, nullable=True)
|
|
|
|
__table_args__ = ({"comment": "Enum objets that are linked to tables"},)
|
|
|
|
@classmethod
|
|
def get_by_uuid(cls, uuid: str):
|
|
return cls.query.filter(cls.uu_id == uuid).first()
|
|
|
|
@classmethod
|
|
def get_debit_search(cls, search_debit: str = None, search_uu_id: str = None):
|
|
if search_uu_id:
|
|
if search := cls.query.filter(
|
|
cls.enum_class.in_(["DebitTypes"]),
|
|
cls.uu_id == search_uu_id,
|
|
).first():
|
|
return search
|
|
elif search_debit:
|
|
if search := cls.query.filter(
|
|
cls.enum_class.in_(["DebitTypes"]),
|
|
cls.key == search_debit,
|
|
).first():
|
|
return search
|
|
return cls.query.filter(
|
|
cls.enum_class.in_(["DebitTypes"]),
|
|
).all()
|
|
|
|
@classmethod
|
|
def get_due_types(cls):
|
|
if due_list := cls.filter_active(
|
|
cls.enum_class == "BuildDuesTypes", cls.key.in_(["BDT-A", "BDT-D"])
|
|
).data:
|
|
return [due.uu_id.__str__() for due in due_list]
|
|
raise HTTPException(
|
|
status_code=404,
|
|
detail="No dues types found",
|
|
)
|
|
|
|
@classmethod
|
|
def due_type_search(cls, search_management: str = None, search_uu_id: str = None):
|
|
if search_uu_id:
|
|
if search := cls.query.filter(
|
|
cls.enum_class.in_(["BuildDuesTypes"]),
|
|
cls.uu_id == search_uu_id,
|
|
).first():
|
|
return search
|
|
elif search_management:
|
|
if search := cls.query.filter(
|
|
cls.enum_class.in_(["BuildDuesTypes"]),
|
|
cls.key == search_management,
|
|
).first():
|
|
return search
|
|
return cls.query.filter(
|
|
cls.enum_class.in_(["BuildDuesTypes"]),
|
|
).all()
|
|
|
|
def get_enum_dict(self):
|
|
return {
|
|
"uu_id": str(self.uu_id),
|
|
"enum_class": self.enum_class,
|
|
"key": self.key,
|
|
"value": self.value,
|
|
"description": self.description,
|
|
}
|
|
|
|
@classmethod
|
|
def uuid_of_enum(cls, enum_class: str, key: str):
|
|
return str(getattr(cls.find_one(enum_class=enum_class, key=key), "uu_id", None))
|
|
|
|
|
|
ApiEnumDropdown.set_session(ApiEnumDropdown.__session__)
|