diff --git a/api/models/product.py b/api/models/product.py index ea59c4c..9a6e2a5 100644 --- a/api/models/product.py +++ b/api/models/product.py @@ -1,5 +1,6 @@ # coding=UTF-8 +from flask_sqlalchemy import BaseQuery from api import db @@ -9,3 +10,54 @@ class Currencies(db.Model): iso3char = db.Column(db.String(3), primary_key=True) exchange_rate = db.Column(db.Numeric, default=1) + + +class MaterialQuery(BaseQuery): + + def wallpapers(self): + return self.filter(Material.name.in_(Material.WALLPAPER_MATERIALS)) + + def canvas(self): + return self.filter(Material.name.in_(Material.CANVAS_MATERIALS)) + + +class Material(db.Model): + + __tablename__ = 'product-materials' + + query_class = MaterialQuery + + WALLPAPER_MATERIALS = ['standard-wallpaper', 'self-adhesive-wallpaper', 'premium-wallpaper'] + CANVAS_MATERIALS = ['standard-canvas'] + + id = db.Column('materialid', db.Integer, primary_key=True) + name = db.Column('material', db.String(255), nullable=False) + material_price = db.relationship('MaterialPrice', uselist=False) + + @property + def price(self): + if self.material_price is not None: + return self.material_price.price + return None + + def to_json(self): + return { + 'id': self.id, + 'name': self.name, + 'price': float(self.price) + } + + def __repr__(self): + return self.name + + +class MaterialPrice(db.Model): + + __tablename__ = 'v_materialprice'; + + + groupid = db.Column(db.Integer) + materialid = db.Column(db.Integer, db.ForeignKey('product-materials.materialid')) + price = db.Column(db.Numeric) + + __table_args__ = (db.PrimaryKeyConstraint(groupid, materialid),)