from sqlalchemy import Column, Integer, String, Text, Float, DateTime, ForeignKey from sqlalchemy.sql import func from database import Base class OnlineOrder(Base): __tablename__ = "online_orders" id = Column(Integer, primary_key=True, index=True) site_id = Column(Integer, ForeignKey("sites.id"), nullable=False, index=True) # Human-readable reference, unique per site (e.g. "ORD-0042") public_ref = Column(String, unique=True, nullable=False) order_type = Column(String, nullable=False) # "delivery" | "dine_in" # Customer info customer_name = Column(String, nullable=False) customer_phone = Column(String, nullable=True) customer_address = Column(Text, nullable=True) # required for delivery customer_notes = Column(Text, nullable=True) # Order content — JSON array of ordered items items_json = Column(Text, nullable=False) # Financials subtotal = Column(Float, nullable=False) delivery_fee = Column(Float, default=0.0, nullable=False) total = Column(Float, nullable=False) # Status lifecycle: # pending_acceptance → accepted | rejected # accepted → preparing → ready | out_for_delivery → delivered status = Column(String, default="pending_acceptance", nullable=False, index=True) rejection_reason = Column(String, nullable=True) # Sync state — local backend polls for these synced_to_local = Column(Integer, default=0, nullable=False) # 0=no, 1=yes local_order_id = Column(Integer, nullable=True) # set after local creates it created_at = Column(DateTime(timezone=True), server_default=func.now()) updated_at = Column(DateTime(timezone=True), server_default=func.now(), onupdate=func.now())