From 4beabda3b7e7f96ecf64221613ef6eb7a0f002fd Mon Sep 17 00:00:00 2001 From: sks444 <krishnasingh.ss30@gmail.com> Date: Tue, 27 Oct 2020 11:24:32 +0530 Subject: [PATCH] Add set screening status with thumbs and with screening options --- hypha/apply/api/v1/screening/views.py | 5 +++- hypha/apply/api/v1/urls.py | 3 ++- hypha/apply/funds/forms.py | 19 +++++++++++++- .../commands/export_submissions_csv.py | 1 - hypha/apply/funds/models/submissions.py | 4 +++ .../funds/applicationsubmission_detail.html | 1 + .../includes/screening_status_block.html | 21 +++++++++------ hypha/apply/funds/views.py | 3 +-- hypha/static_src/src/javascript/apply/flag.js | 1 + .../src/javascript/apply/screening-status.js | 26 +++++++++++++++++++ 10 files changed, 70 insertions(+), 14 deletions(-) create mode 100644 hypha/static_src/src/javascript/apply/screening-status.js diff --git a/hypha/apply/api/v1/screening/views.py b/hypha/apply/api/v1/screening/views.py index baa152b08..eb904fe61 100644 --- a/hypha/apply/api/v1/screening/views.py +++ b/hypha/apply/api/v1/screening/views.py @@ -79,5 +79,8 @@ class SubmissionScreeningStatusViewSet( 'detail': "Can't set default as more than one screening status is already set." }) screening_status = ScreeningStatus.objects.get(default=True, yes=yes) + if submission.has_default_screening_status_set: + default_status = submission.screening_statuses.get() + submission.screening_statuses.remove(default_status) submission.screening_statuses.add(screening_status) - return Response(status=status.HTTP_201_CREATED) + return Response(ser.data, status=status.HTTP_201_CREATED) diff --git a/hypha/apply/api/v1/urls.py b/hypha/apply/api/v1/urls.py index 673a4daa9..e1529d339 100644 --- a/hypha/apply/api/v1/urls.py +++ b/hypha/apply/api/v1/urls.py @@ -3,7 +3,7 @@ from rest_framework_nested import routers from hypha.apply.api.v1.determination.views import SubmissionDeterminationViewSet from hypha.apply.api.v1.review.views import SubmissionReviewViewSet -from hypha.apply.api.v1.screening.views import ScreeningStatusViewSet +from hypha.apply.api.v1.screening.views import ScreeningStatusViewSet, SubmissionScreeningStatusViewSet from .views import ( CommentViewSet, @@ -28,6 +28,7 @@ submission_router.register(r'actions', SubmissionActionViewSet, basename='submis submission_router.register(r'comments', SubmissionCommentViewSet, basename='submission-comments') submission_router.register(r'reviews', SubmissionReviewViewSet, basename='reviews') submission_router.register(r'determinations', SubmissionDeterminationViewSet, basename='determinations') +submission_router.register(r'screening_statuses', SubmissionScreeningStatusViewSet, basename='screening_statuses') urlpatterns = [ path('user/', CurrentUser.as_view(), name='user'), diff --git a/hypha/apply/funds/forms.py b/hypha/apply/funds/forms.py index 4b4d4edb7..9b8811eee 100644 --- a/hypha/apply/funds/forms.py +++ b/hypha/apply/funds/forms.py @@ -11,7 +11,7 @@ from django_select2.forms import Select2Widget from hypha.apply.categories.models import MetaTerm from hypha.apply.users.models import User -from .models import ApplicationSubmission, AssignedReviewers, Reminder, ReviewerRole +from .models import ApplicationSubmission, AssignedReviewers, Reminder, ReviewerRole, ScreeningStatus from .utils import render_icon from .widgets import MetaTermSelect2Widget, Select2MultiCheckboxesWidget from .workflow import get_action_mapping @@ -97,12 +97,29 @@ class ScreeningSubmissionForm(ApplicationSubmissionModelForm): model = ApplicationSubmission fields = ('screening_statuses',) + # screening_statuses = forms.ModelMultipleChoiceField(queryset=ScreeningStatus.objects.filter(yes=True)) + def __init__(self, *args, **kwargs): self.user = kwargs.pop('user') super().__init__(*args, **kwargs) + instance = kwargs.get('instance') + if instance and instance.has_default_screening_status_set: + screening_status = instance.screening_statuses.get(default=True) + self.fields['screening_statuses'].queryset = ScreeningStatus.objects.filter( + yes=screening_status.yes + ) self.should_show = False if self.user.is_apply_staff: self.should_show = True + + def clean(self): + cleaned_data = super().clean() + instance = self.instance + default_status = instance.screening_statuses.get(default=True) + if default_status not in cleaned_data['screening_statuses']: + self.add_error('screening_statuses', 'Can\'t remove default screening status.') + return cleaned_data + # self.add_error('start_date', 'Please select start date.') class UpdateSubmissionLeadForm(ApplicationSubmissionModelForm): diff --git a/hypha/apply/funds/management/commands/export_submissions_csv.py b/hypha/apply/funds/management/commands/export_submissions_csv.py index 90ef23cf0..61bbe8a11 100644 --- a/hypha/apply/funds/management/commands/export_submissions_csv.py +++ b/hypha/apply/funds/management/commands/export_submissions_csv.py @@ -44,5 +44,4 @@ class Command(BaseCommand): submission_value = submission.value except KeyError: submission_value = 0 - import ipdb; ipdb.set_trace() writer.writerow([submission.id, submission.title, submission.full_name, submission.email, submission_value, submission.duration, submission_reapplied, submission.stage, submission.phase, submission.screening_status, submission.submit_time.strftime('%Y-%m-%d'), submission_region, submission_country, submission_focus, submission_type]) diff --git a/hypha/apply/funds/models/submissions.py b/hypha/apply/funds/models/submissions.py index 307a21a52..5d2c5ca90 100644 --- a/hypha/apply/funds/models/submissions.py +++ b/hypha/apply/funds/models/submissions.py @@ -804,6 +804,10 @@ class ApplicationSubmission( def _get_REQUIRED_value(self, name): return self.data(name) + @property + def has_default_screening_status_set(self): + return self.screening_statuses.filter(default=True).exists() + @receiver(post_transition, sender=ApplicationSubmission) def log_status_update(sender, **kwargs): diff --git a/hypha/apply/funds/templates/funds/applicationsubmission_detail.html b/hypha/apply/funds/templates/funds/applicationsubmission_detail.html index e0d294c2b..3a2efbe34 100644 --- a/hypha/apply/funds/templates/funds/applicationsubmission_detail.html +++ b/hypha/apply/funds/templates/funds/applicationsubmission_detail.html @@ -173,4 +173,5 @@ <script src="{% static 'js/apply/submission-text-cleanup.js' %}"></script> <script src="{% static 'js/apply/edit-comment.js' %}"></script> <script src="{% static 'js/apply/flag.js' %}"></script> + <script src="{% static 'js/apply/screening-status.js' %}"></script> {% endblock %} 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 a67aaf4e3..9b688d44a 100644 --- a/hypha/apply/funds/templates/funds/includes/screening_status_block.html +++ b/hypha/apply/funds/templates/funds/includes/screening_status_block.html @@ -6,21 +6,26 @@ <div> {{ default_yes }} </div> - <div> - <svg class="icon icon--private-eye" style="margin-right: 2em;"><use xlink:href="#like"></use></svg> + <div class="abcdef" data-id="{{ object.id }}" data-yes="true"> + <svg class="icon icon--private-eye" style="cursor: pointer;"><use xlink:href="#like"></use></svg> </div> </div> <div> <div> {{ default_no }} </div> - <div> - <svg class="icon icon--private-eye" style="margin-right: 2em;"><use xlink:href="#dislike"></use></svg> + <div class="abcdef" data-id="{{ object.id }}" data-yes="false"> + <svg class="icon icon--private-eye" style="cursor: pointer;"><use xlink:href="#dislike"></use></svg> </div> </div> </div> - - <p> - <!-- {% if object.screening_statuses.exists %}{{ object.screening_statuses|default:"Awaiting Screen status" }}{% endif %} <a data-fancybox data-src="#screen-application" class="link link--secondary-change" href="#">Change</a> --> - </p> + <hr> + <div> + {% for status in object.screening_statuses.all %} + <p>{{ status.title }}</p> + {% endfor %} + {% if object.has_default_screening_status_set %} + <p><a id="screening-options" data-fancybox="" data-src="#screen-application" class="link link--secondary-change" href="#">Screening Options</a></p> + {% endif %} + </div> </div> diff --git a/hypha/apply/funds/views.py b/hypha/apply/funds/views.py index fa8deffb6..589bf9364 100644 --- a/hypha/apply/funds/views.py +++ b/hypha/apply/funds/views.py @@ -578,7 +578,6 @@ class ScreeningSubmissionView(DelegatedViewMixin, UpdateView): context_name = 'screening_form' def form_valid(self, form): - import ipdb; ipdb.set_trace() old = copy(self.get_object()) response = super().form_valid(form) # Record activity @@ -587,7 +586,7 @@ class ScreeningSubmissionView(DelegatedViewMixin, UpdateView): request=self.request, user=self.request.user, source=self.object, - related=str(old.screening_status), + related=','.join([s.title for s in old.screening_statuses.all()]), ) return response diff --git a/hypha/static_src/src/javascript/apply/flag.js b/hypha/static_src/src/javascript/apply/flag.js index 932622b58..dde91ef26 100644 --- a/hypha/static_src/src/javascript/apply/flag.js +++ b/hypha/static_src/src/javascript/apply/flag.js @@ -21,6 +21,7 @@ url: '/apply/submissions/' + id + '/' + type + '/flag/', type: 'POST', success: function (json) { + console.log(json.result); if (json.result) { $current.addClass('flagged'); } diff --git a/hypha/static_src/src/javascript/apply/screening-status.js b/hypha/static_src/src/javascript/apply/screening-status.js new file mode 100644 index 000000000..170ac4b2d --- /dev/null +++ b/hypha/static_src/src/javascript/apply/screening-status.js @@ -0,0 +1,26 @@ +(function ($) { + + 'use strict'; + + $('.abcdef').on('click', function (e) { + e.preventDefault(); + + console.log('Coming here'); + var $current = $(this); + var id = $current.data('id'); + var yes = $current.data('yes'); + + $.ajax({ + url: '/api/v1/submissions/' + id + '/screening_statuses/default/', + type: 'POST', + data: {yes: yes}, + success: function (json) { + if (json && $('#screening-options').length === 0) { + var screeningOptions = $('<p><a id="screening-options" data-fancybox="" data-src="#screen-application" class="link link--secondary-change" href="#">Screening Options</a></p>'); + $(screeningOptions).insertAfter($current); + } + } + }); + }); + +})(jQuery); -- GitLab