From b4897b29e3e4ee69419681078edbc420f49c0123 Mon Sep 17 00:00:00 2001
From: sandeepsajan0 <sandeepsajan0@gmail.com>
Date: Wed, 23 Mar 2022 12:45:34 +0530
Subject: [PATCH] Add custom error msg to review and determination forms

---
 hypha/apply/determinations/admin.py       |  4 ++++
 hypha/apply/determinations/admin_views.py | 17 +++++++++++++++++
 hypha/apply/funds/admin_views.py          | 16 ++++------------
 hypha/apply/review/admin.py               |  3 +++
 hypha/apply/review/admin_views.py         | 17 +++++++++++++++++
 hypha/apply/utils/blocks.py               | 10 ++++++++++
 6 files changed, 55 insertions(+), 12 deletions(-)
 create mode 100644 hypha/apply/determinations/admin_views.py
 create mode 100644 hypha/apply/review/admin_views.py

diff --git a/hypha/apply/determinations/admin.py b/hypha/apply/determinations/admin.py
index c5f92b9a4..baaa4b810 100644
--- a/hypha/apply/determinations/admin.py
+++ b/hypha/apply/determinations/admin.py
@@ -6,6 +6,8 @@ from hypha.apply.determinations.models import DeterminationForm
 from hypha.apply.review.admin_helpers import ButtonsWithClone
 from hypha.apply.utils.admin import ListRelatedMixin
 
+from .admin_views import CreateDeterminationFormViewClass, EditDeterminationFormViewClass
+
 
 class CloneView(CreateView, InstanceSpecificView):
     def __init__(self, *args, **kwargs):
@@ -19,6 +21,8 @@ class DeterminationFormAdmin(ListRelatedMixin, ModelAdmin):
     list_display = ('name', 'used_by')
     button_helper_class = ButtonsWithClone
     clone_view_class = CloneView
+    create_view_class = CreateDeterminationFormViewClass
+    edit_view_class = EditDeterminationFormViewClass
 
     related_models = [
         ('applicationbasedeterminationform', 'application'),
diff --git a/hypha/apply/determinations/admin_views.py b/hypha/apply/determinations/admin_views.py
new file mode 100644
index 000000000..345845c56
--- /dev/null
+++ b/hypha/apply/determinations/admin_views.py
@@ -0,0 +1,17 @@
+from wagtail.contrib.modeladmin.views import CreateView, EditView
+
+from hypha.apply.utils.blocks import show_admin_form_error_messages
+
+
+class CreateDeterminationFormViewClass(CreateView):
+
+    def form_invalid(self, form):
+        show_admin_form_error_messages(self.request, form)
+        return self.render_to_response(self.get_context_data(form=form))
+
+
+class EditDeterminationFormViewClass(EditView):
+
+    def form_invalid(self, form):
+        show_admin_form_error_messages(self.request, form)
+        return self.render_to_response(self.get_context_data(form=form))
diff --git a/hypha/apply/funds/admin_views.py b/hypha/apply/funds/admin_views.py
index 3500756dc..2c1ccc026 100644
--- a/hypha/apply/funds/admin_views.py
+++ b/hypha/apply/funds/admin_views.py
@@ -9,6 +9,8 @@ from wagtail.contrib.modeladmin.views import CreateView, EditView
 from wagtail.core import hooks
 from wagtail.core.models import Page
 
+from hypha.apply.utils.blocks import show_admin_form_error_messages
+
 
 def custom_admin_round_copy_view(request, page):
     # Custom view to handle copied Round pages.
@@ -100,22 +102,12 @@ class CopyApplicationFormViewClass(CreateView):
 class CreateApplicationFormViewClass(CreateView):
 
     def form_invalid(self, form):
-        for err in form.errors.values():
-            if isinstance(err, list):
-                for form_field_error in err:
-                    messages.error(self.request, form_field_error)
-            else:
-                messages.error(self.request, err.as_text())
+        show_admin_form_error_messages(self.request, form)
         return self.render_to_response(self.get_context_data(form=form))
 
 
 class EditApplicationFormViewClass(EditView):
 
     def form_invalid(self, form):
-        for err in form.errors.values():
-            if isinstance(err, list):
-                for form_field_error in err:
-                    messages.error(self.request, form_field_error)
-            else:
-                messages.error(self.request, err.as_text())
+        show_admin_form_error_messages(self.request, form)
         return self.render_to_response(self.get_context_data(form=form))
diff --git a/hypha/apply/review/admin.py b/hypha/apply/review/admin.py
index 101ab8a62..4de1d4eea 100644
--- a/hypha/apply/review/admin.py
+++ b/hypha/apply/review/admin.py
@@ -6,6 +6,7 @@ from hypha.apply.review.models import ReviewForm
 from hypha.apply.utils.admin import ListRelatedMixin
 
 from .admin_helpers import ButtonsWithClone
+from .admin_views import CreateReviewFormViewClass, EditReviewFormViewClass
 
 
 class CloneView(CreateView, InstanceSpecificView):
@@ -20,6 +21,8 @@ class ReviewFormAdmin(ListRelatedMixin, ModelAdmin):
     list_display = ('name', 'used_by')
     button_helper_class = ButtonsWithClone
     clone_view_class = CloneView
+    create_view_class = CreateReviewFormViewClass
+    edit_view_class = EditReviewFormViewClass
 
     related_models = [
         ('applicationbasereviewform', 'application'),
diff --git a/hypha/apply/review/admin_views.py b/hypha/apply/review/admin_views.py
new file mode 100644
index 000000000..4589e69e8
--- /dev/null
+++ b/hypha/apply/review/admin_views.py
@@ -0,0 +1,17 @@
+from wagtail.contrib.modeladmin.views import CreateView, EditView
+
+from hypha.apply.utils.blocks import show_admin_form_error_messages
+
+
+class CreateReviewFormViewClass(CreateView):
+
+    def form_invalid(self, form):
+        show_admin_form_error_messages(self.request, form)
+        return self.render_to_response(self.get_context_data(form=form))
+
+
+class EditReviewFormViewClass(EditView):
+
+    def form_invalid(self, form):
+        show_admin_form_error_messages(self.request, form)
+        return self.render_to_response(self.get_context_data(form=form))
diff --git a/hypha/apply/utils/blocks.py b/hypha/apply/utils/blocks.py
index f25676a32..eae4114eb 100644
--- a/hypha/apply/utils/blocks.py
+++ b/hypha/apply/utils/blocks.py
@@ -6,6 +6,7 @@ from django.forms.utils import ErrorList
 from django.utils.safestring import mark_safe
 from django.utils.translation import gettext_lazy as _
 from pagedown.widgets import PagedownWidget
+from wagtail.admin import messages
 from wagtail.core.blocks import StaticBlock, StreamBlock, StreamValue
 
 from hypha.apply.stream_forms.blocks import (
@@ -32,6 +33,15 @@ def nice_field_name(name):
     return name.title().replace('_', ' ')
 
 
+def show_admin_form_error_messages(request, form):
+    for err in form.errors.values():
+        if isinstance(err, list):
+            for form_field_error in err:
+                messages.error(request, form_field_error)
+        else:
+            messages.error(request, err.as_text())
+
+
 class RichTextFieldBlock(TextFieldBlock):
     widget = RICH_TEXT_WIDGET
 
-- 
GitLab