Explorar o código

finished pages for courses, beginning add count form

Denis Merigoux %!s(int64=10) %!d(string=hai) anos
pai
achega
cdf67f3c03

+ 3 - 2
LAPI/urls.py

@@ -1,6 +1,6 @@
1 1
 from django.conf.urls import patterns, include, url
2 2
 from django.contrib import admin
3
-from census.views import home
3
+from census.views import home,comptage,cours,addcount
4 4
 
5 5
 urlpatterns = patterns('census.views',
6 6
     # Examples:
@@ -8,8 +8,9 @@ urlpatterns = patterns('census.views',
8 8
     # url(r'^blog/', include('blog.urls')),
9 9
 
10 10
     url(r'^admin/', include(admin.site.urls)),
11
-    url(r'^home/$', 'home'),
11
+    url(r'^accueil/$', 'home'),
12 12
     url(r'^$', 'home'),
13 13
     url(r'^comptage/$', 'comptage'),
14 14
     url(r'^cours/(?P<id_cours>\d+)$', 'cours'),
15
+    url(r'^compter/$', 'addcount'),
15 16
 )

+ 22 - 0
census/templates/addcountTemplate.html

@@ -0,0 +1,22 @@
1
+{% extends 'baseTemplate.html' %}
2
+{% block title %}Ajouter un comptage{% endblock %}
3
+{% block nav %}{% endblock %}
4
+{% block content %}
5
+<div class="container-fluid">
6
+	<div class="row">
7
+		<div class="col-md-4 col-md-offset-4">
8
+			<div class="panel panel-primary">
9
+				<div class="panel-heading">
10
+					<h2 class="panel-title">Ajouter un comptage à la base de données</h2>
11
+				</div>
12
+				<div class="panel-body">
13
+					<form action="{% url 'census.views.addcount' %}" method="post">
14
+					{% csrf_token %}
15
+					{{form}}
16
+					</form>
17
+				</div>
18
+			</div>
19
+		</div>
20
+	</div>
21
+</div>
22
+{% endblock %}

+ 2 - 1
census/templates/baseTemplate.html

@@ -46,8 +46,9 @@
46 46
 						{% endblock %}
47 47
 					</ul>
48 48
 					<ul class="nav navbar-nav navbar-right">
49
-						<a class="navbar-brand" href="{% url 'census.views.home' %}">Accueil</a>
49
+						<a class="navbar-brand" href="{% url 'census.views.home' %}">Accueil – Liste des cours</a>
50 50
 						<a class="navbar-brand" href="{% url 'census.views.comptage' %}">Instructions de comptage</a>
51
+						<a class="navbar-brand" href="{% url 'census.views.addcount' %}">Ajouter un comptage</a>
51 52
 					</ul>
52 53
 				</div><!-- /.navbar-collapse -->
53 54
 			</div><!-- /.container-fluid -->

+ 28 - 12
census/templates/coursTemplate.html

@@ -4,16 +4,33 @@
4 4
 {% block content %}
5 5
 <div class="container-fluid">
6 6
 	<div class="well">
7
-		<h1>{{course.name}} – Promotion
8
-		{% if course.promotion.number|divisibleby:2 %}
9
-			<span style='color:#D62222'>X{{course.promotion.number}}</span>
10
-		{% else %}
11
-			<span style='color:#F2E52E'>X{{course.promotion.number}}</span>
12
-		{% endif %}</h1>
13
-		<p>Nombre d'inscrits : {{course.enrolled}}</p>
7
+		<div class="row">
8
+			<div class="col-md-4">
9
+				<h1>{{course.name}}
10
+				{% if course.promotion.number|divisibleby:2 %}
11
+					(<span style='color:#D62222'>X{{course.promotion.number}}</span>)
12
+				{% else %}
13
+					(<span style='color:#F2E52E'>X{{course.promotion.number}}</span>)
14
+				{% endif %}
15
+				</h1>
16
+				<p>Nombre d'inscrits : {{course.enrolled}}</p>
17
+			</div>
18
+			<div class="col-md-8">
19
+				{% if course.totalratio != 0 %}
20
+				<h3>Taux de visibilité du cours :</h3>
21
+				<div class="progress">
22
+ 					<div class="progress-bar progress-bar-{{course.progressbarclass}}" role="progressbar"
23
+ 							aria-valuenow="{{course.totalratio}}" aria-valuemin="0" aria-valuemax="100"
24
+ 							style="width: {{course.totalratio}}%;">
25
+    					{{course.totalratio}} %
26
+  					</div>
27
+  				</div>
28
+				{% endif %}
29
+			</div>
30
+		</div>
14 31
 	</div>
15 32
 	<div class="row">
16
-		{% for lesson in lessons %}
33
+		{% for lesson in course.lessons %}
17 34
 		<div class="col-md-4">
18 35
 			<div class="panel panel-default">
19 36
 				<div class="panel-heading">
@@ -23,17 +40,16 @@
23 40
 					{% if lesson.counts %}
24 41
 					<p>Estimation du taux de visibilité pour cette séance :</p>
25 42
 					<div class="progress">
26
- 						<div class="progress-bar progress-bar-info" role="progressbar"
43
+ 						<div class="progress-bar progress-bar-{{lesson.progressbarclass}}" role="progressbar"
27 44
  							aria-valuenow="{{lesson.totalratio}}" aria-valuemin="0" aria-valuemax="100"
28 45
  							style="width: {{lesson.totalratio}}%;">
29
-    						{{lesson.totalratio}}%
46
+    						{{lesson.totalratio}} %
30 47
   						</div>
31 48
   					</div>
32 49
 					<div class="list group">
33 50
 						{% for count in lesson.counts %}
34 51
 						<div class="list-group-item">
35
-							<p>Résultat du comptage : <b>{{count.census}}/{{course.enrolled}}</b></p>
36
-  							<p>{{count.comment}}</p>
52
+							<p>Résultat du comptage : <b>{{count.census}}/{{course.enrolled}}</b>. {{count.comment}}</p>
37 53
   						<p style="text-align:right;font-style:italic">{{count.signature}}</p>
38 54
   						</div>
39 55
   						{% endfor %}

+ 8 - 5
census/templates/homeTemplate.html

@@ -31,11 +31,11 @@
31 31
 					}
