示例#1
0
class HoneymoonFund(CustomModelMixin, Model):
    __tablename__ = 'honeymoon_funds'

    registry_id = reference_col("registries", nullable=False)
    message = Column(db.Text, nullable=True)
    target_amount = Column(db.Float, nullable=True)
    has_achieved_target = Column(db.Boolean, default=False)
    date_target_achieved = Column(db.DateTime, nullable=True)
    has_been_paid = Column(db.Boolean, default=False)
    date_paid_status_updated = Column(db.DateTime, nullable=True)
    admin_updated_id = reference_col("user", nullable=True)

    admin_updated_by = relationship("User")
    registry = relationship("Registry",
                            backref=backref('fund', uselist=False),
                            uselist=False)

    def __str__(self):
        return self.registry.name

    @staticmethod
    def format_price(price):
        return "NGN{:,.2f}".format(price)

    @property
    def amount_donated(self):
        return 99800
示例#2
0
class Product(CustomModelMixin, Model):
    __tablename__ = 'products'

    name = Column(db.String(100), nullable=False)
    slug = Column(db.String(100), nullable=False, unique=True)
    category_id = reference_col("categories", nullable=False)
    description = Column(db.Text, nullable=False)
    sku = Column(db.String(50), nullable=True)
    price = Column(db.Float, nullable=False)
    is_available = Column(db.Boolean, default=True)
    created_by_id = reference_col("user", nullable=True)
    date_created = Column(db.DateTime,
                          nullable=False,
                          default=dt.datetime.utcnow)

    created_by = relationship("User")
    category = relationship("Category")
    products_in_registry = relationship("Registry",
                                        secondary="registry_products")

    def __repr__(self):
        """Represent instance as a string."""
        return self.name

    @property
    def display_price(self):
        return "NGN{:,.2f}".format(self.price)

    def total_price(self, quantity):
        return self.price * quantity

    def display_total_price(self, quantity):
        return "NGN{:,.2f}".format(self.total_price(quantity))

    @property
    def main_image(self):
        if self.images:
            for i in self.images:
                if i.is_main_image:
                    return i
            return self.images[0]
        return

    @property
    def available_text(self):
        if self.is_available:
            return "In stock"
        return "Out of stock"

    @property
    def to_json(self):
        return {
            'name': self.name,
            'slug': self.slug,
            'description': self.description,
            'image': self.main_image.get_url
        }
示例#3
0
class Donation(CustomModelMixin, Model):
    __tablename__ = 'donations'

    transaction_id = reference_col("transactions", nullable=False)
    registry_id = reference_col("wedding_registries", nullable=False)
    amount = Column(db.Float, nullable=False)
    date_created = Column(db.DateTime, nullable=False, default=dt.datetime.utcnow)

    registry = relationship("WeddingRegistry", backref=backref("donations", uselist=True))
    transaction = relationship("Transaction", backref=backref("donations", uselist=True))
示例#4
0
class OrderItem(CustomModelMixin, Model):
    __tablename__ = 'order_items'

    order_id = reference_col("orders", nullable=False)
    reg_product_id = reference_col("registry_products", nullable=False)
    quantity = Column(db.Integer, default=1)
    unit_price = Column(db.Float, nullable=False)
    total_price = Column(db.Float, nullable=False)

    order = relationship("Order")
    registry_product = relationship("RegistryProducts")
示例#5
0
class Article(CustomModelMixin, Model):
    __tablename__ = 'articles'

    title = Column(db.String(100), nullable=False)
    slug = Column(db.String(100), nullable=False, unique=True)
    summary = Column(db.Text(), nullable=False)
    image = Column(db.Text, nullable=True)
    content = Column(db.Text, nullable=False)
    is_published = Column(db.Boolean, default=True)
    view_count = Column(db.Integer, default=0)
    created_by_id = reference_col("user", nullable=True)
    date_created = Column(db.DateTime,
                          nullable=False,
                          default=dt.datetime.utcnow)
    tags = relationship("Tag", secondary=articles_tags, backref='posts')

    created_by = relationship("User")

    def __repr__(self):
        """Represent instance as a string."""
        return self.title

    def publish(self):
        self.is_published = True
        return self.save()

    def archive(self):
        self.is_published = False
        return self.save()
