talks accepted & allowed talks
This commit is contained in:
parent
8e936ccf46
commit
168352958b
|
@ -1,27 +1,25 @@
|
|||
- virer l’username
|
||||
- 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 d’en 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 l’username
|
||||
- [ ] 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 d’en 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
|
||||
|
|
|
@ -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 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')
|
||||
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()
|
||||
|
|
|
@ -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' %}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue