From bdac9950fb0ae2990ec10f3a8fe9f2f65b1a4fb7 Mon Sep 17 00:00:00 2001
From: Saurabh Kumar <theskumar@users.noreply.github.com>
Date: Wed, 22 May 2024 11:56:36 +0530
Subject: [PATCH] Disable project related functionality if
 PROJECTS_ENABLED=False (#3920)

- do not register project urls
- do not register project menu in wagtail
- do not enable contracting/finance dashboard

Fixes #3606

Project settings and vendor settings will still be present, I could not
find a way to hide/disable them conditionally.
---
 .../dashboard/templates/dashboard/dashboard.html    |  2 +-
 hypha/apply/dashboard/views.py                      |  7 ++++---
 hypha/apply/funds/models/utils.py                   | 13 +++++++++----
 hypha/apply/funds/urls.py                           |  8 ++++++--
 hypha/apply/projects/wagtail_hooks.py               |  4 +++-
 hypha/apply/utils/views.py                          |  5 +++--
 6 files changed, 26 insertions(+), 13 deletions(-)

diff --git a/hypha/apply/dashboard/templates/dashboard/dashboard.html b/hypha/apply/dashboard/templates/dashboard/dashboard.html
index 512e79bb3..eaccf5f2a 100644
--- a/hypha/apply/dashboard/templates/dashboard/dashboard.html
+++ b/hypha/apply/dashboard/templates/dashboard/dashboard.html
@@ -113,7 +113,7 @@
         {% if my_reviewed.table.data %}
             <div class="wrapper wrapper--bottom-space">
                 {% trans "Your previous reviews" as review_heading %}
-                {% include "funds/includes/table_filter_and_search.html" with filter=my_reviewed.filterset filter_action=my_reviewed.url search_term=search_term search_action=my_reviewed.url use_search=True use_batch_actions=False heading=review_heading %}
+                <h2 class="heading heading--normal">{{ review_heading }}</h2>
                 {% render_table my_reviewed.table %}
 
                 {% if my_reviewed.display_more %}
diff --git a/hypha/apply/dashboard/views.py b/hypha/apply/dashboard/views.py
index 0665f4ae0..2edd5e9a2 100644
--- a/hypha/apply/dashboard/views.py
+++ b/hypha/apply/dashboard/views.py
@@ -82,17 +82,18 @@ class AdminDashboardView(MyFlaggedMixin, TemplateView):
 
         context.update(
             {
-                "active_invoices": self.active_invoices(),
                 "awaiting_reviews": self.awaiting_reviews(submissions),
                 "can_export": can_export_submissions(self.request.user),
                 "my_reviewed": self.my_reviewed(submissions),
-                "projects": self.projects(),
                 "rounds": self.rounds(),
                 "my_flagged": self.my_flagged(submissions),
-                "paf_for_review": self.paf_for_review(),
                 "my_tasks": self.my_tasks(),
             }
         )
+        if settings.PROJECTS_ENABLED:
+            context["projects"] = self.projects()
+            context["active_invoices"] = self.active_invoices()
+            context["paf_for_review"] = self.paf_for_review()
 
         return context
 
diff --git a/hypha/apply/funds/models/utils.py b/hypha/apply/funds/models/utils.py
index b8ead6652..ac643869c 100644
--- a/hypha/apply/funds/models/utils.py
+++ b/hypha/apply/funds/models/utils.py
@@ -1,3 +1,4 @@
+from django.conf import settings
 from django.db import models
 from django.shortcuts import redirect
 from django.urls import reverse
@@ -144,12 +145,16 @@ class WorkflowStreamForm(WorkflowHelpers, AbstractStreamForm):  # type: ignore
             help_text="Add a form to be used by external reviewers.",
         ),
         InlinePanel("determination_forms", label=_("Determination Forms")),
-        InlinePanel("approval_forms", label=_("Project Approval Form"), max_num=1),
-        InlinePanel("sow_forms", label=_("Project SOW Form"), max_num=1),
-        # The models technically allow for multiple Report forms but to start we permit only one in the UIs.
-        InlinePanel("report_forms", label=_("Project Report Form"), max_num=1),
     ]
 
+    if settings.PROJECTS_ENABLED:
+        content_panels += [
+            InlinePanel("approval_forms", label=_("Project Approval Form"), max_num=1),
+            InlinePanel("sow_forms", label=_("Project SOW Form"), max_num=1),
+            # The models technically allow for multiple Report forms but to start we permit only one in the UIs.
+            InlinePanel("report_forms", label=_("Project Report Form"), max_num=1),
+        ]
+
 
 class EmailForm(AbstractEmailForm):
     """
diff --git a/hypha/apply/funds/urls.py b/hypha/apply/funds/urls.py
index 060cd4045..da8e5bd0a 100644
--- a/hypha/apply/funds/urls.py
+++ b/hypha/apply/funds/urls.py
@@ -1,3 +1,4 @@
+from django.conf import settings
 from django.urls import include, path
 from django.views.generic import RedirectView
 
@@ -238,9 +239,12 @@ rounds_urls = (
     "rounds",
 )
 
-
 urlpatterns = [
     path("submissions/", include(submission_urls)),
     path("rounds/", include(rounds_urls)),
-    path("projects/", include(projects_urls)),
 ]
+
+if settings.PROJECTS_ENABLED:
+    urlpatterns += [
+        path("projects/", include(projects_urls)),
+    ]
diff --git a/hypha/apply/projects/wagtail_hooks.py b/hypha/apply/projects/wagtail_hooks.py
index 1c3935320..ec4a97004 100644
--- a/hypha/apply/projects/wagtail_hooks.py
+++ b/hypha/apply/projects/wagtail_hooks.py
@@ -1,5 +1,7 @@
+from django.conf import settings
 from wagtail.contrib.modeladmin.options import modeladmin_register
 
 from .admin import ProjectAdminGroup
 
-modeladmin_register(ProjectAdminGroup)
+if settings.PROJECTS_ENABLED:
+    modeladmin_register(ProjectAdminGroup)
diff --git a/hypha/apply/utils/views.py b/hypha/apply/utils/views.py
index f04e933d3..fcce16db5 100644
--- a/hypha/apply/utils/views.py
+++ b/hypha/apply/utils/views.py
@@ -1,3 +1,4 @@
+from django.conf import settings
 from django.contrib.auth.decorators import login_required
 from django.db.models import ProtectedError
 from django.forms.models import ModelForm
@@ -57,9 +58,9 @@ class ViewDispatcher(View):
             view = self.partner_view
         elif self.community_check(request):
             view = self.community_view
-        elif self.finance_check(request):
+        elif settings.PROJECTS_ENABLED and self.finance_check(request):
             view = self.finance_view
-        elif self.contracting_check(request):
+        elif settings.PROJECTS_ENABLED and self.contracting_check(request):
             view = self.contracting_view
         elif self.applicant_check(request):
             view = self.applicant_view
-- 
GitLab