diff --git a/hypha/apply/funds/views.py b/hypha/apply/funds/views.py index 2976a0ffec..5045e190ca 100644 --- a/hypha/apply/funds/views.py +++ b/hypha/apply/funds/views.py @@ -60,7 +60,7 @@ from hypha.apply.projects.forms import ProjectCreateForm from hypha.apply.review.models import Review from hypha.apply.stream_forms.blocks import GroupToggleBlock -from hypha.apply.todo.options import PROJECT_WAITING_PAF +from hypha.apply.todo.options import PROJECT_WAITING_PF, PROJECT_WAITING_SOW from hypha.apply.todo.views import add_task_to_user from hypha.apply.users.decorators import ( is_apply_staff, @@ -286,10 +286,17 @@ def post(self, *args, **kwargs): ) # add task for staff to add PAF to the project add_task_to_user( - code=PROJECT_WAITING_PAF, + code=PROJECT_WAITING_PF, user=project.lead, related_obj=project, ) + if self.submission.page.specific.sow_forms.first(): + # Add SOW task if one exists on the parent + add_task_to_user( + code=PROJECT_WAITING_SOW, + user=project.lead, + related_obj=project, + ) return HttpResponseClientRedirect(project.get_absolute_url()) return render( self.request, diff --git a/hypha/apply/projects/forms/project.py b/hypha/apply/projects/forms/project.py index e351e80fa0..6bf42f0a46 100644 --- a/hypha/apply/projects/forms/project.py +++ b/hypha/apply/projects/forms/project.py @@ -135,14 +135,13 @@ def clean(self): return cleaned_data def save(self, *args, **kwargs): - self.instance.form_fields = kwargs.pop("paf_form_fields", {}) + self.instance.form_fields = kwargs.pop("pf_form_fields", {}) self.instance.form_data = { field: self.cleaned_data[field] for field in self.instance.question_field_ids if field in self.cleaned_data } self.instance.process_file_data(self.cleaned_data) - self.instance.user_has_updated_details = True return super().save(*args, **kwargs) diff --git a/hypha/apply/projects/migrations/0094_remove_project_user_has_updated_pf_details.py b/hypha/apply/projects/migrations/0094_remove_project_user_has_updated_pf_details.py new file mode 100644 index 0000000000..9b0f3c36a5 --- /dev/null +++ b/hypha/apply/projects/migrations/0094_remove_project_user_has_updated_pf_details.py @@ -0,0 +1,16 @@ +# Generated by Django 4.2.16 on 2024-12-06 16:39 + +from django.db import migrations + + +class Migration(migrations.Migration): + dependencies = [ + ("application_projects", "0093_remove_reportversion_form_fields"), + ] + + operations = [ + migrations.RemoveField( + model_name="project", + name="user_has_updated_details", + ), + ] diff --git a/hypha/apply/projects/models/project.py b/hypha/apply/projects/models/project.py index eea7caafdd..2bb189bfd2 100644 --- a/hypha/apply/projects/models/project.py +++ b/hypha/apply/projects/models/project.py @@ -274,8 +274,6 @@ class Project(BaseStreamForm, AccessFormData, models.Model): # tracks read/write state of the Project is_locked = models.BooleanField(default=False) - # tracks updates to the Projects fields via the Project Application Form. - user_has_updated_details = models.BooleanField(default=False) submitted_contract_documents = models.BooleanField( "Submit Contracting Documents", default=False ) @@ -412,6 +410,21 @@ def editable_by(self, user): return True return False + @property + def user_has_updated_pf_details(self) -> bool: + """Determines if the user has updated the Project Form""" + return bool(self.form_fields) + + @property + def user_has_updated_sow_details(self) -> bool | None: + """Determines if the user has updated the SOW form + + If there is no configured SOW, None will be returned + """ + if self.submission.page.specific.sow_forms.first() and hasattr(self, "sow"): + return bool(self.sow.form_data) + return None + @property def editable(self): if self.is_locked: @@ -456,7 +469,7 @@ def can_send_for_approval(self): being locked. """ correct_state = self.status == DRAFT and not self.is_locked - return correct_state and self.user_has_updated_details + return correct_state and self.user_has_updated_pf_details @property def is_in_progress(self): diff --git a/hypha/apply/projects/templates/application_projects/includes/project_documents.html b/hypha/apply/projects/templates/application_projects/includes/project_documents.html index 991dd4349a..2693c07cb1 100644 --- a/hypha/apply/projects/templates/application_projects/includes/project_documents.html +++ b/hypha/apply/projects/templates/application_projects/includes/project_documents.html @@ -77,18 +77,18 @@

  • - {% if object.user_has_updated_details %} + {% if object.user_has_updated_pf_details %} {% heroicon_outline "check-circle" class="stroke-light-blue me-1" aria_hidden=true %} {% else %} {% heroicon_outline "check-circle" class="stroke-gray-400 me-1" aria_hidden=true %} {% endif %} -

    {% trans "Project Form" %}

    +

    {% trans "Project form" %}

    {% has_project_sow_form object as project_sow %} - {% if project_sow and object.user_has_updated_details and not user.is_applicant %} -