Files
enterprise_digital-platform/IT_asset_management/app/models/maintenance.py
T
ske087 55a088eff4 IT Assets: add Maintenance page with modal form
New database table: maintenance_records
- Fields: asset, start_date, end_date, status (open/in_progress/closed),
  initial_diagnosis, action_taken, action_result

New routes (/maintenance/):
- List with status + asset filters and pagination
- POST /new — create record (editor+); auto-sets asset status to 'maintenance'
- GET /<id>/edit — opens list page with modal pre-filled
- POST /<id>/update — save edits; auto-clears 'maintenance' status on close
- POST /<id>/delete — remove record

UI:
- Bootstrap modal form shared for add and edit
- Clicking any table row opens the modal pre-filled with that row's data
- Asset field locked in edit mode (cannot change asset)
- Delete button per row (with confirmation)
- Sidebar: 'Maintenance' link added under Hardware section
2026-07-08 22:56:21 +03:00

42 lines
1.4 KiB
Python

from datetime import datetime
from app.extensions import db
MAINTENANCE_STATUSES = [
('open', 'Open / Diagnosed'),
('in_progress', 'In Progress'),
('closed', 'Closed'),
]
class MaintenanceRecord(db.Model):
"""A maintenance or service event performed on a single asset."""
__tablename__ = 'maintenance_records'
id = db.Column(db.Integer, primary_key=True)
asset_id = db.Column(db.Integer, db.ForeignKey('assets.id'), nullable=False)
start_date = db.Column(db.Date, nullable=False)
end_date = db.Column(db.Date, nullable=True)
status = db.Column(db.String(20), nullable=False, default='open')
initial_diagnosis = db.Column(db.Text, nullable=True)
action_taken = db.Column(db.Text, nullable=True)
action_result = db.Column(db.Text, nullable=True)
created_by_id = db.Column(db.Integer, db.ForeignKey('admin_users.id'), nullable=True)
created_at = db.Column(db.DateTime, default=datetime.utcnow)
updated_at = db.Column(db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
# Relationships
asset = db.relationship('Asset', backref=db.backref('maintenance_records', lazy='dynamic'))
created_by = db.relationship('AdminUser', foreign_keys=[created_by_id])
@property
def is_open(self):
return self.status != 'closed'
def __repr__(self):
return f'<MaintenanceRecord asset={self.asset_id} status={self.status}>'