# coding=UTF-8 from datetime import datetime from api.extensions import db from flask_sqlalchemy import BaseQuery class Order(db.Model): __tablename__ = "order-orders" id = db.Column("orderid", db.Integer, primary_key=True) inserted = db.Column(db.DateTime, default=datetime.utcnow, nullable=False) updated = db.Column(db.DateTime) fields = db.relationship("OrderOrderField", backref="order", lazy="dynamic") rows = db.relationship("OrderRow", backref="order", lazy="dynamic") class OrderFieldQuery(BaseQuery): def by_name(self, name): return self.filter(OrderField.name == name).first() class OrderField(db.Model): __tablename__ = "order-fields" query_class = OrderFieldQuery id = db.Column("fieldid", db.Integer, primary_key=True) name = db.Column(db.String) inserted = db.Column(db.DateTime, default=datetime.utcnow, nullable=False) class OrderOrderField(db.Model): __tablename__ = "order-orders_fields" orderid = db.Column( db.Integer, db.ForeignKey("order-orders.orderid"), nullable=False ) fieldid = db.Column( db.Integer, db.ForeignKey("order-fields.fieldid"), nullable=False ) value = db.Column(db.String, nullable=False) inserted = db.Column(db.DateTime, default=datetime.utcnow, nullable=False) updated = db.Column(db.DateTime) field = db.relationship("OrderField", uselist=False) __table_args__ = (db.PrimaryKeyConstraint(orderid, fieldid),) def to_json(self): return { "orderid": self.orderid, "fieldid": self.fieldid, "value": self.value, "inserted": self.inserted, } class OrderRow(db.Model): __tablename__ = "order-rows" id = db.Column("rowid", db.Integer, primary_key=True) orderid = db.Column( db.Integer, db.ForeignKey("order-orders.orderid"), nullable=False ) details = db.relationship("OrderRowDetail", backref="OrderRow", lazy="dynamic") class OrderRowFieldQuery(BaseQuery): def by_name(self, name): return self.filter(OrderRowField.name == name).first() class OrderRowField(db.Model): __tablename__ = "order-row_fields" query_class = OrderRowFieldQuery id = db.Column("fieldid", db.Integer, primary_key=True, nullable=False) name = db.Column(db.String) inserted = db.Column(db.DateTime, default=datetime.utcnow, nullable=False) updated = db.Column(db.DateTime) class OrderRowDetail(db.Model): __tablename__ = "order-rows_details" rowid = db.Column(db.Integer, db.ForeignKey("order-rows.rowid"), nullable=False) fieldid = db.Column( db.Integer, db.ForeignKey("order-row_fields.fieldid"), nullable=False ) value = db.Column(db.String) inserted = db.Column(db.DateTime, default=datetime.utcnow, nullable=False) updated = db.Column(db.DateTime) field = db.relationship("OrderRowField", uselist=False) __table_args__ = (db.PrimaryKeyConstraint(rowid, fieldid),) def to_json(self): return { "rowid": self.rowid, "fieldid": self.fieldid, "value": self.value, "inserted": self.inserted, }