talks accepted & allowed talks

This commit is contained in:
Guilhem Saurel 2016-07-03 22:39:29 +02:00
parent 8e936ccf46
commit 168352958b
7 changed files with 74 additions and 49 deletions

View File

@ -1,27 +1,25 @@
- virer lusername
- premier login -> redirection profile
- temps prévu (20 min / 40 min)
- proposer des talks pour les autres
- gestion staff
- autre couleur change password
- 3ième formulaire profile pour les infos de participation
- changer le widget des topics pour des cases à cocher
- notification si modif constraints
- pre-remplissage constraints
- do i need sound?
- co-speakers
- règle du jeu de lédition
- vote (pas de notif)
- notif modification conf …
- modif de conf : pas de modifs des topics
- rajouter les created sur un peu tous les modèles
- UI reviewers (pour le staff pour nommer des reviewers)
- topic : permettre au staff den rajouter
- topic : qui est reviewer
- visibilité des talks
- visibilité des speakers
- note sur un speaker
- ouverture conf
- mail de bienvenu autre que activation si le mec est inscrit par le staff
- [ ] virer lusername
- [ ] premier login -> redirection profile
- [x] temps prévu (20 min / 40 min)
- [x] proposer des talks pour les autres
- [ ] gestion staff
- [x] autre couleur change password
- [x] 3ième formulaire profile pour les infos de participation
- [x] changer le widget des topics pour des cases à cocher
- [ ] notification si modif constraints
- [ ] pre-remplissage constraints
- [x] do i need sound?
- [x] co-speakers
- [ ] règle du jeu de lédition
- [x] vote (pas de notif)
- [ ] notif modification conf …
- [x] modif de conf : pas de modifs des topics
- [x] rajouter les created sur un peu tous les modèles
- [ ] UI reviewers (pour le staff pour nommer des reviewers)
- [x] topic : permettre au staff den rajouter
- [ ] topic : qui est reviewer
- [x] visibilité des talks
- [x] visibilité des speakers
- [x] note sur un speaker
- [ ] ouverture conf
- [ ] mail de bienvenu autre que activation si le mec est inscrit par le staff

View File

@ -1,11 +1,11 @@
- [x] enregistrement sur le site (pas d'enregistrement fb/linkedin: on aime le libre ici)
- [x] permettre de proposer une participation (conférence/atelier/small talk/etc.).
- [ ] Un speaker rentre un abstract et peut associer un ou des co-speakers.
- [ ] l'équipe organisatrice peut voter pour les conférences (avec un commentaire visible uniquement de l'équipe) et
- [x] Un speaker rentre un abstract et peut associer un ou des co-speakers.
- [x] l'équipe organisatrice peut voter pour les conférences (avec un commentaire visible uniquement de l'équipe) et
les accepter/refuser
- [ ] pour chaque conférence/conférencier, on permet d'échanger avec le conférencier (lui vois ça comme un mail, mais
- [x] pour chaque conférence/conférencier, on permet d'échanger avec le conférencier (lui vois ça comme un mail, mais
côté orga c'est centralisé sur l'UI web... c'est mieux pour le suivi).
- [ ] Notification (par mail) pour les administrateurs des ajout/modification de conférence et des échanges avec les
- [x] Notification (par mail) pour les administrateurs des ajout/modification de conférence et des échanges avec les
intervenants.
- [ ] Gestion du planning des salles (on affecte une track à une salle, mais cela permet surtout de signaler les
doublons d'intervenants/salle/etc.)
@ -15,13 +15,13 @@
- [ ] Génération des badges
- [x] Un speaker et un bénévole peuvent être enregistré par un tiers (responsable de track ou kernel).
- [ ] Gestion des sponsors : niveaux de sponsorings et personnes présentes pour la génération des badges
- [ ] Gestion des différentes thématiques (CRUD)
- [x] Gestion des différentes thématiques (CRUD)
- [ ] Vues à réaliser: listing des propositions, conférence, bénévoles, speakers (permet d'avoir une vue d'ensemble)
- [ ] Champ de note interne sur un speaker (pour noter des préférences par exemple) et sur une proposition de
- [x] Champ de note interne sur un speaker (pour noter des préférences par exemple) et sur une proposition de
conférence
- [ ] Gestion de la date d'ouverture/fermeture de l'appel à conférence (différente selon le type de participation -
i.e. conférence/atelier/stand).
- [ ] On propose par défaut des propositions du type: talk, workshop, booth
- [x] On propose par défaut des propositions du type: talk, workshop, booth
- [x] Profil des intervenenants: nom, prénom, mail, date et heure d'arrivée, date et heure de départ, moyen de
transport, type de connectique, hébergement,
- [ ] Possibilité aux intervenants de récupérer leur billet davion électronique

View File

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-07-03 17:46
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('proposals', '0002_votes'),
]
operations = [
migrations.AddField(
model_name='talk',
name='accepted',
field=models.NullBooleanField(default=None),
),
]

