Exemple #1
0
class Role(Base):

    role_permission = db.Table(
        'role_permission',
        db.Column('role_id',
                  db.Integer,
                  db.ForeignKey('role.role_id'),
                  primary_key=True,
                  nullable=False),
        db.Column('permission_id',
                  db.Integer,
                  db.ForeignKey('permission.permission_id'),
                  primary_key=True,
                  nullable=False))

    role_id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    role_code = db.Column(db.String(100))
    role_desc = db.Column(db.String(1000))

    roles = db.relationship('CSR', lazy=False)

    def __repr__(self):
        return self.role_code

    def __init__(self, **kwargs):
        super(Role, self).__init__(**kwargs)
Exemple #2
0
class Office(Base):

    office_service = db.Table(
        'office_service',
        db.Column('office_id',
                  db.Integer,
                  db.ForeignKey('office.office_id', ondelete="CASCADE"),
                  primary_key=True),
        db.Column('service_id',
                  db.Integer,
                  db.ForeignKey('service.service_id', ondelete="CASCADE"),
                  primary_key=True))

    office_id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    office_name = db.Column(db.String(100))
    office_number = db.Column(db.Integer)
    sb_id = db.Column(db.Integer, db.ForeignKey('smartboard.sb_id'))
    deleted = db.Column(db.DateTime, nullable=True)
    exams_enabled_ind = db.Column(db.Integer, nullable=False)

    services = db.relationship("Service", secondary='office_service')
    csrs = db.relationship('CSR')
    citizens = db.relationship('Citizen', backref='office_citizens')
    sb = db.relationship('SmartBoard')

    exams = db.relationship("Exam")
    rooms = db.relationship('Room')

    def __repr__(self):
        return self.office_name

    def __init__(self, **kwargs):
        super(Office, self).__init__(**kwargs)
class Service(Base):

    service_metadata = db.Table(
        'service_metadata',
        db.Column('service_id',
                  db.Integer,
                  db.ForeignKey('service.service_id'),
                  primary_key=True,
                  nullable=False),
        db.Column('metadata_id',
                  db.Integer,
                  db.ForeignKey('metadata.metadata_id'),
                  primary_key=True,
                  nullable=False))

    service_id = db.Column(db.Integer,
                           primary_key=True,
                           autoincrement=True,
                           nullable=False)
    service_code = db.Column(db.String(50), nullable=False)
    service_name = db.Column(db.String(500), nullable=False)
    service_desc = db.Column(db.String(2000), nullable=False)
    parent_id = db.Column(db.Integer,
                          db.ForeignKey('service.service_id'),
                          nullable=True)
    deleted = db.Column(db.DateTime, nullable=True)
    prefix = db.Column(db.String(10), nullable=False)
    display_dashboard_ind = db.Column(db.Integer, nullable=False)
    actual_service_ind = db.Column(db.Integer, nullable=False)

    external_service_name = db.Column(db.String(100), nullable=True)
    online_link = db.Column(db.String(200), nullable=True)
    online_availability = db.Column(Enum(Availability))
    timeslot_duration = db.Column(db.Integer, nullable=True)
    is_dlkt = db.Column(Enum(YesNo))
    email_paragraph = db.Column(db.String(2000), nullable=True)
    css_colour = db.Column(db.String(50), nullable=True)

    offices = db.relationship("Office", secondary='office_service')
    parent = db.relationship("Service", remote_side=[service_id])

    def __repr__(self):
        return self.service_name

    def __init__(self, **kwargs):
        super(Service, self).__init__(**kwargs)
