ernestophone.ens.fr/calendrier/views.py

311 lines
11 KiB
Python
Raw Normal View History

2015-09-23 08:08:26 +02:00
from django.shortcuts import render, redirect
from calendrier.forms import ModifEventForm, EventForm, ParticipantsForm, \
SendMail, ChangeDoodleName
2015-07-22 22:08:59 +02:00
from calendrier.models import Event, Participants
2015-04-13 18:56:43 +02:00
from django.utils.safestring import mark_safe
2015-07-22 22:08:59 +02:00
from django.views.generic import UpdateView, DeleteView
2015-04-17 18:38:44 +02:00
from django.core.urlresolvers import reverse_lazy
2015-04-13 18:56:43 +02:00
from partitions.decorators import chef_required
2015-07-22 22:08:59 +02:00
from django.contrib.auth.decorators import login_required
from gestion.models import ErnestoUser
from django.utils.decorators import method_decorator
2015-09-23 08:08:26 +02:00
from django.core.mail import send_mail
2015-07-22 22:08:59 +02:00
2015-04-13 18:56:43 +02:00
from calendrier.calend import EventCalendar
from calendar import monthrange
from datetime import datetime, date
2015-04-13 18:56:43 +02:00
2015-07-22 22:08:59 +02:00
from propositions.utils import generer
2015-04-13 18:56:43 +02:00
def named_month(pMonthNumber):
return date(1900, pMonthNumber, 1).strftime('%B')
2015-04-13 18:56:43 +02:00
def home(request):
lToday = datetime.now()
return calendar(request, lToday.year, lToday.month)
2015-04-13 18:56:43 +02:00
def calendar(request, pYear, pMonth):
lYear = int(pYear)
2015-04-13 18:56:43 +02:00
lMonth = int(pMonth)
lCalendarFromMonth = datetime(lYear, lMonth, 1)
lCalendarToMonth = datetime(lYear, lMonth, monthrange(lYear, lMonth)[1])
lEvents = Event.objects.filter(date__gte=lCalendarFromMonth,
date__lte=lCalendarToMonth,
calendrier=True)
2015-04-17 18:38:44 +02:00
if request.user.is_authenticated():
lEvents = Event.objects.filter(date__gte=lCalendarFromMonth,
date__lte=lCalendarToMonth)
2015-04-13 18:56:43 +02:00
lCalendar = EventCalendar(lEvents).formatmonth(lYear, lMonth)
lPreviousYear = lYear
lPreviousMonth = lMonth - 1
if lPreviousMonth == 0:
lPreviousMonth = 12
lPreviousYear - 1
lNextYear = lYear
lNextMonth = lMonth + 1
if lNextMonth == 13:
lNextMonth = 1
lNextYear = lYear + 1
lYearAfterThis = lYear + 1
lYearBeforeThis = lYear - 1
return render(request, 'calendrier/home.html', {
'Calendar': mark_safe(lCalendar),
'Month': lMonth,
'MonthName': named_month(lMonth),
'Year': lYear,
'PreviousMonth': lPreviousMonth,
'PreviousMonthName': named_month(lPreviousMonth),
'PreviousYear': lPreviousYear,
'NextMonth': lNextMonth,
'NextMonthName': named_month(lNextMonth),
'NextYear': lNextYear,
'YearBeforeThis': lYearBeforeThis,
'YearAfterThis': lYearAfterThis,
2015-04-13 18:56:43 +02:00
})
2015-04-13 18:56:43 +02:00
def view_event(request, pYear, pMonth, id):
ev = Event.objects.get(id=id)
if not request.user.is_authenticated() and not ev.calendrier:
return redirect('calendrier.views.home')
2015-04-13 18:56:43 +02:00
nom = ev.nom.capitalize
fin = False
desc = False
2015-07-22 22:08:59 +02:00
part = ev.participants_set.all()
nboui = len(part.filter(reponse="oui"))
nbpe = len(part.filter(reponse="pe"))
nbnon = len(part.filter(reponse="non"))
2015-04-13 18:56:43 +02:00
if ev.fin:
fin = True
if ev.description:
desc = True
return render(request, 'calendrier/view_event.html', locals())
2015-04-13 18:56:43 +02:00
def view_eventbis(request, id):
ev = Event.objects.get(id=id)
if not request.user.is_authenticated() and not ev.calendrier:
return redirect('calendrier.views.home')
2015-07-22 22:08:59 +02:00
part = ev.participants_set.all()
2015-04-13 18:56:43 +02:00
nom = ev.nom.capitalize
fin = False
desc = False
2015-07-22 22:08:59 +02:00
nboui = len(part.filter(reponse="oui"))
nbpe = len(part.filter(reponse="pe"))
nbnon = len(part.filter(reponse="non"))
2015-04-13 18:56:43 +02:00
if ev.fin:
fin = True
if ev.description:
desc = True
return render(request, 'calendrier/view_event.html', locals())
2015-09-23 08:08:26 +02:00
@chef_required
def resend(request, id):
if request.method == "POST":
2015-09-23 08:08:26 +02:00
form = SendMail(request.POST)
if form.is_valid():
ev = Event.objects.get(id=id)
users = ErnestoUser.objects.filter(is_ernesto=True)
message = form.cleaned_data["message"]
try:
for user in users:
if user.mails:
Subject = "[Pouet-Pouet] %s, le %s" % (
ev.nom, ev.date.strftime('%d/%m/%Y'))
sender = 'fanfare@ens.fr'
receivers = [user.user.email]
if message != '':
text = message
else:
text = "Bonjour, un évémenent a été créé.\n"
text += 'Pour voir l\'événement, allez sur %s\n' \
+ 'Pour répondre oui allez sur %s\n' \
+ 'Pour répondre non, allez sur %s\n' \
+ 'Pour répondre peut-être, allez sur %s\n' \
% (reverse_lazy('view-event', args=[ev.id]),
reverse_lazy('repouidir', args=[
user.slug, ev.slug]),
reverse_lazy('repnondir', args=[
user.slug, ev.slug]),
reverse_lazy('reppedir', args=[
user.slug, ev.slug]))
send_mail(Subject, text, sender, receivers)
2015-09-23 08:08:26 +02:00
return redirect("calendrier.views.view_eventbis", id)
except:
erreur = "Une erreur est survenue, le mail n'a pas pu être " \
+ "envoyé."
2015-09-23 08:08:26 +02:00
else:
form = SendMail()
return render(request, "calendrier/resend.html", locals())
@login_required
def changename(request):
if request.method == 'POST':
requbis = request.POST.copy()
form = ChangeDoodleName(requbis, instance=request.user)
if form.is_valid():
form.save()
success = True
else:
form = ChangeDoodleName(instance=request.user)
return render(request, 'calendrier/changename.html', locals())
2015-09-23 08:08:26 +02:00
2015-04-13 18:56:43 +02:00
@chef_required
def create_event(request):
if request.method == "POST":
form = EventForm(request.POST)
if form.is_valid():
2015-07-22 22:08:59 +02:00
temp = True
while temp:
code = generer()
try:
Event.objects.get(slug=code)
except:
temp = False
2015-07-22 22:08:59 +02:00
sendmail = form.cleaned_data["sendmail"]
nom = form.cleaned_data["nom"]
date = form.cleaned_data["date"]
date = date.strftime('%d/%m/%Y')
debut = form.cleaned_data["debut"]
message = form.cleaned_data["message"]
obj = form.save(commit=False)
obj.slug = code
obj.save()
id = obj.id
2015-04-13 18:56:43 +02:00
envoi = True
2015-07-22 22:08:59 +02:00
if sendmail:
users = ErnestoUser.objects.filter(is_ernesto=True)
for user in users:
if user.mails:
try:
Subject = "[Pouet-Pouet] %s, le %s" % (nom, date)
sender = 'fanfare@ens.fr'
receivers = [user.user.email]
if message != '':
text = message
else:
text = "Bonjour, un évémenent a été créé.\n"
text += "Pour voir l'événement, allez sur %s" \
+ '\nPour répondre oui allez sur %s\n' \
+ 'Pour répondre non, allez sur %s\n' \
+ 'Pour répondre peut-être, allez sur %s' \
+ '\n' \
% (reverse_lazy('view-event', args=[
obj.id]),
reverse_lazy('repouidir', args=[
user.slug, obj.slug]),
reverse_lazy('repnondir', args=[
user.slug, obj.slug]),
reverse_lazy('reppedir', args=[
user.slug, obj.slug]))
send_mail(Subject, text, sender, receivers)
except:
erreur = "Une erreur est survenue, le mail n'a " \
+ "pas pu être envoyé."
2015-04-13 18:56:43 +02:00
else:
form = EventForm()
return render(request, "calendrier/create.html", locals())
2015-04-17 18:38:44 +02:00
2015-07-22 22:08:59 +02:00
@login_required
def reponse(request, id):
part = request.user.profile
ev = Event.objects.get(id=id)
if request.method == "POST":
form = ParticipantsForm(request.POST)
if form.is_valid():
try:
p = Participants.objects.get(event=ev, participant=part)
p.delete()
except Participants.DoesNotExist:
pass
obj = form.save(commit=False)
obj.event = ev
obj.participant = part
obj.save()
envoi = True
else:
form = ParticipantsForm()
return render(request, "calendrier/reponse.html", locals())
2015-07-22 22:08:59 +02:00
def repouidir(request, codeus, codeev):
part = ErnestoUser.objects.get(slug=codeus)
ev = Event.objects.get(slug=codeev)
try:
p = Participants.objects.get(event=ev, participant=part)
p.delete()
except Participants.DoesNotExist:
pass
obj = Participants()
obj.participant = part
obj.event = ev
obj.reponse = "oui"
2015-07-22 22:08:59 +02:00
obj.save()
# envoi = True # Variable not used ???
2015-09-23 08:08:26 +02:00
return redirect('calendrier.views.home')
2015-07-22 22:08:59 +02:00
def reppedir(request, codeus, codeev):
part = ErnestoUser.objects.get(slug=codeus)
ev = Event.objects.get(slug=codeev)
try:
p = Participants.objects.get(event=ev, participant=part)
p.delete()
except Participants.DoesNotExist:
pass
obj = Participants()
obj.participant = part
obj.event = ev
obj.reponse = "pe"
2015-07-22 22:08:59 +02:00
obj.save()
# envoi = True # Variable not used ???
return redirect('calendrier.views.home')
2015-07-22 22:08:59 +02:00
2015-07-22 22:08:59 +02:00
def repnondir(request, codeus, codeev):
part = ErnestoUser.objects.get(slug=codeus)
ev = Event.objects.get(slug=codeev)
try:
p = Participants.objects.get(event=ev, participant=part)
p.delete()
except Participants.DoesNotExist:
pass
obj = Participants()
obj.participant = part
obj.event = ev
obj.reponse = "non"
2015-07-22 22:08:59 +02:00
obj.save()
# envoi = True # Variable not used ???
2015-09-23 08:08:26 +02:00
return redirect('calendrier.views.home')
2015-07-22 22:08:59 +02:00
2015-04-17 18:38:44 +02:00
class EventUpdate(UpdateView):
model = Event
template_name = "calendrier/update.html"
2015-09-23 08:08:26 +02:00
form_class = ModifEventForm
2015-04-17 18:38:44 +02:00
success_url = reverse_lazy(home)
2015-07-22 22:08:59 +02:00
@method_decorator(chef_required)
def dispatch(self, *args, **kwargs):
return super(EventUpdate, self).dispatch(*args, **kwargs)
2015-07-22 22:08:59 +02:00
class EventDelete(DeleteView):
model = Event
template_name = "calendrier/delete.html"
success_url = reverse_lazy(home)
@method_decorator(chef_required)
def dispatch(self, *args, **kwargs):
return super(EventDelete, self).dispatch(*args, **kwargs)
2015-04-13 18:56:43 +02:00
# Create your views here.