Aug 17 - Update forms will be assigned per contract
This commit is contained in:
@@ -192,6 +192,31 @@ def _reject_if_past_end_date(sched, form):
|
||||
return True
|
||||
|
||||
|
||||
def _reject_template_not_on_contract(form):
|
||||
"""True (and a form error set) if the chosen form isn't usable at the
|
||||
chosen facility (phase52).
|
||||
|
||||
The template choices stay unrestricted for the same reason the facility
|
||||
choices do (rule 61 — the contract selector is UI-only, so POST validation
|
||||
must not depend on it). That means the contract restriction has to be
|
||||
enforced HERE, after validation, against the facility actually picked.
|
||||
Without this a manager could schedule one customer's bespoke form against
|
||||
another customer's facility, and the mismatch would only surface when the
|
||||
inspector opened it.
|
||||
"""
|
||||
facility = db.session.get(Facility, form.facility_id.data)
|
||||
template = db.session.get(InspectionTemplate, form.template_id.data)
|
||||
if template is None or facility is None:
|
||||
return False
|
||||
if template.available_for_project(facility.project_id):
|
||||
return False
|
||||
form.template_id.errors.append(
|
||||
f'"{template.name}" is not available on '
|
||||
f'{facility.project.name if facility.project else "this facility\'s contract"}. '
|
||||
f'Choose a form attached to that contract, or a shared form.')
|
||||
return True
|
||||
|
||||
|
||||
def _open_inspection_ids(schedules):
|
||||
"""{schedule_id: inspection_id} for schedules with an inspection already
|
||||
in progress, so the UI offers Continue instead of a duplicate Start."""
|
||||
@@ -274,7 +299,7 @@ def create():
|
||||
if not form.next_due_date.data:
|
||||
form.next_due_date.data = now_eastern().date()
|
||||
|
||||
if form.validate_on_submit():
|
||||
if form.validate_on_submit() and not _reject_template_not_on_contract(form):
|
||||
sched = ScheduledInspection(
|
||||
facility_id = form.facility_id.data,
|
||||
template_id = form.template_id.data,
|
||||
@@ -331,7 +356,7 @@ def edit(schedule_id):
|
||||
form.weekdays.data = sched.weekday_list
|
||||
form.month_mode.data = sched.month_mode or MONTH_MODE_DAY
|
||||
|
||||
if form.validate_on_submit():
|
||||
if form.validate_on_submit() and not _reject_template_not_on_contract(form):
|
||||
old_inspector_id = sched.inspector_id
|
||||
sched.facility_id = form.facility_id.data
|
||||
sched.template_id = form.template_id.data
|
||||
|
||||
Reference in New Issue
Block a user