32 32
 					{% endif %}
33 33
 					<div class="progress">
34
- 						<div class="progress-bar progress-bar-info" role="progressbar"
35
- 							aria-valuenow="{{lastcountratio}}" aria-valuemin="0" aria-valuemax="100"
36
- 							aria-valuenow="{{lastcountratio}}" aria-valuemin="0" aria-valuemax="100"
37
- 							style="width: {{lastcountratio}}%;">
38
-    						{{lastcount.census}}/{{lastcount.lesson.course.enrolled}} ({{lastcountratio}}%)
34
+ 						<div class="progress-bar progress-bar-{{lastcount.progressbarclass}}" role="progressbar"
35
+ 							aria-valuenow="{{lastcount.ratio}}" aria-valuemin="0" aria-valuemax="100"
36
+ 							aria-valuenow="{{lastcount.ratio}}" aria-valuemin="0" aria-valuemax="100"
37
+ 							style="width: {{lastcount.ratio}}%;">
38
+    						{{lastcount.census}}/{{lastcount.lesson.course.enrolled}} ({{lastcount.ratio}}%)
39 39
   						</div>
40 40
   					</div>
41 41
   					<p>{{lastcount.comment}}</p>
@@ -49,6 +49,7 @@
49 49
 					<h2 class="panel-title">Liste des cours</h2>
50 50
 				</div>
51 51
 				<div class="panel-body">
52
+					<p>Le pourcentage est le taux de visibilité du cours, le ratio correspond au nombre de cours comptés.
52 53
 					<ul class="list-group">
53 54
 						{% for course in courses %}
54 55
 							<a class="list-group-item" href="{% url 'census.views.cours' id_cours=course.id %}">{{course.name}}
@@ -57,6 +58,8 @@
57 58
 							{% else %}
58 59
 								(<span style='color:#F2E52E'>X{{course.promotion.number}}</span>)
59 60
 							{% endif %}
61
+							<span class="badge">{{course.nonnulllessonscount}} / {{course.lessonscount}}</span>
62
+							<span class="badge">{{course.totalratio}} %</span>
60 63
 							</a>
61 64
 						{% endfor %}
62 65
 					</ul>

+ 69 - 17
census/views.py

@@ -1,24 +1,24 @@
1 1
 from django.shortcuts import render
2 2
 from census.models import Course,Count,Lesson
3
+from django import forms
3 4
 
