Beispiel #1
0
class Branch(db.Model):
    id = db.Column(UuidField,
                   unique=True,
                   nullable=False,
                   default=uuid4,
                   primary_key=True)
    name = db.Column(db.String(255), unique=False, nullable=False)

    is_main = db.Column(db.Boolean, unique=False, default=False)

    website = db.Column(db.String(255), unique=False, nullable=True)
    phone = db.Column(db.String(255), unique=False, nullable=True)
    email = db.Column(db.String(255), unique=False, nullable=True)

    organisation_id = db.Column(UuidField,
                                db.ForeignKey('organisation.id'),
                                nullable=False)

    date_created = db.Column(db.DateTime,
                             nullable=False,
                             default=datetime.utcnow)
    date_updated = db.Column(db.DateTime,
                             nullable=False,
                             default=datetime.utcnow,
                             onupdate=datetime.utcnow)

    rooms = relationship('Room', backref="Branch", lazy=True)
Beispiel #2
0
class StudentClass(db.Model):
    id = db.Column(UuidField,
                   unique=True,
                   nullable=False,
                   default=uuid4,
                   primary_key=True)
    name = db.Column(db.String(255), unique=False, nullable=False)

    tax = db.Column(db.String(255), unique=False, nullable=True)
    coc = db.Column(db.String(255), unique=False, nullable=True)

    default_time = db.Column(db.DateTime)
    current_time = db.Column(db.DateTime)

    is_cancelt = db.Column(db.Boolean, default=False)
    is_attendance_required = db.Column(db.Boolean, default=True)

    defaultRoom_id = db.Column(UuidField,
                               db.ForeignKey('room.id'),
                               nullable=False)
    currentRoom_id = db.Column(UuidField,
                               db.ForeignKey('room.id'),
                               nullable=True)

    date_created = db.Column(db.DateTime,
                             nullable=False,
                             default=datetime.utcnow)
    date_updated = db.Column(db.DateTime,
                             nullable=False,
                             default=datetime.utcnow,
                             onupdate=datetime.utcnow)
Beispiel #3
0
class Organisation(db.Model, Crud):
    id = db.Column(UuidField, unique=True, nullable=False, default=uuid4, primary_key=True)
    name = db.Column(db.String(255), unique=False, nullable=False)

    tax = db.Column(db.String(255), unique=False, nullable=True)
    coc = db.Column(db.String(255), unique=False, nullable=True)

    date_created = db.Column(db.DateTime, nullable=False, default=datetime.utcnow)
    date_updated = db.Column(db.DateTime, nullable=False, default=datetime.utcnow, onupdate=datetime.utcnow)

    def add_user(self, user: '******') -> UserOrganisation:
        link_obj = UserOrganisation.link_obj(user_obj=user, organisation_obj=self)
        link_obj.save()
        return link_obj
class UserGroup(db.Model):
    id = db.Column(UuidField,
                   unique=True,
                   nullable=False,
                   default=uuid4,
                   primary_key=True)
    name = db.Column(db.String(255), unique=False, nullable=False)

    number = db.Column(db.String(255), unique=False, nullable=True)
    coc = db.Column(db.String(255), unique=False, nullable=True)

    date_created = db.Column(db.DateTime,
                             nullable=False,
                             default=datetime.utcnow)
    date_updated = db.Column(db.DateTime,
                             nullable=False,
                             default=datetime.utcnow,
                             onupdate=datetime.utcnow)
class Assignment(db.Model):
    id = db.Column(UuidField,
                   unique=True,
                   nullable=False,
                   default=uuid4,
                   primary_key=True)
    name = db.Column(db.String(255), unique=False, nullable=False)

    tax = db.Column(db.String(255), unique=False, nullable=True)
    coc = db.Column(db.String(255), unique=False, nullable=True)

    turned_in = db.Column(db.Boolean, default=False, nullable=False)

    is_group_assignment = db.Column(db.Boolean, default=False, nullable=False)
    is_graded = db.Column(db.Boolean, default=True, nullable=False)

    note = db.Column(db.Text, nullable=True)

    assignmentGroup_id = db.Column(UuidField,
                                   db.ForeignKey('assignment_group.id'),
                                   nullable=False)
    classStart_id = db.Column(UuidField,
                              db.ForeignKey('student_class.id'),
                              nullable=False)
    classDue_id = db.Column(UuidField,
                            db.ForeignKey('student_class.id'),
                            nullable=False)

    date_started = db.Column(db.DateTime,
                             nullable=True,
                             default=datetime.utcnow)
    date_due = db.Column(db.DateTime, nullable=True)

    date_created = db.Column(db.DateTime,
                             nullable=False,
                             default=datetime.utcnow)
    date_updated = db.Column(db.DateTime,
                             nullable=False,
                             default=datetime.utcnow,
                             onupdate=datetime.utcnow)
Beispiel #6
0
class Room(db.Model):
    id = db.Column(UuidField,
                   unique=True,
                   nullable=False,
                   default=uuid4,
                   primary_key=True)
    name = db.Column(db.String(255), unique=False, nullable=False)

    branch_id = db.Column(UuidField,
                          db.ForeignKey('branch.id'),
                          nullable=False)

    floor = db.Column(db.String(255), unique=False, nullable=True)
    number = db.Column(db.String(255), unique=False, nullable=True)

    note = db.Column(db.Text, unique=False, nullable=True)

    date_created = db.Column(db.DateTime,
                             nullable=False,
                             default=datetime.utcnow)
    date_updated = db.Column(db.DateTime,
                             nullable=False,
                             default=datetime.utcnow,
                             onupdate=datetime.utcnow)
