diff --git a/hypha/apply/funds/admin_forms.py b/hypha/apply/funds/admin_forms.py index 72c9ef998dcc5cb4231cb2af3d4e39b706e7d074..807b1c82164a70b8555a0c8c780c6ea397e31be0 100644 --- a/hypha/apply/funds/admin_forms.py +++ b/hypha/apply/funds/admin_forms.py @@ -1,6 +1,8 @@ from collections import Counter from django.apps import apps +from django.conf import settings +from django.utils.translation import gettext as _ from wagtail.admin.forms import WagtailAdminModelForm, WagtailAdminPageForm from .models.submissions import ApplicationSubmission @@ -16,6 +18,7 @@ class WorkflowFormAdminForm(WagtailAdminPageForm): review_forms = self.formsets["review_forms"] external_review_forms = self.formsets["external_review_forms"] determination_forms = self.formsets["determination_forms"] + paf_forms = self.formsets["approval_forms"] number_of_stages = len(workflow.stages) self.validate_application_forms(workflow, application_forms) @@ -30,6 +33,7 @@ class WorkflowFormAdminForm(WagtailAdminPageForm): self.validate_stages_equal_forms( workflow, determination_forms, form_type="Determination form" ) + self.validate_paf_form(paf_forms) return cleaned_data @@ -95,6 +99,12 @@ class WorkflowFormAdminForm(WagtailAdminPageForm): "Exceeds required number of forms for stage, please remove.", ) + def validate_paf_form(self, forms): + if forms.is_valid(): + valid_forms = [form for form in forms if not form.cleaned_data["DELETE"]] + if settings.PROJECTS_ENABLED and not valid_forms: + self.add_error(None, _("Please provide Project Approval Form.")) + class RoundBasePageAdminForm(WagtailAdminPageForm): def clean(self): diff --git a/hypha/apply/funds/tests/test_admin_form.py b/hypha/apply/funds/tests/test_admin_form.py index 31181affc07da5db44b751bd707a2f938f33de01..f2f147a9d1371afe82ea2f3ffae43526489fdba9 100644 --- a/hypha/apply/funds/tests/test_admin_form.py +++ b/hypha/apply/funds/tests/test_admin_form.py @@ -1,5 +1,5 @@ import factory -from django.test import TestCase +from django.test import TestCase, override_settings from hypha.apply.determinations.tests.factories import DeterminationFormFactory from hypha.apply.funds.models import FundType @@ -209,12 +209,20 @@ class TestWorkflowFormAdminForm(TestCase): ) self.assertTrue(form.is_valid(), form.errors.as_text()) + @override_settings(PROJECTS_ENABLED=False) def test_does_validates_without_project_approval_form(self): form = self.submit_data( form_data(1, 1, 1, 0, num_project_approval_form=0, stages=1) ) self.assertTrue(form.is_valid(), form.errors.as_text()) + @override_settings(PROJECTS_ENABLED=True) + def test_dosnt_validates_without_project_approval_form_for_projects_enabled(self): + form = self.submit_data( + form_data(1, 1, 1, 0, num_project_approval_form=0, stages=1) + ) + self.assertFalse(form.is_valid(), form.errors.as_text()) + def test_doesnt_validates_with_multiple_project_approval_form(self): form = self.submit_data( form_data(1, 1, 1, 0, num_project_approval_form=2, stages=1)