from sqlalchemy import Column, String, Float, Integer, Text, Boolean, ForeignKey, DateTime from sqlalchemy.orm import relationship from app.models.base import BaseModel class Supplier(BaseModel): """Supplier model""" __tablename__ = "suppliers" name = Column(String(255), nullable=False, index=True) contact_name = Column(String(100), nullable=True) email = Column(String(255), nullable=True) phone = Column(String(20), nullable=True) address = Column(Text, nullable=True) notes = Column(Text, nullable=True) is_active = Column(Boolean, default=True) # Relationships purchases = relationship("Purchase", back_populates="supplier") class Purchase(BaseModel): """Purchase model for orders from suppliers""" __tablename__ = "purchases" supplier_id = Column(Integer, ForeignKey("suppliers.id"), nullable=False) reference_number = Column(String(100), nullable=True, unique=True) order_date = Column(DateTime, nullable=True) delivery_date = Column(DateTime, nullable=True) total_amount = Column(Float, nullable=False, default=0) notes = Column(Text, nullable=True) # Relationships supplier = relationship("Supplier", back_populates="purchases") purchase_items = relationship("PurchaseItem", back_populates="purchase") class PurchaseItem(BaseModel): """Purchase item model for items in a purchase""" __tablename__ = "purchase_items" purchase_id = Column(Integer, ForeignKey("purchases.id"), nullable=False) product_id = Column(Integer, ForeignKey("products.id"), nullable=False) quantity = Column(Float, nullable=False) unit_price = Column(Float, nullable=False) total_price = Column(Float, nullable=False) # Relationships purchase = relationship("Purchase", back_populates="purchase_items") product = relationship("Product", back_populates="purchase_items")