class AttendanceReason(db.Model):
    id = db.Column(UuidField,
                   unique=True,
                   nullable=False,
                   default=uuid4,
                   primary_key=True)
    name = db.Column(db.String(255), unique=False, nullable=False)

    allowed = db.Column(db.Boolean, unique=False, default=True, nullable=False)

    date_created = db.Column(db.DateTime,
                             nullable=False,
                             default=datetime.utcnow)
    date_updated = db.Column(db.DateTime,
                             nullable=False,
                             default=datetime.utcnow,
                             onupdate=datetime.utcnow)
class AssignmentGroup(db.Model):
    id = db.Column(UuidField,
                   unique=True,
                   nullable=False,
                   default=uuid4,
                   primary_key=True)
    name = db.Column(db.String(255), unique=False, nullable=False)

    note = db.Column(db.Text, nullable=True, unique=False)

    date_created = db.Column(db.DateTime,
                             nullable=False,
                             default=datetime.utcnow)
    date_updated = db.Column(db.DateTime,
                             nullable=False,
                             default=datetime.utcnow,
                             onupdate=datetime.utcnow)
class RelationType(db.Model):
    id = db.Column(UuidField,
                   unique=True,
                   nullable=False,
                   default=uuid4,
                   primary_key=True)
    name = db.Column(db.String(255), unique=False, nullable=False)

    is_caregiver = db.Column(db.Boolean, unique=False, nullable=True)
    is_deleted = db.Column(db.Boolean,
                           unique=False,
                           nullable=True,
                           default=False)

    date_created = db.Column(db.DateTime,
                             nullable=False,
                             default=datetime.utcnow)
    date_updated = db.Column(db.DateTime,
                             nullable=False,
                             default=datetime.utcnow,
                             onupdate=datetime.utcnow)
Beispiel #10
0
class Address(db.Model):
    id = db.Column(UuidField,
                   unique=True,
                   nullable=False,
                   default=uuid4,
                   primary_key=True)

    line1 = db.Column(db.String(255), unique=False, nullable=True)
    line2 = db.Column(db.String(255), unique=False, nullable=True)
    line3 = db.Column(db.String(255), unique=False, nullable=True)
    city = db.Column(db.String(255), unique=False, nullable=True)
    postcode = db.Column(db.String(255), unique=False, nullable=True)
    province = db.Column(db.String(255), unique=False, nullable=True)
    phone = db.Column(db.String(255), unique=False, nullable=True)
    fax = db.Column(db.String(255), unique=False, nullable=True)

    date_created = db.Column(db.DateTime,
                             nullable=False,
                             default=datetime.utcnow)
    date_updated = db.Column(db.DateTime,
                             nullable=False,
                             default=datetime.utcnow,
                             onupdate=datetime.utcnow)
Beispiel #11
0
class User(db.Model, Crud):
    id = db.Column(UuidField,
                   unique=True,
                   nullable=False,
                   default=uuid4,
                   primary_key=True)

    username = db.Column(db.String(255), unique=True, nullable=False)
    email = db.Column(db.String(255), unique=True, nullable=True)

    # This is allowed for key based authentication aswell. When in bot mode its node allowed
    # When not in bot mode this is also allowed as user secret.
    password = db.Column(db.String(255), unique=False, nullable=True)
    secret = db.Column(UuidField, unique=True, nullable=False, default=uuid4)

    first_name = db.Column(db.String(255), unique=False, nullable=True)
    last_name = db.Column(db.String(255), unique=False, nullable=True)

    gender = db.Column(db.Enum(Gender), unique=False, default=Gender.unknown)

    is_bot = db.Column(db.Boolean(), default=False)
    is_blocked = db.Column(db.Boolean(), default=False)
    is_visible = db.Column(db.Boolean(), default=True)

    date_created = db.Column(db.DateTime,
                             nullable=False,
                             default=datetime.utcnow)
    date_updated = db.Column(db.DateTime,
                             nullable=False,
                             default=datetime.utcnow,
                             onupdate=datetime.utcnow)

    def __init__(self, *args, **kwargs):
        super(User, self).__init__(*args, **kwargs)
        self.id = uuid4().hex
        self.secret = uuid4().hex

    def link_organisation(self, organisation: Organisation):
        link = UserOrganisation.link_obj(user_obj=self,
                                         organisation_obj=organisation)
        link.save()

    def check_secret(self, secret):
        # We check here as it can also be a str as the password is also a valid secret.
        if isinstance(secret, UUID):
            secret = str(secret.hex)
        if self.is_bot:
            return secret == str(self.secret.hex)
        else:
            return secret in [str(self.secret.hex), self.password]

    def api_keys(self, also_blocked=False):
        results = Authentication.query.filter(
            Authentication.user_id == self.id)
        if not also_blocked:
            results = results.filter(Authentication.is_blocked == False)
        return results.all()

    def generate_access_key(self,
                            expires: relativedelta = None,
                            note: str = None,
                            save: bool = False) -> Authentication:
        auth_key = Authentication(note=note)
        if expires is None:
            auth_key.never_expire()
        else:
            auth_key.expires_in(expires)
        self.attach_access_key(self, auth_key)
        if save:
            auth_key.save()
        return auth_key

    def enable_bot(self):
        self.is_bot = True
        self.gender = Gender.unknown

    @classmethod
    def attach_access_key(cls,
                          user: '******',
                          key: Authentication,
                          auto_save: bool = True):
        key.user_id = user.id
        if auto_save:
            key.save()

    @classmethod
    def search_user_secure(cls, id, secret) -> 'User':
        result = User.query\
            .filter(User.id == id)\
            .filter(or_(User.password == secret, User.secret == secret))\
            .first()
        return result

    @classmethod
    def from_token(cls, token: str):
        return cls.query.join(Authentication).filter(
            Authentication.key == token).first()

    @classmethod
    def from_password(cls, password: str):
        return cls.query.filter(User.password == password).first()