示例#6
0
class ProductBundleItem(CustomModelMixin, Model):
    __tablename__ = 'product_bundle_items'

    name = Column(db.Text, nullable=False)
    product_id = reference_col("products", nullable=False)

    product = relationship("Product", backref="items")
示例#7
0
class RegistryProducts(CustomModelMixin, Model):
    __tablename__ = 'registry_products'

    registry_id = reference_col("registries", nullable=False)
    product_id = reference_col("products", nullable=False)
    has_been_purchased = Column(db.Boolean, default=False)

    # product = relationship("Product", backref="registry_products", uselist=False)
    registry = relationship("Registry",
                            backref=backref("registry_products",
                                            cascade="all, delete-orphan"))
    product = relationship("Product",
                           backref=backref("registry_products",
                                           cascade="all, delete-orphan"))

    def __str__(self):
        return self.product.name
示例#8
0
class Order(CustomModelMixin, Model):
    __tablename__ = 'orders'

    order_number = Column(db.String(255), unique=True)
    transaction_id = reference_col("transactions", nullable=False)
    registry_id = reference_col("registries", nullable=False)
    status = Column(ChoiceType(STATUS, impl=db.String()))
    date_created = Column(db.DateTime,
                          nullable=False,
                          default=dt.datetime.utcnow)

    registry = relationship("Registry",
                            backref=backref("orders", uselist=True))
    transaction = relationship("Transaction",
                               backref=backref("orders", uselist=True))

    def generate_order_number(self):
        self.order_number = f"ORD{dt.date.today().strftime('%Y%m%d')}00000{self.id}"
示例#9
0
class Category(CustomModelMixin, Model):
    __tablename__ = 'categories'

    name = Column(db.String(100), nullable=False, unique=True)
    slug = Column(db.String(100), nullable=False, unique=True)
    created_by_id = reference_col("user", nullable=True)
    date_created = Column(db.DateTime, nullable=False, default=dt.datetime.utcnow)

    created_by = relationship("User")

    def __repr__(self):
        """Represent instance as a string."""
        return self.name
示例#10
0
class RegistryDeliveryAddress(CustomModelMixin, Model):
    __tablename__ = 'registry_delivery_addresses'

    registry_id = reference_col("registries", nullable=False)
    name = Column(db.String(100), nullable=False)
    phone_number = db.Column(db.String(50), nullable=True)
    address = Column(db.Text, nullable=False)
    city = Column(db.String(50), nullable=False)
    state = Column(db.String(50), nullable=False)

    registry = relationship("Registry",
                            backref=backref("delivery",
                                            uselist=False,
                                            cascade="all, delete-orphan"))
示例#11
0
class Role(PkModel):
    """A role for a user."""

    __tablename__ = "roles"
    name = Column(db.String(80), unique=True, nullable=False)
    user_id = reference_col("users", nullable=True)
    user = relationship("User", backref="roles")

    def __init__(self, name, **kwargs):
        """Create instance."""
        super().__init__(name=name, **kwargs)

    def __repr__(self):
        """Represent instance as a unique string."""
        return f"<Role({self.name})>"
示例#12
0
class ProductImage(CustomModelMixin, Model):
    __tablename__ = 'product_images'

    name = Column(db.Text, nullable=False)
    product_id = reference_col("products", nullable=False)
    is_main_image = Column(db.Boolean, default=False)
    date_created = Column(db.DateTime, nullable=False, default=dt.datetime.utcnow)

    product = relationship("Product", backref="images")

    @property
    def get_url(self):
        return self.name

    def __repr__(self):
        """Represent instance as a string."""
        return self.name
示例#13
0
class Tag(CustomModelMixin, Model):
    __tablename__ = 'tags'

    name = Column(db.String(50), nullable=False, unique=True)
    slug = Column(db.String(50), nullable=False)
    created_by_id = reference_col("user", nullable=True)
    date_created = Column(db.DateTime, nullable=False, default=dt.datetime.utcnow)

    created_by = relationship("User")

    @classmethod
    def get_popular_tags(cls, limit=4):
        return cls.query.limit(limit)

    def __repr__(self):
        """Represent instance as a string."""
        return self.name
