diff --git a/hypha/apply/activity/messaging.py b/hypha/apply/activity/messaging.py index 61710ddf009aa52ff9b8a10b917e682ebc35dc88..0593f09feff319e9e50962142d13c34722a7943b 100644 --- a/hypha/apply/activity/messaging.py +++ b/hypha/apply/activity/messaging.py @@ -708,6 +708,7 @@ class EmailAdapter(AdapterBase): MESSAGES.PARTNERS_UPDATED_PARTNER: 'partners_updated_partner', MESSAGES.UPLOAD_CONTRACT: 'messages/email/contract_uploaded.html', MESSAGES.CREATED_PROJECT: 'handle_project_created', + MESSAGES.UPDATED_VENDOR: 'handle_vendor_updated', MESSAGES.SENT_TO_COMPLIANCE: 'messages/email/sent_to_compliance.html', MESSAGES.UPDATE_PAYMENT_REQUEST: 'messages/email/payment_request_updated.html', MESSAGES.UPDATE_PAYMENT_REQUEST_STATUS: 'handle_payment_status_updated', @@ -779,6 +780,13 @@ class EmailAdapter(AdapterBase): **kwargs ) + def handle_vendor_updated(self, source, **kwargs): + return self.render_message( + 'messages/email/vendor_updated.html', + source=source, + **kwargs, + ) + def handle_determination(self, determination, source, **kwargs): submission = source if determination.send_notice: diff --git a/hypha/apply/activity/migrations/0056_add_updated_vendor.py b/hypha/apply/activity/migrations/0056_add_updated_vendor.py new file mode 100644 index 0000000000000000000000000000000000000000..f3c4416972b6f1a90e628f02d44b3b9fb6b5741a --- /dev/null +++ b/hypha/apply/activity/migrations/0056_add_updated_vendor.py @@ -0,0 +1,18 @@ +# Generated by Django 2.2.24 on 2021-07-06 08:15 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('activity', '0055_add_batch_delete_submission'), + ] + + operations = [ + migrations.AlterField( + model_name='event', + name='type', + field=models.CharField(choices=[('UPDATE_LEAD', 'Update Lead'), ('BATCH_UPDATE_LEAD', 'Batch Update Lead'), ('EDIT', 'Edit'), ('APPLICANT_EDIT', 'Applicant Edit'), ('NEW_SUBMISSION', 'New Submission'), ('SCREENING', 'Screening'), ('TRANSITION', 'Transition'), ('BATCH_TRANSITION', 'Batch Transition'), ('DETERMINATION_OUTCOME', 'Determination Outcome'), ('BATCH_DETERMINATION_OUTCOME', 'Batch Determination Outcome'), ('INVITED_TO_PROPOSAL', 'Invited To Proposal'), ('REVIEWERS_UPDATED', 'Reviewers Updated'), ('BATCH_REVIEWERS_UPDATED', 'Batch Reviewers Updated'), ('PARTNERS_UPDATED', 'Partners Updated'), ('PARTNERS_UPDATED_PARTNER', 'Partners Updated Partner'), ('READY_FOR_REVIEW', 'Ready For Review'), ('BATCH_READY_FOR_REVIEW', 'Batch Ready For Review'), ('NEW_REVIEW', 'New Review'), ('COMMENT', 'Comment'), ('PROPOSAL_SUBMITTED', 'Proposal Submitted'), ('OPENED_SEALED', 'Opened Sealed Submission'), ('REVIEW_OPINION', 'Review Opinion'), ('DELETE_SUBMISSION', 'Delete Submission'), ('DELETE_REVIEW', 'Delete Review'), ('CREATED_PROJECT', 'Created Project'), ('UPDATED_VENDOR', 'Updated Vendor'), ('UPDATE_PROJECT_LEAD', 'Update Project Lead'), ('EDIT_REVIEW', 'Edit Review'), ('SEND_FOR_APPROVAL', 'Send for Approval'), ('APPROVE_PROJECT', 'Project was Approved'), ('PROJECT_TRANSITION', 'Project was Transitioned'), ('REQUEST_PROJECT_CHANGE', 'Project change requested'), ('UPLOAD_DOCUMENT', 'Document was Uploaded to Project'), ('REMOVE_DOCUMENT', 'Document was Removed from Project'), ('UPLOAD_CONTRACT', 'Contract was Uploaded to Project'), ('APPROVE_CONTRACT', 'Contract was Approved'), ('REQUEST_PAYMENT', 'Payment was requested for Project'), ('UPDATE_PAYMENT_REQUEST_STATUS', 'Updated Payment Request Status'), ('DELETE_PAYMENT_REQUEST', 'Delete Payment Request'), ('SENT_TO_COMPLIANCE', 'Project was sent to Compliance'), ('UPDATE_PAYMENT_REQUEST', 'Updated Payment Request'), ('SUBMIT_REPORT', 'Submit Report'), ('SKIPPED_REPORT', 'Skipped Report'), ('REPORT_FREQUENCY_CHANGED', 'Report Frequency Changed'), ('REPORT_NOTIFY', 'Report Notify'), ('CREATE_REMINDER', 'Reminder Created'), ('DELETE_REMINDER', 'Reminder Deleted'), ('REVIEW_REMINDER', 'Reminde to Review'), ('BATCH_DELETE_SUBMISSION', 'Delete Batch Submissions')], max_length=50), + ), + ] diff --git a/hypha/apply/activity/options.py b/hypha/apply/activity/options.py index fb5d7fb04ebc3acd53bde249a1c03ff90fdc2150..75cf974f80b3715fb899ec07df90c4dda7f00b7f 100644 --- a/hypha/apply/activity/options.py +++ b/hypha/apply/activity/options.py @@ -27,6 +27,7 @@ class MESSAGES(Enum): DELETE_SUBMISSION = 'Delete Submission' DELETE_REVIEW = 'Delete Review' CREATED_PROJECT = 'Created Project' + UPDATED_VENDOR = 'Updated Vendor' UPDATE_PROJECT_LEAD = 'Update Project Lead' EDIT_REVIEW = 'Edit Review' SEND_FOR_APPROVAL = 'Send for Approval' diff --git a/hypha/apply/activity/templates/messages/email/vendor_updated.html b/hypha/apply/activity/templates/messages/email/vendor_updated.html new file mode 100644 index 0000000000000000000000000000000000000000..ae3d1cdce50c0fe685d2412b25c4410025dc3735 --- /dev/null +++ b/hypha/apply/activity/templates/messages/email/vendor_updated.html @@ -0,0 +1,10 @@ +{% extends "messages/email/base.html" %} + +{% block content %} + +Vendor Information has been updated on {{ source.title }}. + +Project: {{ source.title }} +Link: {{ request.scheme }}://{{ request.get_host }}{{ source.get_absolute_url }} + +{% endblock %} diff --git a/hypha/apply/projects/forms/project.py b/hypha/apply/projects/forms/project.py index b2ee7233e9fe55c25267e5ffc441dbde09485a78..0a83b6017ca545aad598816204e298863d474fec 100644 --- a/hypha/apply/projects/forms/project.py +++ b/hypha/apply/projects/forms/project.py @@ -2,7 +2,6 @@ from django import forms from django.contrib.auth import get_user_model from django.db.models import Q -from addressfield.fields import AddressField from hypha.apply.funds.models import ApplicationSubmission from hypha.apply.users.groups import STAFF_GROUP_NAME @@ -77,8 +76,6 @@ class CreateApprovalForm(forms.ModelForm): class ProjectEditForm(forms.ModelForm): - contact_address = AddressField() - class Meta: fields = [ 'title', diff --git a/hypha/apply/projects/templates/application_projects/includes/supporting_documents.html b/hypha/apply/projects/templates/application_projects/includes/supporting_documents.html index 402008b03b8abee659e6e91be16c66ecfdb9d8c0..1617d971485a6e5ebde4de37ff3de1c90ac29de6 100644 --- a/hypha/apply/projects/templates/application_projects/includes/supporting_documents.html +++ b/hypha/apply/projects/templates/application_projects/includes/supporting_documents.html @@ -26,8 +26,18 @@ <p class="docs-block__title">Contractor Setup Form</p> </div> <div class="docs-block__row-inner"> - <a class="docs-block__link" href="{% url 'apply:projects:vendor-detail' pk=project.pk vendor_pk=project.vendor.pk %}">View</a> - <a class="docs-block__link" href="{% url 'apply:projects:vendor' pk=project.pk %}">Update info</a> + {% if editable %} + <a class="docs-block__link" href="{% url 'apply:projects:vendor' pk=project.pk %}"> + {% if project.vendor.user_has_updated_details %} + Edit + {% else %} + Create + {% endif %} + </a> + {% endif %} + {% if project.vendor.user_has_updated_details %} + <a class="docs-block__link" href="{% url 'apply:projects:vendor-detail' pk=project.pk vendor_pk=project.vendor.pk %}">View</a> + {% endif %} </div> </li> {% endif %} diff --git a/hypha/apply/projects/views/vendor.py b/hypha/apply/projects/views/vendor.py index d7868aba100e76f419ae70a3a77b85ea1ac0311f..a78d4e2ff834f790cc7f10f1ebc095a6e2f72ffb 100644 --- a/hypha/apply/projects/views/vendor.py +++ b/hypha/apply/projects/views/vendor.py @@ -14,6 +14,7 @@ from formtools.wizard.views import SessionWizardView from wagtail.core.models import Site from addressfield.fields import ADDRESS_FIELDS_ORDER +from hypha.apply.activity.messaging import MESSAGES, messenger from hypha.apply.projects.models.vendor import VendorFormSettings from hypha.apply.utils.storage import PrivateMediaView, PrivateStorage @@ -51,6 +52,8 @@ class VendorAccessMixin: is_owner = request.user == project.user if not (is_owner or is_admin): raise PermissionDenied + if not project.editable_by(request.user): + raise PermissionDenied if not project.vendor: raise Http404 return super().dispatch(request, *args, **kwargs) @@ -147,6 +150,14 @@ class CreateVendorView(VendorAccessMixin, SessionWizardView): f.close() form = self.get_form('documents') form.delete_temporary_files() + + messenger( + MESSAGES.UPDATED_VENDOR, + request=self.request, + user=vendor_project.lead, + source=vendor_project + ) + return render(self.request, 'application_projects/vendor_success.html', {'project': vendor_project}) def get_form_initial(self, step):