remove old volunteers app
This commit is contained in:
parent
4cc5336214
commit
09a86a6c46
|
@ -1,12 +0,0 @@
|
||||||
from django.contrib import admin
|
|
||||||
|
|
||||||
from ponyconf.admin import SiteAdminMixin
|
|
||||||
|
|
||||||
from .models import Activity
|
|
||||||
|
|
||||||
|
|
||||||
class ActivityAdmin(SiteAdminMixin, admin.ModelAdmin):
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
admin.site.register(Activity, ActivityAdmin)
|
|
|
@ -1,5 +0,0 @@
|
||||||
from django.apps import AppConfig
|
|
||||||
|
|
||||||
|
|
||||||
class VolunteersConfig(AppConfig):
|
|
||||||
name = 'volunteers'
|
|
|
@ -1,23 +0,0 @@
|
||||||
from django import forms
|
|
||||||
|
|
||||||
from .models import Activity
|
|
||||||
|
|
||||||
|
|
||||||
class ActivityForm(forms.ModelForm):
|
|
||||||
class Meta:
|
|
||||||
model = Activity
|
|
||||||
fields=['name', 'description', 'participants']
|
|
||||||
|
|
||||||
|
|
||||||
class VolunteerFilterForm(forms.Form):
|
|
||||||
activity = forms.MultipleChoiceField(
|
|
||||||
required=False,
|
|
||||||
widget=forms.CheckboxSelectMultiple,
|
|
||||||
choices=[],
|
|
||||||
)
|
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
|
||||||
site = kwargs.pop('site')
|
|
||||||
super().__init__(*args, **kwargs)
|
|
||||||
activities = Activity.objects.filter(site=site)
|
|
||||||
self.fields['activity'].choices = activities.values_list('slug', 'name')
|
|
|
@ -1,40 +0,0 @@
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Generated by Django 1.10.3 on 2017-01-13 10:49
|
|
||||||
from __future__ import unicode_literals
|
|
||||||
|
|
||||||
import autoslug.fields
|
|
||||||
from django.conf import settings
|
|
||||||
from django.db import migrations, models
|
|
||||||
import django.db.models.deletion
|
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
|
||||||
|
|
||||||
initial = True
|
|
||||||
|
|
||||||
dependencies = [
|
|
||||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
|
||||||
('sites', '0002_alter_domain_unique'),
|
|
||||||
]
|
|
||||||
|
|
||||||
operations = [
|
|
||||||
migrations.CreateModel(
|
|
||||||
name='Activity',
|
|
||||||
fields=[
|
|
||||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
||||||
('name', models.CharField(max_length=256, verbose_name='Name')),
|
|
||||||
('slug', autoslug.fields.AutoSlugField(editable=False, populate_from='name')),
|
|
||||||
('description', models.TextField(blank=True, verbose_name='Description')),
|
|
||||||
('participants', models.ManyToManyField(blank=True, related_name='activities', to=settings.AUTH_USER_MODEL, verbose_name='Participants')),
|
|
||||||
('site', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='sites.Site')),
|
|
||||||
],
|
|
||||||
options={
|
|
||||||
'verbose_name_plural': 'Activities',
|
|
||||||
'verbose_name': 'Activity',
|
|
||||||
},
|
|
||||||
),
|
|
||||||
migrations.AlterUniqueTogether(
|
|
||||||
name='activity',
|
|
||||||
unique_together=set([('site', 'name')]),
|
|
||||||
),
|
|
||||||
]
|
|
|
@ -1,23 +0,0 @@
|
||||||
from django.db import models
|
|
||||||
from django.contrib.sites.models import Site
|
|
||||||
from django.utils.translation import ugettext_lazy as _
|
|
||||||
from django.contrib.auth.models import User
|
|
||||||
|
|
||||||
from autoslug import AutoSlugField
|
|
||||||
|
|
||||||
|
|
||||||
class Activity(models.Model):
|
|
||||||
|
|
||||||
site = models.ForeignKey(Site, on_delete=models.CASCADE)
|
|
||||||
name = models.CharField(max_length=256, verbose_name=_('Name'))
|
|
||||||
slug = AutoSlugField(populate_from='name')
|
|
||||||
description = models.TextField(blank=True, verbose_name=_('Description'))
|
|
||||||
participants = models.ManyToManyField(User, blank=True, related_name='activities', verbose_name=_('Participants'))
|
|
||||||
|
|
||||||
class Meta:
|
|
||||||
unique_together = ('site', 'name')
|
|
||||||
verbose_name = _('Activity')
|
|
||||||
verbose_name_plural = _('Activities')
|
|
||||||
|
|
||||||
def __str__(self):
|
|
||||||
return self.name
|
|
|
@ -1,31 +0,0 @@
|
||||||
{% extends 'base.html' %}
|
|
||||||
|
|
||||||
{% load accounts_tags i18n %}
|
|
||||||
|
|
||||||
{% block volunteertab %} class="active"{% endblock %}
|
|
||||||
|
|
||||||
{% block content %}
|
|
||||||
|
|
||||||
<h1>{% trans "Enrole as volunteer" %}</h1>
|
|
||||||
|
|
||||||
{% for activity in activities %}
|
|
||||||
{% if forloop.first %}<div class="list-group">{% endif %}
|
|
||||||
<div class="list-group-item{% if request.user in activity.participants.all %} list-group-item-info{% endif %}">
|
|
||||||
<h4 clas="list-group-item-heading">{{ activity.name }}</h4>
|
|
||||||
<p class="list-group-item-text">
|
|
||||||
<p>{{ activity.description }}</p>
|
|
||||||
<p>
|
|
||||||
{% if request.user in activity.participants.all %}
|
|
||||||
<a class="btn btn-danger" href="{% url 'enrole-as-volunteer' slug=activity.slug %}">{% trans "Sorry, I have a setback" %}</a>
|
|
||||||
{% else %}
|
|
||||||
<a class="btn btn-primary" href="{% url 'enrole-as-volunteer' slug=activity.slug %}">{% trans "I will be happy to help on that!" %}</a>
|
|
||||||
{% endif %}
|
|
||||||
</p>
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
{% if forloop.last %}</div>{% endif %}
|
|
||||||
{% empty %}
|
|
||||||
<em>{% trans "We are not yet looking for volunteers … come back later!" %}</em>
|
|
||||||
{% endfor %}
|
|
||||||
|
|
||||||
{% endblock %}
|
|
|
@ -1,72 +0,0 @@
|
||||||
{% extends 'staff.html' %}
|
|
||||||
|
|
||||||
{% load bootstrap3 i18n %}
|
|
||||||
|
|
||||||
{% block volunteerstab %} class="active"{% endblock %}
|
|
||||||
|
|
||||||
{% block content %}
|
|
||||||
|
|
||||||
<h1>{% trans "Volunteers" %}</h1>
|
|
||||||
|
|
||||||
<a class="btn btn-primary" role="button" data-toggle="collapse" href="#filter" aria-expanded="{{ show_filters|yesno:"true,false" }}" aria-controles="filter">{% trans "Show filtering options…" %}</a>
|
|
||||||
|
|
||||||
<br /><br />
|
|
||||||
|
|
||||||
<div class="collapse{{ show_filters|yesno:" in," }}" id="filter">
|
|
||||||
<div class="well">
|
|
||||||
<form class="form-horizontal" method="get">
|
|
||||||
{% bootstrap_form filter_form %}
|
|
||||||
<input type="submit" class="btn btn-success" value="{% trans "Filter" %}">
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<table class="table table-bordered table-hover">
|
|
||||||
<caption>{% trans "Total:" %} {{ volunteer_list|length }} {% trans "volunteer" %}{{ volunteer_list|length|pluralize }}
|
|
||||||
</caption>
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th class="text-center">{% trans "Username" %}</th>
|
|
||||||
<th class="text-center">{% trans "Fullname" %}</th>
|
|
||||||
<th class="text-center">{% trans "Activities" %}</th>
|
|
||||||
<th class="text-center"></th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
{% for volunteer in volunteer_list %}
|
|
||||||
{% if forloop.first %}
|
|
||||||
<tbody>
|
|
||||||
{% endif %}
|
|
||||||
<tr>
|
|
||||||
<td><a href="{% url 'show-participant' username=volunteer.user.username %}">{{ volunteer.user.username }}</a></td>
|
|
||||||
<td>{{ volunteer.user.get_full_name }}</td>
|
|
||||||
<td>
|
|
||||||
{% for activity in volunteer.user.activities.all %}
|
|
||||||
<span class="badge">{{ activity }}</span>
|
|
||||||
{% endfor %}
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<a class="btn btn-{% if volunteer.conversation.messages.last.author == volunteer.user %}primary{% else %}default{% endif %}" href="{% url 'user-conversation' volunteer.user.username %}">{% trans "Contact" %}</a>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
{% if forloop.last %}
|
|
||||||
</tbody>
|
|
||||||
{% endif %}
|
|
||||||
{% endfor %}
|
|
||||||
</table>
|
|
||||||
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block js_end %}
|
|
||||||
<script type="text/javascript">
|
|
||||||
jQuery(document).ready(function($) {
|
|
||||||
$(".clickable-row").click(function() {
|
|
||||||
window.location = $(this).data("href");
|
|
||||||
});
|
|
||||||
|
|
||||||
var anchor = window.location.hash.replace("#", "");
|
|
||||||
if (anchor == "filter") {
|
|
||||||
$("#filter").collapse('show');
|
|
||||||
}
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
{% endblock %}
|
|
|
@ -1,3 +0,0 @@
|
||||||
from django.test import TestCase
|
|
||||||
|
|
||||||
# Create your tests here.
|
|
|
@ -1,13 +0,0 @@
|
||||||
from django.conf.urls import url
|
|
||||||
|
|
||||||
from . import views
|
|
||||||
|
|
||||||
|
|
||||||
urlpatterns = [
|
|
||||||
url(r'^enrole/$', views.enrole, name='enrole-as-volunteer'),
|
|
||||||
url(r'^enrole/(?P<slug>[-\w]+)/$', views.enrole, name='enrole-as-volunteer'),
|
|
||||||
url(r'^list/$', views.volunteer_list, name='list-volunteers'),
|
|
||||||
url(r'^activities/$', views.ActivityList.as_view(), name='list-activities'),
|
|
||||||
url(r'^activities/add/$', views.ActivityCreate.as_view(), name='add-activity'),
|
|
||||||
url(r'^activities/(?P<slug>[-\w]+)/edit/$', views.ActivityUpdate.as_view(), name='edit-activity'),
|
|
||||||
]
|
|
|
@ -1,75 +0,0 @@
|
||||||
from django.shortcuts import render, get_object_or_404, redirect
|
|
||||||
from django.contrib.sites.shortcuts import get_current_site
|
|
||||||
from django.views.generic import CreateView, DetailView, ListView, UpdateView
|
|
||||||
from django.contrib.auth.decorators import login_required
|
|
||||||
|
|
||||||
from ponyconf.mixins import OnSiteFormMixin
|
|
||||||
|
|
||||||
from accounts.decorators import orga_required, staff_required
|
|
||||||
from accounts.mixins import OrgaRequiredMixin, StaffRequiredMixin
|
|
||||||
from accounts.models import Participation
|
|
||||||
|
|
||||||
from .models import Activity
|
|
||||||
from .forms import ActivityForm, VolunteerFilterForm
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
|
||||||
def enrole(request, slug=None):
|
|
||||||
if slug:
|
|
||||||
# TODO: enrole action should be done on post (with bootstrap modal confirmation box?)
|
|
||||||
activity = get_object_or_404(Activity, site=get_current_site(request), slug=slug)
|
|
||||||
if request.user in activity.participants.all():
|
|
||||||
activity.participants.remove(request.user)
|
|
||||||
else:
|
|
||||||
activity.participants.add(request.user)
|
|
||||||
activity.save()
|
|
||||||
return redirect('enrole-as-volunteer')
|
|
||||||
activities = Activity.objects.filter(site=get_current_site(request))
|
|
||||||
return render(request, 'volunteers/volunteer_enrole.html', {
|
|
||||||
'activities': activities,
|
|
||||||
})
|
|
||||||
|
|
||||||
|
|
||||||
@staff_required
|
|
||||||
def volunteer_list(request):
|
|
||||||
show_filters = False
|
|
||||||
site = get_current_site(request)
|
|
||||||
filter_form = VolunteerFilterForm(request.GET or None, site=site)
|
|
||||||
# Filtering
|
|
||||||
volunteers = Participation.objects.filter(site=site,user__activities__isnull=False).order_by('pk').distinct()
|
|
||||||
if filter_form.is_valid():
|
|
||||||
data = filter_form.cleaned_data
|
|
||||||
if len(data['activity']):
|
|
||||||
show_filters = True
|
|
||||||
volunteers = volunteers.filter(user__activities__slug__in=data['activity'])
|
|
||||||
return render(request, 'volunteers/volunteer_list.html', {
|
|
||||||
'volunteer_list': volunteers,
|
|
||||||
'filter_form': filter_form,
|
|
||||||
'show_filters': show_filters,
|
|
||||||
})
|
|
||||||
|
|
||||||
|
|
||||||
class ActivityMixin(object):
|
|
||||||
def get_queryset(self):
|
|
||||||
return Activity.objects.filter(site=get_current_site(self.request)).all()
|
|
||||||
|
|
||||||
|
|
||||||
class ActivityFormMixin(OnSiteFormMixin):
|
|
||||||
form_class = ActivityForm
|
|
||||||
|
|
||||||
|
|
||||||
class ActivityList(StaffRequiredMixin, ActivityMixin, ListView):
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
class ActivityCreate(OrgaRequiredMixin, ActivityMixin, ActivityFormMixin, CreateView):
|
|
||||||
model = Activity
|
|
||||||
|
|
||||||
|
|
||||||
class ActivityUpdate(OrgaRequiredMixin, ActivityMixin, ActivityFormMixin, UpdateView):
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
class ActivityDetail(StaffRequiredMixin, ActivityMixin, DetailView):
|
|
||||||
pass
|
|
Loading…
Reference in New Issue