from sqlalchemy import Column, String, Boolean, Integer, DateTime, Text, ForeignKey, Float from sqlalchemy.dialects.postgresql import UUID, JSONB from sqlalchemy.orm import relationship from datetime import datetime from app.database import Base import uuid class Quotation(Base): __tablename__ = "quotations" id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4) user_id = Column(UUID(as_uuid=True), nullable=False, index=True) customer_id = Column(UUID(as_uuid=True), ForeignKey("customers.id"), nullable=False) title = Column(String(255)) status = Column(String(50), default="draft") currency = Column(String(10), default="USD") exchange_rate = Column(Float) payment_terms = Column(String(255)) delivery_terms = Column(String(255)) lead_time = Column(String(100)) valid_until = Column(String(100)) subtotal = Column(Float) discount = Column(Float, default=0) shipping = Column(Float, default=0) total = Column(Float) notes = Column(Text) pdf_url = Column(Text) sent_at = Column(DateTime) created_at = Column(DateTime, default=datetime.utcnow) updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) user = relationship("User", back_populates="quotations") customer = relationship("Customer", back_populates="quotations") items = relationship("QuotationItem", back_populates="quotation", cascade="all, delete-orphan") class QuotationItem(Base): __tablename__ = "quotation_items" id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4) quotation_id = Column(UUID(as_uuid=True), ForeignKey("quotations.id"), nullable=False, index=True) product_name = Column(String(255), nullable=False) description = Column(Text) quantity = Column(Integer, nullable=False) unit_price = Column(Float, nullable=False) total_price = Column(Float) unit = Column(String(50), default="pcs") quotation = relationship("Quotation", back_populates="items")