class Cleaner(User): __tablename__ = 'cleaner' id = db.Column(db.Integer, db.ForeignKey('user.user_id'), primary_key=True) cleaning_company = db.Column(db.String, default='Caglayan pislik temizleyiciler', nullable=False) staff_id = db.Column(db.Integer, db.ForeignKey('staff.staff_id')) staff_t = db.relationship('Staff', back_populates='cleaner_t', foreign_keys=[staff_id]) def __repr__(self): return 'email: {} admin: {}'.format(self.email, self.is_admin) @classmethod def create_user(cls, username, password, cleaning_company): cleaner = super().create_user(username=username, password=password) cleaner.cleaning_company = cleaning_company def user_dashboard(self): return render_template("cleaner_dashboard.html", user=self) __mapper_args__ = { "polymorphic_identity": "cleaner", }
class Assistant(User): __tablename__ = 'assistant' user_id = db.Column(db.Integer, db.ForeignKey('user.user_id'), primary_key=True) field = db.Column(db.String(60), nullable=False) end_date = db.Column(db.DateTime) staff_id = db.Column(db.Integer, db.ForeignKey('staff.staff_id')) staff_t = db.relationship('Staff', back_populates='assistant_t', foreign_keys=[staff_id]) # end_date = db.Column(db.DateTime) supervisor_id = db.Column(db.Integer, db.ForeignKey('vet.id')) supervisor = db.relationship('Vet', back_populates='supervisee', foreign_keys=[supervisor_id]) def user_dashboard(self): return render_template("assistant_dashboard.html", user=self) __mapper_args__ = { "polymorphic_identity": "assistant", } @classmethod def create_user(cls, username, password): hashed_pw = bc.generate_password_hash(password).decode('utf-8') new_user = cls(username=username, password=hashed_pw) db.session.add(new_user) db.session.commit()
class Pet(db.Model): __tablename__ = 'pet' pet_id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(60), default='Çomar') ''' Attributes inherited from Stays relation''' checkin_date = db.Column(db.DateTime, default=datetime.utcnow) checkout_date = db.Column(db.DateTime) species = db.Column(db.String(60)) race = db.Column(db.String(60)) weight = db.Column(db.Float, nullable=False) age = db.Column(db.Integer, nullable=False) owner_ssn = db.Column(db.Integer, db.ForeignKey('owner.ssn')) treatments = db.relationship('Treatment', backref='pet') # Stays relation cage = db.relationship('Cage', secondary=Stay, back_populates='pet') # multivalued disabilities disabilities = db.relationship('Disability') def to_dict(self): return { "Id": self.pet_id, "Age": self.age, "Name": self.name, "Owner": [ self.owner_ssn if self.owner is not None else "Bizim Yurdumuz\ Sokaklar"], "Weight": self.weight, "Species": self.species, "Race": self.race, }
class Service(db.Model): __tablename__ = 'service' name = db.Column( db.String, primary_key=True, nullable=False, autoincrement=False) cost = db.Column(db.Float, nullable=False) serial_number = db.Column(db.Integer, db.ForeignKey('invoices.serial_number')) invoices = db.relationship('Invoices', secondary='invoices_service_link')
class Cage(db.Model): __tablename__ = 'cages' cage_id = db.Column(db.Integer, nullable=False, primary_key=True) size = db.Column(db.Integer, nullable=False) capacity = db.Column(db.Integer, nullable=False) emptiness = db.Column(db.Boolean, nullable=False, default=True) # multivalued suitability attribute suitabilities = db.relationship('Suitability', backref='cage') # multivalued notes attribute notes = db.relationship('CageNotes', backref='cage') # Stays relation pet = db.relationship('Pet', secondary=Stay, back_populates='cage')
class Staff(db.Model): __tablename__ = 'staff' staff_id = db.Column(db.Integer, db.ForeignKey('user.user_id'), primary_key=True) name = db.Column(db.String(60), nullable=False) last_name = db.Column(db.String(60), nullable=False) salary = db.Column(db.Float, default=db.Float(2200.5)) phone_number = db.Column(db.Integer) address = db.Column(db.String(100)) start_at = db.Column(db.DateTime) finish_at = db.Column(db.DateTime) assistant_t = db.relationship('Assistant', back_populates='staff_t', foreign_keys='Assistant.staff_id') vet_t = db.relationship('Vet', back_populates='staff_t', foreign_keys='Vet.staff_id') secretary_t = db.relationship('Secretary', back_populates='staff_t', foreign_keys='Secretary.staff_id') cleaner_t = db.relationship('Cleaner', back_populates='staff_t', foreign_keys='Cleaner.staff_id') __mapper_args__ = {"polymorphic_identity": "staff"}
class Treatment(db.Model): _tablename_ = 'treatment' record_id = db.Column(db.Integer, primary_key=True) record_type = db.Column(db.String(250)) start_date = db.Column(db.DateTime) end_date = db.Column(db.DateTime) pet_id = db.Column(db.Integer, db.ForeignKey('pet.pet_id')) medicines = db.relationship('Medicine', backref='medicines') def to_dict(self): return { 'Id': self.record_id, 'Record_type': self.record_type, 'Start_date': self.start_date.__str__(), 'End_date': self.end_date.__str__(), }
class InvoicesServiceLink(db.Model): __tablename__ = 'invoices_service_link' invoices_serial_number = db.Column( db.Integer, db.ForeignKey('invoices.serial_number'), primary_key=True, autoincrement=False) service_name = db.Column( db.Integer, db.ForeignKey('service.name'), primary_key=True, autoincrement=False) invoices = db.relationship(Invoices, backref=db.backref('invoices_assoc')) service = db.relationship(Service, backref=db.backref('service_assoc'))
class Appointment(db.Model): __tablename__ = 'appointment' appo_id = db.Column(db.Integer, primary_key=True) on = db.Column(db.DateTime, nullable=False) appo_type = db.Column(db.String, nullable=False) owner_ssn = db.Column( db.Integer, db.ForeignKey('owner.ssn'), primary_key=True, autoincrement=False) vet_id = db.Column(db.Integer, db.ForeignKey('vet.id')) assigned = db.relationship( 'Vet', back_populates='appos', foreign_keys=[vet_id])
class Secretary(User): __tablename__ = 'secretary' id = db.Column(db.Integer, db.ForeignKey('user.user_id'), primary_key=True) staff_id = db.Column(db.Integer, db.ForeignKey('staff.staff_id')) staff_t = db.relationship('Staff', back_populates='secretary_t', foreign_keys=[staff_id]) # languages = db.relationship('Languages', backref='languages') @classmethod def create_user(cls, username, password): super().create_user(username=username, password=password) def user_dashboard(self): return render_template("secretary_dashboard.html", user=self) __mapper_args__ = { "polymorphic_identity": "secretary", }
class Vet(User): __tablename__ = 'vet' id = db.Column(db.Integer, db.ForeignKey('user.user_id'), primary_key=True) field = db.Column(db.String, default='Genel uzman', nullable=False) staff_id = db.Column(db.Integer, db.ForeignKey('staff.staff_id')) staff_t = db.relationship('Staff', back_populates='vet_t', foreign_keys=[staff_id]) supervisee = db.relationship('Assistant', foreign_keys='Assistant.supervisor_id', back_populates='supervisor') appos = db.relationship('Appointment', back_populates='assigned', foreign_keys='Appointment.vet_id') def __repr__(self): return "{} FIELD: {}".format(super().__repr__(), self.field) def to_dict(self): return super().to_dict().update({ 'field': self.field, 'end_date': self.end_date.__str__(), 'supervisees': self.supervisee }) __mapper_args__ = { "polymorphic_identity": "vet", } def user_dashboard(self): return render_template("vet_dashboard.html", user=self) @classmethod def create_user(cls, username, password, field=None): hashed_pw = bc.generate_password_hash(password).decode('utf-8') new_user = cls(username=username, password=hashed_pw, field=field) db.session.add(new_user) db.session.commit()
class User(db.Model, UserMixin): __tablename__ = 'user' user_id = db.Column(db.Integer, primary_key=True, autoincrement=True) username = db.Column(db.String, nullable=False, unique=True) password = db.Column(db.String, nullable=False) user_type = db.Column(db.String(50)) __mapper_args__ = { "polymorphic_identity": "user", "polymorphic_on": user_type } def get_id(self): return self.user_id def __repr__(self): return "USER_ID: {} , USERNAME: {} , TYPE: {} ".format( self.user_id, self.username, self.user_type) def to_dict(self): return dict({ 'id': self.user_id, 'username': self.username, 'type': self.user_type }) def change_password(self, password): self.password = bc.generate_password_hash(password).decode('utf-8') @classmethod def create_user(cls, username, password): hashed_pw = bc.generate_password_hash(password).decode('utf-8') new_user = cls(username=username, password=hashed_pw) db.session.add(new_user) db.session.commit() def user_dashboard(self, user): pass
class Medicine(db.Model): __tablename__ = 'medicine' serial_number = db.Column( db.Integer, primary_key=True, nullable=False, autoincrement=True) name = db.Column(db.String(60), nullable=False) barcode_number = db.Column(db.String(60), nullable=False) expiration_date = db.Column(db.DateTime, nullable=False) distributor_name = db.Column(db.String(60), nullable=False) distributor_phone = db.Column(db.String(20), nullable=False) record_id = db.Column(db.Integer, db.ForeignKey('treatment.record_id'))
class Owner(db.Model): __tablename__ = 'owner' ssn = db.Column(db.Integer, primary_key=True, autoincrement=False) name = db.Column(db.String(100), nullable=False) last_name = db.Column(db.String(100), nullable=False) sex = db.Column(db.String(5), nullable=False) phone = db.Column(db.Integer, nullable=False, unique=True) email = db.Column(db.String(60)) address = db.Column(db.String(60)) # Owner makes Appointment (Weak entity) appointments = db.relationship('Appointment', backref='customer') # Owner pays Invoices invs = db.relationship('Invoices', backref='customer') # Owner owns Pet pets = db.relationship('Pet', backref='owner') def __repr__(self): return "id:{} name:{} sex:{} email:{} phone:{}".format( self.ssn, self.name, self.sex, self.email, self.phone) @classmethod def create_owner( cls, ssn, owner_name, last_name, owner_sex, owner_email, owner_address, owner_phone): new_owner = cls( ssn=ssn, name=owner_name, last_name=last_name, sex=owner_sex, email=owner_email, address=owner_address, phone=owner_phone) db.session.add(new_owner) db.session.commit() return new_owner def to_dict(self): return { "id": self.ssn, "tc": self.ssn, "name": self.name, "last_name": self.last_name, "phone": self.phone }
class Invoices(db.Model): __tablename__ = 'invoices' serial_number = db.Column( db.Integer, primary_key=True, autoincrement=False) quantity = db.Column(db.Integer, nullable=False) transaction_date = db.Column(db.DateTime, nullable=False) cost = db.Column(db.Float, nullable=False) service_quantity = db.Column(db.Integer, nullable=False) owner_ssn = db.Column(db.Integer, db.ForeignKey('owner.ssn')) # Invoice has service services = db.relationship('Service', secondary='invoices_service_link')
class Admin(User): __tablename__ = 'admin' user_id = db.Column(db.Integer, db.ForeignKey('user.user_id'), primary_key=True) __mapper_args__ = { "polymorphic_identity": "admin", } def __repr__(self): return super().__repr__() @classmethod def create_user(cls, username, password): super().create_user(username, password) def user_dashboard(self): return redirect('/admin')
class PetNotes(db.Model): pet = db.Column(db.Integer, db.ForeignKey('pet.pet_id'), primary_key=True) note_desc = db.Column(db.String(260), nullable=False, primary_key=True)
cage_id = db.Column(db.Integer, db.ForeignKey( 'cages.cage_id'), primary_key=True) suitable = db.Column(db.String, primary_key=True) class CageNotes(db.Model): cage_id = db.Column(db.Integer, db.ForeignKey( 'cages.cage_id'), primary_key=True) note = db.Column(db.String, primary_key=True) Stay = db.Table( 'stay', db.Column( 'pet_id', db.Integer, db.ForeignKey('pet.pet_id'), primary_key=True), db.Column( 'cage_id', db.Integer, db.ForeignKey('cages.cage_id'), primary_key=True)) class Pet(db.Model): __tablename__ = 'pet' pet_id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(60), default='Çomar') ''' Attributes inherited from Stays relation''' checkin_date = db.Column(db.DateTime, default=datetime.utcnow)
class Suitability(db.Model): cage_id = db.Column(db.Integer, db.ForeignKey( 'cages.cage_id'), primary_key=True) suitable = db.Column(db.String, primary_key=True)
class CageNotes(db.Model): cage_id = db.Column(db.Integer, db.ForeignKey( 'cages.cage_id'), primary_key=True) note = db.Column(db.String, primary_key=True)
class Disability(db.Model): pet = db.Column(db.Integer, db.ForeignKey('pet.pet_id'), primary_key=True) disab_desc = db.Column(db.String(260), nullable=False, primary_key=True)
class Clinic(db.Model): __tablename__ = 'clinic' clinic_id = db.Column(db.Integer, primary_key=True) contact_info = db.Column(db.String, nullable=False) location = db.Column(db.String, nullable=False)