""" SQLAlchemy models for spa partner orders. Maps to trans.spa_partner_orders and trans.spa_partner_order_items tables. """ from sqlalchemy import Column, String, Numeric, Integer, Text, TIMESTAMP, ForeignKey from sqlalchemy.dialects.postgresql import UUID from sqlalchemy.orm import relationship from sqlalchemy.sql import func from app.core.database import Base import uuid class SpaPartnerOrder(Base): """Spa partner order model""" __tablename__ = "spa_partner_orders" __table_args__ = {"schema": "trans"} order_id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4) order_number = Column(String(50), unique=True, nullable=False) partner_id = Column(String(50), nullable=False) merchant_id = Column(String(50)) order_status = Column(String(30), nullable=False) # draft | placed | approved | packed | dispatched | delivered | cancelled | returned total_amount = Column(Numeric(12, 2), nullable=False) tax_amount = Column(Numeric(12, 2)) discount_amount = Column(Numeric(12, 2)) net_amount = Column(Numeric(12, 2)) payment_status = Column(String(30)) # pending | partial | paid payment_mode = Column(String(30)) # wallet | cash | online | credit delivery_address = Column(Text) city = Column(String(100)) created_at = Column(TIMESTAMP, server_default=func.current_timestamp()) updated_at = Column(TIMESTAMP, server_default=func.current_timestamp(), onupdate=func.current_timestamp()) # Relationship to order items items = relationship("SpaPartnerOrderItem", back_populates="order", cascade="all, delete-orphan") class SpaPartnerOrderItem(Base): """Spa partner order item model""" __tablename__ = "spa_partner_order_items" __table_args__ = {"schema": "trans"} id = Column(Integer, primary_key=True, autoincrement=True) order_id = Column(UUID(as_uuid=True), ForeignKey("trans.spa_partner_orders.order_id"), nullable=False) product_id = Column(String(50), nullable=False) product_name = Column(String(200)) quantity = Column(Integer, nullable=False) unit_price = Column(Numeric(10, 2), nullable=False) tax_percent = Column(Numeric(5, 2)) total_price = Column(Numeric(12, 2)) # Relationship to order order = relationship("SpaPartnerOrder", back_populates="items")