diff --git a/partners/admin.py b/partners/admin.py index 6aa2fcafcfb5a09a794a0adda4cb9ce76ba9dea1..fc4f71b22d84016a3c02c96dc2213c1a873cb5d7 100644 --- a/partners/admin.py +++ b/partners/admin.py @@ -1,10 +1,24 @@ from django.contrib import admin -from .models import Contact, Partner, Consortium,\ +from .models import Contact, Partner, Consortium, Institution,\ ProspectivePartner, ProspectiveContact, ProspectivePartnerEvent,\ MembershipAgreement +class ContactToPartnerInline(admin.TabularInline): + model = Contact.partners.through + extra = 0 + verbose_name = 'Contact' + verbose_name_plural = 'Contacts' + + +class ContactToUserInline(admin.StackedInline): + model = Contact + extra = 0 + min_num = 0 + verbose_name = 'Contact (Partners)' + + class ProspectiveContactInline(admin.TabularInline): model = ProspectiveContact extra = 0 @@ -22,16 +36,14 @@ class ProspectivePartnerAdmin(admin.ModelAdmin): class PartnerAdmin(admin.ModelAdmin): search_fields = ('institution', ) - - -class ContactInline(admin.StackedInline): - model = Contact - extra = 0 - min_num = 0 - verbose_name = 'Contact (Partners)' + inlines = ( + ContactToPartnerInline, + ) admin.site.register(Partner, PartnerAdmin) admin.site.register(Consortium) +admin.site.register(Contact) +admin.site.register(Institution) admin.site.register(ProspectivePartner, ProspectivePartnerAdmin) admin.site.register(MembershipAgreement) diff --git a/partners/migrations/0013_auto_20170620_1551.py b/partners/migrations/0013_auto_20170620_1551.py new file mode 100644 index 0000000000000000000000000000000000000000..d0626aef8410083b3bcc0429b7857862e4380bce --- /dev/null +++ b/partners/migrations/0013_auto_20170620_1551.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.3 on 2017-06-20 13:51 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('partners', '0012_auto_20170620_1526'), + ] + + operations = [ + migrations.AlterField( + model_name='contact', + name='consortia', + field=models.ManyToManyField(blank=True, help_text='All Consortia for which the Contact has explicit permission to view/edit its data.', to='partners.Consortium'), + ), + ] diff --git a/partners/migrations/0014_auto_20170620_1554.py b/partners/migrations/0014_auto_20170620_1554.py new file mode 100644 index 0000000000000000000000000000000000000000..42da59192a1b08571b36b9c5ac81e5295145005f --- /dev/null +++ b/partners/migrations/0014_auto_20170620_1554.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.3 on 2017-06-20 13:54 +from __future__ import unicode_literals + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('partners', '0013_auto_20170620_1551'), + ] + + operations = [ + migrations.AlterField( + model_name='contact', + name='user', + field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='partner_contact', to=settings.AUTH_USER_MODEL), + ), + ] diff --git a/partners/migrations/0015_auto_20170620_1634.py b/partners/migrations/0015_auto_20170620_1634.py new file mode 100644 index 0000000000000000000000000000000000000000..e5378392c14ee18714b466f6d8723df5f1c030f9 --- /dev/null +++ b/partners/migrations/0015_auto_20170620_1634.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.3 on 2017-06-20 14:34 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('partners', '0014_auto_20170620_1554'), + ] + + operations = [ + migrations.AlterField( + model_name='institution', + name='address', + field=models.TextField(blank=True), + ), + ] diff --git a/partners/models.py b/partners/models.py index 0ab566ee0f518f976d8da96a58800dac18e98054..211f64a6c95effed53d8310694ee4cfbb985f57c 100644 --- a/partners/models.py +++ b/partners/models.py @@ -98,7 +98,7 @@ class Institution(models.Model): kind = models.CharField(max_length=32, choices=PARTNER_KINDS) name = models.CharField(max_length=256) acronym = models.CharField(max_length=16) - address = models.CharField(max_length=1000, blank=True) + address = models.TextField(blank=True) country = CountryField() def __str__(self): @@ -112,13 +112,14 @@ class Contact(models.Model): (main contact, financial/technical contact etc). Contacts and Contributors have different rights. """ - user = models.OneToOneField(User, on_delete=models.CASCADE, unique=True) + user = models.OneToOneField(User, on_delete=models.CASCADE, unique=True, + related_name='partner_contact') kind = ChoiceArrayField(models.CharField(max_length=4, choices=CONTACT_TYPES)) title = models.CharField(max_length=4, choices=TITLE_CHOICES) partners = models.ManyToManyField('partners.Partner', help_text=('All Partners (+related Institutions)' ' the Contact is related to.')) - consortia = models.ManyToManyField('partners.Consortium', + consortia = models.ManyToManyField('partners.Consortium', blank=True, help_text=('All Consortia for which the Contact has' ' explicit permission to view/edit its data.')) @@ -173,7 +174,7 @@ class MembershipAgreement(models.Model): A new instance is created each time an Agreement is made or renewed. """ partner = models.ForeignKey('partners.Partner', on_delete=models.CASCADE, - blank=True, null=True) + blank=True, null=True, related_name='agreements') consortium = models.ForeignKey('partners.Consortium', on_delete=models.CASCADE, blank=True, null=True) status = models.CharField(max_length=16, choices=MEMBERSHIP_AGREEMENT_STATUS) diff --git a/partners/templates/partners/_contact_info_table.html b/partners/templates/partners/_contact_info_table.html new file mode 100644 index 0000000000000000000000000000000000000000..e9adc3645c49af4e60ed2f79e20f40603f3d1719 --- /dev/null +++ b/partners/templates/partners/_contact_info_table.html @@ -0,0 +1,6 @@ +<table> + <tr><td>Title: </td><td> </td><td>{{ contact.get_title_display }}</td></tr> + <tr><td>First name: </td><td> </td><td>{{ contact.user.first_name }}</td></tr> + <tr><td>Last name: </td><td> </td><td>{{ contact.user.last_name }}</td></tr> + <tr><td>Email: </td><td> </td><td>{{ contact.user.email }}</td></tr> +</table> diff --git a/partners/templates/partners/dashboard.html b/partners/templates/partners/dashboard.html index 13962bb3e040fc216040352c8d926a9175326ccd..560a8f254a050f16bb8e35bafc3c7bf41386d2cc 100644 --- a/partners/templates/partners/dashboard.html +++ b/partners/templates/partners/dashboard.html @@ -46,9 +46,27 @@ <div class="row"> <div class="col-md-6"> <h3>Your personal details:</h3> - {% include "scipost/_private_info_as_table.html" with contributor=request.user.contributor %} + {% include "partners/_contact_info_table.html" with contact=request.user.partner_contact %} </div> <div class="col-md-6"> + <h3>Partners</h3> + <ul> + {% for partner in request.user.partners.all %} + <li>{{partner}}</li> + {% empty %} + <li>No partners found. Please contact the SciPost admin.</li> + {% endfor %} + </ul> + + <h3>Agreements</h3> + <ul> + {% for partner in request.user.partners.agreements.all %} + <li>{{partner}}</li> + {% empty %} + <li>No active agreements found.</li> + {% endfor %} + </ul> + <h3>Update your personal data or password</h3> <ul> diff --git a/scipost/admin.py b/scipost/admin.py index 5db931f3ef878d4e7cd3e23cd82a5ed1e2964acb..32c2c40a9435158246668af90a39f4917232abe4 100644 --- a/scipost/admin.py +++ b/scipost/admin.py @@ -14,16 +14,20 @@ from scipost.models import Contributor, Remark,\ EditorialCollege, EditorialCollegeFellowship from journals.models import Publication +from partners.admin import ContactToUserInline from submissions.models import Submission class ContributorInline(admin.StackedInline): model = Contributor + extra = 0 + min_num = 0 class UserAdmin(UserAdmin): inlines = [ ContributorInline, + ContactToUserInline, ] search_fields = ['last_name', 'email'] diff --git a/scipost/templates/scipost/navbar.html b/scipost/templates/scipost/navbar.html index 181b9fc24d293afc173a6867e34d718185d20881..c972b3ae8a9efe50aa22f9f66b5c7393f7e84162 100644 --- a/scipost/templates/scipost/navbar.html +++ b/scipost/templates/scipost/navbar.html @@ -21,9 +21,16 @@ <li class="nav-item highlighted"> <span class="nav-link">Logged in as {{ user.username }}</span> </li> - <li class="nav-item{% if '/personal_page' in request.path %} active{% endif %}"> - <a class="nav-link" href="{% url 'scipost:personal_page' %}">Personal Page</a> - </li> + {% if user.contributor %} + <li class="nav-item{% if '/personal_page' in request.path %} active{% endif %}"> + <a class="nav-link" href="{% url 'scipost:personal_page' %}">Personal Page</a> + </li> + {% endif %} + {% if user.partner_contact %} + <li class="nav-item{% if '/partners/dashboard' in request.path %} active{% endif %}"> + <a class="nav-link" href="{% url 'partners:dashboard' %}">Partner Page</a> + </li> + {% endif %} <li class="nav-item"> <a class="nav-link" href="{% url 'scipost:logout' %}">Logout</a> </li>