From 06bbfb721474a22ae8d547ad8d9368cdc7354880 Mon Sep 17 00:00:00 2001 From: NguyenND Date: Wed, 27 May 2026 11:25:45 -0400 Subject: [PATCH] 05/27 Update template toggle function --- app/models/inspection.py | 1 + app/routes/inspections.py | 2 +- app/routes/templates.py | 17 ++++++++ app/templates/templates/list.html | 29 ++++++++++++-- .../versions/phase21_template_active.py | 39 +++++++++++++++++++ 5 files changed, 84 insertions(+), 4 deletions(-) create mode 100644 migrations/versions/phase21_template_active.py diff --git a/app/models/inspection.py b/app/models/inspection.py index eff4c36..8987d47 100644 --- a/app/models/inspection.py +++ b/app/models/inspection.py @@ -13,6 +13,7 @@ class InspectionTemplate(db.Model): created_by = db.Column(db.Integer, db.ForeignKey('users.id')) created_at = db.Column(db.DateTime, default=now_eastern) form_schema = db.Column(db.JSON, nullable=True) + active = db.Column(db.Boolean, default=True, nullable=False) checklist_items = db.relationship('ChecklistItem', backref='template', lazy='dynamic', cascade='all, delete-orphan') inspections = db.relationship('Inspection', backref='template', lazy='dynamic') diff --git a/app/routes/inspections.py b/app/routes/inspections.py index 18fbf5e..e6dffea 100644 --- a/app/routes/inspections.py +++ b/app/routes/inspections.py @@ -270,7 +270,7 @@ def index(): def start(): form = StartInspectionForm() - templates = InspectionTemplate.query.order_by(InspectionTemplate.name).all() + templates = InspectionTemplate.query.filter_by(active=True).order_by(InspectionTemplate.name).all() projects = Project.query.filter_by(active=True).order_by(Project.name).all() # Scope projects to inspector's assigned contracts diff --git a/app/routes/templates.py b/app/routes/templates.py index 26eabd6..3bef2d5 100644 --- a/app/routes/templates.py +++ b/app/routes/templates.py @@ -153,6 +153,23 @@ def delete_template(template_id): return redirect(url_for('templates.index')) +@bp.route('//toggle-active', methods=['POST']) +@login_required +@supervisor_required +def toggle_active(template_id): + template = db.session.get(InspectionTemplate, template_id) + if template is None: + abort(404) + template.active = not template.active + db.session.commit() + state = 'activated' if template.active else 'deactivated' + logger.info('TEMPLATES | toggle_active | user=%s | template_id=%s active=%s', + current_user.username, template.id, template.active) + log_action(ACTION_UPDATE, 'Template', template.id, template.name, f'active={template.active}') + flash(f'Template "{template.name}" {state}.', 'success') + return redirect(url_for('templates.index')) + + @bp.route('//duplicate', methods=['POST']) @login_required @supervisor_required diff --git a/app/templates/templates/list.html b/app/templates/templates/list.html index 76453a8..8ae52b9 100644 --- a/app/templates/templates/list.html +++ b/app/templates/templates/list.html @@ -19,12 +19,17 @@
{% for template in templates %}
-
+
-
- +
+ {{ template.name }} + {% if template.active %} + Active + {% else %} + Inactive + {% endif %}

{{ template.description or 'No description' }}

@@ -66,6 +71,24 @@ + +
+ + {% if template.active %} + + {% else %} + + {% endif %} +
+