Пример #1
0
class Grade(db.Model):
    __tablename__ = 'grades'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(100))
    courses = db.relationship('Course',
                              backref='grade',
                              lazy=True,
                              cascade="all, delete, delete-orphan")
    light_courses = db.relationship('LightCourse',
                                    backref='grade',
                                    lazy=True,
                                    cascade="all, delete, delete-orphan")
    students = db.relationship('User',
                               backref='grade',
                               lazy=True,
                               cascade="all, delete, delete-orphan")

    def insert(self):
        db.session.add(self)
        db.session.commit()

    def update(self):
        db.session.commit()

    def delete(self):
        db.session.delete(self)
        db.session.commit()

    def __repr__(self):
        return self.name
Пример #2
0
class Section(db.Model):
    __tablename__ = 'sections'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(100))
    created_date = db.Column(db.DateTime, default=datetime.now())
    course_id = db.Column(db.Integer,
                          db.ForeignKey('courses.id'),
                          nullable=False)
    quizzes = db.relationship('Quiz',
                              backref='section',
                              lazy=True,
                              cascade="all, delete, delete-orphan")
    quiz_histories = db.relationship('QuizHistory',
                                     backref='section',
                                     lazy=True,
                                     cascade="all, delete, delete-orphan")
    sub_sections = db.relationship('SubSection',
                                   backref='section',
                                   lazy=True,
                                   cascade="all, delete, delete-orphan")

    def insert(self):
        db.session.add(self)
        db.session.commit()

    def update(self):
        db.session.commit()

    def delete(self):
        db.session.delete(self)
        db.session.commit()
Пример #3
0
class SubCategory(PkModel):
    __tablename__ = "subcategories"
    name = db.Column(db.String(100), nullable=False)
    category_id = db.Column(db.Integer, db.ForeignKey("categories.id"))
    products = db.relationship("Product", backref="subcategory", lazy=True)
    resources = db.relationship("Resource",
                                backref="resource_subcategory",
                                lazy=True)

    @classmethod
    def category_exists(cls, name):
        return db.session.query(
            exists().where(cls.name == name.lower())).scalar()

    @validates("name")
    def convert_lower(self, key, value):
        return value.lower()

    def get_num_products(self):
        return len(self.products)

    def get_one_image_url(self):

        if len(self.products) > 0:
            product = self.products[0]
            if len(product.resources) == 0:
                if len(self.resources) == 0:
                    return url_for('static',
                                   filename='default/default_subcategory.jpg')
                else:
                    resource = self.resources[0]
                    return url_for('static',
                                   filename='uploads/subcategory/{}'.format(
                                       resource.filename))
            else:
                resource = product.resources[0]
                return url_for('static',
                               filename='uploads/products/{}'.format(
                                   resource.filename))
        else:
            if len(self.resources) == 0:
                return url_for('static',
                               filename='default/default_subcategory.jpg')
            else:
                resource = self.resources[0]
                return url_for('static',
                               filename='uploads/subcategory/{}'.format(
                                   resource.filename))
Пример #4
0
class Quiz(db.Model):
    __tablename__ = 'quizes'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(100))
    question = db.Column(db.String(100))
    section_id = db.Column(db.Integer,
                           db.ForeignKey('sections.id'),
                           nullable=False)
    # https://stackoverflow.com/questions/60805/getting-random-row-through-sqlalchemy
    answers = db.relationship('Answer',
                              backref='quiz',
                              lazy=True,
                              cascade="all, delete, delete-orphan",
                              order_by='func.random()')

    def insert(self):
        db.session.add(self)
        db.session.commit()

    def update(self):
        db.session.commit()

    def delete(self):
        db.session.delete(self)
        db.session.commit()
Пример #5
0
class Course(db.Model):
    __tablename__ = 'courses'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(100))
    created_date = db.Column(db.DateTime, default=datetime.now())
    submitted = db.Column(db.Boolean, default=False)
    teacher_id = db.Column(db.Integer, nullable=False)
    sections = db.relationship('Section',
                               backref='course',
                               lazy=True,
                               cascade="all, delete, delete-orphan")
    grade_id = db.Column(db.Integer,
                         db.ForeignKey('grades.id'),
                         nullable=False)

    def insert(self):
        db.session.add(self)
        db.session.commit()

    def update(self):
        db.session.commit()

    def delete(self):
        db.session.delete(self)
        db.session.commit()
