diff --git a/.bootstraprc b/.bootstraprc index 6c92d1c231dd79fcd038f0f96c1504f9756e0b75..34dcfd0ae1a6e3d04f0e5dcce547594b437e8e5d 100644 --- a/.bootstraprc +++ b/.bootstraprc @@ -23,6 +23,7 @@ "grid": true, "input-group": true, "list-group": true, + "media": true, "modal": true, "mixins": true, "nav": true, diff --git a/SciPost_v1/urls.py b/SciPost_v1/urls.py index 13711bb780de959a0325ff40ee66840435e020c2..adf26e3aa41c52e07475da80c70f1e99700c13c7 100644 --- a/SciPost_v1/urls.py +++ b/SciPost_v1/urls.py @@ -1,5 +1,6 @@ from django.conf import settings from django.conf.urls import include, url +from django.conf.urls.static import static from django.contrib import admin from ajax_select import urls as ajax_select_urls @@ -34,6 +35,5 @@ urlpatterns = [ if settings.DEBUG: import debug_toolbar - urlpatterns += [ - url(r'^__debug__/', include(debug_toolbar.urls)), - ] + urlpatterns += [url(r'^__debug__/', include(debug_toolbar.urls))] + urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) diff --git a/partners/constants.py b/partners/constants.py index 7cbc74d9569857974e5ec582d7e35c5de5c482db..3349c8afffb575037f717005d935d91241f016dc 100644 --- a/partners/constants.py +++ b/partners/constants.py @@ -74,8 +74,10 @@ PARTNER_EVENTS = ( CONTACT_TYPES = ( + ('gen', 'General Contact'), ('tech', 'Technical Contact'), ('fin', 'Financial Contact'), + ('leg', 'Legal Contact') ) diff --git a/partners/forms.py b/partners/forms.py index 09d849ca6c3aee2d2c674fcbaba72677c57c7f08..96e898acb0b5992be5633e7bab6b9669147c0372 100644 --- a/partners/forms.py +++ b/partners/forms.py @@ -112,7 +112,8 @@ class InstitutionForm(forms.ModelForm): 'name', 'acronym', 'address', - 'country' + 'country', + 'logo' ) diff --git a/partners/migrations/0021_auto_20170626_2014.py b/partners/migrations/0021_auto_20170626_2014.py new file mode 100644 index 0000000000000000000000000000000000000000..c55b21c250a1d7647b726b2c142afa1fef18bcd2 --- /dev/null +++ b/partners/migrations/0021_auto_20170626_2014.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.3 on 2017-06-26 18:14 +from __future__ import unicode_literals + +from django.db import migrations, models +import scipost.fields + + +class Migration(migrations.Migration): + + dependencies = [ + ('partners', '0020_auto_20170624_2013'), + ] + + operations = [ + migrations.AddField( + model_name='institution', + name='logo', + field=models.ImageField(blank=True, upload_to='UPLOADS/INSTITUTIONS/LOGOS/%Y/%m/'), + ), + migrations.AlterField( + model_name='contact', + name='kind', + field=scipost.fields.ChoiceArrayField(base_field=models.CharField(choices=[('gen', 'General Contact'), ('tech', 'Technical Contact'), ('fin', 'Financial Contact'), ('leg', 'Legal Contact')], max_length=4), size=None), + ), + ] diff --git a/partners/migrations/0022_auto_20170626_2104.py b/partners/migrations/0022_auto_20170626_2104.py new file mode 100644 index 0000000000000000000000000000000000000000..678678be652fa3951b010c20d82ee2f7a89d0b2b --- /dev/null +++ b/partners/migrations/0022_auto_20170626_2104.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.3 on 2017-06-26 19:04 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('partners', '0021_auto_20170626_2014'), + ] + + operations = [ + migrations.AlterField( + model_name='institution', + name='logo', + field=models.ImageField(blank=True, upload_to='institutions/logo/%Y/'), + ), + ] diff --git a/partners/models.py b/partners/models.py index 89cd1660dbe99b2f726fd3e32012581373436ef3..65652eca643ab5aece2d103451e1d0f9a7db24ce 100644 --- a/partners/models.py +++ b/partners/models.py @@ -108,6 +108,7 @@ class Institution(models.Model): """ kind = models.CharField(max_length=32, choices=PARTNER_KINDS) name = models.CharField(max_length=256) + logo = models.ImageField(upload_to='institutions/logo/%Y/', blank=True) acronym = models.CharField(max_length=16) address = models.TextField(blank=True) country = CountryField() diff --git a/partners/templates/partners/dashboard.html b/partners/templates/partners/dashboard.html index 17ae1a2f12891069014a53758e66d84ea1e58657..48809ccd703d9fecbb665b24c087181806af68b5 100644 --- a/partners/templates/partners/dashboard.html +++ b/partners/templates/partners/dashboard.html @@ -57,10 +57,16 @@ {% include "partners/_contact_info_table.html" with contact=request.user.partner_contact %} </div> <div class="col-md-6"> - <h3>My Partners</h3> - <ul> + <h3 class="mb-2">My Partners</h3> + <ul class="list-unstyled mb-5"> {% for partner in request.user.partner_contact.partners.all %} - <li>{{partner.institution}}</li> + <li class="media mb-2"> + <img class="d-flex mr-3" width="64" src="{% if partner.institution.logo %}{{partner.institution.logo.url}}{% endif %}" alt="Partner Logo"> + <div class="media-body"> + <h3 class="mt-0 mb-1"><strong>{{partner.institution.name}}</strong></h3> + {{partner.institution.acronym}} ({{partner.institution.get_kind_display}}) + </div> + </li> {% empty %} <li>No partners found. Please contact the SciPost admin.</li> {% endfor %} diff --git a/partners/templates/partners/institution_edit.html b/partners/templates/partners/institution_edit.html index 69133f2840bc995a941f4390bf080becdbadcec4..46fed7ad380de950082effef4fd9a292c37b1310 100644 --- a/partners/templates/partners/institution_edit.html +++ b/partners/templates/partners/institution_edit.html @@ -19,7 +19,7 @@ <div class="row"> <div class="col-12"> - <form method="post"> + <form method="post" enctype="multipart/form-data"> {% csrf_token %} <div class="mb-5"> {{ form|bootstrap }} diff --git a/partners/views.py b/partners/views.py index f0d8dfc6059a40624073468716ed201c94f19140..2580012c310643a61ac13701e6c8ca0b2710c7a4 100644 --- a/partners/views.py +++ b/partners/views.py @@ -177,9 +177,12 @@ def partner_add_contact(request, partner_id): @permission_required('scipost.can_manage_SPB', return_403=True) def institution_edit(request, institution_id): institution = get_object_or_404(Institution, id=institution_id) - form = InstitutionForm(request.POST or None, instance=institution) + form = InstitutionForm(request.POST or None, request.FILES or None, instance=institution) + r = request.FILES + # raise if form.is_valid(): form.save() + messages.success(request, 'Institution has been updated.') return redirect(reverse('partners:dashboard')) context = { 'form': form