05/11 Update: add contract selection when start an inspection

This commit is contained in:
2026-05-11 12:52:58 -04:00
parent 100cfbc988
commit dc9bfb1674
3 changed files with 111 additions and 6 deletions
+38 -4
View File
@@ -10,6 +10,7 @@ from app import db
from app.models.inspection import (Inspection, InspectionTemplate,
ChecklistItem, InspectionResult)
from app.models.facility import Facility, Area
from app.models.project import Project
from app.models.issue import Issue
from app.models.user import User
from app.utils.forms import StartInspectionForm, IssueForm
@@ -229,18 +230,39 @@ def index():
def start():
form = StartInspectionForm()
templates = InspectionTemplate.query.order_by(InspectionTemplate.name).all()
facilities = Facility.query.filter_by(active=True).order_by(Facility.name).all()
templates = InspectionTemplate.query.order_by(InspectionTemplate.name).all()
projects = Project.query.filter_by(active=True).order_by(Project.name).all()
form.template_id.choices = [(t.id, t.name) for t in templates]
form.facility_id.choices = [(f.id, f.name) for f in facilities]
form.project_id.choices = [(p.id, p.name) for p in projects]
# Seed facility choices: use submitted project_id, session value, or first project
from flask import session as _session
if form.is_submitted():
selected_project_id = form.project_id.data
elif _session.get('reinspect_facility_id'):
# Derive project from the reinspect facility
_rf = db.session.get(Facility, _session['reinspect_facility_id'])
selected_project_id = _rf.project_id if _rf and _rf.project_id else (projects[0].id if projects else None)
else:
selected_project_id = projects[0].id if projects else None
if selected_project_id:
facilities = Facility.query.filter_by(active=True, project_id=selected_project_id).order_by(Facility.name).all()
else:
facilities = []
form.facility_id.choices = [(f.id, f.name) for f in facilities]
if not form.facility_id.choices:
form.facility_id.choices = [('', '— no facilities —')]
if not form.is_submitted():
if _session.get('reinspect_template_id'):
form.template_id.data = _session['reinspect_template_id']
if _session.get('reinspect_facility_id'):
form.facility_id.data = _session['reinspect_facility_id']
if selected_project_id:
form.project_id.data = selected_project_id
if form.validate_on_submit():
template = db.session.get(InspectionTemplate, form.template_id.data)
@@ -272,7 +294,7 @@ def start():
flash('Inspection started. Fill in the form below and submit when complete.', 'info')
return redirect(url_for('inspections.execute', inspection_id=inspection.id))
return render_template('inspections/start.html', form=form, facilities=facilities)
return render_template('inspections/start.html', form=form, projects=projects)
# ── AJAX: areas for a given facility ─────────────────────────────────────────
@@ -284,6 +306,18 @@ def areas_for_facility(facility_id):
return jsonify([{'id': a.id, 'name': a.name} for a in areas])
# ── AJAX: facilities for a given project/contract ────────────────────────────
@bp.route('/facilities_for_project/<int:project_id>')
@login_required
def facilities_for_project(project_id):
facilities = (Facility.query
.filter_by(active=True, project_id=project_id)
.order_by(Facility.name)
.all())
return jsonify([{'id': f.id, 'name': f.name} for f in facilities])
# ── Execute ───────────────────────────────────────────────────────────────────
@bp.route('/<int:inspection_id>/execute', methods=['GET', 'POST'])