Parcourir la Source

First functionnal version

Denis Merigoux il y a 9 ans
Parent
commit
74d6f7e30d

+ 2 - 1
counter/admin.py

@@ -1,6 +1,7 @@
1 1
 from django.contrib import admin
2 2
 
3 3
 # Register your models here.
4
-from .models import Counter
4
+from .models import Counter,Reset
5 5
 
6 6
 admin.site.register(Counter)
7
+admin.site.register(Reset)

+ 15 - 3
counter/models.py

@@ -4,11 +4,23 @@ from babel.dates import format_timedelta
4 4
 
5 5
 # Create your models here.
6 6
 class Counter(models.Model):
7
-    name=models.CharField("Nom",max_length=60)
8
-    lastReset=models.DateTimeField("Dernière remise à zéro")
7
+    name = models.CharField("Nom",max_length=60)
8
+    trigramme = models.CharField("Trigramme", max_length=3)
9 9
 
10 10
     def __str__(self):
11
-        return "%s : %s" % (self.name,format_timedelta(datetime.now()-self.lastReset.replace(tzinfo=None),locale='fr'))
11
+        return "%s (%s)" % (self.trigramme,self.name)
12 12
 
13 13
     class Meta:
14 14
         verbose_name = "Compteur"
15
+
16
+class Reset(models.Model):
17
+    timestamp = models.DateTimeField("Date et heure",auto_now_add=True)
18
+    reason = models.TextField("Raison")
19
+    counter = models.ForeignKey('Counter')
20
+
21
+    def __str__(self):
22
+        return "%s : %s" % (self.counter,format_timedelta(datetime.now()-self.timestamp.replace(tzinfo=None),locale='fr'))
23
+
24
+    class Meta:
25
+        verbose_name = "Remise à zéro"
26
+        verbose_name_plural = "Remises à zéro"

+ 33 - 0
counter/templates/baseTemplate.html