4
-# Create your views here.
5
+#Auxiliariy functions
5 6
 
6
-def home(request):
7
-	#Retrieving the course list
8
-	courses = Course.objects.filter(promotion__number=2014)
9
-	#Retrieving last count
10
-	lastcount = Count.objects.latest('lesson__date')
11
-	lastcountratio = round(lastcount.census/lastcount.lesson.course.enrolled*100)
12
-	
13
-	return render(request,'homeTemplate.html', {'courses' : courses, 'lastcount' : lastcount, 'lastcountratio' : lastcountratio})
14
-
15
-def comptage(request):
16
-	return render(request,'comptageTemplate.html')
7
+def getProgressBarClass(ratio):
8
+	if (ratio > 75):
9
+		return "success"
10
+	elif (ratio > 50):
11
+		return "info"
12
+	elif (ratio > 25):
13
+		return "warning"
14
+	else:
15
+		return "danger"
17 16
 
18
-def cours(request, id_cours):
19
-	course = Course.objects.get(id=id_cours)
20
-	lessons = Lesson.objects.filter(course=course).order_by('number')
21
-	for lesson in lessons:
17
+def getCourseStatistics(course):
18
+	course.lessons = Lesson.objects.filter(course=course).order_by('number')
19
+	course.totalsum = 0
20
+	course.nonnulllessonscount = 0
21
+	for lesson in course.lessons:
22 22
 		lesson.counts = Count.objects.filter(lesson=lesson)
23 23
 		if (lesson.counts.count() != 0):
24 24
 			lesson.totalsum = 0 
@@ -26,6 +26,58 @@ def cours(request, id_cours):
26 26
 				count.ratio = round(count.census/lesson.course.enrolled*100)
27 27
 				lesson.totalsum += count.census
28 28
 			lesson.totalratio = round(lesson.totalsum/(lesson.counts.count()*course.enrolled)*100)
29
+			lesson.progressbarclass = getProgressBarClass(lesson.totalratio)
30
+			course.totalsum += lesson.totalratio
31
+			course.nonnulllessonscount += 1
29 32
 		else:
30 33
 			lesson.counts = None
31
-	return render(request, 'coursTemplate.html', {'course' : course, 'lessons' : lessons,})
34
+	if (course.lessons.count() != 0):
35
+		course.totalratio = round(course.totalsum / course.nonnulllessonscount)
36
+		course.progressbarclass = getProgressBarClass(course.totalratio)
37
+	else:
38
+		course.totalratio = 0
39
+	course.lessonscount= course.lessons.count()
40
+	return course
41
+
42
+class addCountForm(forms.Form):
43
+	course = forms.CharField(label="Cours",max_length=60)
44
+
45
+#Views
46
+
47
+def home(request):
48
+	#Retrieving the course list and the statistics
49
+	courses = Course.objects.filter(promotion__number=2014)
50
+	for course in courses:
51
+		course = getCourseStatistics(course)
52
+	#Retrieving last count
53
+	lastcount = Count.objects.latest('date')
54
+	lastcount.ratio = round(lastcount.census/lastcount.lesson.course.enrolled*100)
55
+	lastcount.progressbarclass= getProgressBarClass(lastcount.ratio)
56
+
57
+	return render(request,'homeTemplate.html', {'courses' : courses, 'lastcount' : lastcount,})
58
+
59
+def comptage(request):
60
+	return render(request,'comptageTemplate.html')
61
+
62
+def cours(request, id_cours):
63
+	course = Course.objects.get(id=id_cours)
64
+	course = getCourseStatistics(course)
65
+	return render(request, 'coursTemplate.html', {'course' : course,})
66
+
67
+def addcount(request):
68
+    # if this is a POST request we need to process the form data
69
+    if request.method == 'POST':
70
+        # create a form instance and populate it with data from the request:
71
+        form = addCountForm(request.POST)
72
+        # check whether it's valid:
73
+        if form.is_valid():
74
+            # process the data in form.cleaned_data as required
75
+            # ...
76
+            # redirect to a new URL:
77
+            return HttpResponseRedirect('/')
78
+
79
+    # if a GET (or any other method) we'll create a blank form
80
+    else:
81
+        form = addCountForm()
82
+
83
+    return render(request, 'addcountTemplate.html', {'form': form})

BIN=BIN
db.sqlite3