示例#14
0
class Transaction(CustomModelMixin, Model):
    __tablename__ = 'transactions'

    txn_no = Column(db.String(255), unique=True)
    first_name = db.Column(db.String(255))
    last_name = db.Column(db.String(255))
    phone_number = db.Column(db.String(50), nullable=True)
    email = db.Column(db.String(255))
    message = Column(db.Text, nullable=True)
    # valid types are order and donation
    type = Column(db.String(255))
    payment_status = Column(ChoiceType(PAYMENT_STATUS, impl=db.String()))
    total_amount = Column(db.Float, nullable=False)
    discounted_amount = Column(db.Float, nullable=True)
    discount_id = reference_col("discounts", nullable=True)
    date_created = Column(db.DateTime,
                          nullable=False,
                          default=dt.datetime.utcnow)
    date_paid = Column(db.DateTime, nullable=True)
    payment_txn_number = Column(db.String(255), nullable=True)

    discount = relationship("Discount")

    def generate_txn_number(self):
        self.txn_no = f"TXN{dt.date.today().strftime('%Y%m%d')}00000{self.id}"

    @property
    def get_amount_paid(self):
        return self.discounted_amount if self.discounted_amount else self.total_amount

    @property
    def full_name(self):
        return f'{self.first_name} {self.last_name}'

    @property
    def get_items(self):
        if self.type == 'order':
            return self.orders
        return self.donations

    def __str__(self):
        return self.txn_no
示例#15
0
class Discount(CustomModelMixin, Model):
    __tablename__ = 'discounts'

    code = Column(db.String(50), nullable=False, unique=True)
    amount = Column(db.Float, nullable=True)
    percentage = Column(db.Float, nullable=True)
    is_active = Column(db.Boolean, default=True)
    created_by_id = reference_col("user", nullable=True)
    date_created = Column(db.DateTime, nullable=False, default=dt.datetime.utcnow)

    created_by = relationship("User")

    def __repr__(self):
        """Represent instance as a string."""
        return self.code

    def get_discount_amount(self, price):
        if self.amount:
            return self.amount
        return (self.percentage/100) * price
示例#16
0
class Registry(CustomModelMixin, Model):
    __tablename__ = 'registries'

    name = Column(db.String(100), nullable=False)
    slug = Column(db.String(100), nullable=False, unique=True)
    hashtag = Column(db.String(50), nullable=True)
    registry_type_id = reference_col("registry_types", nullable=True)
    description = Column(db.Text, nullable=False)
    image = Column(db.Text, nullable=True)
    created_by_id = reference_col("user", nullable=True)
    date_created = Column(db.DateTime,
                          nullable=False,
                          default=dt.datetime.utcnow)
    admin_created_id = reference_col("user", nullable=True)
    is_active = Column(db.Boolean, default=True)

    created_by = relationship("User",
                              backref="registries",
                              primaryjoin="Registry.created_by_id==User.id")
    admin_created_by = relationship(
        "User", primaryjoin="Registry.admin_created_id==User.id")
    products = relationship("Product", secondary="registry_products")
    registry_type = relationship("RegistryType", backref="registries")

    @property
    def url(self):
        return "{}registries/{}".format(request.url_root, self.slug)

    def __str__(self):
        return self.name

    def generate_slug(self):
        slugify = Slugify(to_lower=True)
        self.slug = "{}-{}".format(slugify(self.name),
                                   str(uuid.uuid4()).split('-')[0])

    @property
    def product_ids(self):
        return [x.id for x in self.products]

    @property
    def target_amount(self):
        if self.fund:
            return self.fund.target_amount
        return None

    @property
    def amount_attained(self):
        return None

    @property
    def string_id(self):
        return str(self.id)

    @property
    def to_json(self):
        return {
            'id': self.id,
            'name': self.name,
            'url': self.url,
            'slug': self.slug
        }
示例#17
0
 def created_by_id(cls):
     return reference_col("user", nullable=True)
示例#18
0
 def admin_created_id(cls):
     return reference_col("user", nullable=True)