Пример #6
0
class Category(db.Model):
    __tablename__ = "category"
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(100), unique=True)
    products = db.relationship("Product",
                               backref="categories",
                               lazy=True,
                               cascade="all, delete")

    def insert(self):
        """Save category to the database"""
        db.session.add(self)
        db.session.commit()

    def update(self):
        """Update category"""
        db.session.commit()

    def delete(self):
        """delete category"""
        db.session.delete(self)
        db.session.commit()

    @classmethod
    def category_exists(cls, name):
        return db.session.query(exists().where(cls.name == name)).scalar()
Пример #7
0
class LightCourse(db.Model):
    __tablename__ = 'light_courses'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(100))
    created_date = db.Column(db.DateTime, default=datetime.now())
    submitted = db.Column(db.Boolean, default=True)
    teacher_id = db.Column(db.Integer,
                           db.ForeignKey('users.id'),
                           nullable=False)
    grade_id = db.Column(db.Integer,
                         db.ForeignKey('grades.id'),
                         nullable=False)
    chapters = db.relationship('LightChapter',
                               backref='course',
                               lazy=True,
                               cascade="all, delete, delete-orphan")
    quizzes = db.relationship('LightQuiz',
                              backref='course',
                              lazy=True,
                              cascade="all, delete, delete-orphan")
    light_certificate = db.relationship('LightCertificate',
                                        backref='course',
                                        lazy=True,
                                        cascade="all, delete, delete-orphan",
                                        uselist=False)
    light_certificate_requests = db.relationship(
        'LightCertificateRequest',
        backref='course',
        lazy=True,
        cascade="all, delete, delete-orphan")
    light_quiz_histories = db.relationship(
        'LightQuizHistory',
        backref='course',
        lazy=True,
        cascade="all, delete, delete-orphan")

    def insert(self):
        db.session.add(self)
        db.session.commit()

    def update(self):
        db.session.commit()

    def delete(self):
        db.session.delete(self)
        db.session.commit()
Пример #8
0
class User(UserMixin, PkModel):
    """The user of the app"""

    __tablename__ = "users"

    username = db.Column(db.String(100), unique=True)
    _password = db.Column(db.String(128), nullable=False)
    first_name = db.Column(db.String(128))
    last_name = db.Column(db.String(128))
    is_admin = db.Column(db.Boolean, default=False)
    email = db.Column(db.String(120), unique=True, nullable=False)
    date_registered = db.Column(db.DateTime,
                                nullable=False,
                                default=datetime.datetime.now())
    is_email_confirmed = db.Column(db.Boolean(), nullable=False, default=False)
    email_confirm_date = db.Column(db.DateTime)
    is_customer = db.Column(db.Boolean, default=False)

    # A user can have many roles and a role can have many users
    roles = db.relationship(
        "Role",
        secondary=role_user_link,
        backref="users",
    )

    @hybrid_property
    def password(self):
        return self._password

    @password.setter
    def password(self, plaintext):
        self._password = generate_password_hash(plaintext, method="sha256")

    def check_hash(self, password):
        return check_password_hash(self._password, password)

    def generate_confirmation_token(self, email):
        serializer = URLSafeTimedSerializer(app.config["SECRET_KEY"])
        return serializer.dumps(email, salt=app.config["PASSWORD_SALT"])

    @staticmethod
    def confirm_mail_token(self, token, expiration=3600):
        serializer = URLSafeTimedSerializer(app.config["SECRET_KEY"])
        try:
            email = serializer.loads(token,
                                     salt=app.config["PASSWORD_SALT"],
                                     max_age=expiration)
        except:
            return False
        return email

        def __repr__(self):
            return "User: {}".format(self.email)
