From 20a02d1013f0f70259b58c1309d8009328a08ff6 Mon Sep 17 00:00:00 2001 From: R1kM Date: Wed, 22 Jul 2015 16:08:59 -0400 Subject: [PATCH] Bawa --- .../__pycache__/settings.cpython-34.pyc | Bin 1956 -> 1977 bytes Ernestophone/__pycache__/urls.cpython-34.pyc | Bin 869 -> 970 bytes Ernestophone/settings.py | 1 + Ernestophone/urls.py | 2 + calendrier/__pycache__/forms.cpython-34.pyc | Bin 815 -> 1481 bytes calendrier/__pycache__/models.cpython-34.pyc | Bin 808 -> 1529 bytes calendrier/__pycache__/urls.cpython-34.pyc | Bin 584 -> 699 bytes calendrier/__pycache__/views.cpython-34.pyc | Bin 3322 -> 6079 bytes calendrier/calend.py | 2 +- calendrier/forms.py | 10 +- calendrier/models.py | 17 ++ calendrier/urls.py | 7 +- calendrier/views.py | 145 ++++++++++++++++- db.sqlite3 | Bin 53248 -> 71680 bytes gestion/__pycache__/admin.cpython-34.pyc | Bin 2096 -> 2166 bytes gestion/__pycache__/models.cpython-34.pyc | Bin 1172 -> 1340 bytes gestion/__pycache__/views.cpython-34.pyc | Bin 2251 -> 2617 bytes gestion/admin.py | 2 + gestion/models.py | 5 +- gestion/views.py | 17 +- propositions/__init__.py | 0 .../__pycache__/__init__.cpython-34.pyc | Bin 0 -> 134 bytes propositions/__pycache__/admin.cpython-34.pyc | Bin 0 -> 179 bytes propositions/__pycache__/forms.cpython-34.pyc | Bin 0 -> 780 bytes .../__pycache__/models.cpython-34.pyc | Bin 0 -> 1371 bytes propositions/__pycache__/urls.cpython-34.pyc | Bin 0 -> 650 bytes propositions/__pycache__/utils.cpython-34.pyc | Bin 0 -> 560 bytes propositions/__pycache__/views.cpython-34.pyc | Bin 0 -> 4604 bytes propositions/admin.py | 3 + propositions/forms.py | 12 ++ propositions/models.py | 29 ++++ .../__pycache__/getresponse.cpython-34.pyc | Bin 0 -> 595 bytes propositions/templatetags/getresponse.py | 12 ++ propositions/tests.py | 3 + propositions/urls.py | 10 ++ propositions/utils.py | 7 + propositions/views.py | 101 ++++++++++++ static/Favicon.ico | Bin 0 -> 766 bytes static/FondErnesto.gif | Bin 0 -> 20631 bytes static/css/ernesto.css | 149 ++++++++++++++++++ static/css/main.css | 1 + static/logo.png | Bin 0 -> 14229 bytes templates/calendrier/create.html | 9 +- templates/calendrier/delete.html | 10 ++ templates/calendrier/home.html | 8 + templates/calendrier/reponse.html | 17 ++ templates/calendrier/view_event.html | 32 +++- templates/gestion/base.html | 40 +++-- templates/gestion/divers.html | 8 + templates/gestion/login.html | 7 +- templates/partitions/liste.html | 12 +- templates/partitions/listepart.html | 13 +- templates/propositions/create.html | 13 ++ templates/propositions/delete.html | 10 ++ templates/propositions/liste.html | 22 +++ templates/propositions/reponse.html | 1 + templates/propositions/voteok.html | 5 + 57 files changed, 698 insertions(+), 44 deletions(-) create mode 100644 propositions/__init__.py create mode 100644 propositions/__pycache__/__init__.cpython-34.pyc create mode 100644 propositions/__pycache__/admin.cpython-34.pyc create mode 100644 propositions/__pycache__/forms.cpython-34.pyc create mode 100644 propositions/__pycache__/models.cpython-34.pyc create mode 100644 propositions/__pycache__/urls.cpython-34.pyc create mode 100644 propositions/__pycache__/utils.cpython-34.pyc create mode 100644 propositions/__pycache__/views.cpython-34.pyc create mode 100644 propositions/admin.py create mode 100644 propositions/forms.py create mode 100644 propositions/models.py create mode 100644 propositions/templatetags/__pycache__/getresponse.cpython-34.pyc create mode 100644 propositions/templatetags/getresponse.py create mode 100644 propositions/tests.py create mode 100644 propositions/urls.py create mode 100644 propositions/utils.py create mode 100644 propositions/views.py create mode 100644 static/Favicon.ico create mode 100644 static/FondErnesto.gif create mode 100644 static/css/ernesto.css create mode 100644 static/logo.png create mode 100644 templates/calendrier/delete.html create mode 100644 templates/calendrier/reponse.html create mode 100644 templates/gestion/divers.html create mode 100644 templates/propositions/create.html create mode 100644 templates/propositions/delete.html create mode 100644 templates/propositions/liste.html create mode 100644 templates/propositions/reponse.html create mode 100644 templates/propositions/voteok.html diff --git a/Ernestophone/__pycache__/settings.cpython-34.pyc b/Ernestophone/__pycache__/settings.cpython-34.pyc index 4d0b30bf5110cfaef3708ed57ca344d88c73041f..2ceeb75cf9734e2643f033044667320586bcfa16 100644 GIT binary patch delta 293 zcmYk$KTE?v7{~G7onC`6Y0_$&nEIzn)hJFa5hvZ8oW!EfCOjR|!GzS^Lcv|`EeOui z$+zO_uDgSHR~K*iJYRU=;huxHAo=us_wiT4rXStiHx_9Q3JdUYJzt_YhVRhU)WmM26sUbI0ePv1CTk` z10~>HPzNlRahV>z{(On>-7Bl2EGGGVUffN-2YM=_d2Q)L3Rj=0qtj~Dd_8q4&y32q p)GdJ}v@|SDLn^D5?esdxftpTr>9G2@C$e*HD~|; delta 274 zcmYk$y-LGi6oBD3pT-bPnpV@KP5l{a)d(&@0(t{(E-J{G6i$bBGdG~%;9PPG-hgz{ zTkta6b$1Z+)x|SByl~)fUZdwI`wYU>yZ7PM(1#EHjX%q7@Ar@Z-A6(+L0V{vL`)ne z2JNAJ%CW=LFl{q-(TvAtF`(2Y@jX@FYGQ%&>bX250K_mj`Y!8Btu8Y z05!{8l<%WKY7J3PA4xH diff --git a/Ernestophone/__pycache__/urls.cpython-34.pyc b/Ernestophone/__pycache__/urls.cpython-34.pyc index e2d42ae1a88fb7eac2485618db68009931a69c66..2633fdfa8565c38813b45e4ca56864c332ffa0ed 100644 GIT binary patch delta 224 zcmaFLc8Xo)9S<*8Uwl@m6Eg$DV+JI^3uHS0aj_8NM3oC}smu&1;tZ)w3@H)}&5R7q zObj3qNrn_D5WAU+A&Q3~6^PgwQaKs2co|Zp!3;j2Vn%bIT#5`su%_&08AeM+rz*a< zf};F_{Nl`#%>2A!{VG9Zu3l+TPH`1STuNqHY7tOUBt5klq)x9aGqt=}4=g-6gz2k- c4A6Bli~=CY#Kt7V%)=@~ delta 103 zcmX@b{*+DS9S<+pb61VfTTBcLj~S2v50LEu#Km72CaPS}Xy#yu;$cVyB6fyUPKGRA qh7@rygO8z^kY}F5FKhiw364UlO{zH6zBpyG<%WIOAbX)7!7QrhZsT9_8=5kFd}79|h%YjdhE@b0;{*oJ~=4#CwXXli3^^9lgfQC_cR3xin_&Qs`R;H8v?w`ZU*a|B`xPq+A0d-Ss{M6(Pf=OFfjh1~3IchH2chVI4E7e>m$DL}M;`a}Q=7m<)$zs8q z1vk=~0^~Vsvr@tz3CY?{XbH;8auVlT}$`oipv2Ht47&_o{B9}$Yl`eSa z+8VDo@1)-g*s|3^8lM??-YFx+4c}7KcZkbkjdp#*3MwpH0xL9%1!sbX!I>DI5`v!f z2-Y*|Jxg~GOu0m|9RwY`M9^-u80~&t=9@eJ`#E_b9XDf?HXASaywhaf!tCLJ-xJc# zjarkNoAGKjt?Mbr$H#&@xk;AGZ|d47LcZzT<{-SG(N`QkTBzo<9QmxO8eYq)^5d$i zThVFS=T&vyaor;ZCjoqdpwwnS`|Jn#7KKUfN3{FCS$ED4`(oMOz&ymH5dNJ^mu)Sl zM*UJxUz&C$ot++;Mq1ZS=NxM-jFM&=`h2o}=VSU}EIrs9L(WnbvB%-hJjR35a%}Dr z`8^7sQV4?b@7h*N-W)5bh0iSVQaAX~^CdUo&^*9oKdhy-{7eS2k23q+Bce+%#JDVV zM$R6xuUR;|(KTeqAtil@;rg_l^n*qNk8^`Vg7Y6?QDc8_eROG7ZV<97!q0aIaW1h9 zkpo8-DUoUOV3#R$i60udZW}94OSZY%m+7us^l9ck2A?j-D|@R6WHs4rDV>UNX@0y* zM~SyGe1X6LF;IDOX6XI2%zP?Vyg6(8s@?tA0h7>OHnf_dTm9$-^&2@A{0|JbUFEZ9 SecOIZCWf*du+IjM^8WxRolX7# delta 324 zcmX@fy`D|^9S<+pnaA3pmlzos9y1^T79iUJh>L9}Dl3^Yx~DKRq_8lwFo4KZMusdF zhGu4lC{~6PR)%0rwwEBCnvAzt)AEaQi$M(6vedki$>J;yT%2I08&G2ML&gmXw^$QP zN{Wi3xY81nOLIyROES}LaTnwyCZ}fP=cJ?-Ogt9~I(4tP)&^MsylJc#>-%>P5 z?a;X2+rR_$9n)B5ijy2v_f)5x7un04wQ;jDHtsWlG)s*;0@POgcL%%9xhx*t{8DJ1 z$RYndO%Nwo`R@QGi5VdWHDZ?*p5%h?ugMAOR?+}XLDSMLOSf-n<&uJZUGSP}0rL9) zga#>O&?3oNv~JMd(sm$m0;CK39jeX|$*z^`k(2~`eW`(*yiaPE)SeV6I6%d~9|!}y zu2Ik<)kCcgP5tze)53I?(VH;gbXLqaNR3SWB8k#hFN~L#NwSdwm=>$Jh%OR7GmSEh zUzfc3P2^3*)2K`e<6pAA$Z`(TXvtUiA5W+8WX}3nMQMJV@bM&q2c=`y69*gRk+-ZT zSh;xlfoMU9%o(9?XwVWbFXv>sCjBw={|txoY{^3%zgiB@b++IlAKtcic;{eP^?tB= zYnox07di|-5EnH7IafP2>%pz&onA{cCs_GMfbCwR%lJ0Y=yBh@>Qo0j)d{bU~LvzQa5KeYVUQNflso&sswFXCk-2Nzr$Dj*s7w z^8i%OIjZ@twRorMEm)q&mS=$Ns#o*D7=4t#aXS#)v~0_=7#BN#)lA52!3^W#$N*ua z#{HJ@&m&#LlXw-SMP7=t=QrzBmf}8;?rm%@4ngS#z%(cGES_*a>ih34dgm8+JaO`^xOy^%|3p-oY~gFZg98iTmQ&ssPI-B*2&u z5@?qdSYsiyMobtf%r!y{E@3|?zsVB>lvld=pfb@ zxmHdjEaMf753Yi1;5xV=yb7CO2khG3VGHa@Ki@pkivJ{fd6nbSXqsFN%oj!EnIpAH zuDMf7dKk1#MK8CNy;k2jkJ7jgQl!M|sbFz9|2vn%6dDI@2WHlF1`ekb$?OjvNA-mPV~~MXJcq)U}$Dy zNM&M3;bcfKe$Dr-y()U;q_Xl7t&W@1QXVo2d+ zNa2F9xfxP;U~FE76h08UnVlhujUk1fAy`vj;stRY##`L3WvO{3p#>?4lNh}jbtdm; tl%KqWF^!RZGB=a)WM?KxHcp^rMVyn9m>fj}fJ`w)0VXy^9v~C~lK=!0Ae8_B diff --git a/calendrier/__pycache__/views.cpython-34.pyc b/calendrier/__pycache__/views.cpython-34.pyc index 5ae82eb28f6ffcad6d77e8c0b0dbead4d4e104f7..f5bc7f5598c5abcc61159279d8f0c9654d8c1964 100644 GIT binary patch literal 6079 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 diff --git a/calendrier/calend.py b/calendrier/calend.py index 08af175..a061a4f 100644 --- a/calendrier/calend.py +++ b/calendrier/calend.py @@ -19,7 +19,7 @@ class EventCalendar(HTMLCalendar): cssclass += ' filled' body = [] for ev in self.events[day]: - body.append('' % ev.id) + body.append('' % ev.id) body.append(esc(ev.nom)) body.append('
') return self.day_cell(cssclass, '
%d
%s' % (day, ''.join(body))) diff --git a/calendrier/forms.py b/calendrier/forms.py index 4060bb1..a9ff200 100644 --- a/calendrier/forms.py +++ b/calendrier/forms.py @@ -1,7 +1,9 @@ from django import forms -from calendrier.models import Event +from calendrier.models import Event, Participants class EventForm(forms.ModelForm): + sendmail = forms.BooleanField(initial=False, label="Envoyer l'invitation à la liste fanfare") + message = forms.CharField(max_length=2000, widget=forms.Textarea(attrs={"placeholder":"Remplir ici pour remplacer le mail automatique"}), required=False) class Meta: model = Event widgets = { @@ -10,4 +12,8 @@ class EventForm(forms.ModelForm): 'debut': forms.TextInput(attrs={"placeholder": 'hh:mm'}), 'fin': forms.TextInput(attrs={"placeholder": 'hh:mm facultatif'}) } - + +class ParticipantsForm(forms.ModelForm): + class Meta: + model = Participants + fields = ('reponse', ) diff --git a/calendrier/models.py b/calendrier/models.py index 0f9c730..24ebcce 100644 --- a/calendrier/models.py +++ b/calendrier/models.py @@ -1,14 +1,31 @@ from django.db import models +from gestion.models import ErnestoUser + +ANSWERS = ( + ('oui', 'Oui'), + ('non', 'Non'), + ('pe', 'Peut-être'), + ) class Event(models.Model): nom = models.CharField(max_length=100) date = models.DateField() debut = models.TimeField() fin = models.TimeField(blank=True, null=True) + slug = models.CharField(max_length=7, editable=False, unique=True) lieu = models.CharField(max_length=200) description = models.TextField(blank=True) calendrier = models.BooleanField(default=False, verbose_name="Afficher dans le calendrier") def __str__(self): return self.nom + + class Meta: + verbose_name = "Événement" + +class Participants(models.Model): + event = models.ForeignKey(Event) + participant = models.ForeignKey(ErnestoUser) + reponse = models.CharField("Réponse", max_length = 20, default = "non", choices = ANSWERS) + # Create your models here. diff --git a/calendrier/urls.py b/calendrier/urls.py index 7f74d90..c318270 100644 --- a/calendrier/urls.py +++ b/calendrier/urls.py @@ -1,10 +1,15 @@ from django.conf.urls import patterns, url -from calendrier.views import EventUpdate +from calendrier.views import EventUpdate, EventDelete urlpatterns = patterns('calendrier.views', url(r'^new$', 'create_event'), url(r'^$', 'home'), url(r'^edition/(?P\d+)$', EventUpdate.as_view()), + url(r'^supprimer/(?P\d+)$', EventDelete.as_view()), + url(r'(?P\d+)/reponse/?', 'reponse'), + url(r'(?P\w{6})/(?P\w{6})/oui', 'repouidir'), + url(r'(?P\w{6})/(?P\w{6})/pe', 'reppedir'), + url(r'(?P\w{6})/(?P\w{6})/non', 'repnondir'), url(r'(?P\d+)/(?P\d+)/(?P\d+)/?', 'view_event'), url(r'(?P\d+)/(?P\d+)/?$', 'calendar'), url(r'(?P\d+)/?', 'view_eventbis'), diff --git a/calendrier/views.py b/calendrier/views.py index a567515..5a5f80c 100644 --- a/calendrier/views.py +++ b/calendrier/views.py @@ -1,15 +1,24 @@ from django.shortcuts import render -from calendrier.forms import EventForm -from calendrier.models import Event +from calendrier.forms import EventForm, ParticipantsForm +from calendrier.models import Event, Participants from django.utils.safestring import mark_safe -from django.views.generic import UpdateView +from django.views.generic import UpdateView, DeleteView from django.core.urlresolvers import reverse_lazy from partitions.decorators import chef_required +from django.contrib.auth.decorators import login_required +from gestion.models import ErnestoUser +from django.utils.decorators import method_decorator + +import smtplib +from email.mime.multipart import MIMEMultipart +from email.mime.text import MIMEText from calendrier.calend import EventCalendar from calendar import monthrange from datetime import * +from propositions.utils import generer + def named_month(pMonthNumber): return date(1900, pMonthNumber, 1).strftime('%B') @@ -57,6 +66,10 @@ def view_event(request, pYear, pMonth, id): nom = ev.nom.capitalize fin = False desc = False + part = ev.participants_set.all() + nboui = len(part.filter(reponse="oui")) + nbpe = len(part.filter(reponse="pe")) + nbnon = len(part.filter(reponse="non")) if ev.fin: fin = True if ev.description: @@ -65,9 +78,13 @@ def view_event(request, pYear, pMonth, id): def view_eventbis(request, id): ev = Event.objects.get(id=id) + part = ev.participants_set.all() nom = ev.nom.capitalize fin = False desc = False + nboui = len(part.filter(reponse="oui")) + nbpe = len(part.filter(reponse="pe")) + nbnon = len(part.filter(reponse="non")) if ev.fin: fin = True if ev.description: @@ -79,20 +96,134 @@ def create_event(request): if request.method == "POST": form = EventForm(request.POST) if form.is_valid(): - - form.save() + temp = True + while temp: + code = generer() + try: + Event.objects.get(slug=code) + except: + temp=False + 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) + id= obj.id + obj.slug = code + obj.save() envoi = True - + if sendmail: + try: + smtpObj = smtplib.SMTP('clipper.ens.fr', 25) + sender = 'fanfare@ens.fr' + receivers = 'aymeric.fromherz@ens.fr' + msg = MIMEMultipart("alternative") + msg["Subject"] = nom + ", le " + date + msg["From"] = sender + msg["To"] = receivers + text = "Bonjour, un évémenent a été créé." + if message != '': + text = message + text+= '\nPour répondre, allez sur www.ernestophone.ens.fr/calendar/' + id + '/reponse' + text = MIMEText(text, 'plain') + msg.attach(text) + smtpObj.sendmail(sender, receivers, msg.as_string()) + except: + erreur = "Une erreur est survenue, le mail n'a pas pu être envoyé." else: form = EventForm() return render(request, "calendrier/create.html", locals()) +@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()) + +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" + obj.save() + envoi = True + return render(request,"calendrier/home.html", locals()) + + +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" + obj.save() + envoi = True + return render(request,"calendrier/home.html", locals()) + +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" + obj.save() + envoi = True + return render(request,"calendrier/home.html", locals()) + class EventUpdate(UpdateView): model = Event template_name = "calendrier/update.html" form_class = EventForm success_url = reverse_lazy(home) - + @method_decorator(chef_required) + def dispatch(self, *args, **kwargs): + return super(EventUpdate, self).dispatch(*args, **kwargs) + +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) + # Create your views here. diff --git a/db.sqlite3 b/db.sqlite3 index dcbfef01840b0872ae775a7e33a03d8d647a42f8..d4695abdaeeb8f94d8f5c6cf0abce754d21199fa 100644 GIT binary patch delta 7753 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 z zPBh#_-C-yCdqm)OIJun&O-)Y~&{DBHb!6eQF!i107)+Kp@>gUD;=olBKUM>V*OP{~ zuMWYeX_e@P@~Q7Jz+EHx#= z60yS)I?Ivol0Sfc{1_?0Z{Zj5XYoZWV2s{C&!I=r*_A{CiZ>jgwOMhdUQJycLF7?& zk1C0}Dad*t3MFDg^Jciv=Bgg3gEdW+H5>QAO>hO3#RG5%a9uS%8vw?KeH1yX_Dl%@ zO`0Tnbkj6NSyqyj>S6C@*dp~+)c|i5WGRW=U~VP|#g2OvMKLreKu4$`jRr;Dxz-vG zgf-~YJ(_Nak|K-HTT^6xGi1dpgU?HnY8tW-92ud=8X#wv*S3mr(F?&%)IFML$g-)h z8n~Kws}#Fpy&N{OVi=NSs1!LGAl3X~g-Wu{e!v?-mIPf2*iV=2avVgFGor*d0-YcWy%ZXO>!LX$)4}SQ2G-Tnb?RJCyVVi@DsCUNo~o{dj|H7OutJCcv6AvyT$@0|MJu2 z`EZBAwZOZXjTCc5_;Z|ty9RfRxF0{qU0Y5}#1jsGURg^MO4P0QSGvRgkf94=AgJVQ zH+^W%_`^DP$f4Z873e&5&$$v>tx`X@{>a6=GPfHo4OoAFs}9w{-M}OFH{=e|t{piBHrWpE)a!cBZ{(FVHNo2JgASFHzSF-+(ubp& zV6!gPI4FXJnpNwCXREis?~$?Dkae!Q!dW{R4oz8=6ML+0ojpMJ_*5!rKwy~~f|{q+ z6`q<6jfSGx_Z?G1({thVGpyA{#61WT_hC5A39}5=ym&$ugrG zVEkd!U5=3{i!NqvCjQvEt2l)P}6IPNDr|0sqfHCns_n!OS z_kGTj^FHsn_s|*Lq2oAGkjEwnAwF@h+k?sjH4YJV{mL>#Ou}_7BV!q9{E3^mfq7h4 zb9H;cD(>g=*k+_y)*wDCtGQ(h*h<_vCR`x~*nuhhj+1y9Zy<~|xM631C6%9;PUK}J zU}Kg%u4I|1#NAo7nO2(~Udo+mbF5?$^&-Bu&D3%-{rG#dFv#WHcm|MaECRS#H_s^2nMpUb(?j>-N`sYwBgb>#Zp> z(uCqB5$7*0`m-{`89akdk*Hj4u<%Omd6s*gR)a7-Bw{d_OjLVciy3i8ur3lT;*KbA zWeC=R|@J-?YI!ov*D`2;h$|cHL%lOoiho4xoWR)N8 zESGGJjda-0L+|CQr{0~RXOHRhc@mo=xPns{KmeueZ#E~EGIj2xhtl8F?2mthp;$0$ zW>ptHvE~$H(Mf_?e1t*KfgJV&JIbD6PI{Y8CY7U9ojm_2)AqucpD;hWOl~X64IR5o zTarpM<-HT{7>7NwWOKRbsChiwK)0K`5ASIW1X~@!KudcocV5Wn`X={yvytX=_k?5o zl7a5es?sc*NBiiboP{;l93DX@-EBHK?gAl2}2?9s%Bj yY}6TuA=g=4Y^!dIY-Dq<(#hU`(>gjL{b5INFh0;1Ue!VT8B$`;pMs~pZTSc18(D?` diff --git a/gestion/__pycache__/admin.cpython-34.pyc b/gestion/__pycache__/admin.cpython-34.pyc index 572a33b0f9b8e7e5829746fb30d68dd3d414a43a..177ee13012bc9c86d30c4628923c8a448db63fc1 100644 GIT binary patch delta 779 zcmZ9Izi-n(6vyA$iQ`|19Vd1gh6)jWSxAA3fdwHDNF@kW6%_+nP}RF27ssydj2IX? zv;zYS$o~iue+7b-#VZpFBQx(^l`5)F_wl{&_xZi&`x^cWCx88}`y=NsKUo03VeM(* z`5|ug_{-$gF$drlp2+?gK~H z0Aa%GP%D@gtdzc1Lg4+C5@{s@K3FM(W7y_H;IVEPgRphCq3#^RVM4V}7%-aTEN-pG zBl5+N%B@mRaxbL#I_3%NrK3M|6De!j`+S)dX+39mZ46txvOKCkvkz7eec7vf##Z0K zqm5e`2%kx(-Zg$jIw3%%vEGQP64I~lnLAHnROE=TK}ZOcnlh;^{e_2Z7FjN4#iI1k zR8$^V)OMJ|tSr=YS#pspN&nY$_p1Gaw}Q`fPe}vFF=0ZuO1MV2PS~t}b}m1qo4YVeW8cT3 e?{e{gp{cGQLYCkddKqIga3iLdk@%zyaQ_EeIdk!Va{5<#%AND5n- z2k;dH@lkAoovjEq*4{fIlEQ`k=FT~1=ib>L|Je_|VqP@#9vmN703R^+gs|Smw-Y=D zwfi!+fZNaqqF`|8LeGSg7;p!81b7ts3{E@{9&i_U40;9#6Hen=K`}m3CbTjE+#e~v zRuaIIBP9W4o&uiM{n8+uL)|T@JE!0hB@=oK7)>(VhsO6A@`XNb6hSGfBRm5~#jLtw zJL;9)Ssq?ddTQNROE_5CbYlY%W71K###>Sc;;0O)3(@Tg>8ew+x|>EtW(kvo41uCW zCbgx%a1Uj>-e`(StKN>H*`XG|lHmx8FqwP#Hdldc=l z7b&O{=D4LA){+|`kDB42Pu4zj)Tfop(`b6WA!s^TK;%`y&f8Q~@uzIs52b;3)IB@D x61>uCHd;c`$TCNmB?N>y!aSj%;?7L*pVJ4<#&w(DG{qLfTxS~Lv#hE)Q@@zsW<&r0 diff --git a/gestion/__pycache__/models.cpython-34.pyc b/gestion/__pycache__/models.cpython-34.pyc index 9cb23d1e0d618cf2661529a2a85ad6133d65fe05..2a7ec6ee3757619f34de55316833b30990b789a1 100644 GIT binary patch delta 468 zcmZ9Hy-or_5XWbC&qI#m^EeMdZL~QP?Tn2D2~lGq#t)inHp*TMgh1SdhL})5X+ze= z*jo7vK7*YNZ=i+G;4GS$u)Fiy$;^Ldb{~^(j`QuNor}HaMvYCKk&^&`Dw=wq>d9Hm zpzVN2g2;f#f=GbKfmnhuuqX}3A`hYf6EGZ8h*0E#D4IxwY9GYP+{c;#F2j;OAWy-k z88KUqMXP^((}`#Hpxe3|#QKBmqzFV72#Q*!({x*((^K0+x%Bi4-Opys!z_eLY$ARA zMX%O=(?(N7%u<|Vzh+OwoELP&Hb+f@akI>AtcIo>#63V855aMy9#R=#OqLKKk*mgE z=$+tP^(E&%<`hK$8G47Z8>@b=p<=oFm#>F;X`U*x2r6^>fvuB3zq0B{WU0>JR+D{sEZPRRI71 delta 345 zcmdnPHHDMw9S<*8MGi;kQKpGp^;~QW3=9rHT)brB!VDB+ne4};B~>L6P?VpRnNzIbT9lVs zT#{dqk)M}YT#{Nmxq``;O#o<3k-+5BOy>N&ARAeL1P>z{W0BBgLFNz{h%`uzAdtAl z9UotsmzkWOk{TZ`IJuEoS=UdKzla+o&jTVrMieoDRPy@grH14K3AfDDoRlJFkc7x& zXBG#mA|Vi497G^Y2eUv{6oDK7@_#WOkl;(Zv0VV)JenP+i diff --git a/gestion/__pycache__/views.cpython-34.pyc b/gestion/__pycache__/views.cpython-34.pyc index b77b9fe87f73af887729aa9ea3cf65121785f99e..d4119486f2c214c90cb9617d18bdf43154e7aea3 100644 GIT binary patch delta 1030 zcmY*X&1(};5TDs>c9V3|q-jn3sJ2khMzJ5FqSlY%=go^PY7s)*_e?h?+4}Y+YDw@= zZ=TBY=1K7)f=5yCKky%rMNsf6f)~%utO0c&@3-^j&CGA!%zPYsKQZ&e%jc@co~=H~ z0epjhK8xgK+R?A=nYWh!ga@q(w0FYVPC$_dF$#|X)^>p?fG8&NZV+Q2N{MWP7zZ(t z$a_F!;97NuvGAqiHe^RC^BgPFc?wUoaDizy5ugvyBqoHr7N}J;pKvkXz2QPg^}YkmEc@ZmWfa5+kd`QJSuh}q9B3Q*$VKQckuBmN1)NtF{$@iy8R(Bdt-v@8 z$q9O(U4EO$o7dJ+95r99t!2j#+wDMKUWx6f)osLfH3oDvuy`!`n^i>nKh&q>l3hwNTZ3CF@$Mak8l9 z&Ck^G0b9%VMr`|`kg>a=!aG4r##oC}O1$s*!30o6%Dt2${m-7|Q?ymNba$joO>`EiL_vJplBcRrfy>Yx=VZgO1o z>n+(4Dv)Zf7s&gO8YQ(l$gse`A^&-6l0#DM%;|P0x-EH@pBe2lZ!+Z(ELug&oAPWg F{~N3Z+Q|R_ delta 712 zcmYjP&2G~`5T4mM{)?TT7SfiYDorGcRS76UAR!8osCWU|ON11;@s>CwF&eu;70D@F zIHEmp;L3#;K>mBL0e--x zM=)=*r}>B0*T93whj##-HHgX(RTg|5qAEnS1venF;d!v4w(#>^yB7}SI0~tU|0=rt zF0wz>6|Zu33NQeO5MBwOU!eZro-c4(fI$)F03_7DXdf|~nJ_hB;OH!7E(}UA;At$K zoddoQFtcE0LuSAf^$=4F=7_Tb=wi!bkpnXaGCspCUG<=F4@+uTm{*O{R8nro<1`D$ zJ$b0gM!n?c=16A!B%-pqZ9LiXc;?(njt8=rrMdr7X5ECkJ(6K216O@A+I8zSB`5Jv z=Gg5N<#>|BUw|4)6c6@lTJa4AzzUnkwvIloqRH-|i<`K@XkuMB=pZ%K`{Ln&uX`G2 zGNimXO2%0~5VXm;jyXI`qVS9w94ujb@oPUB$sJ~?!2n#CcGR|cVU{_fiZZR){hOKw z41q_hnlHZTTcHhxyuiwGCr-OzFN-IV^ajwHI=7y+bZgQ|=(>i+f6&cIx7<}tyCs4R z_08VLJIZh-*ivtuhsT}jav3O=bZZjJHz{dx)YPCSzErKD!-XFE(I|;dhw?G63Z&N< T>R8n#w7cjDjzv{?bX diff --git a/gestion/admin.py b/gestion/admin.py index 0ae28dc..ecb6c8c 100644 --- a/gestion/admin.py +++ b/gestion/admin.py @@ -3,6 +3,7 @@ from django.contrib.auth.models import User, Group from gestion.models import ErnestoUser from django.contrib.auth.admin import UserAdmin from calendrier.models import Event +from propositions.models import Prop class UserProfileInline(admin.StackedInline): model = ErnestoUser @@ -38,4 +39,5 @@ admin.site.unregister(User) admin.site.unregister(Group) admin.site.register(User, UserProfileAdmin) admin.site.register(Event) +admin.site.register(Prop) # Register your models here. diff --git a/gestion/models.py b/gestion/models.py index b310427..79722f6 100644 --- a/gestion/models.py +++ b/gestion/models.py @@ -9,12 +9,15 @@ class ErnestoUser(models.Model): is_chef = models.BooleanField("Chef Fanfare", default=False) phone = models.CharField("Téléphone", max_length=20, blank=True) instru = models.CharField("Instrument joué", max_length=40, blank=True) + slug = models.CharField(max_length=7, editable=False, unique=True) class Meta: verbose_name = "Profil Ernestophoniste" - verbose_name_plural = "Profils Ernestophonistes" + verbose_name_plural = "Profil Ernestophoniste" def __unicode__(self): return unicode(self.user.username) + def __str__(self): + return self.user.username # Create your models here. diff --git a/gestion/views.py b/gestion/views.py index 0b51963..3cc2561 100644 --- a/gestion/views.py +++ b/gestion/views.py @@ -11,6 +11,7 @@ import smtplib from gestion.forms import InscriptionMembreForm, RegistrationFormUser from gestion.models import ErnestoUser +from propositions.utils import generer from calendrier.views import calendar @@ -24,11 +25,20 @@ def inscription_membre(request): if not (comp_form.cleaned_data['validation'] == "Pouet-ta-mere"): error = "Le champ Validation ne correspond pas à celui attendu" return render(request, "gestion/registration.html", locals()) - member = user_form.save() + member = user_form.save(commit=False) + temp = True + while temp: + code = generer() + try: + ErnestoUser.objects.get(slug=code) + except: + temp=False member.save() (profile, _) = ErnestoUser.objects.get_or_create(user = member) comp_form = InscriptionMembreForm(requbis, instance = profile) - comp_form.save() + obj = comp_form.save(commit=False) + obj.slug=code + obj.save() envoi = True return render(request, 'gestion/thanks.html', locals()) else: @@ -53,6 +63,7 @@ def login(request): pass return django_login_view(request, template_name = 'login.html', ) - +def divers(request): + return render(request, "gestion/divers.html", locals()) # Create your views here. diff --git a/propositions/__init__.py b/propositions/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/propositions/__pycache__/__init__.cpython-34.pyc b/propositions/__pycache__/__init__.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..50165c4557cdac3b7ded67493d3c341b1f4b84a7 GIT binary patch literal 134 zcmaFI!^~1dl-k3@`#24nSPY0whux7=kq!{Z=v*frJsnFJt|T{M=OiqRi}E z{eYtUtkjZXeb=JA)Z&tS{eq(Wg8bsllFa67$mY^^)`RN{TX*ia>^}WGG?=Qefhjfqq7QZmND!W_GTA zKv8~HYDuxaYf)ZmaY?>@K~a7|esN|=W`16=KG;aTg34PQHo5sJr8%i~j6g$*ftUdR DnCdHq literal 0 HcmV?d00001 diff --git a/propositions/__pycache__/forms.cpython-34.pyc b/propositions/__pycache__/forms.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8e477b13b2a3ddd53e2385ca50519cfff4200207 GIT binary patch literal 780 zcmZuvJ&)8d5FIB@_T#eX#8FY5M3rVkwH2Ui;6!mNq=P0+h}PaaFL4}fN5HnrpP}au z@HgC2(eMMPn8~ub4-v<8{A~_Vh%y}3S$tz^MLzEtfx_d+t4RH_?vZZ2>DQre$S0O(d zO<}Ra#$s69LGY7*2)l>e?1^AejzNsk)pR>MxSC%`Ux&CgI*e-TmGd(2M#(lLwfEMA z>AGI^jjz30hoi2kSMu64LfY+vrO~INKh?&rWZf_GcuO>vTH6j3`6P_1s;#xGsxYl8 zZA9Nto>kSyzHau2r9%w~g0czeTFFK@8&PfYR(|%c+phOv^ht>;>D@Q54-p!|pQpvO z(Xz1WgD$Y24dTU1+e+t6(c!5Zr@S()D~2CB@4f_1-6lxjG7K3@am4H~4*LiT%beRI zq9@eOC{X!Ea-W@0jbotc$ZE!h^)gRGDmHa{WrhyQliN1tLyK2rjua;=m1|N~lE$nxd9oEF{aVm&B=Khg}Cj#I3vr z56~O$z+3EBcT|qi#B@ws&thki@U3UPGBYlzqWi86ubSgyLv5O&PHke=U+Lef!U24&6{<+z@l13sD7QIVD>uTAt` zs-sHFq)caW5y8drmHu{icb+QaXYy^jC~76(Q68H%%rQ^-;hx)5H0{HDBAOBsixG$h zqce1#mc`pMQhoS;JseJ|nH;M8WHv;qsjT(zq8`J!O`X?yRqA0=uFd&J<0px(Rgzrc zBn}LTWyCNyFC70AjNxpd>6y=52qZy#o>D}tDH86K;kHZ+(zjh zN#9O!N+EolO?yNdr8g%)Lc+p@THS)nxcl3$jIWwpm(p?vVH~Pi`~E?ir|gvk|jJr0yZsw08M6vS@9F Z%ix&caU;JctZ5y>^hF;RV%xpl`wiDQ9uEKj literal 0 HcmV?d00001 diff --git a/propositions/__pycache__/urls.cpython-34.pyc b/propositions/__pycache__/urls.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..39044ec92edb4b7ffe2d6f7080a7f603a3b21d4c GIT binary patch literal 650 zcma))zm5|z5XL_{d&!dIAOs1C{t6bPxT8R)90j!KBt)}1KG35+Y+NKdH|Bp3G@-J<(`MoqsS@roycS8N#rT?apb$u_ae_g3AQ{6 zA#tftm4FLs}weaTeJgoc>2t;wg3YF@Q* zv}yiZS=nl@VqvwIdfGi rwtGvBSFc<}zOm}iauv2*)SvqFw6wY{Xvwz>e$L^cn8~4-9=yK+?VqyE literal 0 HcmV?d00001 diff --git a/propositions/__pycache__/utils.cpython-34.pyc b/propositions/__pycache__/utils.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c9f9852aeca044ea7580919621567b4b7be3580d GIT binary patch literal 560 zcmYk3zfRmh5XQgt`3#&634x*%DQM&7O#0J_0$PN0N^??#to6q1#r9rymLiB$K_n?t z^8`ExZ?P>EO^TFMnK6IF$lrK0p83sa{CB)L`uE}b<1K(Y){7+^?X&1TyNVx$23Wkr z3JZlQK{dc7=Q&WA=jlCH<4B7a6Uu*f9 zb2h~?#f6g8JRcru#SAe4r>q?o?Xs(Z3*gfm>3SUU3)1x`!PgA)8{|pMeA!j5jhQ}m zRvXSFlf9@;aur9q^ra5Q8}h<_*egz5YYK0_w8gP^OB1L#^qryLij{XOM>bg3QE?V* zLzC6FhtagL6trtsvrM)U%m&Wi)uv;tpG+I4%Z6qgJlEYzVMIQR83k{ z;9V$Ym91@{IONT16Vs)$9j~31zNW=S*_bjo%W#>MD=%mE>%v@nnkqLUnF6(?c9q}e hC?EJSzr6gIKGCtru;J<*$~GzAqQMqy*@KuXpV; zHgV6lkyb^bv~6gWq*{%to@YB+JyP1JI2)dxpuUuq2Wb&&^>6}}1TC%GDpQsEU8+7p zZ6#OLVVT5<8kKrjl^Sj9?^M1xqhGu zr4`T7zM~6es`3M)^a$RUCqmi8`zBuVPZVcFM*@pupY%Vd@}$LQi#~zu(NRF>MEVm3 z$rGO*-=s5W=2V5;{v@E2EvjmC6wy(gl7P-w-}CN0d>N&eggodzDj(v#$MZEPsS(CjPE+B;lgEY|e+OKSA+6Dpeg!TcE>RZBbo?x~i!1^(OX zHFja7clX|Z--afe9K2$~z;ihL!3cR(aN2v5|9%W?Shc z6tE|)-KQHYZmbu!|>2baT z{~xK!>`WcKv#_5>K$q!{Pi))mEau)Tn8JJy1^LU~ve)q0 z3bC6jUXTu%_4^PFM+5oSVF&#KNF&}MKXtt9W!dS!A?^|OQCX?-*oDvXg|GBFtf#wNv{5kFg{$-?H;Lb)MA*=F zZkNjJmerld@VfpX_y35C4K6rloO|oey@=#QO^j{uFMpqmuxqkAh>mc#3DA4JexZasd+k5?6oB#Ww&$|AduZo@@S;rJr%} zb1s-eFL41w0iWoga2tKk4uxMpd&IEhhlzyoErjtYgayKI+yF8Vnmodhh*J|h0WuK! zWS$V>grS)y5Vi<(@Ipw;6Tj!)kWbesD=<%Ri=3ojj)v$rCBPj|VCI(a#9uCWqQ?Eq zL0GNE^nle^=m<|h01hy&E7M%8=n&w~I^cMa1Xz8qSKqZhj>8Lw%>BOT^1eHYgm!yh z;)ZQlOFzd28}OO^9zeMl2^Z*J@<92FulF{xH4gmyP61dr81gANsBz+`>XMc=NHs~dSpE~y{_KqWqf1(aq~X_(F++zH_K*>@ z-UFYx9C6W-JB})aWfzWRwgx92h7Aeqxisz^UW2pc$oex+?d|pgTQiff()t!OZ6is| zcvy`N(H6*15Heme<5g`f2-gKBdDXXTO zw?HV|ve)x>7j3wJ#+Gd%bBkRXXQS!wGPjw@Xr!?3iO#fOl(Px}s;wgx9385C&D(O+ z)PU5h>0fh$D8A0pZ&29w<(U@wN5(#elHqKFaK?1J8(z!rdZ$+|n^X?SUe`9_xESUt zj%_QB^D>!aEO+Ag;bfS(9+#Nb(5W)pk8_}~-t3hTLb0h@CIuO9TGgoC9!-cJvB~Nms{Xq z=>QiuTp#<>Azf(8rOAaEr;C~s1kU7X;Tq92PYf$xfQt&L-(l-2*$ads_dD zzewn-Cold0PgajBj7{oMRY|}1s>rYDZ1Vl7IX@@h2M$gm`AZ4+Mxc_1&;Tu=AW*Co z8ih7Nk$^OzPH_hm1Ly(jA*uv-gepZfz*oe)7@-o5+@Swt-$UHJWz`X6@A`_u)>X~LftAD=_u4m z^z>}?p*uzzzfN&A0lx+j8DRCPBYc#(R$00XX*3~NvJazs57~gDa2VN(TCcqe$wqq~ z#@6(e)oyA1>9uh_OG3JJnmLWH61n{iJeBl|4sdG zF}~cmJgR87-_D}ng`vGAtz3*#lW6$@BaX1LK?=;g=pL87xL@CMK5!jtEu_}CJ>YW literal 0 HcmV?d00001 diff --git a/propositions/templatetags/getresponse.py b/propositions/templatetags/getresponse.py new file mode 100644 index 0000000..83378c3 --- /dev/null +++ b/propositions/templatetags/getresponse.py @@ -0,0 +1,12 @@ +from django import template +from propositions.models import Reponses + +register = template.Library() + +@register.inclusion_tag("propositions/reponse.html") +def getresponse(user, prop): + try: + rep = Reponses.objects.get(prop=prop, part=user) + return {"reponse": rep.reponse} + except Reponses.DoesNotExist: + return {} diff --git a/propositions/tests.py b/propositions/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/propositions/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/propositions/urls.py b/propositions/urls.py new file mode 100644 index 0000000..85282de --- /dev/null +++ b/propositions/urls.py @@ -0,0 +1,10 @@ +from django.conf.urls import patterns, url +from propositions.views import PropDelete + +urlpatterns = patterns('propositions.views', + url(r'^$', 'liste'), + url(r'^new/?$', 'create_prop'), + url(r'^(?P\d+)/oui/?$', 'repoui'), + url(r'^(?P\d+)/non/?$', 'repnon'), + url(r'^(?P\d+)/supprimer/?$', PropDelete.as_view()), + ) diff --git a/propositions/utils.py b/propositions/utils.py new file mode 100644 index 0000000..c4d5797 --- /dev/null +++ b/propositions/utils.py @@ -0,0 +1,7 @@ +import string +import random + +def generer(*args): + caracteres = string.ascii_letters + string.digits + aleatoire = [random.choice(caracteres) for _ in range(6)] + return ''.join(aleatoire) diff --git a/propositions/views.py b/propositions/views.py new file mode 100644 index 0000000..198afae --- /dev/null +++ b/propositions/views.py @@ -0,0 +1,101 @@ +from django.shortcuts import render, redirect +from django.core.urlresolvers import reverse_lazy +from django.contrib.auth.decorators import login_required +from django.views.generic import DeleteView +from django.utils.decorators import method_decorator +from django.http import HttpResponseRedirect + +import string +import random + +from propositions.forms import PropForm +from propositions.models import Prop +from propositions.models import Reponses +from propositions.utils import generer +from gestion.models import ErnestoUser + +@login_required +def create_prop(request): + if request.method == "POST": + form = PropForm(request.POST) + if form.is_valid(): + obj = form.save(commit=False) + obj.nboui = 0 + obj.nbnon = 0 + obj.user = request.user.profile + obj.save() + envoi = True + else: + form = PropForm() + return render(request, "propositions/create.html", locals()) + +@login_required +def liste(request): + props = Prop.objects.all().order_by('-nboui', 'nbnon', 'nom') + n = len(props) + return render(request, 'propositions/liste.html', locals()) + + +@login_required +def repoui(request, id): + prop = Prop.objects.get(id=id) + participant = request.user.profile + try: + p = Reponses.objects.get(prop=prop, part=participant) + if p.reponse == "oui": + prop.nboui -= 1 + else: + prop.nbnon-=1 + p.delete() + except Reponses.DoesNotExist: + pass + rep = Reponses() + rep.prop = prop + rep.part = participant + rep.reponse = "oui" + rep.save() + prop.nboui += 1 + prop.save() + return redirect('propositions.views.liste') + +class PropDelete(DeleteView): + model = Prop + template_name= "propositions/delete.html" + success_url = reverse_lazy(liste) + + @method_decorator(login_required) + def dispatch(self, *args, **kwargs): + return super(PropDelete, self).dispatch(*args, **kwargs) + + def delete(self, request, *args, **kwargs): + self.object = self.get_object() + success_url = self.get_success_url() + if not ((self.object.user == self.request.user.profile) or self.request.user.profile.is_chef): + return redirect('propositions.views.liste') + else: + self.object.delete() + return HttpResponseRedirect(success_url) + +@login_required +def repnon(request, id): + prop = Prop.objects.get(id=id) + participant = request.user.profile + try: + p = Reponses.objects.get(prop=prop, part=participant) + if p.reponse == "oui": + prop.nboui -= 1 + else: + prop.nbnon -= 1 + p.delete() + except Reponses.DoesNotExist: + pass + rep = Reponses() + rep.prop = prop + rep.part = participant + rep.reponse = "non" + rep.save() + prop.nbnon += 1 + prop.save() + return redirect('propositions.views.liste') + +# Create your views here. diff --git a/static/Favicon.ico b/static/Favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..923da541117fa0d0ec085f875b895660b85f9d25 GIT binary patch literal 766 zcmcJJL1Eh{ z1kr;B#fV4IgP@`wN`xLgC`h3QA%c_!OUVNT6IwIwrjelFO=tOb_L~`o1p?+oqkGJ~ z6SW<{UI2#;QNuBVt^Y0hlAp2vR0XloFBllFB1UUCGG4>Q=^}X!P8rPT@UyipbNQfmWP^ zCy40ec7Icl_K2qR6*XQmUIq`Ie)G&eng- zPiNu@>#NQ}W#b*UHY$~m)|;URHgzLk?!N8oarJlq_vZI7zX>qUBF8|k1tbjpTR?Az r9+QKX#?j!Ce;G^u3}XH;g8l)+ZbbYb`u)JH;ZtuT$Gp|y&(Hn@qf+P< literal 0 HcmV?d00001 diff --git a/static/FondErnesto.gif b/static/FondErnesto.gif new file mode 100644 index 0000000000000000000000000000000000000000..b32a2bf6ce2155fa729e655586f2175152b6396f GIT binary patch literal 20631 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 literal 0 HcmV?d00001 diff --git a/static/css/ernesto.css b/static/css/ernesto.css new file mode 100644 index 0000000..1839f50 --- /dev/null +++ b/static/css/ernesto.css @@ -0,0 +1,149 @@ +@import url("http://fonts.googleapis.com/css?family=Lobster"); + +html, body { + height: 100%; +} + +h1 { + font: 36px Lobster; + margin-bottom: 0.8em; + text-align: center; +} + +a { + color: #e4522f; + font-weight: bold; +} + +body { + background: none repeat scroll 0% 0% #45312D; +} + +th { + padding-right: 10px; +} + + +td { + padding-right: 10px; +} + +td.oui { + background-color: #409526; +} + +td.pe { + background-color: #E68200; +} + +td.non { + background-color: #C30909; +} + +#page { + background: none repeat scroll 0% 0% #ffffff; + min-height: 100%; + margin: 0px auto; + max-width: 800px; +} + +#page section { + padding: 20px; +} + +header { + background: none repeat scroll 0% 0% #e4522f; + overflow: hidden; +} + +#menu { + list-style-type: none; + max-width: 85%; + padding: 0px; + text-align: right; + margin-bottom:0; +} + +#menu li { + display: inline-block; + font-size: 1.2em; + margin: 0px; + padding: 0px; +} + +#menu a { + color: #ffffff; + font-weight: bold; +} + +#menu li > * { + display: inline-block; + padding: 30px 10px; +} + +#menu a:hover { + background: none repeat scroll 0% 0% #ffffff; + color: #e4522f; + text-decoration: none; +} + +#logo_ernesto { + float: left; + width: 15%; +} + +#logo_ernesto img { + width: 100%; +} + +#menu { + float: right; +} + +label { + width: 230px; +} + +textarea, input { + vertical-align: top; +} + +form p { + border-top: 1px solid #f7e4e0; + padding-top: 5px; +} + +.fichier, .telecharger, .supprimer { + display: inline-block; + margin: 3px; + padding: 2px 3px; +} + +.telecharger:hover, .supprimer:hover { + color: #ffffff; + text-decoration: none; +} + +.fichier { + color: #1d90d2; + display: inline-block; + min-width: 20%; +} + +.supprimer { + border: 1px solid #cc0000; + color: #cc0000; +} + +.supprimer:hover { + background: none repeat scroll 0% 0% #cc0000; +} + +.telecharger:hover { + background: none repeat scroll 0% 0% #6cb828; +} + +.telecharger { + border: 1px solid #6cb828; + color: #6cb828; +} diff --git a/static/css/main.css b/static/css/main.css index 944df1d..4900553 100644 --- a/static/css/main.css +++ b/static/css/main.css @@ -20,3 +20,4 @@ header li margin-right: 15px; display: inline-block; } + diff --git a/static/logo.png b/static/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..3271745bd1a1b220193bb2e9164cd18c2c22f97c GIT binary patch literal 14229 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 literal 0 HcmV?d00001 diff --git a/templates/calendrier/create.html b/templates/calendrier/create.html index e0b42bf..d9177fd 100644 --- a/templates/calendrier/create.html +++ b/templates/calendrier/create.html @@ -3,11 +3,14 @@ {% block titre%}Création d'Évènement{% endblock %} {% block content %} -{% if envoi %}Votre message a bien été envoyé !{% endif %} - +{% if envoi %}L'événement a bien été créé !{% endif %} +
+{% if erreur %} +{{ erreur }} +{% endif %}
{% csrf_token %} {{ form.as_p }} - +
{% endblock %} diff --git a/templates/calendrier/delete.html b/templates/calendrier/delete.html new file mode 100644 index 0000000..0ab2aa9 --- /dev/null +++ b/templates/calendrier/delete.html @@ -0,0 +1,10 @@ +{% extends "base.html" %} + +{% block titre %}Suppression d'un événement{% endblock %} + +{% block content %}
+ {% csrf_token %} +

Voulez vous vraiment supprimer l'événement {{ object }}?

+ +
+{% endblock %} diff --git a/templates/calendrier/home.html b/templates/calendrier/home.html index 147464c..842a308 100644 --- a/templates/calendrier/home.html +++ b/templates/calendrier/home.html @@ -11,6 +11,14 @@ {% block content %}

L'Ernestophone, la fanfare de l'École normale supérieure

+
+

+Fanfaron de passage, musicien intrigué, Ernestophoniste en quête de sensations fortes ou de partitions, ou tout simplement internaute égaré, l'Ernestophone te souhaite la bienvenue sur son son site ! +

+

+L'Ernestophone, c'est la fanfare de l'École normale supérieure, (re)créée en septembre 2011, pour le plus grand bonheur des petits. Et des grands. +

+
diff --git a/templates/propositions/voteok.html b/templates/propositions/voteok.html new file mode 100644 index 0000000..4512974 --- /dev/null +++ b/templates/propositions/voteok.html @@ -0,0 +1,5 @@ +{% extends "base.html" %} +{% block titre %}Vote pris en compte{% endblock %} +{% block content %}

Votre vote a été pris en compte

+

Voir la liste des propositions

{% endblock %} +
diff --git a/templates/calendrier/reponse.html b/templates/calendrier/reponse.html new file mode 100644 index 0000000..fc7a784 --- /dev/null +++ b/templates/calendrier/reponse.html @@ -0,0 +1,17 @@ +{% extends "base.html" %} + +{% block titre %}Participation à un événement{% endblock %} + +{% block content %} +{% if envoi %}

Votre réponse a été enregistrée !

{% endif %} + + +

Retour à l'événement

+
Voulez vous participer à l'événement {{ ev.nom }}, le {{ ev.date }} à {{ ev.debut|time:"H:i" }} ?
+ +
+ {% csrf_token %} + {{ form.as_p }} + +
+{% endblock %} diff --git a/templates/calendrier/view_event.html b/templates/calendrier/view_event.html index 114e98e..afcae11 100644 --- a/templates/calendrier/view_event.html +++ b/templates/calendrier/view_event.html @@ -3,8 +3,13 @@ {% block titre %}{{ nom }}{% endblock %} {% block content %} +
{% if user.profile.is_chef %}

Modifier l'événement

+

Supprimer l'événement

+{% endif %} +{% if user.is_authenticated %} +

Répondre à l'événement

{% endif %}

{{ nom }}

{{ev.date}}

@@ -17,5 +22,30 @@ {% if desc %}

{{ev.description }}

{% endif %} - +
+{% if user.is_authenticated %} +
+

Participants

+

{{ nboui }} ont répondu oui, {{ nbpe }} peut-être, et {{ nbnon }} non

+ +{% if part %} + + + +{% endif %} +{% for p in part %} + + +{% if p.reponse == "oui" %} +{% elif p.reponse == "pe" %} +{% elif p.reponse == "non" %} +{% else %} +{% endif %} + +{% empty %} +Pas de réponse pour l'instant +{% endfor %} +
ErnestophonisteRéponse
{{ p.participant.user.username }}
+
+{% endif %} {% endblock %} diff --git a/templates/gestion/base.html b/templates/gestion/base.html index 30508f8..ce702f0 100644 --- a/templates/gestion/base.html +++ b/templates/gestion/base.html @@ -7,28 +7,38 @@ {% block titre %}{% endblock %} - + {% block extrahead %}{% endblock %} +
{% block header %} - +
+ L'Ernestophone +
+ + {% endblock %}
+
{% block content %} {% endblock %} +
+
diff --git a/templates/gestion/divers.html b/templates/gestion/divers.html new file mode 100644 index 0000000..16e41cd --- /dev/null +++ b/templates/gestion/divers.html @@ -0,0 +1,8 @@ +{% extends "base.html" %} +{% block titre %}Divers{% endblock %} +{% block content %} +

Divers

+ +{% endblock %} diff --git a/templates/gestion/login.html b/templates/gestion/login.html index fc11148..e6ce0b5 100644 --- a/templates/gestion/login.html +++ b/templates/gestion/login.html @@ -2,6 +2,7 @@ {% block titre %}Connexion{% endblock %} {% block content %}

Connexion

+
{% if form.errors %}

Mot de passe ou nom d'utilisateur incorrect

{% endif %} @@ -12,16 +13,18 @@ {% csrf_token %} - + - +
{{ form.username }}
{{ form.password }}
+ {% if next %} {% else %} {% endif %} +
{% endblock %} diff --git a/templates/partitions/liste.html b/templates/partitions/liste.html index 6d94bc0..c5ee2cd 100644 --- a/templates/partitions/liste.html +++ b/templates/partitions/liste.html @@ -4,16 +4,22 @@ {% if suppression %}

{{ suppression }}

{% endif %} +{% if user.is_authenticated %}

Ajouter un morceau

+{% endif %} + {% endblock %} diff --git a/templates/partitions/listepart.html b/templates/partitions/listepart.html index b2bfa43..c1f0823 100644 --- a/templates/partitions/listepart.html +++ b/templates/partitions/listepart.html @@ -6,19 +6,22 @@ {% if suppression %}

{{ suppression }}

{% endif %} +
    {% for p in part %} {% if user.is_authenticated and ".pdf" in p.part.url %} -

    {{ p.nom }} +

  • {{ p.nom }} {% elif user.is_authenticated and ".mp3" in p.part.url %} -

    {{ p.nom }} -{% else %}

    {{ p.nom }} +

  • {{ p.nom }} +{% else %}
  • {{ p.nom }} {% endif %} -{% if user.is_authenticated %}Télécharger{% endif %}

    +{% if user.is_authenticated %}Télécharger{% endif %} {% if user.profile.is_chef %} -

    Supprimer

    +Supprimer {% endif %} +
  • {% empty %}

    Pas de partitions pour le moment

    {% endfor %} +

Ajouter un média

{% endblock %} diff --git a/templates/propositions/create.html b/templates/propositions/create.html new file mode 100644 index 0000000..bef2072 --- /dev/null +++ b/templates/propositions/create.html @@ -0,0 +1,13 @@ +{% extends "base.html" %} + +{%block titre %}Proposition de morceau{% endblock %} + +{% block content %} +

Retour aux propositions

+{% if envoi %}

Votre proposition a été enregistrée.{% endif %} +

+ {% csrf_token %} + {{ form.as_p }} + +
+{% endblock %} diff --git a/templates/propositions/delete.html b/templates/propositions/delete.html new file mode 100644 index 0000000..1dfe550 --- /dev/null +++ b/templates/propositions/delete.html @@ -0,0 +1,10 @@ +{% extends "base.html" %} + +{% block titre %}Suppression d'une proposition{% endblock %} +{% block content %}
+ {% csrf_token %} +

Retour aux propositions

+

Voulez vous vraiment supprimer la proposition {{ object }}?

+ +
+{% endblock %} diff --git a/templates/propositions/liste.html b/templates/propositions/liste.html new file mode 100644 index 0000000..22963de --- /dev/null +++ b/templates/propositions/liste.html @@ -0,0 +1,22 @@ +{% extends "base.html" %} +{% load getresponse %} +{% block titre %}Propositions de morceau{% endblock %} +{% block content %}

Liste des propositions

+{% if error %} +

{{ error }}

+{% endif %} +

Proposer un morceau

+{% if n > 0 %} + + +{% for p in props %} + + +{% getresponse request.user.profile p %} + +{% endfor %} +
OuiNon
{% if p.lien %}{% endif %}{{ p.nom }}{% if p.artiste %} - {{ p.artiste }}{% endif %}{% if p.lien %}{% endif %}{{p.nboui }}{{ p.nbnon }}OuiNon{% if p.user == request.user.profile or request.user.profile.is_chef %}Supprimer{% endif %}
+{% else %} +Pas de proposition pour le moment +{% endif %} +{% endblock %} diff --git a/templates/propositions/reponse.html b/templates/propositions/reponse.html new file mode 100644 index 0000000..e5ee7f3 --- /dev/null +++ b/templates/propositions/reponse.html @@ -0,0 +1 @@ +
{% if reponse %}Vous avez voté {{ reponse }}{%endif%}