Spaces:
Sleeping
Sleeping
File size: 1,722 Bytes
2fc3d0f dd5b6b1 2fc3d0f dd5b6b1 2fc3d0f | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | """
User Asset Assignment Model
"""
from sqlalchemy import Column, String, Boolean, DECIMAL, Text
from sqlalchemy.dialects.postgresql import UUID
from datetime import datetime
from app.core.database import Base
import uuid
class UserAssetAssignment(Base):
"""
User Asset Assignment model - Long-term equipment assigned to users
"""
__tablename__ = "user_asset_assignments"
id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
user_id = Column(UUID(as_uuid=True), nullable=False)
# Asset descriptors
asset_type = Column(Text, nullable=False) # 'PPE', 'Laptop', 'Phone', 'Vehicle', 'Tools'
asset_name = Column(Text, nullable=False)
asset_description = Column(Text)
serial_number = Column(Text)
registration_number = Column(Text)
# Valuation
asset_value = Column(DECIMAL(12, 2))
currency = Column(Text, default='KES')
# Lifecycle
assigned_at = Column(String(50), default=lambda: datetime.utcnow().isoformat())
assigned_by_user_id = Column(UUID(as_uuid=True), nullable=True)
expected_return_at = Column(String(50), nullable=True)
returned_at = Column(String(50), nullable=True)
condition_on_assign = Column(Text)
condition_on_return = Column(Text)
# Status
is_active = Column(Boolean, default=True)
notes = Column(Text)
# Timestamps
created_at = Column(String(50), default=lambda: datetime.utcnow().isoformat())
updated_at = Column(String(50), default=lambda: datetime.utcnow().isoformat())
deleted_at = Column(String(50), nullable=True)
def __repr__(self):
return f"<UserAssetAssignment(user_id='{self.user_id}', asset='{self.asset_name}')>"
|