Пример #9
0
class SubSection(db.Model):
    __tablename__ = 'sub_sections'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(100))
    created_date = db.Column(db.DateTime, default=datetime.now())
    section_id = db.Column(db.Integer,
                           db.ForeignKey('sections.id'),
                           nullable=False)
    resources = db.relationship('Resource',
                                backref='sub_section',
                                lazy=True,
                                cascade="all, delete, delete-orphan")
    homeworks = db.relationship('Homework',
                                backref='sub_section',
                                lazy=True,
                                cascade="all, delete, delete-orphan")
    homework_submissions = db.relationship(
        'HomeworkSubmission',
        backref='sub_section',
        lazy=True,
        cascade="all, delete, delete-orphan")
    homework_evaluations = db.relationship(
        'HomeworkEvaluation',
        backref='sub_section',
        lazy=True,
        cascade="all, delete, delete-orphan")

    def insert(self):
        db.session.add(self)
        db.session.commit()

    def update(self):
        db.session.commit()

    def delete(self):
        db.session.delete(self)
        db.session.commit()
Пример #10
0
class User(UserMixin, db.Model):
    __tablename__ = 'users'
    id = db.Column(db.Integer, primary_key=True)
    email = db.Column(db.String(100))
    password = db.Column(db.String(128))
    name = db.Column(db.String(120))
    role = db.Column(db.String(120))
    pass_changed = db.Column(db.Boolean, default=False)

    courses = db.relationship("Course",
        secondary=course_subs, 
        cascade = "all, delete")# !subs- teacher, students
    light_courses = db.relationship("LightCourse",
        secondary=light_course_subs, 
        cascade = "all, delete")# !subs- teacher, students

    quiz_histories = db.relationship('QuizHistory', backref='person', lazy=True,
        cascade="all, delete, delete-orphan")

    grade_id = db.Column(db.Integer, db.ForeignKey('grades.id'))

    def set_hash(self, password):
        self.password = generate_password_hash(password, method="sha256")

    def check_hash(self, password):
        return check_password_hash(self.password, password)

    def insert(self):
        db.session.add(self)
        db.session.commit()

    def update(self):
        db.session.commit()

    def delete(self):
        db.session.delete(self)
        db.session.commit()
Пример #11
0
class Category(PkModel):
    __tablename__ = "categories"
    name = db.Column(db.String(100), unique=True, nullable=False)
    subcategories = db.relationship("SubCategory",
                                    backref="category",
                                    lazy=True)
    resources = db.relationship(
        "Resource",
        backref="resource_category",
        lazy=True,
    )

    def __repr__(self):
        return f"Category: {self.name}"

    @classmethod
    def category_exists(cls, name):
        return db.session.query(
            exists().where(cls.name == name.lower())).scalar()

    @validates("name")
    def convert_lower(self, key, value):
        return value.lower()

    def get_one_image_url(self):
        if len(self.resources) == 0:
            return url_for('static',
                           filename='default/default_subcategory.jpg')
        else:
            resource = self.resources[0]
            return url_for('static',
                           filename='uploads/products/{}'.format(
                               resource.filename))

    def get_page_url(self):
        return url_for('shop.category', category_name=self.name)
Пример #12
0
class LearningPath(db.Model):
    __tablename__ = 'learning_paths'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(100))
    courses = db.relationship("Course",
                              secondary=learningpath_subs,
                              cascade="all, delete")

    def insert(self):
        db.session.add(self)
        db.session.commit()

    def update(self):
        db.session.commit()

    def delete(self):
        db.session.delete(self)
        db.session.commit()
Пример #13
0
class User(UserMixin, db.Model):
    """ User model """

    __tablename__ = "users"
    id = db.Column(db.String(10), primary_key=True)
    username = db.Column(db.String(100), unique=True)
    password = db.Column(db.String(128))

    admin_user = db.Column(db.Boolean, default=False)
    roles = db.relationship("Role",
                            secondary=role_helpers,
                            cascade="all, delete")

    def __init__(self, **kwargs):
        super(User, self).__init__(**kwargs)
        self.id = str(uuid4())

    def set_hash(self, password):
        self.password = generate_password_hash(password, method="sha256")

    def check_hash(self, password):
        return check_password_hash(self.password, password)

    def insert(self):
        db.session.add(self)
        db.session.commit()

    def update(self):
        db.session.commit()

    def delete(self):
        db.session.delete(self)
        db.session.commit()

    def __repr__(self):
        return f'User({self.username!r})'