View File

@ -45,6 +45,7 @@ class Talk(PonyConfModel):
description = models.TextField(blank=True, verbose_name='Description')
topics = models.ManyToManyField(Topic, blank=True)
event = models.IntegerField(choices=enum_to_choices(EVENTS), default=EVENTS.conference_short.value)
accepted = models.NullBooleanField(default=None)
objects = models.Manager()
on_site = CurrentSiteManager()

View File

@ -48,6 +48,9 @@
Sum: {{ talk.score }}
<h3>Status:</h3>
{{ talk.accepted|yesno:"✔,✘,?" }}
<h3>Messages:</h3>
{% for message in talk.conversation.messages.all %}
{% include 'conversations/_message_detail.html' %}

View File

@ -1,6 +1,15 @@
from django.db.models import Sum
from django.db.models import Q, Sum
from django.db.models.functions import Coalesce
from accounts.models import Participation
def query_sum(queryset, field):
return queryset.aggregate(s=Coalesce(Sum(field), 0))['s']
def allowed_talks(talks, request):
participation = Participation.on_site.get(user=request.user)
if not participation.orga:
talks = talks.filter(Q(topics__reviewers=participation) | Q(speakers=request.user) | Q(proposer=request.user))
return talks

View File

@ -5,6 +5,7 @@ from django.contrib.auth.models import User
from django.contrib.sites.shortcuts import get_current_site
from django.core.exceptions import PermissionDenied
from django.core.urlresolvers import reverse
from django.db.models import Q
from django.shortcuts import get_object_or_404, redirect, render
from django.views.generic import CreateView, DetailView, ListView
@ -14,6 +15,7 @@ from accounts.models import Participation
from .forms import TalkForm
from .models import Talk, Topic, Vote
from .signals import new_talk
from .utils import allowed_talks
def home(request):
@ -22,32 +24,24 @@ def home(request):
@login_required
def talk_list(request):
participation = Participation.on_site.get(user=request.user)
other_talks = Talk.on_site.exclude(speakers=request.user)
if not participation.orga:
other_talks = other_talks.filter(topics__reviewers=participation)
return render(request, 'proposals/talks.html', {
'my_talks': Talk.on_site.filter(speakers=request.user),
'other_talks': other_talks,
'my_talks': Talk.on_site.filter(Q(speakers=request.user) | Q(proposer=request.user)),
'other_talks': allowed_talks(Talk.on_site.exclude(speakers=request.user, proposer=request.user), request)
})
@login_required
def talk_list_by_topic(request, topic):
topic = get_object_or_404(Topic, slug=topic)
return render(request, 'proposals/talk_list.html', {
'title': 'Talks related to %s:' % topic,
'talk_list': Talk.on_site.filter(topics=topic),
})
talks = allowed_talks(Talk.on_site.filter(topics=topic), request)
return render(request, 'proposals/talk_list.html', {'title': 'Talks related to %s:' % topic, 'talk_list': talks})
@login_required
def talk_list_by_speaker(request, speaker):
speaker = get_object_or_404(User, username=speaker)
return render(request, 'proposals/talk_list.html', {
'title': 'Talks with %s:' % speaker,
'talk_list': Talk.on_site.filter(speakers=speaker),
})
talks = allowed_talks(Talk.on_site.filter(speakers=speaker), request)
return render(request, 'proposals/talk_list.html', {'title': 'Talks with %s:' % speaker, 'talk_list': talks})
@login_required