diff --git a/organizations/forms.py b/organizations/forms.py index 522bf16918f1c219f791da95d1046ba285b7b11e..cfffa61ad9cba951343aaeb452e9129b4dd46645 100644 --- a/organizations/forms.py +++ b/organizations/forms.py @@ -151,3 +151,16 @@ class ContactActivationForm(forms.ModelForm): self.instance.save() return self.instance + + +class ContactRoleForm(forms.ModelForm): + + class Meta: + model = ContactRole + fields = '__all__' + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + if self.instance.id: + self.fields['organization'].disabled = True + self.fields['contact'].disabled = True diff --git a/organizations/models.py b/organizations/models.py index 146b37936cf4620751ae02b5ceda69865e4f6054..a86ebe8a363639096b81800a7fd7490f727ad540 100644 --- a/organizations/models.py +++ b/organizations/models.py @@ -269,6 +269,9 @@ class ContactRole(models.Model): date_from = models.DateField() date_until = models.DateField() + def __str__(self): + return '%s, %s for %s' % (self.contact, self.get_kind_display, self.organization) + @property def get_kind_display(self): """ diff --git a/organizations/templates/organizations/_organization_card.html b/organizations/templates/organizations/_organization_card.html index 3b33311f2b74b58be48fe07cd66a9dca90dab808..13a745358b6a23ac1f1f6eb9a9e27d8b5abf2eb4 100644 --- a/organizations/templates/organizations/_organization_card.html +++ b/organizations/templates/organizations/_organization_card.html @@ -198,6 +198,7 @@ $(document).ready(function($) { <th>Kind</th> <th>Date from</th> <th>Date until</th> + <th>Actions</th> </tr> {% for contactrole in org.contactrole_set.all %} <tr> @@ -205,6 +206,7 @@ $(document).ready(function($) { <td>{{ contactrole.get_kind_display }}</td> <td>{{ contactrole.date_from|date:"Y-m-d" }}</td> <td>{{ contactrole.date_until|date:"Y-m-d" }}</td> + <td><a href="{% url 'organizations:contactrole_update' pk=contactrole.id %}"><span class="text-warning">Update</span></a> <a href="{% url 'organizations:contactrole_delete' pk=contactrole.id %}"><span class="text-danger">Delete</span></a></td> </tr> {% endfor %} </table> diff --git a/organizations/templates/organizations/contactrole_confirm_delete.html b/organizations/templates/organizations/contactrole_confirm_delete.html new file mode 100644 index 0000000000000000000000000000000000000000..f0d3ccfbc02ab888d393c54bb93144ced7e8bf39 --- /dev/null +++ b/organizations/templates/organizations/contactrole_confirm_delete.html @@ -0,0 +1,30 @@ +{% extends 'scipost/base.html' %} + +{% load bootstrap %} + +{% block breadcrumb_items %} +{{ block.super }} +<span class="breadcrumb-item"><a href="{% url 'organizations:organizations' %}">Organizations</a></span> +<span class="breadcrumb-item">Confirm deletetion</span> +{% endblock %} + +{% block pagetitle %}: Delete ContactRole{% endblock pagetitle %} + +{% block content %} +<div class="row"> + <div class="col-12"> + <h1 class="highlight">Delete ContactRole</h1> + {{ object }} + </div> +</div> +<div class="row"> + <div class="col-12"> + <form method="post"> + {% csrf_token %} + <h3 class="mb-2">Are you sure you want to delete this ContactRole?</h3> + <input type="submit" class="btn btn-danger" value="Yes, delete it" /> + </form> + </div> +</div> + +{% endblock content %} diff --git a/organizations/templates/organizations/contactrole_form.html b/organizations/templates/organizations/contactrole_form.html new file mode 100644 index 0000000000000000000000000000000000000000..211764a47a2a367cf71f2e1bd0e3c63bcae587ae --- /dev/null +++ b/organizations/templates/organizations/contactrole_form.html @@ -0,0 +1,28 @@ +{% extends 'scipost/base.html' %} + +{% load bootstrap %} + +{% block breadcrumb_items %} +{{ block.super }} +<span class="breadcrumb-item"><a href="{% url 'organizations:organizations' %}">Organizations</a></span> +<span class="breadcrumb-item">{% if form.instance.id %}Update {{ form.instance }}{% else %}Add new ContactRole{% endif %}</span> +{% endblock %} + +{% block pagetitle %}: ContactRole{% endblock pagetitle %} + + +{% block content %} +<div class="row"> + <div class="col-12"> + <form action="" method="post"> + {% csrf_token %} + {{ form|bootstrap }} + <input type="submit" value="Submit" class="btn btn-primary"> + </div> +</div> +{% endblock content %} + +{% block footer_script %} +{{ block.super }} +{{ form.media }} +{% endblock footer_script %} diff --git a/organizations/urls.py b/organizations/urls.py index ea491532d1584d7d1db8323393669bcca2d7530d..b8425bf93b2f4e8545e7b3a8c21406ceed3a6c62 100644 --- a/organizations/urls.py +++ b/organizations/urls.py @@ -37,6 +37,16 @@ urlpatterns = [ views.organization_add_contact, name='add_contact' ), + url( + r'^contactrole/(?P<pk>[0-9]+)/update/$', + views.ContactRoleUpdateView.as_view(), + name='contactrole_update' + ), + url( + r'^contactrole/(?P<pk>[0-9]+)/delete/$', + views.ContactRoleDeleteView.as_view(), + name='contactrole_delete' + ), url( r'^activate/(?P<activation_key>.+)$', views.activate_account, diff --git a/organizations/views.py b/organizations/views.py index 31da78e1f4f6f68996b5659242b5f64600235939..523f5943b58710136f63f6088b821ee1125101b0 100644 --- a/organizations/views.py +++ b/organizations/views.py @@ -15,8 +15,8 @@ from django.views.generic.list import ListView from guardian.decorators import permission_required from .constants import ORGTYPE_PRIVATE_BENEFACTOR -from .forms import NewContactForm, ContactActivationForm -from .models import Organization, Contact +from .forms import NewContactForm, ContactActivationForm, ContactRoleForm +from .models import Organization, Contact, ContactRole from funders.models import Funder from mails.utils import DirectMailUtil @@ -159,3 +159,29 @@ def dashboard(request): } return render(request, 'organizations/dashboard.html', context) + + +class ContactRoleUpdateView(PermissionsMixin, UpdateView): + """ + Update a ContactRole. + """ + permission_required = 'scipost.can_manage_organizations' + model = ContactRole + form_class = ContactRoleForm + template_name = 'organizations/contactrole_form.html' + + def get_success_url(self): + return reverse_lazy('organizations:organization_details', + kwargs={'pk': self.object.organization.id}) + + +class ContactRoleDeleteView(PermissionsMixin, DeleteView): + """ + Delete a ContactRole. + """ + permission_required = 'scipost.can_manage_organizations' + model = ContactRole + + def get_success_url(self): + return reverse_lazy('organizations:organization_details', + kwargs={'pk': self.object.organization.id})