Spaces:
Running
Running
| """ | |
| 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") | |