class Accounts(db.Model): account_id = db.Column(db.Integer, primary_key=True, nullable=False, autoincrement=True, unique=True) role_id = db.Column(db.Integer, db.ForeignKey('roles.role_id')) account_name = db.Column(db.String(50), nullable=False, unique=True) account_password = db.Column(db.String(50), nullable=False) note = db.Column(db.String(50)) delete_at = db.Column(db.DateTime, default=None) customers = db.relationship('Customers', backref='account', lazy='subquery') employees = db.relationship('Employees', backref='account', lazy='subquery') def serialize(self): return { "account_id": self.account_id, "account_name": self.account_name, "note": self.note, "delete_at": self.delete_at, "role": self.role.serialize() } def __repr__(self): return f"Account('{self.account_id}','{self.account_name}','{self.note}', '{self.delete_at}', " \ f"'{self.role.serialize()}')"
class Categories(db.Model): category_id = db.Column(db.Integer, primary_key=True, nullable=False, unique=True) books = db.relationship("Books", backref="category", lazy=False) category_name = db.Column(db.String(50)) image = db.Column(db.String(1500)) description = db.Column(db.String(1500)) note = db.Column(db.String(1500)) delete_at = db.Column(db.DateTime, default=None) books = db.relationship('Books', backref="category", lazy=True) def serialize(self): return { "category_id": self.category_id, "category_name": self.category_name, "note": self.note, "description": self.description, "delete_at": self.delete_at, "image": self.image } def __repr__(self): return f"Category('{self.category_id}','{self.category_name}','{self.note}','{self.description}', '{self.delete_at}')"
class Books(db.Model): book_id = db.Column(db.Integer, autoincrement=True, nullable=False, primary_key=True, unique=True) book_name = db.Column(db.String(150), nullable=False) supplier_id = db.Column(db.Integer, db.ForeignKey('suppliers.supplier_id')) category_id = db.Column(db.Integer, db.ForeignKey('categories.category_id')) author_id = db.Column(db.Integer, db.ForeignKey('authors.author_id')) old_amount = db.Column(db.Integer) new_amount = db.Column(db.Integer) image = db.Column(db.String(1000)) page_number = db.Column(db.Integer) description = db.Column(db.TEXT(16383)) cost_price = db.Column(db.Float) retail_price = db.Column(db.Float) discount = db.Column(db.Float, default=0.0) ranking = db.Column(db.String(50)) rate_star = db.Column(db.Float, name="rate_star", default=0) rate_count = db.Column(db.Integer, name="rate_count", default=0) delete_at = db.Column(db.DateTime, default=None) note = db.Column(db.String(1500)) comments = db.relationship('Comments', backref='book', lazy=True) order_details = db.relationship('Orderdetails', backref='book', lazy=True) borrow_ticket_details = db.relationship('Borrowticketdetails', backref='book', lazy=True) def serialize(self): return { "book_id": self.book_id, "book_name": self.book_name, "note": self.note, "supplier": self.supplier.serialize() if self.supplier != None else None, "category": self.category.serialize() if self.category != None else None, "author": self.author.serialize() if self.author != None else None, "old_amount": self.old_amount, "new_amount": self.new_amount, "image": self.image, "page_number": self.page_number, "description": self.description, "cost_price": self.cost_price, "retail_price": self.retail_price, "discount": self.discount, "ranking": self.ranking, "rate_star": self.rate_star, "rate_count": self.rate_count, "delete_at": self.delete_at } def __repr__(self): return f"('book_id':{self.book_id},'book_name': {self.book_name},'note : {self.note},'supplier': {self.supplier.serialize()},'category': {self.category.serialize()}, " \ f"'author': {self.author.serialize()},'old_amount': {self.old_amount},'new_amount': {self.new_amount},'image': {self.image},'page_number': {self.page_number}, " \ f"'description ':{self.description},'cost_price': {self.cost_price},'retail_price': {self.retail_price},'discount': {self.discount},'ranking': {self.ranking})"
class Employees(db.Model): employee_id = db.Column(db.Integer, autoincrement=True, primary_key=True, nullable=False, unique=True) account_id = db.Column(db.Integer, db.ForeignKey('accounts.account_id'), unique=True) last_name = db.Column(db.String(50), nullable=False) first_name = db.Column(db.String(50), nullable=False) phone = db.Column(db.String(50), nullable=False, unique=True) email = db.Column(db.String(50), nullable=False, unique=True) birth_date = db.Column(db.DateTime) hire_date = db.Column(db.DateTime) province_id = db.Column(db.String(50), name="province_id") district_id = db.Column(db.String(50), name="district_id") ward_id = db.Column(db.String(50), name="ward_id") address = db.Column(db.String(1500)) gender = db.Column(db.Boolean) image = db.Column(db.String(1500)) basic_rate = db.Column(db.Float) note = db.Column(db.String(1500)) delete_at = db.Column(db.DateTime, default=None) orders = db.relationship('Orders', backref='employee', lazy=True) borrow_tickets = db.relationship('Borrowtickets', backref='employee', lazy=True) def serialize(self): return { "employee_id": self.employee_id, "note": self.note, "account": self.account.serialize() if self.account != None else None, "last_name": self.last_name, "first_name": self.first_name, "phone": self.phone, "birth_day": self.birth_date, "provinceId": self.province_id, "districtId": self.district_id, "wardId": self.ward_id, "address": self.address, "gender": self.gender, "image": self.image, "basic_rate": self.basic_rate, "delete_at": self.delete_at, "email": self.email, "hire_date": self.hire_date } def __repr__(self): return f"Employee('{self.employee_id}','','{self.note}','{self.account.serialize()}','{self.first_name}'" \ f",'{self.last_name}','{self.phone}','{self.birth_date}','{self.address}','{self.gender}','{self.image}'" \ f",'{self.basic_rate}', '{self.delete_at}', '{self.hire_date}', '{self.email}')"
class Orders(db.Model): order_id = db.Column(db.Integer, unique=True, autoincrement=True, primary_key=True, nullable=False) customer_id = db.Column(db.Integer, db.ForeignKey('customers.customer_id')) employee_id = db.Column(db.Integer, db.ForeignKey('employees.employee_id')) order_date = db.Column(db.DateTime) total = db.Column(db.Float) type = db.Column(db.String(50)) note = db.Column(db.String(1500)) delete_at = db.Column(db.DateTime, default=None) orderdetails = db.relationship('Orderdetails', backref="order", lazy=True) def serialize(self): return { "order_id": self.order_id, "customer": self.customer.serialize(), "note": self.note, "employee": self.employee.serialize(), "order_date": self.order_date, "total": self.order_date, "type": self.type, "delete_at": self.delete_at } def __repr__(self): return f"Order('{self.order_id}', '{self.customer.serialize()}', '{self.employee.serialize()}','{self.note}', '{self.order_date}', '{self.total}', " \ f"'{self.type}', '{self.delete_at}')"
class User(db.Model, UserMixin): __tablename__ = 'users' id = db.Column(db.Integer, primary_key=True, autoincrement=True) password_hash = db.Column(db.String(512), nullable=False) first_name = db.Column(db.String(64), nullable=False) last_name = db.Column(db.String(64), nullable=False) email = db.Column(db.String(100), unique=True, index=True) is_admin = db.Column(db.Boolean) books = db.relationship('Book', secondary='orders', backref=db.backref('users', lazy='select'), lazy='select') def __repr__(self): return f"<User {self.last_name} {self.first_name}>" def __str__(self): return f"{self.last_name} {self.first_name} " def set_password(self, password): self.password_hash = bcrypt.generate_password_hash(password).decode( 'utf8') def is_password_ok(self, password): return bcrypt.check_password_hash(self.password_hash, password)
class Suppliers(db.Model): supplier_id = db.Column(db.Integer, unique=True, autoincrement=True, primary_key=True, nullable=False) contact_name = db.Column(db.String(50), nullable=False) address = db.Column(db.String(1500)) phone = db.Column(db.String(50)) email = db.Column(db.String(50), nullable=False) note = db.Column(db.String(1500)) delete_at = db.Column(db.DateTime, default=None) books = db.relationship('Books', backref='supplier', lazy=True) def serialize(self): return { "supplier_id": self.supplier_id, "contact_name": self.contact_name, "note": self.note, "address": self.address, "phone": self.phone, "email": self.email, "delete_at": self.delete_at } def __repr__(self): return f"Supplier('{self.supplier_id}','{self.contact_name}','{self.note}','{self.address}','{self.phone}'," \ f"'{self.email}', '{self.delete_at}')"
class Conversations(db.Model): conversation_id = db.Column(db.Integer, autoincrement=True, primary_key=True, nullable=False, unique=True) customer_account_id = db.Column(db.Integer, db.ForeignKey('accounts.account_id'), primary_key=True, nullable=False, unique=True) messages = db.relationship('Messages', backref='conversation', lazy=True) created_at = db.Column( db.DateTime) #Ngay khi tạo tài khoản customer thành công updated_at = db.Column(db.DateTime) #Ngay khi tin nhắn gần nhất được gửi last_message = db.Column(db.String(2000)) is_read = db.Column(db.Boolean) def serialize(self): return { 'conversation_id': self.conversation_id, 'customer_account_id': self.customer_account_id, 'created_at': self.created_at, 'updated_at': self.updated_at, 'last_message': self.last_message, 'account': self.account.serialize() if self.account != None else None, 'is_read': self.is_read }
class Customers(db.Model): customer_id = db.Column(db.Integer, autoincrement=True, primary_key=True, nullable=False, unique=True) identity_id = db.Column(db.String(50), nullable=False, unique=True) account_id = db.Column(db.Integer, db.ForeignKey('accounts.account_id'), unique=True) student_code = db.Column(db.String(50)) last_name = db.Column(db.String(50)) first_name = db.Column(db.String(50)) email = db.Column(db.String(50), unique=True) phone = db.Column(db.String(50)) birth_date = db.Column(db.DateTime) address = db.Column(db.String(1500)) gender = db.Column(db.Boolean) note = db.Column(db.String(1500)) delete_at = db.Column(db.DateTime, default=None) borrow_tickets = db.relationship('Borrowtickets', backref='customer', lazy=True) orders = db.relationship('Orders', backref='customer', lazy=True) def serialize(self): return { "customer_id": self.customer_id, "identity_id": self.identity_id, "note": self.note, "account": self.account.serialize(), "student_code": self.student_code, "last_name": self.last_name, "first_name": self.first_name, "email": self.email, "phone": self.phone, "birth_day": self.birth_date, "address": self.address, "gender": self.gender, "delete_at": self.delete_at } def __repr__(self): return f"Customer('{self.customer_id}','{self.identity_id}','{self.note}','{self.account.serialize()}'," \ f"'{self.student_code}','{self.first_name}','{self.last_name}','{self.email}','{self.birth_date}','{self.address}'," \ f"'{self.gender}','{self.phone}', '{self.delete_at}')"
class Member(db.Model): id = db.Column(db.Integer(), primary_key=True) name = db.Column(db.String(length=30), nullable=False, unique=True) rent = db.Column(db.Integer(), nullable=True, default=0) books = db.relationship('Books', backref='owned_book', lazy=True) def __init__(self, name, rent): self.name = name self.rent = rent
class Member(db.Model): id = db.Column(db.String(20), primary_key=True) name = db.Column(db.String(20), nullable=False) address = db.Column(db.String(120), nullable=False) balance = db.Column(db.Integer, nullable=True, default=0) books = db.relationship('Book', secondary=books, lazy='subquery', backref=db.backref('members', lazy=True))
class Borrowtickets(db.Model): borrow_ticket_id = db.Column(db.Integer, autoincrement=True, primary_key=True, nullable=False, unique=True) customer_id = db.Column(db.Integer, db.ForeignKey('customers.customer_id')) employee_id = db.Column(db.Integer, db.ForeignKey('employees.employee_id')) quantity = db.Column(db.Integer) borrow_date = db.Column(db.DateTime) appointment_date = db.Column(db.DateTime) return_date = db.Column(db.DateTime) status = db.Column(db.String(20)) delete_at = db.Column(db.DateTime, default=None) note = db.Column(db.String(1500)) borrow_ticket_detail = db.relationship('Borrowticketdetails', backref='borrowticket', lazy=True) def serialize(self): return { "borrow_ticket_id": self.borrow_ticket_id, "customer": self.customer.serialize() if self.customer != None else None, "note": self.note, "employee": self.employee.serialize() if self.employee != None else None, "quantity": self.quantity, "borrow_date": self.borrow_date, "appointment_date": self.appointment_date, "return_date": self.return_date, "status": self.status, "delete_at": self.delete_at, "borrow_ticket_details": ConvertModelListToDictList(self.borrow_ticket_detail) } def __repr__(self): return f"Borrowticket('{self.borrow_ticket_id}','{self.customer.serialize()}','{self.note}','{self.employee.serialize()}'," \ f"'{self.quantity}','{self.borrow_date}','{self.appointment_date}','{self.return_date}','{self.status}', '{self.delete_at}')"
class Authors(db.Model): author_id = db.Column(db.Integer, unique=True, primary_key=True, nullable=False, autoincrement=True) author_name = db.Column(db.String(50)) books = db.relationship('Books', backref='author', lazy=True) delete_at = db.Column(db.DateTime, default=None) def serialize(self): return {"author_id": self.author_id, "author_name": self.author_name} def __repr__(self): return f"Author('{self.author_id}','{self.author_name}')"
class Author(db.Model): __tablename__ = 'authors' id = db.Column(db.Integer, primary_key=True, autoincrement=True) first_name = db.Column(db.String(64), nullable=False) middle_name = db.Column(db.String(64)) last_name = db.Column(db.String(64), nullable=False) books = db.relationship('Book', backref='author', cascade='all, delete-orphan', lazy='select') def __repr__(self): return f"<Author {self.last_name} {self.first_name[0]}. {self.middle_name[0]}.>" def __str__(self): return f"{self.last_name} {self.first_name[0]}. {self.middle_name[0]}."
class Author(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String()) books = db.relationship( "Book", secondary=books_authors, lazy="subquery", backref=db.backref("authors", lazy=True), ) def to_json(self, entities=False): if not entities: return {"name": self.name, "id": self.id} else: return { "name": self.name, "id": self.id, "books": [book.title for book in self.books], }
class Roles(db.Model): role_id = db.Column(db.Integer, primary_key=True, nullable=False, autoincrement=True, unique=True) role_name = db.Column(db.String(50)) note = db.Column(db.String(1500)) delete_at = db.Column(db.DateTime, default=None) accounts = db.relationship('Accounts', backref="role", lazy=True) def serialize(self): return { "role_id": self.role_id, "role_name": self.role_name, "note": self.note, "delete_at": self.delete_at } def __repr__(self): return f"Role('{self.role_id}','{self.role_name}','{self.note}', '{self.delete_at}')"
class Orders(db.Model): order_id = db.Column(db.Integer, unique=True, autoincrement=True, primary_key=True, nullable=False) customer_id = db.Column(db.Integer, db.ForeignKey('customers.customer_id')) employee_id = db.Column(db.Integer, db.ForeignKey('employees.employee_id')) order_date = db.Column(db.DateTime) total = db.Column(db.Float) type = db.Column(db.Enum("online", "offline"), name="type", default="offline") note = db.Column(db.String(1500)) delete_at = db.Column(db.DateTime, default=None) create_at = db.Column(db.DateTime, default=datetime.now()) order_details = db.relationship('Orderdetails', backref="order", lazy=False) def serialize(self): return { "order_id": self.order_id, "customer": self.customer.serialize() if self.customer != None else None, "note": self.note, "employee": self.employee.serialize() if self.employee != None else None, "create_at": self.create_at, "order_date": self.order_date, "total": self.total, "order_details": ConvertModelListToDictList(self.order_details), "type": self.type, "delete_at": self.delete_at } def __repr__(self): return f"Order('{self.order_id}', '{self.customer.serialize()}', '{self.employee.serialize()}','{self.note}', '{self.order_date}', '{self.total}', " \ f"'{self.type}', '{self.delete_at}')"
class Stocktaketickets(db.Model): stocktake_ticket_id = db.Column(db.Integer, autoincrement=True, primary_key=True, nullable=False) employee_id = db.Column(db.Integer, db.ForeignKey('employees.employee_id')) total_quantity = db.Column(db.Integer) date = db.Column(db.DateTime) delete_at = db.Column(db.DateTime, default=None) stocktaketicketdetails = db.relationship('Stocktaketicketdetails', backref="stocktaketicket", lazy=True) def serialize(self): return { "stocktake_ticket_id": self.stocktake_ticket_id, "employee": self.employee.serialize(), "total_quantity": self.total_quantity, "date": self.date } def __repr__(self): return f"Stocktaketicket('{self.stocktake_ticket_id}','{self.employee.serialize()}','{self.total_quantity}','{self.date}', '{self.delete_at}')"