class Booking(Base):

    booking_invigilators = db.Table(
        'booking_invigilators',
        db.Column('booking_id',
                  db.Integer,
                  db.ForeignKey('booking.booking_id', ondelete='CASCADE'),
                  primary_key=True),
        db.Column('invigilator_id',
                  db.Integer,
                  db.ForeignKey('invigilator.invigilator_id',
                                ondelete='CASCADE'),
                  primary_key=True))

    booking_id = db.Column(db.Integer,
                           primary_key=True,
                           autoincrement=True,
                           nullable=False)
    room_id = db.Column(db.Integer,
                        db.ForeignKey("room.room_id"),
                        nullable=True)
    shadow_invigilator_id = db.Column(db.Integer, nullable=True)
    office_id = db.Column(db.Integer,
                          db.ForeignKey("office.office_id"),
                          nullable=False)
    start_time = db.Column(UtcDateTime, nullable=False)
    end_time = db.Column(UtcDateTime, nullable=False)
    fees = db.Column(db.String(5), nullable=True)
    booking_name = db.Column(db.String(150), nullable=True)
    sbc_staff_invigilated = db.Column(db.Integer, default=0)
    booking_contact_information = db.Column(db.String(256), nullable=True)
    blackout_flag = db.Column(db.String(1), default='N', nullable=False)
    blackout_notes = db.Column(db.String(255), nullable=True)
    recurring_uuid = db.Column(db.String(255), nullable=True)

    room = db.relationship("Room")
    invigilators = db.relationship("Invigilator",
                                   secondary=booking_invigilators)
    office = db.relationship("Office")

    def __repr__(self):
        return '<Booking Name: (name={self.booking_name!r})>'.format(self=self)

    def __init__(self, **kwargs):
        super(Booking, self).__init__(**kwargs)
Exemple #5
0
class Service(Base):

    service_metadata = db.Table('service_metadata',
                db.Column('service_id', db.Integer, db.ForeignKey('service.service_id'), primary_key=True, nullable=False),
                db.Column('metadata_id', db.Integer,db.ForeignKey('metadata.metadata_id'), primary_key=True, nullable=False))

    service_id = db.Column(db.Integer, primary_key=True, autoincrement=True, nullable=False)
    service_code = db.Column(db.String(50), nullable=False)
    service_name = db.Column(db.String(500), nullable=False)
    service_desc = db.Column(db.String(2000), nullable=False)
    parent_id = db.Column(db.Integer, db.ForeignKey('service.service_id'), nullable=True)
    deleted = db.Column(db.DateTime, nullable=True)
    prefix = db.Column(db.String(10), nullable=False)
    display_dashboard_ind = db.Column(db.Integer, nullable=False)
    actual_service_ind = db.Column(db.Integer, nullable=False)

    parent = db.relationship("Service", remote_side=[service_id])

    def __repr__(self):
        return '<Service Name:(name={self.service_name!r})>'.format(self=self)

    def __init__(self, **kwargs):
        super(Service, self).__init__(**kwargs)
