diff --git a/scipost/admin.py b/scipost/admin.py index af7ea2f7840bc90c5f207a131569457c6694055d..2f137a42295438e82e056a70de4a15d600104ca4 100644 --- a/scipost/admin.py +++ b/scipost/admin.py @@ -8,7 +8,7 @@ from django.contrib.auth.models import User, Permission from scipost.models import Contributor, Remark,\ DraftInvitation,\ AffiliationObject,\ - SupportingPartner, SPBMembershipAgreement, RegistrationInvitation,\ + RegistrationInvitation,\ AuthorshipClaim, PrecookedEmail,\ EditorialCollege, EditorialCollegeFellowship @@ -126,20 +126,6 @@ class AffiliationObjectAdmin(admin.ModelAdmin): admin.site.register(AffiliationObject, AffiliationObjectAdmin) -class SPBMembershipAgreementInline(admin.StackedInline): - model = SPBMembershipAgreement - - -class SupportingPartnerAdmin(admin.ModelAdmin): - search_fields = ['institution', 'institution_acronym', - 'institution_address', 'contact_person'] - inlines = [ - SPBMembershipAgreementInline, - ] - - -admin.site.register(SupportingPartner, SupportingPartnerAdmin) - class EditorialCollegeAdmin(admin.ModelAdmin): search_fields = ['discipline', 'member'] diff --git a/scipost/constants.py b/scipost/constants.py index 790f06d6669469d03a4d664a8a4d0a865a6d0095..8b58a19e11103a9ece14ffd464f32a37316b2b1e 100644 --- a/scipost/constants.py +++ b/scipost/constants.py @@ -186,39 +186,3 @@ SCIPOST_FROM_ADDRESSES = ( ('J. van Wezel', 'J. van Wezel <vanwezel@scipost.org>'), ) SciPost_from_addresses_dict = dict(SCIPOST_FROM_ADDRESSES) - -# -# Supporting partner models -# -PARTNER_TYPES = ( - ('Int. Fund. Agency', 'International Funding Agency'), - ('Nat. Fund. Agency', 'National Funding Agency'), - ('Nat. Library', 'National Library'), - ('Univ. Library', 'University Library'), - ('Res. Library', 'Research Library'), - ('Consortium', 'Consortium'), - ('Foundation', 'Foundation'), - ('Individual', 'Individual'), -) - -PARTNER_STATUS = ( - ('Prospective', 'Prospective'), - ('Active', 'Active'), - ('Inactive', 'Inactive'), -) - - -SPB_MEMBERSHIP_AGREEMENT_STATUS = ( - ('Submitted', 'Request submitted by Partner'), - ('Pending', 'Sent to Partner, response pending'), - ('Signed', 'Signed by Partner'), - ('Honoured', 'Honoured: payment of Partner received'), -) - -SPB_MEMBERSHIP_DURATION = ( - (datetime.timedelta(days=365), '1 year'), - (datetime.timedelta(days=730), '2 years'), - (datetime.timedelta(days=1095), '3 years'), - (datetime.timedelta(days=1460), '4 years'), - (datetime.timedelta(days=1825), '5 years'), -) diff --git a/scipost/forms.py b/scipost/forms.py index e1508ded5f231432cd2cb86afe3ff354c3b84cd1..7d830980a558b50c03ae13a09758c4875e4a4852 100644 --- a/scipost/forms.py +++ b/scipost/forms.py @@ -16,7 +16,6 @@ from crispy_forms.layout import Layout, Div, Field, HTML from .constants import SCIPOST_DISCIPLINES, TITLE_CHOICES, SCIPOST_FROM_ADDRESSES from .models import Contributor, DraftInvitation, RegistrationInvitation,\ - SupportingPartner, SPBMembershipAgreement,\ UnavailabilityPeriod, PrecookedEmail from journals.models import Publication @@ -311,62 +310,3 @@ class SendPrecookedEmailForm(forms.Form): required=False, initial=False, label='Include SciPost summary at end of message') from_address = forms.ChoiceField(choices=SCIPOST_FROM_ADDRESSES) - - -############################# -# Supporting Partners Board # -############################# - -class SupportingPartnerForm(forms.ModelForm): - class Meta: - model = SupportingPartner - fields = ['partner_type', 'institution', - 'institution_acronym', 'institution_address', - 'consortium_members' - ] - - def __init__(self, *args, **kwargs): - super(SupportingPartnerForm, self).__init__(*args, **kwargs) - self.fields['institution_address'].widget = forms.Textarea({'rows': 8, }) - self.fields['consortium_members'].widget.attrs.update( - {'placeholder': 'Please list the names of the institutions within the consortium', }) - self.helper = FormHelper() - self.helper.layout = Layout( - Div( - Div( - Field('institution'), - Field('institution_acronym'), - Field('institution_address'), - css_class='col-6'), - Div( - Field('partner_type'), - Field('consortium_members'), - css_class='col-6'), - css_class='row') - ) - - -class SPBMembershipForm(forms.ModelForm): - class Meta: - model = SPBMembershipAgreement - fields = ['start_date', 'duration', 'offered_yearly_contribution'] - - def __init__(self, *args, **kwargs): - super(SPBMembershipForm, self).__init__(*args, **kwargs) - self.fields['start_date'].widget.attrs.update({'placeholder': 'YYYY-MM-DD'}) - self.fields['offered_yearly_contribution'].initial = 1000 - self.helper = FormHelper() - self.helper.layout = Layout( - Div( - Div( - Field('start_date'), - css_class="col-4"), - Div( - Field('duration'), - css_class="col-2"), - Div( - Field('offered_yearly_contribution'), - HTML('(euros)'), - css_class="col-4"), - css_class="row"), - ) diff --git a/scipost/migrations/0055_auto_20170519_0937.py b/scipost/migrations/0055_auto_20170519_0937.py new file mode 100644 index 0000000000000000000000000000000000000000..a3818779c198cd915fc642c64d90918024b12a9a --- /dev/null +++ b/scipost/migrations/0055_auto_20170519_0937.py @@ -0,0 +1,29 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.3 on 2017-05-19 07:37 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('scipost', '0054_delete_newsitem'), + ] + + operations = [ + migrations.RemoveField( + model_name='spbmembershipagreement', + name='partner', + ), + migrations.RemoveField( + model_name='supportingpartner', + name='contact_person', + ), + migrations.DeleteModel( + name='SPBMembershipAgreement', + ), + migrations.DeleteModel( + name='SupportingPartner', + ), + ] diff --git a/scipost/models.py b/scipost/models.py index 6cd9f4bca121d80600f13367d54f7edf41ec8118..771bf02721114664d32979fc7c6bc0021b3014d3 100644 --- a/scipost/models.py +++ b/scipost/models.py @@ -17,9 +17,7 @@ from .constants import SCIPOST_DISCIPLINES, SCIPOST_SUBJECT_AREAS,\ subject_areas_dict, CONTRIBUTOR_STATUS, TITLE_CHOICES,\ INVITATION_STYLE, INVITATION_TYPE,\ INVITATION_CONTRIBUTOR, INVITATION_FORMAL,\ - AUTHORSHIP_CLAIM_PENDING, AUTHORSHIP_CLAIM_STATUS,\ - PARTNER_TYPES, PARTNER_STATUS,\ - SPB_MEMBERSHIP_AGREEMENT_STATUS, SPB_MEMBERSHIP_DURATION + AUTHORSHIP_CLAIM_PENDING, AUTHORSHIP_CLAIM_STATUS from .fields import ChoiceArrayField from .managers import FellowManager, ContributorManager @@ -400,43 +398,6 @@ class AffiliationObject(models.Model): subunit = models.CharField(max_length=128) -############################# -# Supporting Partners Board # -############################# - -class SupportingPartner(models.Model): - """ - Supporting Partners. - """ - partner_type = models.CharField(max_length=32, choices=PARTNER_TYPES) - status = models.CharField(max_length=16, choices=PARTNER_STATUS) - institution = models.CharField(max_length=256) - institution_acronym = models.CharField(max_length=10) - institution_address = models.CharField(max_length=1000) - consortium_members = models.TextField(blank=True, null=True) - contact_person = models.ForeignKey(Contributor, on_delete=models.CASCADE) - - def __str__(self): - return self.institution_acronym + ' (' + self.get_status_display() + ')' - - -class SPBMembershipAgreement(models.Model): - """ - Agreement for membership of the Supporting Partners Board. - A new instance is created each time an Agreement is made or renewed. - """ - partner = models.ForeignKey(SupportingPartner, on_delete=models.CASCADE) - status = models.CharField(max_length=16, choices=SPB_MEMBERSHIP_AGREEMENT_STATUS) - date_requested = models.DateField() - start_date = models.DateField() - duration = models.DurationField(choices=SPB_MEMBERSHIP_DURATION) - offered_yearly_contribution = models.SmallIntegerField(default=0) - - def __str__(self): - return (str(self.partner) + - ' [' + self.get_duration_display() + - ' from ' + self.start_date.strftime('%Y-%m-%d') + ']') - ###################### # Static info models # diff --git a/scipost/templates/scipost/SPB_membership_request.html b/scipost/templates/scipost/SPB_membership_request.html deleted file mode 100644 index 2048761d33e9e9e89f7d71d9ba4181d756e24c01..0000000000000000000000000000000000000000 --- a/scipost/templates/scipost/SPB_membership_request.html +++ /dev/null @@ -1,66 +0,0 @@ -{% extends 'scipost/base.html' %} - -{% block pagetitle %}: Supporting Partners Board: Membership request{% endblock pagetitle %} - -{% load staticfiles %} -{% load bootstrap %} -{% block bodysup %} - -<script> -$(document).ready(function(){ - $("#id_consortium_members").hide() - $("label[for='id_consortium_members']").hide() - - $('select#id_partner_type').on('change', function (){ - var selection = $(this).val(); - switch(selection){ - case "Consortium": - $("#id_consortium_members").show() - $("label[for='id_consortium_members']").show() - break; - default: - $("#id_consortium_members").hide() - $("label[for='id_consortium_members']").hide() - } -}); -}); - -</script> - - -<section> - <div class="flex-container"> - <div class="flex-greybox"> - <h1>Supporting Partners Board: Membership Request</h1> - </div> - </div> - - <div class="flex-container"> - <div class="flex-whitebox"> - <p>You can hereby initiate the process to become one of our Supporting Partners.</p> - <p>Filling in this form does not yet constitute a binding agreement.</p> - <p>It simply expresses your interest in considering joining our Supporting Partners Board.</p> - <p>After filling this form, SciPost Administration will contact you with a Partnership - Agreement offer.</p> - <p><em>Note: you will automatically be considered as the contact person for this Partner.</em></p> - - {% if errormessage %} - <p style="color: red;">{{ errormessage }}</p> - {% endif %} - - <form action="{% url 'scipost:SPB_membership_request' %}" method="post"> - {% csrf_token %} - <h3>Partner details:</h3> - - {{ SP_form|bootstrap }} - <h3>Agreement terms:</h3> - {{ membership_form|bootstrap }} - <input class="btn btn-secondary" type="submit" value="Submit"/> - </form> - - </div> - </div> - -</section> - -{% endblock bodysup %} diff --git a/scipost/templates/scipost/supporting_partners.html b/scipost/templates/scipost/supporting_partners.html deleted file mode 100644 index f5ced193e5cf7364cf6501cbbdf892a32e365e58..0000000000000000000000000000000000000000 --- a/scipost/templates/scipost/supporting_partners.html +++ /dev/null @@ -1,136 +0,0 @@ -{% extends 'scipost/base.html' %} - -{% block pagetitle %}: Supporting Partners{% endblock pagetitle %} - -{% load staticfiles %} - -{% load scipost_extras %} - -{% block bodysup %} - - -<section> - <div class="flex-container"> - <div class="flex-greybox"> - <h1>SciPost Supporting Partners</h1> - </div> - </div> - - <div class="flex-container"> - <div class="flex-whitebox"> - - <h3>Openness at strictly minimal cost: the role of professional academics</h3> - <p>A fundamental principle underlining all of SciPost’s activities is openness. This means in particular that SciPost guarantees free online access to all publications in all its Journals (free for readers; all articles are published under the terms of a Creative Commons license (most commonly CC-BY)), and does not charge any article processing fees for publishing (free for authors). All editorial activities are performed by professional academics as part of their normal professional duties: contributors to SciPost are demonstrably dedicated to serving their community, and to realizing the dream of true openness in scientific publishing. SciPost thus achieves the highest possible standards of academic quality and open accessibility while maintaining costs at the lowest achievable level.</p> - - <h3>Financing and sustainability: the role of institutional backers</h3> - <p>Besides relying on the dedicated service of professional scientists for many of its day-to-day operations, SciPost must additionally rely on institutional backers for sustaining its professional-level publishing facilities and other activities. This backing is sought primarily from the organizations which are positively impacted by its activities, directly or indirectly: (inter)national funding agencies, universities, national/university/research libraries, academic consortia, governments and ministries, foundations, benefactors and further interested parties. This financial backing cannot take the form of article processing charges or journal subscriptions, due to SciPost’s operating principles: rather, Supporting Partners provide operating funds to SciPost, these funds being pooled in order to cover maintenance and operation of the web infrastructure at SciPost.org, administration of all site-related activities, production of publications in SciPost Journals and development of new publishing-related services for the international scientific community.</p> - - </div> - </div> - - - - <div class="flex-container"> - <div class="flex-greybox"> - <h1>Supporting Partners Board</h1> - </div> - </div> - - <div class="flex-container"> - <div class="flex-whitebox"> - - <p>We hereby cordially invite interested parties who are supportive of SciPost's mission to join the SciPost Supporting Partners Board by signing a <a href="{% static 'scipost/SPB/SciPost_Supporting_Partner_Agreement.pdf' %}">Partner Agreement</a>.</p> - - <p>Prospective partners can initiate the process leading to Membership by filling the <a href="{% url 'scipost:SPB_membership_request' %}">online request form</a>.</p> - - <br/> - <p>The <a href="{% static 'scipost/SPB/SciPost_Supporting_Partner_Agreement.pdf' %}">Partner Agreement</a> itself contains a detailed presentation of the Foundation, its activities and financial aspects. What follows is a summary of the most important points.</p> - - <br/> - <p>The set of all Supporting Partners forms the SciPost Supporting Partners Board (SPB). Acting as a representative body, the SPB’s purpose is to provide the main financial backing without which SciPost could not continue carrying out its mission, to counsel it in all its operations and to help determine the initiative’s development priorities.</p> - - <p>The SPB has a yearly virtual general meeting, organized and chaired by a representative of the SciPost Foundation. During this meeting, SPB-related topics are discussed, recommendations to the SciPost Foundation can be put forward and voted on by Partners, and general issues on any of SciPost’s activities can be discussed.</p> - - - <h3>Types of Partners</h3> - <p>Supporting Partners can for example be: - <ul> - <li>International/national funding agencies</li> - <li>National/university/research libraries</li> - <li>Consortia (of e.g. universities or libraries)</li> - <li>Government (through e.g. education/science ministries)</li> - <li>Foundations</li> - <li>Benefactors of any other type.</li> - </ul> - </p> - - <h3>Partnership benefits</h3> - <p>All funds originating from Supporting Partners are used to provide services to the academic community as a whole: SciPost operates in a completely open fashion, and the fulfillment of the Foundation’s mission benefits academics worldwide, without any distinction.</p> - <p>Partnership nonetheless provides Partners with a number of additional benefits as compared to non-Partner parties. SciPost agrees to provide its Partners with: - <ol> - <li>A seat on the SciPost Supporting Partners Board, including access to yearly meetings, with voting rights proportional to financial contribution (up to a maximum of 20% of all votes for any individual Partner).</li> - <li>Inclusion in the online listing of Supporting Partners on the SciPost website.</li> - <li>Exclusive ability to feed the Partner’s institutional theses database to the SciPost Theses database, for inclusion in the Theses part of the portal.</li> - <li>Access to the SciPost metadata API (providing among others means to generate yearly metadata summaries relating to SciPost publications for each Contributor employed by the Partner).</li> - <li>Exclusive access to further online tools planned by SciPost during their development stage. The SPB as a whole can provide feedback and request specific features.</li> - </ol> - </p> - - <h3>Financial contribution</h3> - <p>For the financial year 2017, the contributions are set to yearly amounts of: - <table> - <tr> - <td>(Inter)national funding agency:</td><td> </td> - <td>size-dependent tailored agreement</td> - </tr> - <tr> - <td>University/library:</td><td> </td> - <td>€1000 (base; more is greatly appreciated)</td> - </tr> - <tr> - <td>National consortium of universities/libraries:</td><td> </td> - <td>10% bulk discount on the above<br/>(e.g. €3600 for 4 universities)</td> - </tr> - <tr> - <td>Foundations/benefactors:</td><td> </td> - <td>(Partner-set amount of at least €500)</td> - </tr> - </table> - - <p>Note that if the consortium itself is not a legal entity, each individual member must sign a separate Agreement.</p> - <p>All amounts are exclusive of VAT, which will be payable by the Partner where applicable.</p> - - <p><strong>Sustainability - </strong> This norm allows sustainable functioning of SciPost under the expectation that individual institutions be associated to between two and three full publications per year on average (computed using authorship fractions). A Partner who is associated to more authorships and/or who generally recognizes the value of SciPost’s activities, is of course welcome to contribute more.</p> - <p><strong>Donations - </strong>Contributions of less than €500 per year are treated as incidental donations and do not lead to the obtention of Partner benefits.</p> - <p>Note that SciPost has been designated as a Public Benefit Organisation (PBO; in Dutch: Algemeen Nut Beogende Instelling, ANBI) by the Dutch Tax Administration. Natural and legal persons making donations to a PBO may deduct their gifts from their Dutch income tax or corporate income tax (see the PBO page of the Dutch Tax Administration).</p> - - <h3>Activation procedure</h3> - <p>In order to become a Supporting Partner, one must: - <ul> - <li>Fill in the online <a href="{% url 'scipost:SPB_membership_request' %}">membership request form</a> (the form must be filled in by a registered Contributor, employed by or associated to the prospective Partner and acting as an authorized agent for the latter; personal contact details of this person will be treated confidentially).</li> - <li>Wait for the email response from the SciPost administration, containing a Partnership Agreement offer including detailed terms (start date, duration, financial contribution).</li> - <li>Email a scan of the signed copy of the Partnership Agreement to SciPost.</li> - <li>Proceed with the payment of the financial contribution, following invoicing from the SciPost Foundation.</li> - </ul> - </p> - - </div> - </div> -</section> - -{% if request.user|is_in_group:'Editorial Administrators' %} -<section> - <div class="flex-container"> - <div class="flex-greybox"> - <h1>Prospective Partners</h1> - </div> - </div> - <ul> - {% for agreement in prospective_agreements %} - <li>{{ agreement }}</li> - {% endfor %} - </ul> -</section> -{% endif %} - -{% endblock bodysup %} diff --git a/scipost/urls.py b/scipost/urls.py index d12d2fc75c8e25a73214656aff7faab8e44f8238..5b8809d94c62da572e14e96c9f00ed5d6e11769a 100644 --- a/scipost/urls.py +++ b/scipost/urls.py @@ -209,14 +209,4 @@ urlpatterns = [ TemplateView.as_view(template_name='scipost/howto_production.html'), name='howto_production'), - - ############################# - # Supporting Partners Board # - ############################# - - url(r'^supporting_partners$', views.supporting_partners, - name='supporting_partners'), - url(r'^SPB_membership_request$', views.SPB_membership_request, - name='SPB_membership_request'), - ] diff --git a/scipost/views.py b/scipost/views.py index babdffec078b6a3bf8f27e6cc5902acdd632425d..c13ccccca2e268574f51284ef006b40221501ee3 100644 --- a/scipost/views.py +++ b/scipost/views.py @@ -25,14 +25,12 @@ from guardian.decorators import permission_required from .constants import SCIPOST_SUBJECT_AREAS, subject_areas_raw_dict, SciPost_from_addresses_dict from .models import Contributor, CitationNotification, UnavailabilityPeriod,\ DraftInvitation, RegistrationInvitation,\ - AuthorshipClaim, SupportingPartner, SPBMembershipAgreement,\ - EditorialCollege, EditorialCollegeFellowship + AuthorshipClaim, EditorialCollege, EditorialCollegeFellowship from .forms import AuthenticationForm, DraftInvitationForm, UnavailabilityPeriodForm,\ RegistrationForm, RegistrationInvitationForm, AuthorshipClaimForm,\ ModifyPersonalMessageForm, SearchForm, VetRegistrationForm, reg_ref_dict,\ UpdatePersonalDataForm, UpdateUserDataForm, PasswordChangeForm,\ - EmailGroupMembersForm, EmailParticularForm, SendPrecookedEmailForm,\ - SupportingPartnerForm, SPBMembershipForm + EmailGroupMembersForm, EmailParticularForm, SendPrecookedEmailForm from .utils import Utils, EMAIL_FOOTER, SCIPOST_SUMMARY_FOOTER, SCIPOST_SUMMARY_FOOTER_HTML from commentaries.models import Commentary @@ -1272,58 +1270,6 @@ def Fellow_activity_overview(request, Fellow_id=None): return render(request, 'scipost/Fellow_activity_overview.html', context) -############################# -# Supporting Partners Board # -############################# - -def supporting_partners(request): - prospective_agreements = SPBMembershipAgreement.objects.filter( - status='Submitted').order_by('date_requested') - context = {'prospective_partners': prospective_agreements, } - return render(request, 'scipost/supporting_partners.html', context) - - -@login_required -def SPB_membership_request(request): - errormessage = '' - if request.method == 'POST': - SP_form = SupportingPartnerForm(request.POST) - membership_form = SPBMembershipForm(request.POST) - if SP_form.is_valid() and membership_form.is_valid(): - partner = SupportingPartner( - partner_type=SP_form.cleaned_data['partner_type'], - status='Prospective', - institution=SP_form.cleaned_data['institution'], - institution_acronym=SP_form.cleaned_data['institution_acronym'], - institution_address=SP_form.cleaned_data['institution_address'], - contact_person=request.user.contributor, - ) - partner.save() - agreement = SPBMembershipAgreement( - partner=partner, - status='Submitted', - date_requested=timezone.now().date(), - start_date=membership_form.cleaned_data['start_date'], - duration=membership_form.cleaned_data['duration'], - offered_yearly_contribution=membership_form.cleaned_data['offered_yearly_contribution'], - ) - agreement.save() - ack_message = ('Thank you for your SPB Membership request. ' - 'We will get back to you in the very near future ' - 'with details of the proposed agreement.') - context = {'ack_message': ack_message, } - return render(request, 'scipost/acknowledgement.html', context) - else: - errormessage = 'The form was not filled properly.' - - else: - SP_form = SupportingPartnerForm() - membership_form = SPBMembershipForm() - context = {'errormessage': errormessage, - 'SP_form': SP_form, - 'membership_form': membership_form, } - return render(request, 'scipost/SPB_membership_request.html', context) - class AboutView(ListView): model = EditorialCollege