Пример #14
0
class Product(PkModel):
    __tablename__ = "product"

    barcode = db.Column(db.String(100))
    price = db.Column(db.Float)
    name = db.Column(db.String(100))
    description = db.Column(db.String(300))
    date = db.Column(db.String(100))
    in_stock = db.Column(db.Integer)
    discontinued = db.Column(db.Boolean)
    selling_price = db.Column(db.Float)

    is_onsale = db.Column(db.Boolean, default=False)
    is_featured = db.Column(db.Boolean, default=False)
    subcategory_name = db.relationship("SubCategory",
                                       backref=db.backref("subcategory",
                                                          uselist=False))
    transactions = db.relationship(
        "Transaction",
        secondary=transaction_helpers,
        backref="products",
        cascade="all, delete",
    )
    resources = db.relationship("Resource",
                                backref="resources",
                                lazy=True,
                                cascade="all, delete")
    colors = db.relationship('Color',
                             backref='color_product',
                             lazy=True,
                             cascade="all, delete, delete-orphan")
    sizes = db.relationship('Size',
                            backref='size_product',
                            lazy=True,
                            cascade="all, delete, delete-orphan")

    #
    subcategory_id = db.Column(db.Integer,
                               db.ForeignKey('subcategories.id'),
                               nullable=False)

    def get_color_string(self):
        return '\n'.join([c.name for c in self.colors])

    def get_size_string(self):
        return '\n'.join([s.name for s in self.sizes])

    def get_one_image_url(self):
        if len(self.resources) == 0:
            return url_for('static', filename='default/default_product.jpg')
        else:
            resource = self.resources[0]
            return url_for('static',
                           filename='uploads/products/{}'.format(
                               resource.filename))

    def get_page_url(self):
        return url_for('shop.product', product_barcode=self.barcode)

    def add(self):
        db.session.add(self)

    def insert(self):
        db.session.add(self)
        db.session.commit()

    def update(self):
        db.session.commit()

    def delete(self):
        db.session.delete(self)
        db.session.commit()
Пример #15
0
class Order(db.Model):
    __tablename__ = "orders"

    id = db.Column(db.Integer, primary_key=True)
    time = db.Column(db.DateTime, default=datetime.now())

    logged_in_customer_email = db.Column(db.String(120), default="")

    coupon = db.relationship("Coupon",
                             backref="coupon_order",
                             lazy=True,
                             uselist=False)

    order_items = db.relationship(
        "OrderItem",
        backref="item_order",
        lazy=True,
        cascade="all, delete, delete-orphan",
    )
    billing_detail = db.relationship(
        "BillingDetail",
        uselist=False,
        backref="billing_detail_order",
        cascade="all, delete, delete-orphan",
    )

    status = db.Column(
        db.String(120),
        default="pending")  # pending, confirmed, shipped, cancelled, refunded

    payment_option_name = db.Column(db.String(120))
    payment_option_text = db.Column(db.String(120))

    shipment_option = db.relationship(
        "DeliveryOption",
        backref="shipment_option_order",
        lazy=True,
        uselist=False,
    )

    payment_option = db.relationship(
        "PaymentOption",
        backref="payment_option_order",
        lazy=True,
        uselist=False,
    )

    def add(self):
        db.session.add(self)

    def insert(self):
        db.session.add(self)
        db.session.commit()

    def update(self):
        db.session.commit()

    def delete(self):
        db.session.delete(self)
        db.session.commit()

    def get_std_formatted_time(self):
        return self.time.strftime("%b %d %Y, %H:%M")

    def get_ref(self):
        return '{}#{}'.format(int(self.id) * 19, self.get_std_formatted_time())

    def get_total_amount(self):
        prices = []
        for item in self.order_items:
            product = item.get_product()
            price = product.selling_price * item.quantity
            prices.append(price)
        total_prices = sum(prices)
        return total_prices