SciPost Code Repository

Skip to content
Snippets Groups Projects
Commit 7ec777cd authored by Jean-Sébastien Caux's avatar Jean-Sébastien Caux
Browse files

Update SubsidyAttachments handling

parent f9d2799f
No related branches found
No related tags found
No related merge requests found
# -*- coding: utf-8 -*-
# Generated by Django 1.11.4 on 2019-02-25 06:47
from __future__ import unicode_literals
from django.db import migrations, models
import finances.models
import scipost.storage
class Migration(migrations.Migration):
dependencies = [
('finances', '0014_subsidy_renewable'),
]
operations = [
migrations.AlterField(
model_name='subsidyattachment',
name='attachment',
field=models.FileField(storage=scipost.storage.SecureFileStorage(), upload_to=finances.models.subsidy_attachment_path),
),
]
...@@ -32,7 +32,7 @@ class Subsidy(models.Model): ...@@ -32,7 +32,7 @@ class Subsidy(models.Model):
- a donation - a donation
The date field represents the date at which the Subsidy was formally agreed, The date field represents the date at which the Subsidy was formally agreed,
or the agreement enters into force. or (e.g. for Sponsorship Agreements) the date at which the agreement enters into force.
The date_until field is optional, and represents (where applicable) the date The date_until field is optional, and represents (where applicable) the date
after which the object of the Subsidy is officially terminated. after which the object of the Subsidy is officially terminated.
""" """
...@@ -91,11 +91,19 @@ class Subsidy(models.Model): ...@@ -91,11 +91,19 @@ class Subsidy(models.Model):
return 'transparent' return 'transparent'
def subsidy_attachment_path(instance, filename):
"""
Save the uploaded SubsidyAttachments to country-specific folders.
"""
return 'uploads/finances/subsidies/{0}/{1}/{2}'.format(
instance.subsidy.date.strftime('%Y'),
instance.subsidy.organization.country, filename)
class SubsidyAttachment(models.Model): class SubsidyAttachment(models.Model):
""" """
A document related to a Subsidy. A document related to a Subsidy.
""" """
attachment = models.FileField(upload_to='UPLOADS/FINANCES/SUBSIDIES/ATTACHMENTS', attachment = models.FileField(upload_to=subsidy_attachment_path,
storage=SecureFileStorage()) storage=SecureFileStorage())
name = models.CharField(max_length=128) name = models.CharField(max_length=128)
subsidy = models.ForeignKey('finances.Subsidy', related_name='attachments', subsidy = models.ForeignKey('finances.Subsidy', related_name='attachments',
......
{% extends 'finances/base.html' %} {% extends 'finances/base.html' %}
{% load bootstrap %} {% load bootstrap %}
{% load countries %}
{% load staticfiles %}
{% block breadcrumb_items %} {% block breadcrumb_items %}
{{ block.super }} {{ block.super }}
<span class="breadcrumb-item"><a href="{% url 'finances:subsidies' %}">Subsidies</a></span> <span class="breadcrumb-item"><a href="{% url 'finances:subsidies' %}">Subsidies</a></span>
<span class="breadcrumb-item">{% if form.instance.id %}Update {{ form.instance }}{% else %}Add new SubsidyAttachment{% endif %}</span> <span class="breadcrumb-item">{% if form.instance.id %}Update {{ form.instance }}{% else %}Add new Subsidy Attachment{% endif %}</span>
{% endblock %} {% endblock %}
{% block pagetitle %}: SubsidyAttachments{% endblock pagetitle %} {% block pagetitle %}: SubsidyAttachments{% endblock pagetitle %}
{% block headsup %}
<link rel="stylesheet" href="{% static 'flags/sprite-hq.css' %}">
{% endblock headsup %}
{% block content %} {% block content %}
<div class="row">
<div class="col-12">
<p><strong>N.B.:</strong> for Sponsorship Agreements, please adopt the following format for the file names:</p>
<p>
<em>SciPost_Sponsorship_<span class="text-muted">[year]</span>_<span class="text-muted">[2-letter country code]</span>_<span class="text-muted">[Organization acronym or short name]</span>.pdf</em><br/>in which <span class="text-muted">[year]</span> is the year of validity of the Agreement.
</p>
</div>
</div>
<div class="row">
<div class="col-2">
<p>Examples:</p>
</div>
<div class="col-1">
</div>
<div class="col-9">
<ul class="list-unstyled">
<li><em>SciPost_Sponsorship_2019_AU_UniMelb.pdf</em></li>
<li><em>SciPost_Sponsorship_2019_DE_MPDL.pdf</em></li>
</ul>
</div>
</div>
<div class="row">
<div class="col-3">
<h4>Hover on flag to view country code</h4>
<p class="small text-muted">[only countries with at least one Organization are listed]</p>
</div>
<div class="col-8">
<ul>
{% for code in countrycodes %}
{% get_country code as country_obj %}
<li style="display: inline-block;">
<i class="{{ country_obj.flag_css }}" aria-label="{{ country_obj.code }}" data-toggle="tooltip" title="{{ country_obj.name }}: {{ country_obj.code }}"></i>
</li>
{% endfor %}
</ul>
</div>
</div>
<div class="row"> <div class="row">
<div class="col-12"> <div class="col-12">
<form enctype="multipart/form-data" action="" method="post"> <form enctype="multipart/form-data" action="" method="post">
......
...@@ -19,6 +19,7 @@ from .forms import SubsidyForm, SubsidyAttachmentForm, LogsFilter ...@@ -19,6 +19,7 @@ from .forms import SubsidyForm, SubsidyAttachmentForm, LogsFilter
from .models import Subsidy, SubsidyAttachment, WorkLog from .models import Subsidy, SubsidyAttachment, WorkLog
from .utils import slug_to_id from .utils import slug_to_id
from organizations.models import Organization
from scipost.mixins import PermissionsMixin from scipost.mixins import PermissionsMixin
...@@ -96,13 +97,19 @@ class SubsidyAttachmentCreateView(PermissionsMixin, CreateView): ...@@ -96,13 +97,19 @@ class SubsidyAttachmentCreateView(PermissionsMixin, CreateView):
form_class = SubsidyAttachmentForm form_class = SubsidyAttachmentForm
template_name = 'finances/subsidyattachment_form.html' template_name = 'finances/subsidyattachment_form.html'
def get_success_url(self): def get_context_data(self, *args, **kwargs):
return reverse_lazy('finances:subsidy_details', kwargs={'pk': self.object.subsidy.id}) context = super().get_context_data(*args, **kwargs)
context['countrycodes'] = [code['country'] for code in list(
Organization.objects.all().distinct('country').values('country'))]
return context
def get_initial(self): def get_initial(self):
subsidy = get_object_or_404(Subsidy, pk=self.kwargs.get('subsidy_id')) subsidy = get_object_or_404(Subsidy, pk=self.kwargs.get('subsidy_id'))
return {'subsidy': subsidy} return {'subsidy': subsidy}
def get_success_url(self):
return reverse_lazy('finances:subsidy_details', kwargs={'pk': self.object.subsidy.id})
class SubsidyAttachmentUpdateView(PermissionsMixin, UpdateView): class SubsidyAttachmentUpdateView(PermissionsMixin, UpdateView):
""" """
...@@ -114,6 +121,12 @@ class SubsidyAttachmentUpdateView(PermissionsMixin, UpdateView): ...@@ -114,6 +121,12 @@ class SubsidyAttachmentUpdateView(PermissionsMixin, UpdateView):
template_name = 'finances/subsidyattachment_form.html' template_name = 'finances/subsidyattachment_form.html'
success_url = reverse_lazy('finances:subsidies') success_url = reverse_lazy('finances:subsidies')
def get_context_data(self, *args, **kwargs):
context = super().get_context_data(*args, **kwargs)
context['countrycodes'] = [code['country'] for code in list(
Organization.objects.all().distinct('country').values('country'))]
return context
def get_success_url(self): def get_success_url(self):
return reverse_lazy('finances:subsidy_details', kwargs={'pk': self.object.subsidy.id}) return reverse_lazy('finances:subsidy_details', kwargs={'pk': self.object.subsidy.id})
......
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