29 lines
1.3 KiB
Python
29 lines
1.3 KiB
Python
from sqlalchemy import Column, String, Integer, Numeric, DateTime, ForeignKey
|
|
from sqlalchemy.sql import func
|
|
from sqlalchemy.orm import relationship
|
|
from app.core.database.db_session import Base
|
|
|
|
class PurchaseOrder(Base):
|
|
__tablename__ = "purchase_orders"
|
|
|
|
purchase_order_id = Column(String(26), primary_key=True)
|
|
po_number = Column(String(50), unique=True, nullable=False)
|
|
supplier_name = Column(String(255), nullable=False)
|
|
status = Column(String(20), default="Draft") # Draft, Ordered, Received, Cancelled
|
|
total_amount = Column(Numeric(10, 2), default=0.00)
|
|
created_at = Column(DateTime, server_default=func.now())
|
|
|
|
items = relationship("PurchaseOrderItem", back_populates="purchase_order", cascade="all, delete-orphan")
|
|
|
|
class PurchaseOrderItem(Base):
|
|
__tablename__ = "purchase_order_items"
|
|
|
|
id = Column(String(26), primary_key=True)
|
|
purchase_order_id = Column(String(26), ForeignKey("purchase_orders.purchase_order_id", ondelete="CASCADE"), nullable=False)
|
|
part_id = Column(String(26), ForeignKey("parts.part_id", ondelete="RESTRICT"), nullable=False)
|
|
quantity_ordered = Column(Integer, nullable=False)
|
|
quantity_received = Column(Integer, default=0)
|
|
unit_price = Column(Numeric(10, 2), nullable=False)
|
|
|
|
purchase_order = relationship("PurchaseOrder", back_populates="items")
|
|
part = relationship("Part")
|