Exemple #6
0
class Office(Base):

    office_service = db.Table(
        'office_service',
        db.Column('office_id',
                  db.Integer,
                  db.ForeignKey('office.office_id', ondelete="CASCADE"),
                  primary_key=True),
        db.Column('service_id',
                  db.Integer,
                  db.ForeignKey('service.service_id', ondelete="CASCADE"),
                  primary_key=True))

    office_quick_list = db.Table(
        'office_quick_list',
        db.Column('office_id',
                  db.Integer,
                  db.ForeignKey('office.office_id', ondelete="CASCADE"),
                  primary_key=True),
        db.Column('service_id',
                  db.Integer,
                  db.ForeignKey('service.service_id', ondelete="CASCADE"),
                  primary_key=True))

    office_back_office_list = db.Table(
        'office_back_office_list',
        db.Column('office_id',
                  db.Integer,
                  db.ForeignKey('office.office_id', ondelete="CASCADE"),
                  primary_key=True),
        db.Column('service_id',
                  db.Integer,
                  db.ForeignKey('service.service_id', ondelete="CASCADE"),
                  primary_key=True))

    office_counter = db.Table(
        'office_counter',
        db.Column('office_id',
                  db.Integer,
                  db.ForeignKey('office.office_id', ondelete="CASCADE"),
                  primary_key=True),
        db.Column('counter_id',
                  db.Integer,
                  db.ForeignKey('counter.counter_id', ondelete="CASCADE"),
                  primary_key=True))

    office_timeslot = db.Table(
        'office_timeslot',
        db.Column('office_id',
                  db.Integer,
                  db.ForeignKey('office.office_id', ondelete="CASCADE"),
                  primary_key=True),
        db.Column('time_slot_id',
                  db.Integer,
                  db.ForeignKey('timeslot.time_slot_id', ondelete="CASCADE"),
                  primary_key=True))

    office_id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    office_name = db.Column(db.String(100))
    office_number = db.Column(db.Integer)
    sb_id = db.Column(db.Integer, db.ForeignKey('smartboard.sb_id'))
    deleted = db.Column(db.DateTime, nullable=True)
    exams_enabled_ind = db.Column(db.Integer, nullable=False)
    appointments_enabled_ind = db.Column(db.Integer, nullable=False, default=0)
    timezone_id = db.Column(db.Integer,
                            db.ForeignKey('timezone.timezone_id'),
                            nullable=True)
    latitude = db.Column(db.Float)
    longitude = db.Column(db.Float)
    office_appointment_message = db.Column(db.String(1000))
    appointments_days_limit = db.Column(db.Integer, default=30)
    appointment_duration = db.Column(db.Integer, default=30)
    max_person_appointment_per_day = db.Column(db.Integer, default=1)
    civic_address = db.Column(db.String(200))
    telephone = db.Column(db.String(20))
    online_status = db.Column(Enum(Status))
    number_of_dlkt = db.Column(db.Integer, nullable=True)
    office_email_paragraph = db.Column(db.String(2000), nullable=True)
    external_map_link = db.Column(db.String(500), nullable=True)
    soonest_appointment = db.Column(db.Integer, default=0)

    counters = db.relationship("Counter", secondary='office_counter')
    services = db.relationship("Service", secondary='office_service')
    quick_list = db.relationship("Service", secondary='office_quick_list')
    back_office_list = db.relationship("Service",
                                       secondary='office_back_office_list')
    csrs = db.relationship('CSR')
    citizens = db.relationship('Citizen', backref='office_citizens')
    timeslots = db.relationship('TimeSlot')

    sb = db.relationship('SmartBoard')
    timezone = db.relationship('Timezone')

    exams = db.relationship("Exam")
    rooms = db.relationship('Room')

    # for walk-in notifications
    check_in_notification = db.Column(db.Integer)
    check_in_reminder_msg = db.Column(db.Text)
    automatic_reminder_at = db.Column(db.Integer)
    # for Digital Signage
    currently_waiting = db.Column(db.Integer)
    digital_signage_message = db.Column(db.Integer)
    digital_signage_message_1 = db.Column(db.Text)
    digital_signage_message_2 = db.Column(db.Text)
    digital_signage_message_3 = db.Column(db.Text)
    show_currently_waiting_bottom = db.Column(db.Integer)

    format_string = 'office_%s'
    offices_cache_key: str = 'active_offices'

    def __repr__(self):
        return self.office_name

    def __init__(self, **kwargs):
        super(Office, self).__init__(**kwargs)

    @classmethod
    def find_by_id(cls, office_id: int):
        """Return a Office by office_id."""
        key = Office.format_string % office_id
        office = cache.get(key)
        if not office:
            office = cls.query.get(office_id)
            office.timeslots
            office.timezone
        return office

    @classmethod
    def build_cache(cls):
        """Build cache."""
        try:
            all_offices = cls.query.all()
            for office in all_offices:
                key = Office.format_string % office.office_id
                office.timeslots
                office.timezone
                cache.set(key, office)
        except Exception:
            print('Error on building cache')

    @classmethod
    def get_all_active_offices(cls):
        """Return all active offices."""
        from app.schemas.theq import OfficeSchema

        active_offices = cache.get(Office.offices_cache_key)
        if not active_offices:
            office_schema = OfficeSchema(many=True)
            active_offices = office_schema.dump(
                Office.query.filter(Office.deleted.is_(None)).order_by(
                    Office.office_name))
            cache.set(Office.offices_cache_key, active_offices)
        return active_offices

    @classmethod
    def clear_offices_cache(cls):
        """Clear active offices cache."""
        cache.delete(Office.offices_cache_key)
