from datetime import datetime, timezone from sqlalchemy import event from .. import db class Quotation(db.Model): __tablename__ = 'mold_quotations' id = db.Column(db.Integer, primary_key=True) user_id = db.Column(db.Integer, db.ForeignKey('enterprise_users.id'), nullable=False) # Factory Information mold_shop_name = db.Column(db.String(100), nullable=False) mold_shop_country = db.Column(db.String(50), nullable=False) t1_shoe_factory_name = db.Column(db.String(100), nullable=False) t1_shoe_factory_country = db.Column(db.String(50), nullable=False) t2_component_factory_name = db.Column(db.String(100), nullable=False) t2_component_factory_country = db.Column(db.String(50), nullable=False) # Mold Information model_name = db.Column(db.String(100), nullable=False) tooling_id = db.Column(db.String(5), nullable=False) season = db.Column(db.String(10), nullable=False) stage = db.Column(db.String(10), nullable=False) type = db.Column(db.String(20), nullable=False) # Dates and Approvals issue_date = db.Column(db.Date, nullable=False) approved_by_mold_shop = db.Column(db.String(100), nullable=False) approved_by_t1_tooling = db.Column(db.String(100), nullable=False) approved_by_lo_tooling = db.Column(db.String(100), nullable=False) # Mold Specifications mold_main_type = db.Column(db.String(50), nullable=False) mold_sub_type = db.Column(db.String(50), nullable=False) mold_specific_type = db.Column(db.String(50), nullable=False) complexity_high_sidewall = db.Column(db.Boolean, default=False) sliders_count = db.Column(db.Integer, nullable=False) cavity_count = db.Column(db.Float, nullable=False) digital_texture_type = db.Column(db.String(50), nullable=False) # Calculation Results base_price = db.Column(db.Float, nullable=False) tax_rate = db.Column(db.Float) total_cost = db.Column(db.Float, nullable=False) # Metadata created_at = db.Column(db.DateTime, default=datetime.utcnow) updated_at = db.Column(db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) is_archived = db.Column(db.Boolean, default=False) __table_args__ = ( db.Index('ix_quotation_user_id', user_id), db.Index('ix_quotation_created_at', created_at), db.Index('ix_quotation_issue_date', issue_date), ) def __repr__(self): return f'' # Event listeners for model changes @event.listens_for(Quotation, 'before_insert') def set_quotation_timestamps(mapper, connection, target): target.created_at = datetime.now(timezone.utc)