Merge branch 'master' into demo

This commit is contained in:
Martin Pépin 2016-07-13 20:16:48 +02:00
commit bcaae09277
2 changed files with 102 additions and 74 deletions

View file

@ -14,5 +14,5 @@ urlpatterns = patterns('calendrier.views',
url(r'(?P<codeus>\w{6})/(?P<codeev>\w{6})/non', 'repnondir'), url(r'(?P<codeus>\w{6})/(?P<codeev>\w{6})/non', 'repnondir'),
url(r'(?P<pYear>\d+)/(?P<pMonth>\d+)/(?P<id>\d+)/?', 'view_event'), url(r'(?P<pYear>\d+)/(?P<pMonth>\d+)/(?P<id>\d+)/?', 'view_event'),
url(r'(?P<pYear>\d+)/(?P<pMonth>\d+)/?$', 'calendar'), url(r'(?P<pYear>\d+)/(?P<pMonth>\d+)/?$', 'calendar'),
url(r'(?P<id>\d+)/?', 'view_eventbis'), url(r'(?P<id>\d+)/?', 'view_eventbis', 'view-event'),
) )

View file

@ -1,5 +1,6 @@
from django.shortcuts import render, redirect from django.shortcuts import render, redirect
from calendrier.forms import ModifEventForm, EventForm, ParticipantsForm, SendMail, ChangeDoodleName from calendrier.forms import ModifEventForm, EventForm, ParticipantsForm, \
SendMail, ChangeDoodleName
from calendrier.models import Event, Participants from calendrier.models import Event, Participants
from django.utils.safestring import mark_safe from django.utils.safestring import mark_safe
from django.views.generic import UpdateView, DeleteView from django.views.generic import UpdateView, DeleteView
@ -10,31 +11,33 @@ from gestion.models import ErnestoUser
from django.utils.decorators import method_decorator from django.utils.decorators import method_decorator
from django.core.mail import send_mail from django.core.mail import send_mail
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from calendrier.calend import EventCalendar from calendrier.calend import EventCalendar
from calendar import monthrange from calendar import monthrange
from datetime import * from datetime import datetime, date
from propositions.utils import generer from propositions.utils import generer
def named_month(pMonthNumber): def named_month(pMonthNumber):
return date(1900, pMonthNumber, 1).strftime('%B') return date(1900, pMonthNumber, 1).strftime('%B')
def home(request): def home(request):
lToday = datetime.now() lToday = datetime.now()
return calendar(request, lToday.year, lToday.month) return calendar(request, lToday.year, lToday.month)
def calendar(request, pYear, pMonth): def calendar(request, pYear, pMonth):
lYear=int(pYear) lYear = int(pYear)
lMonth = int(pMonth) lMonth = int(pMonth)
lCalendarFromMonth = datetime(lYear, lMonth, 1) lCalendarFromMonth = datetime(lYear, lMonth, 1)
lCalendarToMonth = datetime(lYear, lMonth, monthrange(lYear, lMonth)[1]) lCalendarToMonth = datetime(lYear, lMonth, monthrange(lYear, lMonth)[1])
lEvents = Event.objects.filter(date__gte=lCalendarFromMonth, date__lte=lCalendarToMonth, calendrier=True) lEvents = Event.objects.filter(date__gte=lCalendarFromMonth,
date__lte=lCalendarToMonth,
calendrier=True)
if request.user.is_authenticated(): if request.user.is_authenticated():
lEvents = Event.objects.filter(date__gte=lCalendarFromMonth, date__lte=lCalendarToMonth) lEvents = Event.objects.filter(date__gte=lCalendarFromMonth,
date__lte=lCalendarToMonth)
lCalendar = EventCalendar(lEvents).formatmonth(lYear, lMonth) lCalendar = EventCalendar(lEvents).formatmonth(lYear, lMonth)
lPreviousYear = lYear lPreviousYear = lYear
lPreviousMonth = lMonth - 1 lPreviousMonth = lMonth - 1
@ -48,24 +51,26 @@ def calendar(request, pYear, pMonth):
lNextYear = lYear + 1 lNextYear = lYear + 1
lYearAfterThis = lYear + 1 lYearAfterThis = lYear + 1
lYearBeforeThis = lYear - 1 lYearBeforeThis = lYear - 1
return render(request, 'calendrier/home.html', {'Calendar': mark_safe(lCalendar), return render(request, 'calendrier/home.html', {
'Month': lMonth, 'Calendar': mark_safe(lCalendar),
'MonthName' : named_month(lMonth), 'Month': lMonth,
'Year': lYear, 'MonthName': named_month(lMonth),
'PreviousMonth': lPreviousMonth, 'Year': lYear,
'PreviousMonthName': named_month(lPreviousMonth), 'PreviousMonth': lPreviousMonth,
'PreviousYear': lPreviousYear, 'PreviousMonthName': named_month(lPreviousMonth),
'NextMonth': lNextMonth, 'PreviousYear': lPreviousYear,
'NextMonthName': named_month(lNextMonth), 'NextMonth': lNextMonth,
'NextYear': lNextYear, 'NextMonthName': named_month(lNextMonth),
'YearBeforeThis': lYearBeforeThis, 'NextYear': lNextYear,
'YearAfterThis': lYearAfterThis, 'YearBeforeThis': lYearBeforeThis,
'YearAfterThis': lYearAfterThis,
}) })
def view_event(request, pYear, pMonth, id): def view_event(request, pYear, pMonth, id):
ev = Event.objects.get(id=id) ev = Event.objects.get(id=id)
if not request.user.is_authenticated() and not ev.calendrier: if not request.user.is_authenticated() and not ev.calendrier:
return redirect('calendrier.views.home') return redirect('calendrier.views.home')
nom = ev.nom.capitalize nom = ev.nom.capitalize
fin = False fin = False
desc = False desc = False
@ -76,13 +81,14 @@ def view_event(request, pYear, pMonth, id):
if ev.fin: if ev.fin:
fin = True fin = True
if ev.description: if ev.description:
desc = True desc = True
return render(request, 'calendrier/view_event.html', locals()) return render(request, 'calendrier/view_event.html', locals())
def view_eventbis(request, id): def view_eventbis(request, id):
ev = Event.objects.get(id=id) ev = Event.objects.get(id=id)
if not request.user.is_authenticated() and not ev.calendrier: if not request.user.is_authenticated() and not ev.calendrier:
return redirect('calendrier.views.home') return redirect('calendrier.views.home')
part = ev.participants_set.all() part = ev.participants_set.all()
nom = ev.nom.capitalize nom = ev.nom.capitalize
fin = False fin = False
@ -96,9 +102,10 @@ def view_eventbis(request, id):
desc = True desc = True
return render(request, 'calendrier/view_event.html', locals()) return render(request, 'calendrier/view_event.html', locals())
@chef_required @chef_required
def resend(request, id): def resend(request, id):
if request.method=="POST": if request.method == "POST":
form = SendMail(request.POST) form = SendMail(request.POST)
if form.is_valid(): if form.is_valid():
ev = Event.objects.get(id=id) ev = Event.objects.get(id=id)
@ -106,25 +113,36 @@ def resend(request, id):
message = form.cleaned_data["message"] message = form.cleaned_data["message"]
try: try:
for user in users: for user in users:
if user.mails: if user.mails:
Subject = "[Pouet-Pouet] " + ev.nom + ", le " + ev.date.strftime('%d/%m/%Y') Subject = "[Pouet-Pouet] %s, le %s" % (
sender = 'fanfare@ens.fr' ev.nom, ev.date.strftime('%d/%m/%Y'))
receivers = [user.user.email] sender = 'fanfare@ens.fr'
text = "Bonjour, un évémenent a été créé." receivers = [user.user.email]
if message != '': if message != '':
text = message text = message
text+= '\n Pour voir l\'événement, allez sur http://www.ernestophone.ens.fr/calendar/' + str(ev.id) +'\n' else:
text+= '\nPour répondre oui, allez sur http://www.ernestophone.ens.fr/calendar/' + user.slug + '/' + ev.slug + '/oui' text = "Bonjour, un évémenent a été créé.\n"
text+= '\nPour répondre non, allez sur http://www.ernestophone.ens.fr/calendar/' + user.slug + '/' + ev.slug + '/non' text += 'Pour voir l\'événement, allez sur %s\n' \
text+= '\nPour répondre peut-être, allez sur http://www.ernestophone.ens.fr/calendar/' + user.slug + '/' + ev.slug + '/pe' + 'Pour répondre oui allez sur %s\n' \
send_mail(Subject, text, sender, receivers) + '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)
return redirect("calendrier.views.view_eventbis", id) return redirect("calendrier.views.view_eventbis", id)
except: except:
erreur = "Une erreur est survenue, le mail n'a pas pu être envoyé." erreur = "Une erreur est survenue, le mail n'a pas pu être " \
+ "envoyé."
else: else:
form = SendMail() form = SendMail()
return render(request, "calendrier/resend.html", locals()) return render(request, "calendrier/resend.html", locals())
@login_required @login_required
def changename(request): def changename(request):
if request.method == 'POST': if request.method == 'POST':
@ -132,11 +150,12 @@ def changename(request):
form = ChangeDoodleName(requbis, instance=request.user) form = ChangeDoodleName(requbis, instance=request.user)
if form.is_valid(): if form.is_valid():
form.save() form.save()
success=True success = True
else: else:
form = ChangeDoodleName(instance=request.user) form = ChangeDoodleName(instance=request.user)
return render(request, 'calendrier/changename.html', locals()) return render(request, 'calendrier/changename.html', locals())
@chef_required @chef_required
def create_event(request): def create_event(request):
if request.method == "POST": if request.method == "POST":
@ -148,7 +167,7 @@ def create_event(request):
try: try:
Event.objects.get(slug=code) Event.objects.get(slug=code)
except: except:
temp=False temp = False
sendmail = form.cleaned_data["sendmail"] sendmail = form.cleaned_data["sendmail"]
nom = form.cleaned_data["nom"] nom = form.cleaned_data["nom"]
date = form.cleaned_data["date"] date = form.cleaned_data["date"]
@ -158,38 +177,43 @@ def create_event(request):
obj = form.save(commit=False) obj = form.save(commit=False)
obj.slug = code obj.slug = code
obj.save() obj.save()
id= obj.id id = obj.id
envoi = True envoi = True
if sendmail: if sendmail:
users = ErnestoUser.objects.filter(is_ernesto=True) users = ErnestoUser.objects.filter(is_ernesto=True)
for user in users: for user in users:
if user.mails: if user.mails:
try: try:
Subject = "[Pouet-Pouet] " + nom + ", le " + date Subject = "[Pouet-Pouet] %s, le %s" % (nom, date)
sender = 'fanfare@ens.fr' sender = 'fanfare@ens.fr'
receivers = [user.user.email] receivers = [user.user.email]
text = "Bonjour, un évémenent a été créé." if message != '':
if message != '': text = message
text = message else:
text+= '\n Pour voir l\'événement, allez sur http://www.ernestophone.ens.fr/calendar/' + str(obj.id) +'\n' text = "Bonjour, un évémenent a été créé.\n"
text+= '\nPour répondre oui, allez sur http://www.ernestophone.ens.fr/calendar/' + user.slug + '/' + obj.slug + '/oui' text += "Pour voir l'événement, allez sur %s" \
text+= '\nPour répondre non, allez sur http://www.ernestophone.ens.fr/calendar/' + user.slug + '/' + obj.slug + '/non' + '\nPour répondre oui allez sur %s\n' \
text+= '\nPour répondre peut-être, allez sur http://www.ernestophone.ens.fr/calendar/' + user.slug + '/' + obj.slug + '/pe' + 'Pour répondre non, allez sur %s\n' \
send_mail(Subject, text, sender, receivers) + 'Pour répondre peut-être, allez sur %s' \
# smtpObj = smtplib.SMTP('clipper.ens.fr', 25) + '\n' \
# msg = MIMEMultipart("alternative") % (reverse_lazy('view-event', args=[
# msg["From"] = sender obj.id]),
# msg["To"] = receivers reverse_lazy('repouidir', args=[
# text = MIMEText(text, 'plain') user.slug, obj.slug]),
# msg.attach(text) reverse_lazy('repnondir', args=[
# smtpObj.sendmail(sender, receivers, msg.as_string()) user.slug, obj.slug]),
except: reverse_lazy('reppedir', args=[
erreur = "Une erreur est survenue, le mail n'a pas pu être envoyé." user.slug, obj.slug]))
send_mail(Subject, text, sender, receivers)
except:
erreur = "Une erreur est survenue, le mail n'a " \
+ "pas pu être envoyé."
else: else:
form = EventForm() form = EventForm()
return render(request, "calendrier/create.html", locals()) return render(request, "calendrier/create.html", locals())
@login_required @login_required
def reponse(request, id): def reponse(request, id):
part = request.user.profile part = request.user.profile
@ -211,6 +235,7 @@ def reponse(request, id):
form = ParticipantsForm() form = ParticipantsForm()
return render(request, "calendrier/reponse.html", locals()) return render(request, "calendrier/reponse.html", locals())
def repouidir(request, codeus, codeev): def repouidir(request, codeus, codeev):
part = ErnestoUser.objects.get(slug=codeus) part = ErnestoUser.objects.get(slug=codeus)
ev = Event.objects.get(slug=codeev) ev = Event.objects.get(slug=codeev)
@ -222,9 +247,9 @@ def repouidir(request, codeus, codeev):
obj = Participants() obj = Participants()
obj.participant = part obj.participant = part
obj.event = ev obj.event = ev
obj.reponse="oui" obj.reponse = "oui"
obj.save() obj.save()
envoi = True # envoi = True # Variable not used ???
return redirect('calendrier.views.home') return redirect('calendrier.views.home')
@ -239,11 +264,12 @@ def reppedir(request, codeus, codeev):
obj = Participants() obj = Participants()
obj.participant = part obj.participant = part
obj.event = ev obj.event = ev
obj.reponse="pe" obj.reponse = "pe"
obj.save() obj.save()
envoi = True # envoi = True # Variable not used ???
return redirect('calendrier.views.home') return redirect('calendrier.views.home')
def repnondir(request, codeus, codeev): def repnondir(request, codeus, codeev):
part = ErnestoUser.objects.get(slug=codeus) part = ErnestoUser.objects.get(slug=codeus)
ev = Event.objects.get(slug=codeev) ev = Event.objects.get(slug=codeev)
@ -255,11 +281,12 @@ def repnondir(request, codeus, codeev):
obj = Participants() obj = Participants()
obj.participant = part obj.participant = part
obj.event = ev obj.event = ev
obj.reponse="non" obj.reponse = "non"
obj.save() obj.save()
envoi = True # envoi = True # Variable not used ???
return redirect('calendrier.views.home') return redirect('calendrier.views.home')
class EventUpdate(UpdateView): class EventUpdate(UpdateView):
model = Event model = Event
template_name = "calendrier/update.html" template_name = "calendrier/update.html"
@ -270,6 +297,7 @@ class EventUpdate(UpdateView):
def dispatch(self, *args, **kwargs): def dispatch(self, *args, **kwargs):
return super(EventUpdate, self).dispatch(*args, **kwargs) return super(EventUpdate, self).dispatch(*args, **kwargs)
class EventDelete(DeleteView): class EventDelete(DeleteView):
model = Event model = Event
template_name = "calendrier/delete.html" template_name = "calendrier/delete.html"