Exemple #7
0
class Office(Base):

    office_service = db.Table(
        'office_service',
        db.Column('office_id', db.Integer,
                db.ForeignKey('office.office_id', ondelete="CASCADE"), primary_key=True),
        db.Column('service_id', db.Integer,
                db.ForeignKey('service.service_id', ondelete="CASCADE"), primary_key=True))

    office_quick_list = db.Table(
        'office_quick_list',
        db.Column('office_id', db.Integer,
                db.ForeignKey('office.office_id', ondelete="CASCADE"), primary_key=True),
        db.Column('service_id', db.Integer,
                db.ForeignKey('service.service_id', ondelete="CASCADE"), primary_key=True))

    office_back_office_list = db.Table(
        'office_back_office_list',
        db.Column('office_id', db.Integer,
                db.ForeignKey('office.office_id', ondelete="CASCADE"), primary_key=True),
        db.Column('service_id', db.Integer,
                db.ForeignKey('service.service_id', ondelete="CASCADE"), primary_key=True))

    office_counter= db.Table(
        'office_counter',
        db.Column('office_id', db.Integer,
                db.ForeignKey('office.office_id', ondelete="CASCADE"), primary_key=True),
        db.Column('counter_id', db.Integer,
                db.ForeignKey('counter.counter_id', ondelete="CASCADE"), primary_key=True))

    office_timeslot = db.Table(
        'office_timeslot',
        db.Column('office_id', db.Integer,
                  db.ForeignKey('office.office_id', ondelete="CASCADE"), primary_key=True),
        db.Column('time_slot_id', db.Integer,
                  db.ForeignKey('timeslot.time_slot_id', ondelete="CASCADE"), primary_key=True))

    office_id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    office_name = db.Column(db.String(100))
    office_number = db.Column(db.Integer)
    sb_id = db.Column(db.Integer, db.ForeignKey('smartboard.sb_id'))
    deleted = db.Column(db.DateTime, nullable=True)
    exams_enabled_ind = db.Column(db.Integer, nullable=False)
    appointments_enabled_ind = db.Column(db.Integer, nullable=False, default=0)
    timezone_id = db.Column(db.Integer, db.ForeignKey('timezone.timezone_id'), nullable=True)
    latitude = db.Column(db.Float)
    longitude = db.Column(db.Float)
    office_appointment_message = db.Column(db.String(1000))
    appointments_days_limit = db.Column(db.Integer, default=30)
    appointment_duration = db.Column(db.Integer, default=30)
    max_person_appointment_per_day = db.Column(db.Integer, default=1)
    civic_address = db.Column(db.String(200))
    telephone = db.Column(db.String(20))
    # disable_online_appointment = db.Column(db.Boolean, default=False)
    online_status = db.Column(Enum(Status))

    counters = db.relationship("Counter", secondary='office_counter')
    services = db.relationship("Service", secondary='office_service')
    quick_list = db.relationship("Service", secondary='office_quick_list')
    back_office_list = db.relationship("Service", secondary='office_back_office_list')
    csrs = db.relationship('CSR')
    citizens = db.relationship('Citizen', backref='office_citizens')
    timeslots = db.relationship('TimeSlot', secondary='office_timeslot')

    sb = db.relationship('SmartBoard')
    timezone = db.relationship('Timezone')

    exams = db.relationship("Exam")
    rooms = db.relationship('Room')

    format_string = 'office_%s'

    def __repr__(self):
        return self.office_name

    def __init__(self, **kwargs):
        super(Office, self).__init__(**kwargs)

    @classmethod
    def find_by_id(cls, office_id: int):
        """Return a Office by office_id."""
        key = Office.format_string % office_id
        office = cache.get(key)
        if not office:
            office = cls.query.get(office_id)
            office.timeslots
            office.timezone
        #TODO cache.set(key, office)
        # print(office.timeslots)
        return office

    @classmethod
    def build_cache(cls):
        """Build cache."""
        try:
            all_offices = cls.query.all()
            for office in all_offices:
                key = Office.format_string % office.office_id
                office.timeslots
                office.timezone
                cache.set(key, office)
        except Exception as e:
            print('Error on building cache')