39 lines
1.8 KiB
Python
39 lines
1.8 KiB
Python
from sqlalchemy import Column, String, Boolean, Integer, Numeric, ForeignKey
|
|
from sqlalchemy.orm import relationship
|
|
from app.core.database.db_session import Base
|
|
|
|
class Part(Base):
|
|
__tablename__ = "parts"
|
|
|
|
part_id = Column(String(26), primary_key=True)
|
|
sku = Column(String(100), unique=True, nullable=False)
|
|
name = Column(String(255), nullable=False)
|
|
cost_price = Column(Numeric(10, 2), nullable=False)
|
|
low_stock_alert = Column(Integer, default=3)
|
|
supplier = Column(String(255), nullable=True)
|
|
barcode = Column(String(100), unique=True, nullable=True)
|
|
is_active = Column(Boolean, default=True)
|
|
|
|
compatibilities = relationship("PartDeviceCompatibility", back_populates="part", cascade="all, delete-orphan")
|
|
bom_variants = relationship("RepairVariantPart", back_populates="part", cascade="all, delete-orphan")
|
|
|
|
class PartDeviceCompatibility(Base):
|
|
__tablename__ = "part_device_compatibility"
|
|
|
|
id = Column(String(26), primary_key=True)
|
|
part_id = Column(String(26), ForeignKey("parts.part_id", ondelete="CASCADE"), nullable=False)
|
|
model_id = Column(String(26), nullable=False)
|
|
|
|
part = relationship("Part", back_populates="compatibilities")
|
|
model = relationship("DeviceModel", primaryjoin="DeviceModel.model_id == PartDeviceCompatibility.model_id", foreign_keys=[model_id])
|
|
|
|
class RepairVariantPart(Base):
|
|
__tablename__ = "repair_variant_parts"
|
|
|
|
id = Column(String(26), primary_key=True)
|
|
variant_id = Column(String(26), ForeignKey("repair_variants.variant_id", ondelete="CASCADE"), nullable=False)
|
|
part_id = Column(String(26), ForeignKey("parts.part_id", ondelete="RESTRICT"), nullable=False)
|
|
quantity = Column(Integer, default=1, nullable=False)
|
|
|
|
variant = relationship("RepairVariant", back_populates="bom_parts")
|
|
part = relationship("Part", back_populates="bom_variants")
|