SciPost Code Repository

Skip to content
Snippets Groups Projects
Commit e9f073bc authored by Jorran de Wit's avatar Jorran de Wit
Browse files

Rename Affiliation model

parent eee2be2d
No related branches found
No related tags found
No related merge requests found
Showing
with 79 additions and 80 deletions
from django.contrib import admin from django.contrib import admin
from .models import Affiliation from .models import Institute
admin.site.register(Affiliation) admin.site.register(Institute)
...@@ -10,4 +10,4 @@ class AffiliationsConfig(AppConfig): ...@@ -10,4 +10,4 @@ class AffiliationsConfig(AppConfig):
from . import models, signals from . import models, signals
post_save.connect(signals.notify_new_affiliation, post_save.connect(signals.notify_new_affiliation,
sender=models.Affiliation) sender=models.Institute)
AFFILIATION_UNIVERSITY = 'university' TYPE_UNIVERSITY = 'university'
AFFILIATION_TYPES = ( INSTITUTE_TYPES = (
(AFFILIATION_UNIVERSITY, 'University'), (TYPE_UNIVERSITY, 'University'),
) )
from django import forms from django import forms
from .models import Affiliation from .models import Institute
class AffiliationMergeForm(forms.ModelForm): class InstituteMergeForm(forms.ModelForm):
affiliation = forms.ModelChoiceField(queryset=Affiliation.objects.none()) institute = forms.ModelChoiceField(queryset=Institute.objects.none())
class Meta: class Meta:
model = Affiliation model = Institute
fields = [] fields = []
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)
self.fields['affiliation'].queryset = Affiliation.objects.exclude(id=self.instance.id) self.fields['institute'].queryset = Institute.objects.exclude(id=self.instance.id)
def save(self, commit=True): def save(self, commit=True):
old_affiliation = self.cleaned_data['affiliation'] old_institute = self.cleaned_data['institute']
if commit: if commit:
old_affiliation.contributors.update(affiliation=self.instance) old_institute.contributors.update(institute=self.instance)
old_affiliation.delete() old_institute.delete()
return self.instance return self.instance
...@@ -15,7 +15,7 @@ class Migration(migrations.Migration): ...@@ -15,7 +15,7 @@ class Migration(migrations.Migration):
operations = [ operations = [
migrations.CreateModel( migrations.CreateModel(
name='Affiliation', name='Institute',
fields=[ fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=255)), ('name', models.CharField(max_length=255)),
......
...@@ -13,7 +13,7 @@ class Migration(migrations.Migration): ...@@ -13,7 +13,7 @@ class Migration(migrations.Migration):
operations = [ operations = [
migrations.AddField( migrations.AddField(
model_name='affiliation', model_name='institute',
name='acronym', name='acronym',
field=models.CharField(blank=True, max_length=16), field=models.CharField(blank=True, max_length=16),
), ),
......
...@@ -5,11 +5,11 @@ from __future__ import unicode_literals ...@@ -5,11 +5,11 @@ from __future__ import unicode_literals
from django.db import migrations from django.db import migrations
def fill_affiliations(apps, schema_editor): def fill_institutes(apps, schema_editor):
Contributor = apps.get_model('scipost', 'Contributor') Contributor = apps.get_model('scipost', 'Contributor')
Affiliation = apps.get_model('affiliations', 'Affiliation') Institute = apps.get_model('affiliations', 'Institute')
for contributor in Contributor.objects.all(): for contributor in Contributor.objects.all():
affiliation, __ = Affiliation.objects.get_or_create( affiliation, __ = Institute.objects.get_or_create(
name=contributor.affiliation, country=contributor.country_of_employment) name=contributor.affiliation, country=contributor.country_of_employment)
contributor._affiliation = affiliation contributor._affiliation = affiliation
contributor.save() contributor.save()
...@@ -27,5 +27,5 @@ class Migration(migrations.Migration): ...@@ -27,5 +27,5 @@ class Migration(migrations.Migration):
] ]
operations = [ operations = [
migrations.RunPython(fill_affiliations, return_none), migrations.RunPython(fill_institutes, return_none),
] ]
...@@ -13,7 +13,7 @@ class Migration(migrations.Migration): ...@@ -13,7 +13,7 @@ class Migration(migrations.Migration):
operations = [ operations = [
migrations.AlterModelOptions( migrations.AlterModelOptions(
name='affiliation', name='institute',
options={'ordering': ['country']}, options={'ordering': ['country']},
), ),
] ]
...@@ -3,19 +3,18 @@ from django.urls import reverse ...@@ -3,19 +3,18 @@ from django.urls import reverse
from django_countries.fields import CountryField from django_countries.fields import CountryField
from .constants import AFFILIATION_TYPES, AFFILIATION_UNIVERSITY from .constants import INSTITUTE_TYPES, TYPE_UNIVERSITY
class Affiliation(models.Model): class Institute(models.Model):
""" """
Any Scientific affiliation in the world should ideally have a SciPost registration. Any (scientific) Institute in the world should ideally have a SciPost registration.
""" """
name = models.CharField(max_length=255) name = models.CharField(max_length=255)
acronym = models.CharField(max_length=16, blank=True) acronym = models.CharField(max_length=16, blank=True)
# address = models.TextField(blank=True) # address = models.TextField(blank=True)
country = CountryField() country = CountryField()
type = models.CharField(max_length=16, choices=AFFILIATION_TYPES, type = models.CharField(max_length=16, choices=INSTITUTE_TYPES, default=TYPE_UNIVERSITY)
default=AFFILIATION_UNIVERSITY)
class Meta: class Meta:
default_related_name = 'affiliations' default_related_name = 'affiliations'
......
...@@ -13,5 +13,5 @@ def notify_new_affiliation(sender, instance, created, **kwargs): ...@@ -13,5 +13,5 @@ def notify_new_affiliation(sender, instance, created, **kwargs):
actor, __ = FakeActors.objects.get_or_create(name='A SciPost user') actor, __ = FakeActors.objects.get_or_create(name='A SciPost user')
for user in administrators: for user in administrators:
notify.send(sender=sender, recipient=user, actor=actor, notify.send(sender=sender, recipient=user, actor=actor,
verb=' created a new Affiliation instance. You may want to validate it.', verb=' created a new Institute instance. You may want to validate it.',
target=instance) target=instance)
...@@ -3,9 +3,9 @@ from django.conf.urls import url ...@@ -3,9 +3,9 @@ from django.conf.urls import url
from . import views from . import views
urlpatterns = [ urlpatterns = [
url(r'^$', views.AffiliationListView.as_view(), name='affiliations'), url(r'^$', views.InstituteListView.as_view(), name='institutes'),
url(r'^(?P<affiliation_id>[0-9]+)/$', views.AffiliationUpdateView.as_view(), url(r'^(?P<institute_id>[0-9]+)/$', views.InstituteUpdateView.as_view(),
name='affiliation_details'), name='institute_details'),
url(r'^(?P<affiliation_id>[0-9]+)/merge$', views.merge_affiliations, url(r'^(?P<institute_id>[0-9]+)/merge$', views.merge_institutes,
name='merge_affiliations'), name='merge_institutes'),
] ]
...@@ -7,20 +7,20 @@ from django.views.generic.edit import UpdateView ...@@ -7,20 +7,20 @@ from django.views.generic.edit import UpdateView
from django.views.generic.list import ListView from django.views.generic.list import ListView
from django.shortcuts import get_object_or_404 from django.shortcuts import get_object_or_404
from .forms import AffiliationMergeForm from .forms import InstituteMergeForm
from .models import Affiliation from .models import Institute
@method_decorator(permission_required('scipost.can_manage_affiliations'), name='dispatch') @method_decorator(permission_required('scipost.can_manage_affiliations'), name='dispatch')
class AffiliationListView(ListView): class InstituteListView(ListView):
model = Affiliation model = Institute
paginate_by = 100 paginate_by = 100
@method_decorator(permission_required('scipost.can_manage_affiliations'), name='dispatch') @method_decorator(permission_required('scipost.can_manage_affiliations'), name='dispatch')
class AffiliationUpdateView(UpdateView): class InstituteUpdateView(UpdateView):
model = Affiliation model = Institute
pk_url_kwarg = 'affiliation_id' pk_url_kwarg = 'institute_id'
fields = [ fields = [
'name', 'name',
'acronym', 'acronym',
...@@ -29,24 +29,24 @@ class AffiliationUpdateView(UpdateView): ...@@ -29,24 +29,24 @@ class AffiliationUpdateView(UpdateView):
def get_context_data(self, *args, **kwargs): def get_context_data(self, *args, **kwargs):
context = super().get_context_data(*args, **kwargs) context = super().get_context_data(*args, **kwargs)
context['merge_form'] = AffiliationMergeForm() context['merge_form'] = InstituteMergeForm()
return context return context
def form_valid(self, *args, **kwargs): def form_valid(self, *args, **kwargs):
messages.success(self.request, 'Affiliation saved') messages.success(self.request, 'Institute saved')
return super().form_valid(*args, **kwargs) return super().form_valid(*args, **kwargs)
@permission_required('scipost.can_manage_affiliations') @permission_required('scipost.can_manage_affiliations')
def merge_affiliations(request, affiliation_id): def merge_institutes(request, institute_id):
""" """
Merge Affiliation (affiliation_id) into the Affliation chosen in the form. Merge Affiliation (affiliation_id) into the Affliation chosen in the form.
""" """
affiliation = get_object_or_404(Affiliation, id=affiliation_id) institute = get_object_or_404(Institute, id=institute_id)
form = AffiliationMergeForm(request.POST or None, instance=affiliation) form = InstituteMergeForm(request.POST or None, instance=institute)
if form.is_valid(): if form.is_valid():
form.save() form.save()
messages.success(request, 'Affiliation {a} merged into {b}'.format( messages.success(request, 'Institute {a} merged into {b}'.format(
a=form.cleaned_data.get('affiliation', '?'), b=affiliation)) a=form.cleaned_data.get('institute', '?'), b=institute))
return redirect(reverse('affiliations:affiliation_details', args=(affiliation.id,))) return redirect(reverse('affiliations:institute_details', args=(institute.id,)))
...@@ -24,7 +24,7 @@ from .decorators import has_contributor ...@@ -24,7 +24,7 @@ from .decorators import has_contributor
from .models import Contributor, DraftInvitation, RegistrationInvitation,\ from .models import Contributor, DraftInvitation, RegistrationInvitation,\
UnavailabilityPeriod, PrecookedEmail UnavailabilityPeriod, PrecookedEmail
from affiliations.models import Affiliation from affiliations.models import Institute
from common.forms import MonthYearWidget from common.forms import MonthYearWidget
from partners.decorators import has_contact from partners.decorators import has_contact
...@@ -58,12 +58,12 @@ class RegistrationForm(forms.Form): ...@@ -58,12 +58,12 @@ class RegistrationForm(forms.Form):
widget=forms.TextInput( widget=forms.TextInput(
{'placeholder': 'Recommended. Get one at orcid.org'})) {'placeholder': 'Recommended. Get one at orcid.org'}))
discipline = forms.ChoiceField(choices=SCIPOST_DISCIPLINES, label='* Main discipline') discipline = forms.ChoiceField(choices=SCIPOST_DISCIPLINES, label='* Main discipline')
country_of_employment = LazyTypedChoiceField( # country_of_employment = LazyTypedChoiceField(
choices=countries, label='* Country of employment', initial='NL', # choices=countries, label='* Country of employment', initial='NL',
widget=CountrySelectWidget(layout=( # widget=CountrySelectWidget(layout=(
'{widget}<img class="country-select-flag" id="{flag_id}"' # '{widget}<img class="country-select-flag" id="{flag_id}"'
' style="margin: 6px 4px 0" src="{country.flag}">'))) # ' style="margin: 6px 4px 0" src="{country.flag}">')))
affiliation = forms.CharField(label='* Affiliation', max_length=300) # affiliation = forms.CharField(label='* Affiliation', max_length=300)
address = forms.CharField( address = forms.CharField(
label='Address', max_length=1000, label='Address', max_length=1000,
widget=forms.TextInput({'placeholder': 'For postal correspondence'}), widget=forms.TextInput({'placeholder': 'For postal correspondence'}),
...@@ -116,17 +116,17 @@ class RegistrationForm(forms.Form): ...@@ -116,17 +116,17 @@ class RegistrationForm(forms.Form):
'password': self.cleaned_data['password'], 'password': self.cleaned_data['password'],
'is_active': False 'is_active': False
}) })
affiliation, __ = Affiliation.objects.get_or_create( # institute, __ = Institute.objects.get_or_create(
country=self.cleaned_data['country_of_employment'], # country=self.cleaned_data['country_of_employment'],
name=self.cleaned_data['affiliation'], # name=self.cleaned_data['affiliation'],
) # )
contributor, new = Contributor.objects.get_or_create(**{ contributor, new = Contributor.objects.get_or_create(**{
'user': user, 'user': user,
'invitation_key': self.cleaned_data.get('invitation_key', ''), 'invitation_key': self.cleaned_data.get('invitation_key', ''),
'title': self.cleaned_data['title'], 'title': self.cleaned_data['title'],
'orcid_id': self.cleaned_data['orcid_id'], 'orcid_id': self.cleaned_data['orcid_id'],
'address': self.cleaned_data['address'], 'address': self.cleaned_data['address'],
'affiliation': affiliation, # 'affiliation': institute,
'personalwebpage': self.cleaned_data['personalwebpage'], 'personalwebpage': self.cleaned_data['personalwebpage'],
}) })
...@@ -261,8 +261,8 @@ class UpdateUserDataForm(forms.ModelForm): ...@@ -261,8 +261,8 @@ class UpdateUserDataForm(forms.ModelForm):
class UpdatePersonalDataForm(forms.ModelForm): class UpdatePersonalDataForm(forms.ModelForm):
country_of_employment = LazyTypedChoiceField(choices=countries, widget=CountrySelectWidget()) # country_of_employment = LazyTypedChoiceField(choices=countries, widget=CountrySelectWidget())
affiliation = forms.CharField(max_length=300) # affiliation = forms.CharField(max_length=300)
class Meta: class Meta:
model = Contributor model = Contributor
...@@ -277,24 +277,24 @@ class UpdatePersonalDataForm(forms.ModelForm): ...@@ -277,24 +277,24 @@ class UpdatePersonalDataForm(forms.ModelForm):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)
self.fields['country_of_employment'].initial = self.instance.affiliation.country # self.fields['country_of_employment'].initial = self.instance.affiliation.country
self.fields['affiliation'].initial = self.instance.affiliation.name # self.fields['affiliation'].initial = self.instance.affiliation.name
def save(self, commit=True): def save(self, commit=True):
contributor = super().save(commit) contributor = super().save(commit)
if commit: # if commit:
if contributor.affiliation.contributors.count() == 1: # if contributor.affiliation.contributors.count() == 1:
# Just update if there are no other people using this Affiliation # # Just update if there are no other people using this Affiliation
affiliation = contributor.affiliation # affiliation = contributor.affiliation
affiliation.name = self.cleaned_data['affiliation'] # affiliation.name = self.cleaned_data['affiliation']
affiliation.country = self.cleaned_data['country_of_employment'] # affiliation.country = self.cleaned_data['country_of_employment']
affiliation.save() # affiliation.save()
else: # else:
affiliation, __ = Affiliation.objects.get_or_create( # affiliation, __ = Affiliation.objects.get_or_create(
name=self.cleaned_data['affiliation'], # name=self.cleaned_data['affiliation'],
country=self.cleaned_data['country_of_employment']) # country=self.cleaned_data['country_of_employment'])
contributor.affiliation = affiliation # contributor.affiliation = affiliation
contributor.save() # contributor.save()
return contributor return contributor
def sync_lists(self): def sync_lists(self):
......
...@@ -17,6 +17,6 @@ class Migration(migrations.Migration): ...@@ -17,6 +17,6 @@ class Migration(migrations.Migration):
migrations.AddField( migrations.AddField(
model_name='contributor', model_name='contributor',
name='_affiliation', name='_affiliation',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='affiliations.Affiliation'), field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='affiliations.Institute'),
), ),
] ]
...@@ -26,6 +26,6 @@ class Migration(migrations.Migration): ...@@ -26,6 +26,6 @@ class Migration(migrations.Migration):
migrations.AlterField( migrations.AlterField(
model_name='contributor', model_name='contributor',
name='_affiliation', name='_affiliation',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='contributors', to='affiliations.Affiliation'), field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='contributors', to='affiliations.Institute'),
), ),
] ]
...@@ -52,7 +52,7 @@ class Contributor(models.Model): ...@@ -52,7 +52,7 @@ class Contributor(models.Model):
blank=True) blank=True)
old_country_of_employment = CountryField() old_country_of_employment = CountryField()
old_affiliation = models.CharField(max_length=300, verbose_name='affiliation') old_affiliation = models.CharField(max_length=300, verbose_name='affiliation')
affiliation = models.ForeignKey('affiliations.Affiliation', null=True, blank=True, affiliation = models.ForeignKey('affiliations.Institute', null=True, blank=True,
related_name='contributors') related_name='contributors')
address = models.CharField(max_length=1000, verbose_name="address", address = models.CharField(max_length=1000, verbose_name="address",
blank=True) blank=True)
......
...@@ -317,7 +317,7 @@ ...@@ -317,7 +317,7 @@
<h3>SciPost Administation</h3> <h3>SciPost Administation</h3>
<ul> <ul>
<li><a href="{% url 'affiliations:affiliations' %}">Manage Affiliations database</a></li> <li><a href="{% url 'affiliations:institutes' %}">Manage Institutes database</a></li>
</ul> </ul>
{% endif %} {% endif %}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment