Browse Source

Polishing the site (ordering)

Denis Merigoux 10 years ago
parent
commit
4bd9bf23d8

+ 12 - 3
census/admin.py

1
 from django.contrib import admin
1
 from django.contrib import admin
2
 from census.models import *
2
 from census.models import *
3
 
3
 
4
+class CountAdmin(admin.ModelAdmin):
5
+	ordering = ('-date', )
6
+
7
+class LessonAdmin(admin.ModelAdmin):
8
+	ordering = ('-date', )
9
+
10
+class CourseAdmin(admin.ModelAdmin):
11
+	ordering = ('-promotion', 'name')
12
+
4
 # Register your models here.
13
 # Register your models here.
5
 admin.site.register(Promotion)
14
 admin.site.register(Promotion)
6
 admin.site.register(Amphi)
15
 admin.site.register(Amphi)
7
-admin.site.register(Course)
16
+admin.site.register(Course,CourseAdmin)
8
 admin.site.register(Professor)
17
 admin.site.register(Professor)
9
-admin.site.register(Lesson)
10
-admin.site.register(Count)
18
+admin.site.register(Lesson,LessonAdmin)
19
+admin.site.register(Count,CountAdmin)

+ 12 - 8
census/migrations/0001_initial.py

13
         migrations.CreateModel(
13
         migrations.CreateModel(
14
             name='Amphi',
14
             name='Amphi',
15
             fields=[
15
             fields=[
16
-                ('id', models.AutoField(serialize=False, verbose_name='ID', auto_created=True, primary_key=True)),
16
+                ('id', models.AutoField(verbose_name='ID', auto_created=True, primary_key=True, serialize=False)),
17
                 ('name', models.CharField(verbose_name='Nom', max_length=60)),
17
                 ('name', models.CharField(verbose_name='Nom', max_length=60)),
18
                 ('capacity', models.IntegerField(verbose_name='Capacité')),
18
                 ('capacity', models.IntegerField(verbose_name='Capacité')),
19
             ],
19
             ],
25
         migrations.CreateModel(
25
         migrations.CreateModel(
26
             name='Count',
26
             name='Count',
27
             fields=[
27
             fields=[
28
-                ('id', models.AutoField(serialize=False, verbose_name='ID', auto_created=True, primary_key=True)),
28
+                ('id', models.AutoField(verbose_name='ID', auto_created=True, primary_key=True, serialize=False)),
29
                 ('census', models.IntegerField(verbose_name="Nombre d'éléves présents")),
29
                 ('census', models.IntegerField(verbose_name="Nombre d'éléves présents")),
30
+                ('date', models.DateTimeField(verbose_name='Soumis le', auto_now=True)),
31
+                ('comment', models.TextField(verbose_name='Commentaires', null=True, blank=True)),
32
+                ('signature', models.CharField(verbose_name='signature', max_length=120)),
30
             ],
33
             ],
31
             options={
34
             options={
32
                 'verbose_name': 'Comptage',
35
                 'verbose_name': 'Comptage',
36
         migrations.CreateModel(
39
         migrations.CreateModel(
37
             name='Course',
40
             name='Course',
38
             fields=[
41
             fields=[
39
-                ('id', models.AutoField(serialize=False, verbose_name='ID', auto_created=True, primary_key=True)),
40
-                ('name', models.CharField(verbose_name='Nom', max_length=6)),
42
+                ('id', models.AutoField(verbose_name='ID', auto_created=True, primary_key=True, serialize=False)),
43
+                ('name', models.CharField(verbose_name='Nom', max_length=60)),
41
                 ('enrolled', models.IntegerField(verbose_name="Nombre d'inscrits")),
44
                 ('enrolled', models.IntegerField(verbose_name="Nombre d'inscrits")),
42
             ],
45
             ],
43
             options={
46
             options={
49
         migrations.CreateModel(
52
         migrations.CreateModel(
50
             name='Lesson',
53
             name='Lesson',
51
             fields=[
54
             fields=[
52
-                ('id', models.AutoField(serialize=False, verbose_name='ID', auto_created=True, primary_key=True)),
55
+                ('id', models.AutoField(verbose_name='ID', auto_created=True, primary_key=True, serialize=False)),
53
                 ('date', models.DateField(verbose_name='Date')),
56
                 ('date', models.DateField(verbose_name='Date')),
54
                 ('number', models.IntegerField(verbose_name='Numéro de la séance')),
57
                 ('number', models.IntegerField(verbose_name='Numéro de la séance')),
58
+                ('title', models.CharField(verbose_name='Titre', max_length=140, null=True, blank=True)),
55
                 ('amphi', models.ForeignKey(verbose_name='Amphithéâtre', to='census.Amphi')),
59
                 ('amphi', models.ForeignKey(verbose_name='Amphithéâtre', to='census.Amphi')),
56
                 ('course', models.ForeignKey(to='census.Course')),
60
                 ('course', models.ForeignKey(to='census.Course')),
57
             ],
61
             ],
63
         migrations.CreateModel(
67
         migrations.CreateModel(
64
             name='Professor',
68
             name='Professor',
65
             fields=[
69
             fields=[
66
-                ('id', models.AutoField(serialize=False, verbose_name='ID', auto_created=True, primary_key=True)),
70
+                ('id', models.AutoField(verbose_name='ID', auto_created=True, primary_key=True, serialize=False)),
67
                 ('name', models.CharField(verbose_name='Nom', max_length=100)),
71
                 ('name', models.CharField(verbose_name='Nom', max_length=100)),
68
             ],
72
             ],
69
             options={
73
             options={
74
         migrations.CreateModel(
78
         migrations.CreateModel(
75
             name='Promotion',
79
             name='Promotion',
76
             fields=[
80
             fields=[
77
-                ('id', models.AutoField(serialize=False, verbose_name='ID', auto_created=True, primary_key=True)),
81
+                ('id', models.AutoField(verbose_name='ID', auto_created=True, primary_key=True, serialize=False)),
78
                 ('number', models.IntegerField(verbose_name='Numéro')),
82
                 ('number', models.IntegerField(verbose_name='Numéro')),
79
             ],
83
             ],
80
             options={
84
             options={
85
         migrations.AddField(
89
         migrations.AddField(
86
             model_name='lesson',
90
             model_name='lesson',
87
             name='professor',
91
             name='professor',
88
-            field=models.ForeignKey(verbose_name='Professeur', to='census.Professor'),
92
+            field=models.ForeignKey(null=True, verbose_name='Professeur', to='census.Professor', blank=True),
89
             preserve_default=True,
93
             preserve_default=True,
90
         ),
94
         ),
91
         migrations.AddField(
95
         migrations.AddField(

+ 8 - 8
census/models.py

47
 	title=models.CharField("Titre",max_length=140,blank=True,null=True)
47
 	title=models.CharField("Titre",max_length=140,blank=True,null=True)
48
 
48
 
49
 	def __str__(self):
49
 	def __str__(self):
50
-		if ((self.number is not None) & (self.title is not None)):
51
-			return "%s n°%s : %s (%s, %s)" % (self.course.name,self.number,self.title,self.course.promotion,self.date)
52
-		elif (self.number is not None):
53
-			return "%s n°%s (%s, %s)" % (self.course.name,self.number,self.course.promotion,self.date)
54
-		elif (self.title is not None):
55
-			return "%s : %s (%s, %s)" % (self.course.name,self.title,self.course.promotion,self.date)
50
+		if ((self.number != '' ) & (self.title != '')):
51
+			return "%s %s n°%s : %s (%s)" % (self.course.promotion,self.course.name,self.number,self.title,self.date)
52
+		elif (self.number != ''):
53
+			return "%s %s n°%s (%s)" % (self.course.promotion,self.course.name,self.number,self.date)
54
+		elif (self.title != ''):
55
+			return "%s %s : %s (%s)" % (self.course.promotion,self.course.name,self.title,self.date)
56
 		else:
56
 		else:
57
-			return "%s (%s,%s)" % (self.course.name,self.course.promotion,self.date)
57
+			return "%s %s (%s)" % (self.course.promotion,self.course.name,self.date)
58
 
58
 
59
 	class Meta:
59
 	class Meta:
60
          verbose_name = "Séance"
60
          verbose_name = "Séance"
63
 	lesson=models.ForeignKey(Lesson,verbose_name="Séance")
63
 	lesson=models.ForeignKey(Lesson,verbose_name="Séance")
64
 	census=models.IntegerField("Nombre d'éléves présents")
64
 	census=models.IntegerField("Nombre d'éléves présents")
65
 	date=models.DateTimeField("Soumis le",auto_now="True")
65
 	date=models.DateTimeField("Soumis le",auto_now="True")
66
-	comment=models.TextField("Commentaires")
66
+	comment=models.TextField("Commentaires",blank=True,null=True)
67
 	signature=models.CharField("signature",max_length=120)
67
 	signature=models.CharField("signature",max_length=120)
68
 
68
 
69
 
69
 

+ 5 - 1
census/templates/coursTemplate.html

34
 		<div class="col-md-4">
34
 		<div class="col-md-4">
35
 			<div class="panel panel-default">
35
 			<div class="panel panel-default">
36
 				<div class="panel-heading">
36
 				<div class="panel-heading">
37
-					<h2 class="panel-title">Séance n°{{lesson.number}} <i>{{lesson.title}}</i> – {{lesson.date|date:"d/m/y"}}, {{lesson.amphi}}</h2>
37
+					<h2 class="panel-title">Séance n°{{lesson.number}} <i>{{lesson.title}}</i> – {{lesson.date|date:"d/m/y"}}, en {{lesson.amphi}}
38
+					{% if lesson.professor %}
39
+					par {{lesson.professor.name}}
40
+					{% endif %}
41
+					</h2>
38
 				</div>
42
 				</div>
39
 				<div class="panel-body">
43
 				<div class="panel-body">
40
 					{% if lesson.counts %}
44
 					{% if lesson.counts %}

+ 4 - 5
census/templates/homeTemplate.html

11
 				</div>
11
 				</div>
12
 				<div class="panel-body">
12
 				<div class="panel-body">
13
 					<p>Bienvenue sur le site du <b>Laboratoire pour l'Acquisition Périphérique d'Informations !</b></p>
13
 					<p>Bienvenue sur le site du <b>Laboratoire pour l'Acquisition Périphérique d'Informations !</b></p>
14
-					<p>Tu t'ennuies en amphi ? Tu remarque que les rangs sont de plus en plus clairsemés et tu 
14
+					<p>Tu t'ennuies en amphi ? Tu remarques que les rangs sont de plus en plus clairsemés et tu 
15
 					aimerais savoir plus précisément <em>combien</em> de tes camarades de promotions choissisent
15
 					aimerais savoir plus précisément <em>combien</em> de tes camarades de promotions choissisent
16
 					la douceur de leur oreiller plutôt que la rudesse des bancs d'Arago ?</p>
16
 					la douceur de leur oreiller plutôt que la rudesse des bancs d'Arago ?</p>
17
 					<p>Une seule solution : compter ! Suis <a href="{% url 'census.views.comptage' %}">les conseils du LAPI</a> pour un comptage réussi et inscris tes résultats sur le site pour une vision globale du taux d'invisibilité en amphi de ta promotion.</p>
17
 					<p>Une seule solution : compter ! Suis <a href="{% url 'census.views.comptage' %}">les conseils du LAPI</a> pour un comptage réussi et inscris tes résultats sur le site pour une vision globale du taux d'invisibilité en amphi de ta promotion.</p>
23
 				</div>
23
 				</div>
24
 				<div class="panel-body">
24
 				<div class="panel-body">
25
 					{% if lastcount.lesson.course.name == "Amphis 0" %}
25
 					{% if lastcount.lesson.course.name == "Amphis 0" %}
26
-						<p>Comptage de l'amphi 0 de {{lastcount.lesson.title|lower}} des {{lastcount.lesson.course.promotion}}, donné le {{lastcount.lesson.date|date:"d/m/y"}} en amphi {{lastcount.lesson.amphi}} :</p>
27
-					{% elif astcount.lesson.course.name == "Conférences scientifiques" %}
28
-						<p>Comptage de la conférence scientifique de {{lastcount.lesson.title|lower}} des {{lastcount.lesson.course.promotion}}, donné le {{lastcount.lesson.date|date:"d/m/y"}} en amphi {{lastcount.lesson.amphi}} :</p>
26
+						<p>Comptage de l'amphi 0 de {{lastcount.lesson.title}} des {{lastcount.lesson.course.promotion}}, donné le {{lastcount.lesson.date|date:"d/m/y"}} en amphi {{lastcount.lesson.amphi}} :</p>
27
+					{% elif lastcount.lesson.course.name == "Conférences scientifiques" %}
28
+						<p>Comptage de la conférence scientifique de {{lastcount.lesson.title}} des {{lastcount.lesson.course.promotion}}, donné le {{lastcount.lesson.date|date:"d/m/y"}} en amphi {{lastcount.lesson.amphi}} :</p>
29
 					{% else %}
29
 					{% else %}
30
 						<p>Comptage de l'amphi n°{{lastcount.lesson.number}} de {{lastcount.lesson.course.name}} des {{lastcount.lesson.course.promotion}}, donné le {{lastcount.lesson.date|date:"d/m/y"}} en amphi {{lastcount.lesson.amphi}} :</p>
30
 						<p>Comptage de l'amphi n°{{lastcount.lesson.number}} de {{lastcount.lesson.course.name}} des {{lastcount.lesson.course.promotion}}, donné le {{lastcount.lesson.date|date:"d/m/y"}} en amphi {{lastcount.lesson.amphi}} :</p>
31
-					}
32
 					{% endif %}
31
 					{% endif %}
33
 					<div class="progress">
32
 					<div class="progress">
34
  						<div class="progress-bar progress-bar-{{lastcount.progressbarclass}}" role="progressbar"
33
  						<div class="progress-bar progress-bar-{{lastcount.progressbarclass}}" role="progressbar"

+ 12 - 6
census/views.py

1
 from django.shortcuts import render
1
 from django.shortcuts import render
2
 from census.models import Course,Count,Lesson
2
 from census.models import Course,Count,Lesson
3
 from django import forms
3
 from django import forms
4
+from django.db.models.aggregates import Max
5
+from datetime import *
4
 from django.http import HttpResponseRedirect
6
 from django.http import HttpResponseRedirect
5
 
7
 
6
 #Auxiliariy functions
8
 #Auxiliariy functions
32
 			course.nonnulllessonscount += 1
34
 			course.nonnulllessonscount += 1
33
 		else:
35
 		else:
34
 			lesson.counts = None
36
 			lesson.counts = None
35
-	if (course.lessons.count() != 0):
37
+	if (course.nonnulllessonscount != 0):
36
 		course.totalratio = round(course.totalsum / course.nonnulllessonscount)
38
 		course.totalratio = round(course.totalsum / course.nonnulllessonscount)
37
 		course.progressbarclass = getProgressBarClass(course.totalratio)
39
 		course.progressbarclass = getProgressBarClass(course.totalratio)
38
 	else:
40
 	else:
54
 
56
 
55
 def home(request):
57
 def home(request):
56
 	#Retrieving the course list and the statistics
58
 	#Retrieving the course list and the statistics
57
-	courses = Course.objects.filter(promotion__number=2014)
59
+	courses = Course.objects.all().annotate(latest_lesson_date=Max('lesson__date')).order_by('-latest_lesson_date')
60
+	#courses = Course.objects.all().order_by('-promotion')
58
 	for course in courses:
61
 	for course in courses:
59
 		course = getCourseStatistics(course)
62
 		course = getCourseStatistics(course)
60
 	#Retrieving last count
63
 	#Retrieving last count
61
-	lastcount = Count.objects.latest('date')
62
-	lastcount.ratio = round(lastcount.census/lastcount.lesson.course.enrolled*100)
63
-	lastcount.progressbarclass= getProgressBarClass(lastcount.ratio)
64
+	if (Count.objects.all().count() != 0):
65
+		lastcount = Count.objects.latest('date')
66
+		lastcount.ratio = round(lastcount.census/lastcount.lesson.course.enrolled*100)
67
+		lastcount.progressbarclass= getProgressBarClass(lastcount.ratio)
68
+	else:
69
+		lastcount = None
64
 
70
 
65
 	return render(request,'homeTemplate.html', {'courses' : courses, 'lastcount' : lastcount,})
71
 	return render(request,'homeTemplate.html', {'courses' : courses, 'lastcount' : lastcount,})
66
 
72
 
77
     if request.method == 'POST':
83
     if request.method == 'POST':
78
         # create a form instance and populate it with data from the request:
84
         # create a form instance and populate it with data from the request:
79
         form = addCountForm(request.POST)
85
         form = addCountForm(request.POST)
80
-        form.fields["lesson"].queryset = Lesson.objects.all().order_by('-date')
86
+        form.fields["lesson"].queryset = Lesson.objects.filter(date__lt=datetime.now()+timedelta(7)).order_by('-date')
81
         # check whether it's valid:
87
         # check whether it's valid:
82
         if form.is_valid():
88
         if form.is_valid():
83
             count = form.save()
89
             count = form.save()

BIN
db.sqlite3


File diff suppressed because it is too large
+ 1 - 0
lapi.json