system-pri/backend/app/project_supervisor/models.py

37 lines
1.7 KiB
Python

from ..dependencies import db
from ..base.models import Person, Base
from flask_sqlalchemy import BaseQuery
from sqlalchemy import or_
from sqlalchemy.sql import text
from ..base.utils import order_by_column_name
class ProjectSupervisor(Base, Person):
__tablename__ = "project_supervisors"
limit_group = db.Column(db.Integer, default=3, nullable=False)
count_groups = db.Column(db.Integer, default=0, nullable=False)
mode = db.Column(db.Integer, default=0, nullable=False) # 0 - stationary, 1 - non-stationary, 2 - both
@classmethod
def search_by_fullname_and_mode_and_order_by_first_name_or_last_name(cls, fullname: str = None,
mode: int = None,
order_by_first_name: str = None,
order_by_last_name: str = None) -> BaseQuery:
project_supervisors_query = cls.query
if mode is not None:
project_supervisors_query = project_supervisors_query.filter(mode != 1 - mode)
if fullname is not None:
project_supervisors_query = project_supervisors_query.filter(
(ProjectSupervisor.first_name + ' ' + ProjectSupervisor.last_name).like(f'{fullname}%'))
project_supervisors_query = order_by_column_name(project_supervisors_query, ProjectSupervisor.first_name,
order_by_first_name)
project_supervisors_query = order_by_column_name(project_supervisors_query, ProjectSupervisor.last_name,
order_by_last_name)
return project_supervisors_query