From fc21363e13d2178b52363ef8821d08bfafcacc5a Mon Sep 17 00:00:00 2001 From: sks444 <krishnasingh.ss30@gmail.com> Date: Wed, 28 Oct 2020 11:57:58 +0530 Subject: [PATCH] Change screening status form choices dynamically --- hypha/apply/funds/models/submissions.py | 17 ++++++- .../applicationsubmission_admin_detail.html | 2 +- .../funds/includes/screening_form.html | 4 +- .../includes/screening_status_block.html | 2 +- .../src/javascript/apply/screening-status.js | 44 ++++++++++++++++++- 5 files changed, 63 insertions(+), 6 deletions(-) diff --git a/hypha/apply/funds/models/submissions.py b/hypha/apply/funds/models/submissions.py index 197a90a00..397fd5e75 100644 --- a/hypha/apply/funds/models/submissions.py +++ b/hypha/apply/funds/models/submissions.py @@ -1,6 +1,7 @@ from functools import partialmethod - +import json from django.conf import settings +from django.apps import apps from django.contrib.auth import get_user_model from django.contrib.auth.models import Group from django.contrib.contenttypes.fields import GenericRelation @@ -824,6 +825,20 @@ class ApplicationSubmission( def joined_screening_statuses(self): return ', '.join([s.title for s in self.screening_statuses.all()]) + @property + def yes_screening_statuses(self): + ScreeningStatus = apps.get_model('funds', 'ScreeningStatus') + return json.dumps( + {status.title: status.id for status in ScreeningStatus.objects.filter(yes=True)} + ) + + @property + def no_screening_statuses(self): + ScreeningStatus = apps.get_model('funds', 'ScreeningStatus') + return json.dumps( + {status.title: status.id for status in ScreeningStatus.objects.filter(yes=False)} + ) + @receiver(post_transition, sender=ApplicationSubmission) def log_status_update(sender, **kwargs): diff --git a/hypha/apply/funds/templates/funds/applicationsubmission_admin_detail.html b/hypha/apply/funds/templates/funds/applicationsubmission_admin_detail.html index 3316d6202..3f2d4b1c4 100644 --- a/hypha/apply/funds/templates/funds/applicationsubmission_admin_detail.html +++ b/hypha/apply/funds/templates/funds/applicationsubmission_admin_detail.html @@ -17,7 +17,7 @@ <div class="js-actions-sidebar sidebar__inner sidebar__inner--light-blue sidebar__inner--actions {% if mobile %}sidebar__inner--mobile{% endif %}"> {% include "funds/includes/admin_primary_actions.html" %} </div> - {% include "funds/includes/screening_form.html" with submission=object %} + {% include "funds/includes/screening_form.html" with submission=object default_yes=default_yes_screening_status default_no=default_no_screening_status %} {% include "funds/includes/progress_form.html" %} {% include "funds/includes/update_lead_form.html" %} {% include "funds/includes/update_reviewer_form.html" %} diff --git a/hypha/apply/funds/templates/funds/includes/screening_form.html b/hypha/apply/funds/templates/funds/includes/screening_form.html index 6d51f81a5..1495e3723 100644 --- a/hypha/apply/funds/templates/funds/includes/screening_form.html +++ b/hypha/apply/funds/templates/funds/includes/screening_form.html @@ -1,7 +1,7 @@ {% if screening_form.should_show %} -<div class="modal" id="screen-application"> +<div class="modal" id="screen-application" data-yes-statuses="{{ submission.yes_screening_statuses }}" data-no-statuses="{{ submission.no_screening_statuses }}" data-default-yes="{{ default_yes }}" data-default-no="{{ default_no }}"> <h4 class="modal__header-bar">Update status</h4> - <p>Current statuses: {{ submission.screening_statuses.all|join:', ' }}</p> + <p id="current-status">Current statuses: {{ submission.screening_statuses.all|join:', ' }}</p> {% include 'funds/includes/delegated_form_base.html' with form=screening_form value='Screen'%} </div> {% endif %} 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 ab85d5cf4..d46b93996 100644 --- a/hypha/apply/funds/templates/funds/includes/screening_status_block.html +++ b/hypha/apply/funds/templates/funds/includes/screening_status_block.html @@ -24,7 +24,7 @@ {% if object.has_default_screening_status_set %} <p id="screening-options-para"> {{ object.screening_statuses.all|join:', ' }} - <a id="screening-options" data-fancybox="" data-src="#screen-application" class="link link--secondary-change" href="#">Screening Options</a> + <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 %} </div> diff --git a/hypha/static_src/src/javascript/apply/screening-status.js b/hypha/static_src/src/javascript/apply/screening-status.js index 5ba76667c..3ad2ccb9c 100644 --- a/hypha/static_src/src/javascript/apply/screening-status.js +++ b/hypha/static_src/src/javascript/apply/screening-status.js @@ -15,7 +15,7 @@ data: {yes: yes}, success: function (json) { if (json) { - var screeningOptions = $('<p id="screening-options-para">' + json.title + '<a id="screening-options" data-fancybox="" data-src="#screen-application" class="link link--secondary-change" href="#">Screening Options</a></p>'); + var screeningOptions = $('<p id="screening-options-para">' + json.title + '<a id="screening-options-ajax" data-fancybox="" data-src="#screen-application" data-yes=' + yes + ' class="link link--secondary-change" href="#"> Screening Options</a></p>'); $('.show-screening-options').find('#screening-options-para').remove(); $('.show-screening-options').append(screeningOptions); if (yes === true) { @@ -30,4 +30,46 @@ } }); }); + + $('.show-screening-options').on('click', '#screening-options-ajax', function(){ + + var $screeningOptions = $(this); + var currentStatus = $screeningOptions.data('yes'); + var $screenApplication = $('#screen-application'); + var yesStatuses = $screenApplication.data('yes-statuses'); + var noStatuses = $screenApplication.data('no-statuses'); + var defaultYes = $screenApplication.data('default-yes'); + var defaultNo = $screenApplication.data('default-no'); + var $screeningStatuses = $screenApplication.find('#id_screening_statuses'); + $screeningStatuses = $screeningStatuses.empty(); + if (currentStatus === true) { + $('#current-status').text('Current statuses: ' + defaultYes); + $.each(yesStatuses, function(key,value) { + if(key === defaultYes) { + $screeningStatuses.append($('<option></option>') + .attr('value', value) + .attr('selected', 'selected').text(key)); + } + else { + $screeningStatuses.append($('<option></option>') + .attr('value', value).text(key)); + } + }); + } + else { + $('#current-status').text('Current statuses: ' + defaultNo); + $.each(noStatuses, function(key,value) { + if(key === defaultNo) { + $screeningStatuses.append($("<option></option>") + .attr("value", value) + .attr("selected","selected").text(key)); + } + else { + $screeningStatuses.append($("<option></option>") + .attr("value", value).text(key)); + } + }); + } + }); + })(jQuery); -- GitLab