From 2b34c96b57e3e7db0f049b72fc8c8e49a15dc3ec Mon Sep 17 00:00:00 2001 From: Sandeep Chauhan <sandeepsajan0@gmail.com> Date: Sat, 4 May 2024 11:02:10 +0530 Subject: [PATCH] Review draft in todo list on staff dashboard (#3859) Fixes #3849 --- hypha/apply/determinations/views.py | 11 ++++- hypha/apply/review/views.py | 12 ++++++ .../todo/migrations/0003_alter_task_code.py | 42 +++++++++++++++++++ hypha/apply/todo/options.py | 12 +++++- 4 files changed, 75 insertions(+), 2 deletions(-) create mode 100644 hypha/apply/todo/migrations/0003_alter_task_code.py diff --git a/hypha/apply/determinations/views.py b/hypha/apply/determinations/views.py index 078222974..1d5b3ac32 100644 --- a/hypha/apply/determinations/views.py +++ b/hypha/apply/determinations/views.py @@ -20,8 +20,9 @@ from hypha.apply.activity.models import Activity from hypha.apply.funds.models import ApplicationSubmission from hypha.apply.funds.workflow import DETERMINATION_OUTCOMES, Concept from hypha.apply.projects.models import Project +from hypha.apply.review.models import Review from hypha.apply.stream_forms.models import BaseStreamForm -from hypha.apply.todo.options import DETERMINATION_DRAFT +from hypha.apply.todo.options import DETERMINATION_DRAFT, REVIEW_DRAFT from hypha.apply.todo.views import ( add_task_to_user, remove_tasks_for_user, @@ -481,6 +482,14 @@ class DeterminationCreateOrUpdateView(BaseStreamForm, CreateOrUpdateView): code=DETERMINATION_DRAFT, related_obj=self.object ) + # remove all review draft tasks for the submission's draft reviews + for review in Review.objects.filter( + submission=self.object.submission, is_draft=True + ): + remove_tasks_of_related_obj_for_specific_code( + code=REVIEW_DRAFT, related_obj=review + ) + messenger( MESSAGES.DETERMINATION_OUTCOME, request=self.request, diff --git a/hypha/apply/review/views.py b/hypha/apply/review/views.py index 15e2ff8f7..1b065e392 100644 --- a/hypha/apply/review/views.py +++ b/hypha/apply/review/views.py @@ -23,6 +23,8 @@ from hypha.apply.funds.workflow import INITIAL_STATE from hypha.apply.review.blocks import RecommendationBlock, RecommendationCommentsBlock from hypha.apply.review.forms import ReviewModelForm, ReviewOpinionForm from hypha.apply.stream_forms.models import BaseStreamForm +from hypha.apply.todo.options import REVIEW_DRAFT +from hypha.apply.todo.views import add_task_to_user, remove_tasks_for_user from hypha.apply.users.decorators import staff_required from hypha.apply.utils.image import generate_image_tag from hypha.apply.utils.views import CreateOrUpdateView @@ -168,7 +170,17 @@ class ReviewCreateOrUpdateView(BaseStreamForm, CreateOrUpdateView): response = super().form_valid(form) + if self.object.is_draft: + if self.request.user.is_apply_staff: + add_task_to_user( + code=REVIEW_DRAFT, user=self.request.user, related_obj=self.object + ) + if not self.object.is_draft: + if self.request.user.is_apply_staff: + remove_tasks_for_user( + code=REVIEW_DRAFT, user=self.request.user, related_obj=self.object + ) messenger( MESSAGES.NEW_REVIEW, request=self.request, diff --git a/hypha/apply/todo/migrations/0003_alter_task_code.py b/hypha/apply/todo/migrations/0003_alter_task_code.py new file mode 100644 index 000000000..22d3f0f68 --- /dev/null +++ b/hypha/apply/todo/migrations/0003_alter_task_code.py @@ -0,0 +1,42 @@ +# Generated by Django 4.2.11 on 2024-04-24 09:00 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("todo", "0002_alter_task_code"), + ] + + operations = [ + migrations.AlterField( + model_name="task", + name="code", + field=models.CharField( + choices=[ + ("determination_draft", "Determination draft"), + ("review_draft", "Review Draft"), + ("project_waiting_paf", "Project waiting PAF"), + ("project_submit_paf", "Project submit PAF"), + ("paf_required_changes", "PAF required changes"), + ("paf_waiting_assignee", "PAF waiting assignee"), + ("paf_waiting_approval", "PAF waiting approval"), + ("project_waiting_contract", "Project waiting contract"), + ( + "project_waiting_contract_document", + "Project waiting contract document", + ), + ( + "project_waiting_contract_review", + "Project waiting contract review", + ), + ("project_waiting_invoice", "Project waiting invoice"), + ("invoice_required_changes", "Invoice required changes"), + ("invoice_waiting_approval", "Invoice waiting approval"), + ("invoice_waiting_paid", "Invoice waiting paid"), + ("report_due", "Report due"), + ], + max_length=50, + ), + ), + ] diff --git a/hypha/apply/todo/options.py b/hypha/apply/todo/options.py index d97d5b077..6d754d284 100644 --- a/hypha/apply/todo/options.py +++ b/hypha/apply/todo/options.py @@ -5,6 +5,7 @@ from django.utils.translation import gettext as _ from hypha.apply.activity.adapters.utils import link_to DETERMINATION_DRAFT = "determination_draft" +REVIEW_DRAFT = "review_draft" PROJECT_WAITING_PAF = "project_waiting_paf" PROJECT_SUBMIT_PAF = "project_submit_paf" PAF_REQUIRED_CHANGES = "paf_required_changes" @@ -21,6 +22,7 @@ REPORT_DUE = "report_due" TASKS_CODE_CHOICES = ( (DETERMINATION_DRAFT, "Determination draft"), + (REVIEW_DRAFT, "Review Draft"), (PROJECT_WAITING_PAF, "Project waiting PAF"), (PROJECT_SUBMIT_PAF, "Project submit PAF"), (PAF_REQUIRED_CHANGES, "PAF required changes"), @@ -42,7 +44,15 @@ template_map = { # :todo: actions for mupltiple stages of submission DETERMINATION_DRAFT: { "text": _( - 'Determination draft for submission [<span class=" truncate inline-block w-32 align-bottom ">{related.submission.title}</span>]({link} "{related.submission.title}") is waiting to be submitted' + 'Determination draft for submission [<span class=" truncate inline-block max-w-32 align-bottom ">{related.submission.title}</span>]({link} "{related.submission.title}") is waiting to be submitted', + ), + "icon": "edit-draft", + "url": "{link}", + "type": _("Draft"), + }, + REVIEW_DRAFT: { + "text": _( + 'Review draft for submission [<span class=" truncate inline-block max-w-32 align-bottom ">{related.submission.title}</span>]({link} "{related.submission.title}") is waiting to be submitted' ), "icon": "edit-draft", "url": "{link}", -- GitLab