05/04 Replace issue Area with Facility
This commit is contained in:
+18
-7
@@ -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:
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
<div class="card-body">
|
||||
<form method="post" enctype="multipart/form-data">
|
||||
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}">
|
||||
{% for field in [form.area_id, form.severity, form.description, form.photo, form.assigned_to] %}
|
||||
{% for field in [form.facility_id, form.severity, form.description, form.photo, form.assigned_to] %}
|
||||
<div class="mb-3">
|
||||
{{ field.label(class="form-label fw-semibold") }}
|
||||
{{ field(class="form-select" if field.type == 'SelectField' else "form-control", rows=4 if field.type == 'TextAreaField' else none) }}
|
||||
|
||||
+1
-1
@@ -154,7 +154,7 @@ class ChecklistResultForm(FlaskForm):
|
||||
# ── Issues ───────────────────────────────────────────────────────────────────
|
||||
|
||||
class IssueForm(FlaskForm):
|
||||
area_id = SelectField('Area', coerce=int, validators=[DataRequired()])
|
||||
facility_id = SelectField('Facility', coerce=int, validators=[DataRequired()])
|
||||
severity = SelectField('Severity', choices=[
|
||||
('low','Low'), ('medium','Medium'), ('high','High'), ('critical','Critical'),
|
||||
], validators=[DataRequired()])
|
||||
|
||||
Reference in New Issue
Block a user