"""Equipment plugin models.""" from shopdb.extensions import db from shopdb.core.models.base import BaseModel class EquipmentType(BaseModel): """ Equipment type classification. Examples: CNC, CMM, Lathe, Grinder, EDM, Part Marker, etc. """ __tablename__ = 'equipmenttypes' equipmenttypeid = db.Column(db.Integer, primary_key=True) equipmenttype = db.Column(db.String(100), unique=True, nullable=False) description = db.Column(db.Text) icon = db.Column(db.String(50), comment='Icon name for UI') def __repr__(self): return f"" class Equipment(BaseModel): """ Equipment-specific extension data. Links to core Asset table via assetid. Stores equipment-specific fields like type, model, vendor, etc. """ __tablename__ = 'equipment' equipmentid = db.Column(db.Integer, primary_key=True) # Link to core asset assetid = db.Column( db.Integer, db.ForeignKey('assets.assetid', ondelete='CASCADE'), unique=True, nullable=False, index=True ) # Equipment classification equipmenttypeid = db.Column( db.Integer, db.ForeignKey('equipmenttypes.equipmenttypeid'), nullable=True ) # Vendor and model vendorid = db.Column( db.Integer, db.ForeignKey('vendors.vendorid'), nullable=True ) modelnumberid = db.Column( db.Integer, db.ForeignKey('models.modelnumberid'), nullable=True ) # Equipment-specific fields requiresmanualconfig = db.Column( db.Boolean, default=False, comment='Multi-PC machine needs manual configuration' ) islocationonly = db.Column( db.Boolean, default=False, comment='Virtual location marker (not actual equipment)' ) # Maintenance tracking lastmaintenancedate = db.Column(db.DateTime, nullable=True) nextmaintenancedate = db.Column(db.DateTime, nullable=True) maintenanceintervaldays = db.Column(db.Integer, nullable=True) # Relationships asset = db.relationship( 'Asset', backref=db.backref('equipment', uselist=False, lazy='joined') ) equipmenttype = db.relationship('EquipmentType', backref='equipment') vendor = db.relationship('Vendor', backref='equipment_items') model = db.relationship('Model', backref='equipment_items') __table_args__ = ( db.Index('idx_equipment_type', 'equipmenttypeid'), db.Index('idx_equipment_vendor', 'vendorid'), ) def __repr__(self): return f"" def to_dict(self): """Convert to dictionary with related names.""" result = super().to_dict() # Add related object names if self.equipmenttype: result['equipmenttype_name'] = self.equipmenttype.equipmenttype if self.vendor: result['vendor_name'] = self.vendor.vendor if self.model: result['model_name'] = self.model.modelnumber return result