class EduQACourse(db.Model): __tablename__ = 'eduqa_courses' id = db.Column(db.Integer, primary_key=True, autoincrement=True) th_code = db.Column(db.String(255), nullable=False, info={'label': u'รหัส'}) en_code = db.Column(db.String(255), nullable=False, info={'label': u'English Code'}) th_name = db.Column(db.String(255), nullable=False, info={'label': u'ชื่อภาษาไทย'}) en_name = db.Column(db.String(255), nullable=False, info={'label': u'English Title'}) semester = db.Column(db.String(), info={'label': u'ภาคการศึกษา'}) academic_year = db.Column(db.String(), info={'label': u'ปีการศึกษา'}) th_desc = db.Column(db.Text(), info={'label': u'คำอธิบายรายวิชา'}) en_desc = db.Column(db.Text(), info={'label': u'Description'}) lecture_credit = db.Column(db.Numeric(), default=0, info={'label': u'หน่วยกิตบรรยาย'}) lab_credit = db.Column(db.Numeric(), default=0, info={'label': u'หน่วยกิตปฏิบัติ'}) created_at = db.Column(db.DateTime(timezone=True)) updated_at = db.Column(db.DateTime(timezone=True)) creator_id = db.Column(db.ForeignKey('staff_account.id')) updater_id = db.Column(db.ForeignKey('staff_account.id')) creator = db.relationship(StaffAccount, foreign_keys=[creator_id]) updater = db.relationship(StaffAccount, foreign_keys=[updater_id]) category_id = db.Column(db.ForeignKey('eduqa_course_categories.id')) category = db.relationship(EduQACourseCategory, backref=db.backref('courses', lazy='dynamic')) revision_id = db.Column(db.ForeignKey('eduqa_curriculum_revisions.id')) revision = db.relationship(EduQACurriculumnRevision, backref=db.backref('courses', lazy='dynamic')) @property def credits(self): return self.lecture_credit + self.lab_credit
class HealthServiceTimeSlot(db.Model): __tablename__ = 'health_service_timeslots' id = db.Column(db.Integer, primary_key=True, autoincrement=True) start = db.Column('start', db.DateTime(timezone=True), nullable=False, info={'label': u'เริ่ม'}) end = db.Column('end', db.DateTime(timezone=True), nullable=False, info={'label': u'สิ้นสุด'}) service_id = db.Column(db.ForeignKey('health_service_services.id')) site_id = db.Column(db.ForeignKey('health_service_sites.id')) staff_id = db.Column(db.ForeignKey('staff_account.id'), nullable=False) created_by = db.relationship('StaffAccount') quota = db.Column(db.Integer, info={'label': 'Quota'}) cancelled_at = db.Column(db.DateTime(timezone=True)) site = db.relationship(HealthServiceSite, backref=db.backref('slots')) service = db.relationship(HealthServiceService, backref=db.backref('slots')) @property def remaining(self): return self.quota - len(self.bookings) @property def is_available(self): return self.remaining > 0
class Address(db.Model): __tablename__ = 'address' id = db.Column(Integer, unique=True, primary_key=True) address_line1 = db.Column(String(100)) address_line2 = db.Column(String(100)) street = db.Column(String(100)) area = db.Column(String(100)) city = db.Column(String(100)) state = db.Column(String(100)) country = db.Column(String(100)) pin_code = db.Column(String(6)) modified_at = db.Column(db.DateTime(), default=Util.current_date_time()) created_at = db.Column(db.DateTime(), default=Util.current_date_time()) modified_by = db.Column(Integer) is_active = db.Column(db.Boolean, default=True) @staticmethod def add_address(address): address_obj = Address( address_line1=address['address_line1'], address_line2=address['address_line2'], street=address['street'], area=address['area'], city=address['city'], state=address['state'], country=address['country'], pin_code=address['pin_code'], ) try: db.session.add(address_obj) db.session.flush() op_obj = { 'status': True, 'message': 'address added ', 'address_id': address_obj.id } log.info("Address created successfully") return op_obj except SQLAlchemyError as e: error = str(e.__dict__['orig']) log.error("Failed to create address in table " + str(error)) op_obj = { 'status': False, 'message': 'Failed to create address ', } return op_obj @staticmethod def get_by(**kwargs): try: return Address.query.filter_by(**kwargs).first() except SQLAlchemyError as e: error = str(e.__dict__['orig']) log.error('Failed to get address by id ' + str(error)) return False
class FlightDetails(db.Model): __tablename__ = 'flight_details' id = db.Column(db.Integer, primary_key = True, autoincrement = True) flight_number = db.Column(db.String(100), primary_key = True) source = db.Column(db.String(200), nullable = False) destination = db.Column(db.String(200), nullable = False) flight_date = db.Column(db.Date, primary_key = True) departure_time = db.Column(db.Time(timezone = False), nullable = False) #departure from the source destination_arrival_time = db.Column(db.Time(timezone = False), nullable = False) #arrival at the destination total_seats = db.Column(db.Integer, nullable = False) booked_seats = db.Column(db.Integer, default = 0) created_at = db.Column(db.DateTime(timezone=False), default=datetime.now(), nullable=False) updated_at = db.Column(db.DateTime(timezone=False), default=datetime.now(), nullable=False)
class DocRoundOrg(db.Model): __tablename__ = 'doc_round_orgs' id = db.Column(db.Integer, primary_key=True, autoincrement=True) sent_at = db.Column(db.DateTime(timezone=True)) round_id = db.Column(db.ForeignKey('doc_rounds.id')) org_id = db.Column(db.ForeignKey('orgs.id')) finished_at = db.Column(db.DateTime(timezone=True)) org = db.relationship('Org') round = db.relationship(DocRound, backref=db.backref('targets', lazy='dynamic', cascade='all, delete-orphan'))
class HealthServiceBooking(db.Model): __tablename__ = 'health_service_bookings' id = db.Column(db.Integer, primary_key=True, autoincrement=True) slot_id = db.Column(db.ForeignKey('health_service_timeslots.id')) slot = db.relationship(HealthServiceTimeSlot, backref=db.backref('bookings')) cancelled = db.Column(db.DateTime(timezone=True)) created_at = db.Column(db.DateTime(timezone=True)) updated_at = db.Column(db.DateTime(timezone=True)) confirmed_at = db.Column(db.DateTime(timezone=True)) user_id = db.Column(db.ForeignKey('health_service_app_users.id')) user = db.relationship('HealthServiceAppUser', backref=db.backref('bookings'))
class DocRoundOrgReach(db.Model): __tablename__ = 'doc_round_org_reaches' id = db.Column(db.Integer, primary_key=True, autoincrement=True) reached_at = db.Column(db.DateTime(timezone=True)) reacher_id = db.Column(db.ForeignKey('staff_account.id')) reacher = db.relationship(StaffAccount) created_at = db.Column(db.DateTime(timezone=True)) round_org_id = db.Column(db.ForeignKey('doc_round_orgs.id')) round_org = db.relationship(DocRoundOrg, backref=db.backref( 'round_reaches', lazy='dynamic', cascade='all, delete-orphan'))
class FlightBookingRecords(db.Model): __tablename__ = 'flight_booking_records' id = db.Column(db.Integer, primary_key=True, autoincrement=True) flight_number = db.Column(db.String(100), primary_key=True) flight_date = db.Column(db.Date, primary_key=True) departure_time = db.Column(db.Time(timezone=False), nullable=False) #departure from the source total_seats = db.Column(db.Integer, nullable=False) seats_booked = db.Column(db.Integer, default=0) created_on = db.Column(db.DateTime(timezone=False), default=datetime.now(), nullable=False) updated_on = db.Column(db.DateTime(timezone=False), default=datetime.now(), nullable=False)
class DocReceiveRecord(db.Model): __tablename__ = 'doc_receive_records' id = db.Column(db.Integer, primary_key=True, autoincrement=True) predefined_comment = db.Column( db.String(255), info={ 'label': 'Predefined Comment', 'choices': [(c, c) for c in [u'แจ้งเพื่อทราบ', u'แจ้งเพื่อพิจารณา', u'ขอความร่วมมือเข้าร่วม']] }) comment = db.Column(db.Text, info={'label': 'Additional Comment'}) sent_at = db.Column(db.DateTime(timezone=True)) sender_id = db.Column(db.ForeignKey('staff_account.id')) round_org_id = db.Column(db.ForeignKey('doc_round_orgs.id')) round_org = db.relationship(DocRoundOrg, backref=db.backref('sent_records', lazy='dynamic')) doc_id = db.Column(db.ForeignKey('doc_documents.id')) rejected = db.Column(db.Boolean(), default=False) members = db.relationship(StaffPersonalInfo, secondary=receipt_receivers) sender = db.relationship(StaffAccount) doc = db.relationship(DocDocument, backref=db.backref('doc_receipts', lazy='dynamic', cascade='all, delete-orphan'))
class UserRoleEntity(db.Model, CRUDMixin): """ Stores the user-role mapping """ __tablename__ = 'UserRole' id = db.Column("urID", db.Integer, primary_key=True) user_id = db.Column("usrID", db.Integer, db.ForeignKey('User.usrID', ondelete='CASCADE'), nullable=False) role_id = db.Column("rolID", db.Integer, db.ForeignKey('Role.rolID', ondelete='CASCADE'), nullable=False) added_at = db.Column('urAddedAt', db.DateTime(), nullable=False, server_default='0000-00-00 00:00:00') role = db.relationship('RoleEntity', uselist=False) user = db.relationship('UserEntity', uselist=False) def get_id(self): """ return the unicode of the primary key value """ return unicode(self.id) def __repr__(self): return "<UserRoleEntity (\n\t" \ "urID: {0.id}, \n\t" \ " {0.user!r}, \n\t" \ " {0.role!r}, \n" \ " {0.added_at}, \n" \ ")>".format(self)
class DocDocument(db.Model): __tablename__ = 'doc_documents' id = db.Column(db.Integer, primary_key=True, autoincrement=True) round_id = db.Column(db.ForeignKey('doc_rounds.id')) round = db.relationship(DocRound, backref=db.backref('documents', lazy='dynamic', order_by='DocDocument.number', cascade='all, delete-orphan')) number = db.Column(db.Integer(), info={'label': u'Number'}) deadline = db.Column(db.DateTime(timezone=True), info={'label': 'Deadline'}) addedAt = db.Column(db.DateTime(timezone=True)) file_name = db.Column(db.String(255)) url = db.Column(db.String(255)) priority = db.Column(db.String(255), info={ 'label': 'Priority', 'choices': [(c, c) for c in [u'ปกติ', u'ด่วน', u'ด่วนที่สุด']] }) stage = db.Column(db.String(255), info={ 'label': 'Stage', 'choices': [(c, c) for c in [u'drafting', u'ready', u'sent']] }) title = db.Column(db.String(255), info={'label': 'Title'}) summary = db.Column(db.Text(), info={'label': 'Summary'}) comment = db.Column(db.Text(), info={'label': 'Comment'}) category_id = db.Column(db.ForeignKey('doc_categories.id')) category = db.relationship(DocCategory, backref=db.backref( 'documents', lazy='dynamic', cascade='all, delete-orphan')) def get_recipients(self, round_org_id): receipt = self.doc_receipts.filter_by(round_org_id=round_org_id, doc_id=self.id).first() if receipt: return receipt.members else: return []
class CustomerBooking(db.Model): __tablename__ = 'customer_booking' id = db.Column(db.Integer, primary_key=True, autoincrement=True) flight_number = db.Column(db.String(100), primary_key=True) contact_email = db.Column(db.String(100), nullable=False) flight_date = db.Column(db.Date, primary_key=True) departure_time = db.Column(db.Time(timezone=False), nullable=False) #departure from the source seats_booked = db.Column(db.Integer, default=0, nullable=False) booking_id = db.Column(db.Integer, default=-1, primary_key=True) booking_status = db.Column(db.String(100), default="pending") ticket_booked_on = db.Column(db.DateTime(timezone=False), default=datetime.now(), nullable=False) ticket_booking_updated_on = db.Column(db.DateTime(timezone=False), default=datetime.now(), nullable=False)
class DocRound(db.Model): __tablename__ = 'doc_rounds' id = db.Column(db.Integer, primary_key=True, autoincrement=True) date = db.Column(db.Date(), info={'label': 'Date'}, nullable=False) created_at = db.Column(db.DateTime(timezone=True)) created_by = db.Column(db.ForeignKey('staff_account.id')) creator = db.relationship(StaffAccount) def __str__(self): return self.date.strftime('%d/%m/%Y')
class File(db.Model): __tablename__ = "file" id = db.Column(db.String(50), primary_key=True) name = db.Column(db.String(255), unique=False) extension = db.Column(db.String(10), unique=False) type = db.Column(db.Enum(FileType), unique=False, nullable=False) created_date = db.Column(db.DateTime(timezone=True), server_default=func.now()) def get_path(self, directory_path): return os.path.join(directory_path, '{}.{}'.format(self.id, self.extension))
class DocDocumentReach(db.Model): __tablename__ = 'doc_document_reaches' id = db.Column(db.Integer, primary_key=True, autoincrement=True) reached_at = db.Column(db.DateTime(timezone=True)) reacher_id = db.Column(db.ForeignKey('staff_account.id')) reacher = db.relationship(StaffAccount, backref=db.backref('doc_reaches', lazy='dynamic')) doc_id = db.Column(db.ForeignKey('doc_documents.id')) starred = db.Column(db.Boolean(False)) note = db.Column(db.Text()) doc = db.relationship(DocDocument, backref=db.backref('reaches', lazy='dynamic', cascade='all, delete-orphan')) round_org_id = db.Column(db.ForeignKey('doc_round_orgs.id')) round_org = db.relationship(DocRoundOrg, backref=db.backref('doc_reaches', lazy='dynamic')) sender_comment = db.Column(db.Text()) receiver_comment = db.Column(db.Text()) receiver_commented_at = db.Column(db.DateTime(timezone=True)) created_at = db.Column(db.DateTime(timezone=True))
class EduQACourseSession(db.Model): __tablename__ = 'eduqa_course_sessions' id = db.Column(db.Integer, primary_key=True, autoincrement=True) course_id = db.Column(db.ForeignKey('eduqa_courses.id')) start = db.Column(db.DateTime(timezone=True), nullable=False, info={'label': u'เริ่ม'}) end = db.Column(db.DateTime(timezone=True), nullable=False, info={'label': u'สิ้นสุด'}) type_ = db.Column(db.String(255), info={'label': u'รูปแบบการสอน', 'choices': [(c, c) for c in (u'บรรยาย', u'ปฏิบัติการ', u'กิจกรรม', u'สอบ')]}) desc = db.Column(db.Text()) course = db.relationship(EduQACourse, backref=db.backref('sessions', lazy='dynamic')) instructors = db.relationship('EduQAInstructor', secondary=session_instructors, backref=db.backref('sessions', lazy='dynamic')) @property def total_hours(self): delta = self.end - self.start return u'{} ชม. {} นาที'.format(delta.seconds//3600, (delta.seconds//60)%60) @property def total_seconds(self): delta = self.end - self.start return delta.seconds
class SmartClassOnlineAccountEvent(db.Model): __tablename__ = 'smartclass_scheduler_online_account_events' id = db.Column('id', db.Integer(), primary_key=True, autoincrement=True) account_id = db.Column( 'account_id', db.ForeignKey('smartclass_scheduler_online_accounts.id'), nullable=False) title = db.Column('title', db.String(255), nullable=False, info={'label': u'กิจกรรม'}) start = db.Column('start', db.DateTime(timezone=True), nullable=False, info={'label': u'เริ่ม'}) end = db.Column('end', db.DateTime(timezone=True), nullable=False, info={'label': u'สิ้นสุด'}) occupancy = db.Column('occupancy', db.Integer(), info={'label': u'ผู้เข้าร่วม'}) approved = db.Column('approved', db.Boolean(), default=True) created_at = db.Column('created_at', db.DateTime(timezone=True), server_default=func.now()) created_by = db.Column('created_by', db.ForeignKey('staff_account.id')) creator = db.Column('creator', db.String(), nullable=True, info={'label': u'ชื่อผู้ลงทะเบียน'}) updated_at = db.Column('updated_at', db.DateTime(timezone=True), server_default=None) updated_by = db.Column('updated_by', db.ForeignKey('staff_account.id')) cancelled_at = db.Column('cancelled_at', db.DateTime(timezone=True), server_default=None) cancelled_by = db.Column('cancelled_by', db.ForeignKey('staff_account.id')) approved_by = db.Column('approved_by', db.ForeignKey('staff_account.id')) approved_at = db.Column('approved_at', db.DateTime(timezone=True), server_default=None) note = db.Column('note', db.Text(), info={'label': u'หมายเหตุ'}) account = db.relationship(SmartClassOnlineAccount, backref=db.backref('events'))
class VehicleBooking(db.Model): __tablename__ = 'scheduler_vehicle_bookings' id = db.Column('id', db.Integer(), primary_key=True, autoincrement=True) vehicle_id = db.Column('vehicle_id', db.ForeignKey('scheduler_vehicle_resources.id'), nullable=False) vehicle = db.relationship('VehicleResource', backref=db.backref('bookings')) title = db.Column('title', db.String(255), nullable=False) init_milage = db.Column('init_milage', db.Integer, nullable=True) end_milage = db.Column('end_milage', db.Integer, nullable=True) toll_fee = db.Column('toll_fee', db.Float(), default=0.0) distance = db.Column('distance', db.Integer, nullable=True) init_location = db.Column('init_location', db.String(255), nullable=True) destination = db.Column('destination', db.String(255), nullable=True) start = db.Column('start', db.DateTime(timezone=True), nullable=False) end = db.Column('end', db.DateTime(timezone=True), nullable=False) iocode_id = db.Column('iocode_id', db.ForeignKey('iocodes.id')) iocode = db.relationship('IOCode', backref=db.backref('vehicle_bookings')) org_id = db.Column('org_id', db.ForeignKey('orgs.id')) org = db.relationship('Org', backref=db.backref('vehicle_bookings')) num_passengers = db.Column('num_passengers', db.Integer()) approved = db.Column('approved', db.Boolean(), default=False) closed = db.Column('closed', db.Boolean(), default=False) created_at = db.Column('created_at', db.DateTime(timezone=True), server_default=func.now()) created_by = db.Column('created_by', db.ForeignKey('staff_account.id')) updated_at = db.Column('updated_at', db.DateTime(timezone=True), server_default=None) updated_by = db.Column('updated_by', db.ForeignKey('staff_account.id')) cancelled_at = db.Column('cancelled_at', db.DateTime(timezone=True), server_default=None) cancelled_by = db.Column('cancelled_by', db.ForeignKey('staff_account.id')) approved_by = db.Column('approved_by', db.ForeignKey('staff_account.id')) approved_at = db.Column('approved_at', db.DateTime(timezone=True), server_default=None) desc = db.Column('desc', db.Text()) google_event_id = db.Column('google_event_id', db.String(64)) google_calendar_id = db.Column('google_calendar_id', db.String(255))
class RoomEvent(db.Model): __tablename__ = 'scheduler_room_reservations' id = db.Column('id', db.Integer(), primary_key=True, autoincrement=True) room_id = db.Column('room_id', db.ForeignKey('scheduler_room_resources.id'), nullable=False) category_id = db.Column('category_id', db.ForeignKey('scheduler_event_categories.id')) category = db.relationship('EventCategory', backref=db.backref('events')) title = db.Column('title', db.String(255), nullable=False) start = db.Column('start', db.DateTime(timezone=True), nullable=False) end = db.Column('end', db.DateTime(timezone=True), nullable=False) iocode_id = db.Column('iocode_id', db.ForeignKey('iocodes.id')) occupancy = db.Column('occupancy', db.Integer()) # number of sets of food/refreshment requested refreshment = db.Column('refreshment', db.Integer(), default=0) request = db.Column('request', db.Text()) # comma separated list of things approved = db.Column('approved', db.Boolean(), default=True) created_at = db.Column('created_at', db.DateTime(timezone=True), server_default=func.now()) created_by = db.Column('created_by', db.ForeignKey('staff_account.id')) updated_at = db.Column('updated_at', db.DateTime(timezone=True), server_default=None) updated_by = db.Column('updated_by', db.ForeignKey('staff_account.id')) cancelled_at = db.Column('cancelled_at', db.DateTime(timezone=True), server_default=None) cancelled_by = db.Column('cancelled_by', db.ForeignKey('staff_account.id')) approved_by = db.Column('approved_by', db.ForeignKey('staff_account.id')) approved_at = db.Column('approved_at', db.DateTime(timezone=True), server_default=None) extra_items = db.Column('extra_items', db.JSON) note = db.Column('note', db.Text()) google_event_id = db.Column('google_event_id', db.String(64)) google_calendar_id = db.Column('google_calendar_id', db.String(255))
class RbaUser(db.Model): __tablename__ = 'rba_user' id = db.Column(Integer, primary_key=True, autoincrement=True) name = db.Column(String(100)) mobile = db.Column(String(100)) email = db.Column(String(100)) is_email_verified = db.Column(db.Boolean, nullable=False, default=False) password = db.Column(String(250)) gender = db.Column(String(8)) aadhaar_no = db.Column(String(20)) dob = db.Column(db.DateTime()) profile_image = db.Column(String(250)) address_id = db.Column(Integer, ForeignKey('address.id'), nullable=True) created_at = db.Column(db.DateTime(), default=Util.current_date_time()) modified_at = db.Column(db.DateTime(), default=Util.current_date_time()) modified_by = db.Column(Integer) is_active = db.Column(db.Boolean, default=True) # this method will add user but we have to commit where we have called this method @staticmethod def add_user(user): # adding address in address table result = AddressService.add_address(user['address']) if result['status'] is False: return { 'status': constants.STATUS_FAIL, 'message': 'Failed to create address' } address_id = result['address_id'] '''encrypt password''' password = sha256_crypt.encrypt(user['password']) try: log.info("adding in user table") users = RbaUser(name=user['name'], mobile=user['mobile'], email=user['email'], password=password, gender=user['gender'], aadhaar_no=user['aadhaar_no'], dob=user['dob'], profile_image=user['profile_image'], address_id=address_id) db.session.add(users) db.session.flush() op_object = { 'status': constants.STATUS_PASS, 'user_id': users.id, 'address_id': address_id } except SQLAlchemyError as e: template = "An exception of type {0} occurred. Arguments:\n{1!r}" error = template.format(type(e).__name__, e.args) log.error("problem in user table") log.error(error) op_object = {'status': constants.STATUS_FAIL, 'msg': error} return op_object @staticmethod def get_by(**kwargs): try: return RbaUser.query.filter_by(**kwargs).first() except SQLAlchemyError as e: error = str(e.__dict__['orig']) log.error(error) return False