talks accepted & allowed talks
This commit is contained in:
parent
8e936ccf46
commit
168352958b
|
@ -1,27 +1,25 @@
|
||||||
- virer l’username
|
- [ ] virer l’username
|
||||||
- premier login -> redirection profile
|
- [ ] premier login -> redirection profile
|
||||||
- temps prévu (20 min / 40 min)
|
- [x] temps prévu (20 min / 40 min)
|
||||||
- proposer des talks pour les autres
|
- [x] proposer des talks pour les autres
|
||||||
- gestion staff
|
- [ ] gestion staff
|
||||||
- autre couleur change password
|
- [x] autre couleur change password
|
||||||
- 3ième formulaire profile pour les infos de participation
|
- [x] 3ième formulaire profile pour les infos de participation
|
||||||
- changer le widget des topics pour des cases à cocher
|
- [x] changer le widget des topics pour des cases à cocher
|
||||||
- notification si modif constraints
|
- [ ] notification si modif constraints
|
||||||
- pre-remplissage constraints
|
- [ ] pre-remplissage constraints
|
||||||
- do i need sound?
|
- [x] do i need sound?
|
||||||
- co-speakers
|
- [x] co-speakers
|
||||||
- règle du jeu de l’édition
|
- [ ] règle du jeu de l’édition
|
||||||
- vote (pas de notif)
|
- [x] vote (pas de notif)
|
||||||
- notif modification conf …
|
- [ ] notif modification conf …
|
||||||
- modif de conf : pas de modifs des topics
|
- [x] modif de conf : pas de modifs des topics
|
||||||
- rajouter les created sur un peu tous les modèles
|
- [x] rajouter les created sur un peu tous les modèles
|
||||||
- UI reviewers (pour le staff pour nommer des reviewers)
|
- [ ] UI reviewers (pour le staff pour nommer des reviewers)
|
||||||
- topic : permettre au staff d’en rajouter
|
- [x] topic : permettre au staff d’en rajouter
|
||||||
- topic : qui est reviewer
|
- [ ] topic : qui est reviewer
|
||||||
- visibilité des talks
|
- [x] visibilité des talks
|
||||||
- visibilité des speakers
|
- [x] visibilité des speakers
|
||||||
- note sur un speaker
|
- [x] note sur un speaker
|
||||||
- ouverture conf
|
- [ ] ouverture conf
|
||||||
|
- [ ] mail de bienvenu autre que activation si le mec est inscrit par le staff
|
||||||
|
|
||||||
- mail de bienvenu autre que activation si le mec est inscrit par le staff
|
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
- [x] enregistrement sur le site (pas d'enregistrement fb/linkedin: on aime le libre ici)
|
- [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.).
|
- [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.
|
- [x] 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] l'équipe organisatrice peut voter pour les conférences (avec un commentaire visible uniquement de l'équipe) et
|
||||||
les accepter/refuser
|
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).
|
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.
|
intervenants.
|
||||||
- [ ] Gestion du planning des salles (on affecte une track à une salle, mais cela permet surtout de signaler les
|
- [ ] Gestion du planning des salles (on affecte une track à une salle, mais cela permet surtout de signaler les
|
||||||
doublons d'intervenants/salle/etc.)
|
doublons d'intervenants/salle/etc.)
|
||||||
|
@ -15,13 +15,13 @@
|
||||||
- [ ] Génération des badges
|
- [ ] Génération des badges
|
||||||
- [x] Un speaker et un bénévole peuvent être enregistré par un tiers (responsable de track ou kernel).
|
- [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 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)
|
- [ ] 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
|
conférence
|
||||||
- [ ] Gestion de la date d'ouverture/fermeture de l'appel à conférence (différente selon le type de participation -
|
- [ ] 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).
|
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
|
- [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,
|
transport, type de connectique, hébergement,
|
||||||
- [ ] Possibilité aux intervenants de récupérer leur billet d’avion électronique
|
- [ ] Possibilité aux intervenants de récupérer leur billet d’avion électronique
|
||||||
|
|
|
@ -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),
|
||||||
|
),
|
||||||
|
]
|
|
@ -45,6 +45,7 @@ class Talk(PonyConfModel):
|
||||||
description = models.TextField(blank=True, verbose_name='Description')
|
description = models.TextField(blank=True, verbose_name='Description')
|
||||||
topics = models.ManyToManyField(Topic, blank=True)
|
topics = models.ManyToManyField(Topic, blank=True)
|
||||||
event = models.IntegerField(choices=enum_to_choices(EVENTS), default=EVENTS.conference_short.value)
|
event = models.IntegerField(choices=enum_to_choices(EVENTS), default=EVENTS.conference_short.value)
|
||||||
|
accepted = models.NullBooleanField(default=None)
|
||||||
|
|
||||||
objects = models.Manager()
|
objects = models.Manager()
|
||||||
on_site = CurrentSiteManager()
|
on_site = CurrentSiteManager()
|
||||||
|
|
|
@ -48,6 +48,9 @@
|
||||||
|
|
||||||
Sum: {{ talk.score }}
|
Sum: {{ talk.score }}
|
||||||
|
|
||||||
|
<h3>Status:</h3>
|
||||||
|
{{ talk.accepted|yesno:"✔,✘,?" }}
|
||||||
|
|
||||||
<h3>Messages:</h3>
|
<h3>Messages:</h3>
|
||||||
{% for message in talk.conversation.messages.all %}
|
{% for message in talk.conversation.messages.all %}
|
||||||
{% include 'conversations/_message_detail.html' %}
|
{% include 'conversations/_message_detail.html' %}
|
||||||
|
|
|
@ -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 django.db.models.functions import Coalesce
|
||||||
|
|
||||||
|
from accounts.models import Participation
|
||||||
|
|
||||||
|
|
||||||
def query_sum(queryset, field):
|
def query_sum(queryset, field):
|
||||||
return queryset.aggregate(s=Coalesce(Sum(field), 0))['s']
|
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
|
||||||
|
|
|
@ -5,6 +5,7 @@ from django.contrib.auth.models import User
|
||||||
from django.contrib.sites.shortcuts import get_current_site
|
from django.contrib.sites.shortcuts import get_current_site
|
||||||
from django.core.exceptions import PermissionDenied
|
from django.core.exceptions import PermissionDenied
|
||||||
from django.core.urlresolvers import reverse
|
from django.core.urlresolvers import reverse
|
||||||
|
from django.db.models import Q
|
||||||
from django.shortcuts import get_object_or_404, redirect, render
|
from django.shortcuts import get_object_or_404, redirect, render
|
||||||
from django.views.generic import CreateView, DetailView, ListView
|
from django.views.generic import CreateView, DetailView, ListView
|
||||||
|
|
||||||
|
@ -14,6 +15,7 @@ from accounts.models import Participation
|
||||||
from .forms import TalkForm
|
from .forms import TalkForm
|
||||||
from .models import Talk, Topic, Vote
|
from .models import Talk, Topic, Vote
|
||||||
from .signals import new_talk
|
from .signals import new_talk
|
||||||
|
from .utils import allowed_talks
|
||||||
|
|
||||||
|
|
||||||
def home(request):
|
def home(request):
|
||||||
|
@ -22,32 +24,24 @@ def home(request):
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def talk_list(request):
|
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', {
|
return render(request, 'proposals/talks.html', {
|
||||||
'my_talks': Talk.on_site.filter(speakers=request.user),
|
'my_talks': Talk.on_site.filter(Q(speakers=request.user) | Q(proposer=request.user)),
|
||||||
'other_talks': other_talks,
|
'other_talks': allowed_talks(Talk.on_site.exclude(speakers=request.user, proposer=request.user), request)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def talk_list_by_topic(request, topic):
|
def talk_list_by_topic(request, topic):
|
||||||
topic = get_object_or_404(Topic, slug=topic)
|
topic = get_object_or_404(Topic, slug=topic)
|
||||||
return render(request, 'proposals/talk_list.html', {
|
talks = allowed_talks(Talk.on_site.filter(topics=topic), request)
|
||||||
'title': 'Talks related to %s:' % topic,
|
return render(request, 'proposals/talk_list.html', {'title': 'Talks related to %s:' % topic, 'talk_list': talks})
|
||||||
'talk_list': Talk.on_site.filter(topics=topic),
|
|
||||||
})
|
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def talk_list_by_speaker(request, speaker):
|
def talk_list_by_speaker(request, speaker):
|
||||||
speaker = get_object_or_404(User, username=speaker)
|
speaker = get_object_or_404(User, username=speaker)
|
||||||
return render(request, 'proposals/talk_list.html', {
|
talks = allowed_talks(Talk.on_site.filter(speakers=speaker), request)
|
||||||
'title': 'Talks with %s:' % speaker,
|
return render(request, 'proposals/talk_list.html', {'title': 'Talks with %s:' % speaker, 'talk_list': talks})
|
||||||
'talk_list': Talk.on_site.filter(speakers=speaker),
|
|
||||||
})
|
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
|
|
Loading…
Reference in New Issue