From 63e2996e3e9dc92c1bb612706373d99ca222826f Mon Sep 17 00:00:00 2001 From: sks444 <krishnasingh.ss30@gmail.com> Date: Tue, 6 Jul 2021 16:34:25 +0530 Subject: [PATCH] Fix vendor detail page when project is not editable --- .../application_projects/vendor_detail.html | 18 +++++++++------- hypha/apply/projects/views/vendor.py | 21 ++++++++++++++++--- 2 files changed, 28 insertions(+), 11 deletions(-) diff --git a/hypha/apply/projects/templates/application_projects/vendor_detail.html b/hypha/apply/projects/templates/application_projects/vendor_detail.html index 2bb2a9160..da54c5a6d 100644 --- a/hypha/apply/projects/templates/application_projects/vendor_detail.html +++ b/hypha/apply/projects/templates/application_projects/vendor_detail.html @@ -1,6 +1,6 @@ {% extends "base-apply.html" %} -{% load bleach_tags i18n %} - +{% load bleach_tags i18n approval_tools %} +{% user_can_edit_project object request.user as editable %} {% block title %}{% trans "Vendor Information for" %} {{ project.title }} {% endblock %} {% block content %} @@ -14,12 +14,14 @@ <div> <h5 class="vendor-info">Last Updated: {{ vendor.updated_at|date:'F d, Y' }}</h5> </div> - <div> - <a class="link link--edit-vendor is-active" href="{% url 'apply:projects:vendor' pk=project.pk %}"> - Edit - <svg class="icon icon--pen"><use xlink:href="#pen"></use></svg> - </a> - </div> + {% if editable %} + <div> + <a class="link link--edit-vendor is-active" href="{% url 'apply:projects:vendor' pk=project.pk %}"> + Edit + <svg class="icon icon--pen"><use xlink:href="#pen"></use></svg> + </a> + </div> + {% endif %} </div> <div class="rich-text rich-text--answers"> diff --git a/hypha/apply/projects/views/vendor.py b/hypha/apply/projects/views/vendor.py index a78d4e2ff..6087123d0 100644 --- a/hypha/apply/projects/views/vendor.py +++ b/hypha/apply/projects/views/vendor.py @@ -42,7 +42,7 @@ def show_extra_info_form(wizard): return cleaned_data.get('need_extra_info', True) -class VendorAccessMixin: +class CreateVendorAccessMixin: def dispatch(self, request, *args, **kwargs): project_settings = ProjectSettings.for_request(request) if not project_settings.vendor_setup_required: @@ -59,7 +59,22 @@ class VendorAccessMixin: return super().dispatch(request, *args, **kwargs) -class CreateVendorView(VendorAccessMixin, SessionWizardView): +class DetailVendorAccessMixin: + def dispatch(self, request, *args, **kwargs): + project_settings = ProjectSettings.for_request(request) + if not project_settings.vendor_setup_required: + raise PermissionDenied + is_admin = request.user.is_apply_staff + project = self.get_project() + is_owner = request.user == project.user + if not (is_owner or is_admin): + raise PermissionDenied + if not project.vendor: + raise Http404 + return super().dispatch(request, *args, **kwargs) + + +class CreateVendorView(CreateVendorAccessMixin, SessionWizardView): file_storage = PrivateStorage() form_list = [ ('basic', CreateVendorFormStep1), @@ -209,7 +224,7 @@ class CreateVendorView(VendorAccessMixin, SessionWizardView): return kwargs -class VendorDetailView(VendorAccessMixin, DetailView): +class VendorDetailView(DetailVendorAccessMixin, DetailView): model = Vendor template_name = 'application_projects/vendor_detail.html' -- GitLab