from formity.extensions import db from datetime import datetime import enum class Status(enum.Enum): new = 1 confirmed = 2 allocated = 3 fulfilled = 4 rejected = 5 class PostalCode(db.Model): postalcode = db.Column(db.String, primary_key=True) address = db.Column(db.String, nullable=False) city = db.Column(db.String, nullable=False) voivodeship = db.Column(db.String, nullable=False) county = db.Column(db.String, nullable=False) class FaceshieldRequest(db.Model): id = db.Column(db.Integer, primary_key=True) entity_info = db.Column(db.String) full_name = db.Column(db.String) phone_number = db.Column(db.String) email = db.Column(db.String) extra = db.Column(db.String) faceshield_front_required = db.Column(db.Integer, default=0, server_default='0') faceshield_model = db.Column(db.String) faceshield_full_required = db.Column(db.Integer, default=0, server_default='0') created = db.Column(db.DateTime, default=datetime.utcnow, nullable=False) updated = db.Column(db.DateTime, default=datetime.utcnow, nullable=False, onupdate=datetime.utcnow) ua = db.Column(db.String) ip = db.Column(db.String) status = db.Column(db.Enum(Status), default=Status.new, server_default='new', nullable=False) remarks = db.Column(db.String) faceshield_front_delivered = db.Column(db.Integer, default=0, server_default='0') faceshield_full_delivered = db.Column(db.Integer, default=0, server_default='0') shipping_name = db.Column(db.String) shipping_street = db.Column(db.String) shipping_postalcode = db.Column(db.String) shipping_city = db.Column(db.String) postalcode_info = db.relationship(PostalCode, primaryjoin='remote(PostalCode.postalcode) == foreign(FaceshieldRequest.shipping_postalcode)') class RequestChange(db.Model): id = db.Column(db.Integer, primary_key=True) request_id = db.Column(db.Integer, db.ForeignKey(FaceshieldRequest.id)) request = db.relationship(FaceshieldRequest, backref='changelog') user_id = db.Column(db.String, nullable=False) state_before = db.Column(db.JSON) state_after = db.Column(db.JSON) remarks = db.Column(db.String) created = db.Column(db.DateTime, default=datetime.utcnow, nullable=False)