Jul 8 - Implement issue assignment separation

This commit is contained in:
2026-07-08 13:56:25 -04:00
parent 39feaa4704
commit b06d939ac0
7 changed files with 287 additions and 35 deletions
+19 -2
View File
@@ -112,9 +112,12 @@ def export_list_pdf():
date_from_filter = request.args.get('date_from', '')
date_to_filter = request.args.get('date_to', '')
reporter_filter = request.args.get('reporter_id', '')
handler_filter = request.args.get('handler_type', '')
if issue_id_filter.isdigit():
q = q.filter(Issue.id == int(issue_id_filter))
if handler_filter in ('internal', 'facility', 'vendor'):
q = q.filter(Issue.handler_type == handler_filter)
if severity_filter:
q = q.filter(Issue.severity == severity_filter)
if status_filter:
@@ -243,9 +246,12 @@ def index():
date_from_filter = request.args.get('date_from', '')
date_to_filter = request.args.get('date_to', '')
reporter_filter = request.args.get('reporter_id', '')
handler_filter = request.args.get('handler_type', '')
if issue_id_filter.isdigit():
q = q.filter(Issue.id == int(issue_id_filter))
if handler_filter in ('internal', 'facility', 'vendor'):
q = q.filter(Issue.handler_type == handler_filter)
if severity_filter:
q = q.filter(Issue.severity == severity_filter)
if status_filter:
@@ -352,6 +358,7 @@ def index():
date_from_filter=date_from_filter,
date_to_filter=date_to_filter,
reporter_filter=reporter_filter,
handler_filter=handler_filter,
facilities=facilities,
projects=projects,
staff=staff,
@@ -432,12 +439,22 @@ def view(issue_id):
issue.result_notes = form.result_notes.data or None
# Vendor / contractor assignment — admin, director, project_manager only
# Handler assignment (who handles it) + vendor/facility details —
# admin, director, project_manager only.
if current_user.role in ('admin', 'director', 'project_manager'):
handler = form.handler_type.data or 'internal'
if handler not in ('internal', 'facility', 'vendor'):
handler = 'internal'
issue.handler_type = handler
issue.vendor_name = (form.vendor_name.data or '').strip() or None
issue.vendor_contact = (form.vendor_contact.data or '').strip() or None
issue.vendor_notes = (form.vendor_notes.data or '').strip() or None
issue.facility_handler_name = (form.facility_handler_name.data or '').strip() or None
issue.facility_handler_contact = (form.facility_handler_contact.data or '').strip() or None
issue.facility_handler_notes = (form.facility_handler_notes.data or '').strip() or None
from app.routes.inspections import _save_photo
new_photos = []
for file_obj in request.files.getlist('result_photos'):
@@ -595,7 +612,7 @@ def view(issue_id):
db.session.commit() # Single atomic commit: issue fields + comment + all notification rows
log_action(ACTION_UPDATE, 'Issue', issue.id,
f'#{issue.id} in {issue.area.name if issue.area else issue.resolved_facility.name if issue.resolved_facility else ''}',
f'status={issue.status}; assigned_to={issue.assigned_to}')
f'status={issue.status}; handler={issue.handler_type}; assigned_to={issue.assigned_to}')
flash('Issue updated.', 'success')
return redirect(url_for('issues.view', issue_id=issue_id))