@@ -0,0 +1,33 @@
1
+<!DOCTYPE html>
2
+<html>
3
+<head>
4
+	<meta charset="UTF-8"/>
5
+	<meta name="author" content="Seum Man"/>
6
+	<meta name="keywords" content="seum compteur"/>
7
+	<meta name="description" content="Compteur de seum"/>
8
+
9
+	<title>Seum – {% block title %}{% endblock %}</title>
10
+
11
+	{# Load the tag library #}
12
+	{% load bootstrap3 %}
13
+
14
+	{# Load CSS and JavaScript #}
15
+	{% bootstrap_css %}
16
+	{% bootstrap_javascript %}
17
+
18
+	{# Display django.contrib.messages as Bootstrap alerts #}
19
+	{% bootstrap_messages %}
20
+
21
+	<style>
22
+		.seum-counter {
23
+			height:125px;
24
+			overflow: auto;
25
+			margin-bottom:15px;
26
+		}
27
+	</style>
28
+</head>
29
+	<section id="content">
30
+		{% block content %}{% endblock %}
31
+	</section>
32
+</body>
33
+</html>

+ 41 - 1
counter/templates/counterTemplate.html

@@ -1 +1,41 @@
1
-<h1>Coucou !</h1>
1
+{% extends 'baseTemplate.html' %} {% block title %}Compteurs{% endblock %} {% block content %}
2
+<div class="text-center">
3
+	<h1>Compteurs de seum</h1>
4
+</div>
5
+<div class="container-fluid">
6
+	<div class="row">
7
+		{% for counter in counters %}
8
+		<div class="col-md-4 col-sm-6 col-lg-3">
9
+			<div class="panel panel-primary">
10
+				<div class="panel-heading">
11
+					<h2 class="panel-title">{{ counter.trigramme }} <small>{{ counter.name }}</small></h2>
12
+				</div>
13
+				<div class="seum-counter panel-body">
14
+					{% if counter.lastReset == False %}
15
+					<strong>N'a pas encore eu le seum.</strong>
16
+					<br> {% else %}
17
+					<strong>N'a pas eu le seum depuis {{ counter.lastReset.formatted_delta }}.</strong>
18
+					<br> {% endif %}
19
+
20
+					<p>{{ counter.lastReset.reason }}</p>
21
+					<div class="text-center">
22
+						<button id="button{{counter.id}}" class="btn btn-default btn-danger" type="button" onclick="getElementById('counter{{counter.id}}').style.display='inline';getElementById('button{{counter.id}}').style.display='none';">Remettre à zéro</button>
23
+					</div>
24
+					<form style="display:none" id="counter{{counter.id}}" action="/reset-counter/" method="post">
25
+						{% csrf_token %}
26
+						<div class="form-group">
27
+							<label for="reason">Motif du seum :</label>
28
+							<textarea class="form-control" name="reason"></textarea>
29
+						</div>
30
+						<input type="hidden" name="counter" value="{{counter.id}}"></input>
31
+						<div class="text-center">
32
+							<button type="submit" class="btn btn-default btn-success">Foutre le seum</button>
33
+						</div>
34
+					</form>
35
+				</div>
36
+			</div>
37
+		</div>
38
+		{% endfor %}
39
+	</div>
40
+</div>
41
+{% endblock %}

+ 1 - 0
counter/urls.py

@@ -4,4 +4,5 @@ from . import views
4 4
 
5 5
 urlpatterns = [
6 6
     url(r'^$', views.home,name='home'),
7
+    url(r'^reset-counter/',views.resetCounter,name='reset-counter')
7 8
 ]

+ 38 - 1
counter/views.py

@@ -1,5 +1,42 @@
1 1
 from django.shortcuts import render
2
+from counter.models import Counter,Reset
3
+from babel.dates import format_timedelta
4
+from datetime import datetime
5
+from django import forms
6
+from django.http import HttpResponseRedirect
7
+from django.core import serializers
8
+
9
+class resetCounterForm(forms.ModelForm):
10
+    class Meta:
11
+        model = Reset
12
+        fields = ['reason','counter']
2 13
 
3 14
 # Create your views here.
4 15
 def home(request):
5
-	return render(request,'counterTemplate.html')
16
+    #Display counters
17
+    counters = Counter.objects.all()
18
+    for counter in counters:
19
+        lastReset = Reset.objects.filter(counter=counter).order_by('-timestamp')
20
+        if (lastReset.count() == 0):
21
+            counter.lastReset = False
22
+        else:
23
+            counter.lastReset = lastReset[0]
24
+            counter.lastReset.delta = datetime.now()-counter.lastReset.timestamp.replace(tzinfo=None)
25
+            counter.lastReset.formatted_delta = format_timedelta(counter.lastReset.delta,locale='fr')
26
+        counter.isHidden = "hidden"
27
+    return render(request,'counterTemplate.html', {'counters' : counters})
28
+
29
+def resetCounter(request):
30
+    #Update Form counter
31
+    if (request.method == 'POST'):
32
+        # create a form instance and populate it with data from the request:
33
+        data = dict(request.POST)
34
+        counter =  Counter.objects.get(pk=int(data['counter'][0]))
35
+        print(counter)
36
+        reset = Reset()
37
+        reset.counter = counter
38
+        reset.reason = data['reason'][0]
39
+        reset.timestamp = datetime.now()
40
+        reset.save()
41
+        # check whether it's valid
42
+    return HttpResponseRedirect('/')

+ 3 - 0
requirements.txt

@@ -0,0 +1,3 @@
1
+django
2
+babel
3
+django-bootstrap3

+ 1 - 0
seum/settings.py

@@ -32,6 +32,7 @@ ALLOWED_HOSTS = []
32 32
 
33 33
 INSTALLED_APPS = [
34 34
     'babel',
35
+    'bootstrap3',
35 36
     'django.contrib.admin',
36 37
     'django.contrib.auth',
37 38
     'django.contrib.contenttypes',

+ 1 - 1
seum/urls.py

@@ -18,5 +18,5 @@ from django.contrib import admin
18 18
 
19 19
 urlpatterns = [
20 20
     url(r'^admin/', admin.site.urls),
21
-    url(r'seum/', include('counter.urls'))
21
+    url(r'^', include('counter.urls'))
22 22
 ]