From a833b5a96b0b5bafebab8a529f9db029ba051a19 Mon Sep 17 00:00:00 2001
From: sks444 <krishnasingh.ss30@gmail.com>
Date: Wed, 11 Nov 2020 14:00:39 +0530
Subject: [PATCH] Hanlde submissions which can not be screened by defaults

---
 hypha/apply/api/v1/screening/serializers.py   | 10 ++---
 hypha/apply/api/v1/screening/views.py         |  2 +-
 hypha/apply/funds/models/submissions.py       |  6 +++
 .../includes/screening_status_block.html      | 38 +++++++++++--------
 4 files changed, 34 insertions(+), 22 deletions(-)

diff --git a/hypha/apply/api/v1/screening/serializers.py b/hypha/apply/api/v1/screening/serializers.py
index 0a5fed73d..2152524f0 100644
--- a/hypha/apply/api/v1/screening/serializers.py
+++ b/hypha/apply/api/v1/screening/serializers.py
@@ -6,18 +6,18 @@ from hypha.apply.funds.models import ScreeningStatus
 class ScreeningStatusListSerializer(serializers.ModelSerializer):
     class Meta:
         model = ScreeningStatus
-        fields = ('title', 'yes', 'default')
+        fields = ('id', 'title', 'yes', 'default')
 
 
 class ScreeningStatusSerializer(serializers.Serializer):
-    title = serializers.CharField()
+    id = serializers.IntegerField()
 
-    def validate_title(self, value):
+    def validate_id(self, value):
         try:
-            ScreeningStatus.objects.get(title=value)
+            ScreeningStatus.objects.get(id=value)
         except ScreeningStatus.DoesNotExist:
             raise exceptions.ValidationError({
-                'detail': 'Title is not valid'
+                'detail': 'Not found'
             })
         return value
 
diff --git a/hypha/apply/api/v1/screening/views.py b/hypha/apply/api/v1/screening/views.py
index 2bc96a0ef..95defb85d 100644
--- a/hypha/apply/api/v1/screening/views.py
+++ b/hypha/apply/api/v1/screening/views.py
@@ -39,7 +39,7 @@ class SubmissionScreeningStatusViewSet(
     permission_classes = (
         HasAPIKey | permissions.IsAuthenticated, HasAPIKey | IsApplyStaffUser,
     )
-    serializer_class = ScreeningStatusSerializer
+    serializer_class = ScreeningStatusListSerializer
 
     def get_queryset(self):
         submission = self.get_submission_object()
diff --git a/hypha/apply/funds/models/submissions.py b/hypha/apply/funds/models/submissions.py
index 9d5c02a2a..16f0c35fb 100644
--- a/hypha/apply/funds/models/submissions.py
+++ b/hypha/apply/funds/models/submissions.py
@@ -840,6 +840,12 @@ class ApplicationSubmission(
             {status.title: status.id for status in ScreeningStatus.objects.filter(yes=False)}
         )
 
+    @property
+    def supports_default_screening(self):
+        if self.screening_statuses.exists():
+            return self.screening_statuses.filter(default=True).exists()
+        return True
+
 
 @receiver(post_transition, sender=ApplicationSubmission)
 def log_status_update(sender, **kwargs):
diff --git a/hypha/apply/funds/templates/funds/includes/screening_status_block.html b/hypha/apply/funds/templates/funds/includes/screening_status_block.html
index d46b93996..4cf53bd46 100644
--- a/hypha/apply/funds/templates/funds/includes/screening_status_block.html
+++ b/hypha/apply/funds/templates/funds/includes/screening_status_block.html
@@ -1,24 +1,26 @@
 <div class="sidebar__inner">
 
     <h5>Screening Status</h5>
-    <div class="screening-status-box" style="display: flex;">
-        <div class="screening-status-yes" style="margin-right: 2em;">
-            <div>
-                {{ default_yes }}
+    {% if object.supports_default_screening %}
+        <div class="screening-status-box" style="display: flex;">
+            <div class="screening-status-yes" style="margin-right: 2em;">
+                <div>
+                    {{ default_yes }}
+                </div>
+                <div class="thumb thumbs-up" data-id="{{ object.id }}" data-yes="true">
+                    <svg class="icon icon--like {% if object.has_yes_default_screening_status_set %}icon--like-yes{% endif %} {% if object.can_not_edit_default %}icon--like-disable{% endif %}"><use xlink:href="#like"></use></svg>
+                </div>
             </div>
-            <div class="thumb thumbs-up" data-id="{{ object.id }}" data-yes="true">
-                <svg class="icon icon--like {% if object.has_yes_default_screening_status_set %}icon--like-yes{% endif %} {% if object.can_not_edit_default %}icon--like-disable{% endif %}"><use xlink:href="#like"></use></svg>
+            <div class="screening-status-no">
+                <div>
+                    {{ default_no }}
+                </div>
+                <div class="thumb thumbs-down" data-id="{{ object.id }}" data-yes="false">
+                    <svg class="icon icon--dislike {% if object.has_no_default_screening_status_set %}icon--dislike-no{% endif %} {% if object.can_not_edit_default %}icon--dislike-disable{% endif %}"><use xlink:href="#dislike"></use></svg>
+                </div>
             </div>
         </div>
-        <div class="screening-status-no">
-            <div>
-                {{ default_no }}
-            </div>
-            <div class="thumb thumbs-down" data-id="{{ object.id }}" data-yes="false">
-                <svg class="icon icon--dislike {% if object.has_no_default_screening_status_set %}icon--dislike-no{% endif %} {% if object.can_not_edit_default %}icon--dislike-disable{% endif %}"><use xlink:href="#dislike"></use></svg>
-            </div>
-        </div>
-    </div>
+    {% endif %}
 
     <div class="show-screening-options">
         {% if object.has_default_screening_status_set %}
@@ -27,6 +29,10 @@
                 <a id="screening-options" data-fancybox="" data-src="#screen-application" data-yes="{% if object.has_yes_default_screening_status_set %}true{% else %}false{% endif %}" class="link link--secondary-change" href="#">Screening Options</a>
             </p>
         {% endif %}
+        {% if not object.supports_default_screening %}
+            <p id="screening-options-para">
+                {{ object.screening_statuses.all|join:', ' }}
+            </p>
+        {% endif %}
     </div>
-
 </div>
-- 
GitLab