diff --git a/app/routes/issues.py b/app/routes/issues.py index 384bfbf..18cdf30 100644 --- a/app/routes/issues.py +++ b/app/routes/issues.py @@ -409,17 +409,28 @@ def unfollow(issue_id): @supervisor_required def create(): form = IssueForm() - areas = Area.query.join(Facility).filter(Facility.active == True).order_by(Facility.name, Area.name).all() + facilities = Facility.query.filter_by(active=True).order_by(Facility.name).all() staff = User.query.filter(User.role.in_(['admin', 'director', 'inspector'])).order_by(User.username).all() - form.area_id.choices = [(a.id, f"{a.facility.name} — {a.name}") for a in areas] - form.assigned_to.choices = [(0, '— Unassigned —')] + [(u.id, u.username) for u in staff] + form.facility_id.choices = [(f.id, f.name) for f in facilities] + form.assigned_to.choices = [(0, '— Unassigned —')] + [(u.id, u.username) for u in staff] if form.validate_on_submit(): from app.routes.inspections import _save_photo photo_path = _save_photo(form.photo.data, subfolder='issue_photos') + + # Derive area_id from the selected facility — use its first active area. + # area_id is required on the Issue model so we must resolve it here. + area = (Area.query + .filter_by(facility_id=form.facility_id.data) + .order_by(Area.name) + .first()) + if area is None: + form.facility_id.errors.append('Selected facility has no areas. Please add an area first.') + return render_template('issues/form.html', form=form, title='Log New Issue') + issue = Issue( - area_id = form.area_id.data, + area_id = area.id, severity = form.severity.data, description = form.description.data, photo_path = photo_path, @@ -430,11 +441,11 @@ def create(): db.session.add(issue) db.session.commit() current_app.logger.info( - 'ISSUE CREATED | id=%s | severity=%s | area_id=%s | assigned_to=%s | created_by=%s', - issue.id, issue.severity, issue.area_id, issue.assigned_to, current_user.username + 'ISSUE CREATED | id=%s | severity=%s | facility_id=%s | area_id=%s | assigned_to=%s | created_by=%s', + issue.id, issue.severity, form.facility_id.data, issue.area_id, issue.assigned_to, current_user.username ) log_action(ACTION_CREATE, 'Issue', issue.id, - f'#{issue.id} {issue.severity} in {issue.area.name}', + f'#{issue.id} {issue.severity} in {issue.area.facility.name}', f'severity={issue.severity}; assigned_to={issue.assigned_to}') if issue.assigned_to: diff --git a/app/templates/issues/form.html b/app/templates/issues/form.html index d5dbe8f..83bfbce 100644 --- a/app/templates/issues/form.html +++ b/app/templates/issues/form.html @@ -10,7 +10,7 @@