From d35ded0475894120cd2ab6dc78ce108b6092c313 Mon Sep 17 00:00:00 2001
From: Anteunis Charles <charles.anteunis@gmail.com>
Date: Thu, 28 Nov 2019 00:15:32 +0100
Subject: [PATCH] infos persos en plus, conseils persos

---
 website/nutriform/admin.py                    |   5 +-
 website/nutriform/forms.py                    |  11 +-
 .../migrations/0006_auto_20191127_2225.py     |  29 ++++
 .../migrations/0007_auto_20191127_2227.py     |  18 +++
 .../migrations/0008_auto_20191127_2228.py     |  26 ++++
 .../migrations/0009_auto_20191127_2233.py     |  28 ++++
 .../migrations/0010_auto_20191127_2310.py     |  18 +++
 website/nutriform/models.py                   |  19 ++-
 .../nutriform/templates/nutriform/compte.html | 141 ++++++++++++------
 .../nutriform/templates/nutriform/index.html  |   2 +-
 .../templates/nutriform/modif_infos.html      |  16 ++
 website/nutriform/urls.py                     |   3 +-
 website/nutriform/views.py                    |  55 ++++++-
 13 files changed, 314 insertions(+), 57 deletions(-)
 create mode 100644 website/nutriform/migrations/0006_auto_20191127_2225.py
 create mode 100644 website/nutriform/migrations/0007_auto_20191127_2227.py
 create mode 100644 website/nutriform/migrations/0008_auto_20191127_2228.py
 create mode 100644 website/nutriform/migrations/0009_auto_20191127_2233.py
 create mode 100644 website/nutriform/migrations/0010_auto_20191127_2310.py
 create mode 100644 website/nutriform/templates/nutriform/modif_infos.html

diff --git a/website/nutriform/admin.py b/website/nutriform/admin.py
index 918645f..38deb82 100644
--- a/website/nutriform/admin.py
+++ b/website/nutriform/admin.py
@@ -1,6 +1,7 @@
 from django.contrib import admin
-from .models import Menu, QuestionQuotid
+from .models import Menu, QuestionQuotid, InfosUser
 
 # Register your models here.
 admin.site.register(Menu)
-admin.site.register(QuestionQuotid)
\ No newline at end of file
+admin.site.register(QuestionQuotid)
+admin.site.register(InfosUser)
\ No newline at end of file
diff --git a/website/nutriform/forms.py b/website/nutriform/forms.py
index e9fc959..c965fad 100644
--- a/website/nutriform/forms.py
+++ b/website/nutriform/forms.py
@@ -5,7 +5,7 @@ from django.contrib.auth.forms import UserCreationForm, UserChangeForm
 from django.core.exceptions import ValidationError
 import os
  
-from .models import QuestionQuotid
+from .models import QuestionQuotid, InfosUser
 
 class UserForm(UserCreationForm):
 
@@ -34,4 +34,11 @@ class QuestionQuotidForm(forms.ModelForm):
     class Meta:
         model = QuestionQuotid
         fields = '__all__'
-        exclude = ('user', 'date')
\ No newline at end of file
+        exclude = ('user', 'date')
+
+class InfoUserForm(forms.ModelForm):
+
+    class Meta:
+        model = InfosUser
+        fields = '__all__'
+        exclude = ('user',)
\ No newline at end of file
diff --git a/website/nutriform/migrations/0006_auto_20191127_2225.py b/website/nutriform/migrations/0006_auto_20191127_2225.py
new file mode 100644
index 0000000..749bfbe
--- /dev/null
+++ b/website/nutriform/migrations/0006_auto_20191127_2225.py
@@ -0,0 +1,29 @@
+# Generated by Django 2.2.6 on 2019-11-27 22:25
+
+import datetime
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('nutriform', '0005_auto_20191127_1756'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='InfosUser',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('adresse', models.CharField(max_length=200)),
+                ('date_naissance', models.DateField()),
+                ('sexe', models.CharField(choices=[('M', 'Homme'), ('F', 'Femme'), ('N', 'Autre')], max_length=1)),
+                ('maladies', models.TextField(max_length=200)),
+            ],
+        ),
+        migrations.AlterField(
+            model_name='questionquotid',
+            name='date',
+            field=models.DateField(default=datetime.date.today),
+        ),
+    ]
diff --git a/website/nutriform/migrations/0007_auto_20191127_2227.py b/website/nutriform/migrations/0007_auto_20191127_2227.py
new file mode 100644
index 0000000..b4e7f49
--- /dev/null
+++ b/website/nutriform/migrations/0007_auto_20191127_2227.py
@@ -0,0 +1,18 @@
+# Generated by Django 2.2.6 on 2019-11-27 22:27
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('nutriform', '0006_auto_20191127_2225'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='infosuser',
+            name='maladies',
+            field=models.TextField(max_length=200, null=True),
+        ),
+    ]
diff --git a/website/nutriform/migrations/0008_auto_20191127_2228.py b/website/nutriform/migrations/0008_auto_20191127_2228.py
new file mode 100644
index 0000000..d3e7a52
--- /dev/null
+++ b/website/nutriform/migrations/0008_auto_20191127_2228.py
@@ -0,0 +1,26 @@
+# Generated by Django 2.2.6 on 2019-11-27 22:28
+
+from django.conf import settings
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
+        ('nutriform', '0007_auto_20191127_2227'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='infosuser',
+            name='user',
+            field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
+        ),
+        migrations.AlterField(
+            model_name='infosuser',
+            name='maladies',
+            field=models.TextField(blank=True, max_length=200, null=True),
+        ),
+    ]
diff --git a/website/nutriform/migrations/0009_auto_20191127_2233.py b/website/nutriform/migrations/0009_auto_20191127_2233.py
new file mode 100644
index 0000000..7f7692e
--- /dev/null
+++ b/website/nutriform/migrations/0009_auto_20191127_2233.py
@@ -0,0 +1,28 @@
+# Generated by Django 2.2.6 on 2019-11-27 22:33
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('nutriform', '0008_auto_20191127_2228'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='infosuser',
+            name='adresse',
+            field=models.CharField(max_length=200, null=True),
+        ),
+        migrations.AlterField(
+            model_name='infosuser',
+            name='date_naissance',
+            field=models.DateField(null=True),
+        ),
+        migrations.AlterField(
+            model_name='infosuser',
+            name='sexe',
+            field=models.CharField(choices=[('M', 'Homme'), ('F', 'Femme'), ('N', 'Autre')], max_length=1, null=True),
+        ),
+    ]
diff --git a/website/nutriform/migrations/0010_auto_20191127_2310.py b/website/nutriform/migrations/0010_auto_20191127_2310.py
new file mode 100644
index 0000000..a1e3861
--- /dev/null
+++ b/website/nutriform/migrations/0010_auto_20191127_2310.py
@@ -0,0 +1,18 @@
+# Generated by Django 2.2.6 on 2019-11-27 23:10
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('nutriform', '0009_auto_20191127_2233'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='questionquotid',
+            name='maladies',
+            field=models.CharField(blank=True, choices=[('RH', 'Rhume'), ('GR', 'Grippe'), ('AN', 'Angine')], max_length=3, null=True),
+        ),
+    ]
diff --git a/website/nutriform/models.py b/website/nutriform/models.py
index 4bbeb3a..28b93ce 100644
--- a/website/nutriform/models.py
+++ b/website/nutriform/models.py
@@ -1,5 +1,6 @@
 from django.db import models
 from django.contrib.auth.models import User
+from datetime import date
 
 # Create your models here.
 User._meta.get_field('email')._unique = True
@@ -52,9 +53,21 @@ class QuestionQuotid(models.Model):
     typeRepas = models.CharField(max_length=5, choices=TYPEMENU_CHOICES)
     nbh_activite = models.PositiveIntegerField()
     volume_eau = models.PositiveIntegerField()
-    maladies = models.CharField(max_length=3, choices=MALADIES_CHOICES)
+    maladies = models.CharField(max_length=3, choices=MALADIES_CHOICES, null=True, blank=True)
     poids = models.PositiveIntegerField(null=True)
-    date = models.DateField(null=True, auto_now_add=True)
+    date = models.DateField(default=date.today)
 
     def __str__(self):
-        return self.user.__str__() + " : " + self.date.__str__()
\ No newline at end of file
+        return self.user.__str__() + " : " + self.date.__str__()
+
+SEXE_CHOICES = [
+    ('M', 'Homme'),
+    ('F', 'Femme'),
+    ('N', 'Autre')
+]
+class InfosUser(models.Model):
+    adresse = models.CharField(max_length=200, null=True)
+    date_naissance = models.DateField(null=True)
+    sexe = models.CharField(max_length=1, choices=SEXE_CHOICES, null=True)
+    maladies = models.TextField(max_length=200, null=True, blank=True)
+    user = models.ForeignKey(User, null=True, on_delete=models.CASCADE)
\ No newline at end of file
diff --git a/website/nutriform/templates/nutriform/compte.html b/website/nutriform/templates/nutriform/compte.html
index 70bee15..ab1f52d 100644
--- a/website/nutriform/templates/nutriform/compte.html
+++ b/website/nutriform/templates/nutriform/compte.html
@@ -4,53 +4,104 @@
 
 <div class="container">
 
-    <h3>Mes informations personnelles</h3>
-    <ul>
-        <li>Nom d'utilisateur : {{user.username}}</li>
-        <li>Prénom : {{user.first_name}}</li>
-        <li>Nom : {{user.last_name}}</li>
-        <li>Email : {{user.email}}</li>
-    </ul>
+    <div class="row">
+        <div class="6u 12u$(medium)">
+            <h3>Mon compte</h3>
+            <ul>
+                <li>Nom d'utilisateur : {{user.username}}</li>
+                <li>Prénom : {{user.first_name}}</li>
+                <li>Nom : {{user.last_name}}</li>
+                <li>Email : {{user.email}}</li>
+            </ul>
+            <a href="{% url 'password_change' %}" class="button">Modifier mon mot de passe</a>
+            <a href="{% url 'modif_compte' %}" class="button">Modifier mon compte</a>
+        </div>
+        <div class="6u$ 12u$(medium)">
+            <h3>Mes informations personnelles</h3>
+            <ul>
+                <li>Adresse : {{infos.adresse}}</li>
+                <li>Date de naissance : {{infos.date_naissance}}</li>
+                <li>Sexe : {{infos.get_sexe_display}}</li>
+                <li>Maladies : {{infos.maladies}}</li>
+            </ul>
+            <a href="{% url 'modif_info' %}" class="button">Modifier mes informations</a>
+        </div>
+
+    </div>
+    <br>
+    
   
+    <h3>Ma progression</h3>
     <div id="container"></div>
-    <script src="https://code.highcharts.com/highcharts.src.js"></script>
-    <script>
-        Highcharts.chart('container', {
-        chart: {
-            type: 'line'
-        },
-        title: {
-            text: 'Suivi de votre progression'
-        },
-        xAxis: {
-            categories: [
-                {% for d in dates %}'{{d}}' {% if not forloop.last %}, {% endif %} {% endfor %}
-            ]
-        },
-        series: [{
-            name: 'Poids',
-            data: [
-                {% for d in poids %}{{d}} {% if not forloop.last %}, {% endif %} {% endfor %}
-            ]
-        }, {
-            name: 'Nombre heures',
-            data: [
-                {% for d in nb_h %}{{d}} {% if not forloop.last %}, {% endif %} {% endfor %}
-            ]
-        }, {
-            name: 'Volume eau',
-            data: [
-                {% for d in volumes %}{{d}} {% if not forloop.last %}, {% endif %} {% endfor %}
-            ]
-        }]
-    });
-    </script>
-
-    <a href="{% url 'password_change' %}" class="button">Modifier mon mot de passe</a>
-
-    <a href="{% url 'modif_compte' %}" class="button">Modifier mon compte</a>
-
-    <a href="{% url 'questionnaire' %}" class="button">Questionnaire quotidien</a>
+
+    <h3>Nos conseils sur les 7 derniers jours</h3>
+    {% if menu %}
+    <p>
+        {% if mean_sport < 1 %}
+        {{ user.username }}, faites attention à votre condition physique : {{ mean_sport }} heures par jour est insuffisant.
+        Pratiquer une activité physique régulière,
+        environ 1h par jour, est nécessaire pour s'assurer une meilleure santé. Nous vous conseillons 
+        de vous dépenser plus et vous obtiendrez rapidement vos objectifs.
+        {% else %}
+        {{ user.username }}, vous avez fait en moyenne {{ mean_sport }} heures d'activité physique
+        par jour les 7 derniers jours. Continuez comme cela, le sport est bénéfique pour votre corps.
+        {% endif %}
+    </p>
+    <p>
+        {% if mean_water < 2 %}
+        Concernant votre consommation d'eau, pensez à vous hydrater plus : {{ mean_water }}L par jour ne suffisent
+        pas. Vous devriez augmenter pour atteindre les 2L environ.
+        {% else %}
+        Votre consommation d'eau est excellente : {{ mean_water }}L par jour ! Pensez à garder ce rythme tout au long des semaines. Vous ne 
+        devriez pas avoir de problèmes pour atteindre vos objectifs, continuez sur cette voie.
+        {% endif %}
+    </p>
+    
+    <p>D'après votre profil, nous vous suggérons d'essayer ce menu :
+        <br>
+        Menu {{ menu.type_menu }} : {{ menu.get_entree_display }}, {{ menu.get_plat_display }}, {{ menu.get_dessert_display }} pour {{ menu.nb_cal }} calories.
+    </p>
+    {% else %}
+    <p>
+        Veuillez remplir votre Daily report au moins une journée pour que nous puissions vous conseiller.
+    </p>
+    {% endif %}
+
+
+    <a href="{% url 'questionnaire' %}" class="button">Mon daily report</a>
 
 </div class="container">
+
+<script src="https://code.highcharts.com/highcharts.src.js"></script>
+<script>
+    Highcharts.chart('container', {
+    chart: {
+        type: 'line'
+    },
+    title: {
+        text: 'Suivi de votre progression'
+    },
+    xAxis: {
+        categories: [
+            {% for d in dates %}'{{d}}' {% if not forloop.last %}, {% endif %} {% endfor %}
+        ]
+    },
+    series: [{
+        name: 'Poids',
+        data: [
+            {% for d in poids %}{{d}} {% if not forloop.last %}, {% endif %} {% endfor %}
+        ]
+    }, {
+        name: 'Nombre heures',
+        data: [
+            {% for d in nb_h %}{{d}} {% if not forloop.last %}, {% endif %} {% endfor %}
+        ]
+    }, {
+        name: 'Volume eau',
+        data: [
+            {% for d in volumes %}{{d}} {% if not forloop.last %}, {% endif %} {% endfor %}
+        ]
+    }]
+});
+</script>
 {% endblock %}
\ No newline at end of file
diff --git a/website/nutriform/templates/nutriform/index.html b/website/nutriform/templates/nutriform/index.html
index 9835e08..ef7c3cd 100644
--- a/website/nutriform/templates/nutriform/index.html
+++ b/website/nutriform/templates/nutriform/index.html
@@ -41,7 +41,7 @@
 		<p>La solution pour vos conseils bien-être<br /> Par le super groupe de PIMA</p>
 		{% if user.is_authenticated %}
 		<ul class="actions">
-			<li><a href="{% url 'questionnaire' %}" class="button special big">Remplir mon questionnaire</a></li>
+			<li><a href="{% url 'questionnaire' %}" class="button special big">Remplir mon daily report</a></li>
 		</ul>
 		{% else %}
 		<ul class="actions">
diff --git a/website/nutriform/templates/nutriform/modif_infos.html b/website/nutriform/templates/nutriform/modif_infos.html
new file mode 100644
index 0000000..677a3c1
--- /dev/null
+++ b/website/nutriform/templates/nutriform/modif_infos.html
@@ -0,0 +1,16 @@
+{% extends "../nutriform/base.html" %}
+
+{% block content %}
+
+<div class="container">
+
+    <h3>Modification des informations de {{ user.username }}</h3>
+
+    <form action="" method="POST">
+        {% csrf_token %}
+
+        {{form}}
+        <input type="submit" value="Modifier">
+    </form>
+</div class="container">
+{% endblock %}
\ No newline at end of file
diff --git a/website/nutriform/urls.py b/website/nutriform/urls.py
index 605c159..d1b8fe3 100644
--- a/website/nutriform/urls.py
+++ b/website/nutriform/urls.py
@@ -12,5 +12,6 @@ urlpatterns = [
 	path('menus/', views.menus, name='menus'),
 	path('accounts/profile/modification/', views.modif_compte, name='modif_compte'),
 	path('accounts/questionnaire/', views.question_quotid, name='questionnaire'),
-	path('carte/', views.carte, name='carte')
+	path('carte/', views.carte, name='carte'),
+	path('accounts/profile/modification_infos/', views.modif_infos, name='modif_info')
 ]
diff --git a/website/nutriform/views.py b/website/nutriform/views.py
index f4b8cc9..0eebb65 100644
--- a/website/nutriform/views.py
+++ b/website/nutriform/views.py
@@ -3,9 +3,11 @@ from django.http import HttpResponse
 from django.core.mail import send_mail
 from django.contrib.auth.decorators import login_required
 from django.contrib.auth.forms import UserChangeForm
+from django.contrib.auth.models import User
+from datetime import date
 
-from .forms import UserForm, UserModifForm, QuestionQuotidForm
-from .models import Menu, QuestionQuotid
+from .forms import UserForm, UserModifForm, QuestionQuotidForm, InfoUserForm
+from .models import Menu, QuestionQuotid, InfosUser
 
 import json
 
@@ -26,6 +28,8 @@ def register(request):
 		form = UserForm(request.POST)
 		if form.is_valid():
 			user = form.save()
+			infoUser = InfosUser.objects.create(user=user)
+			infoUser.save()
 			return redirect('login')
 
 	else :
@@ -39,6 +43,8 @@ def register(request):
 @login_required
 def compte(request):
 
+	infos = InfosUser.objects.get(user=request.user)
+
 	datas = list(QuestionQuotid.objects.filter(user=request.user))
 	dates = []
 	nb_h = []
@@ -49,11 +55,33 @@ def compte(request):
 		nb_h.append(q.nbh_activite)
 		volumes.append(q.volume_eau)
 		poids.append(q.poids)
+
+	try:
+		mean_water = sum(volumes) / len(volumes)
+	except :
+		mean_water = 0
+	
+	try:
+		mean_sport = sum(nb_h) / len(nb_h)
+	except :
+		mean_sport = 0
+
+	if not datas:
+		menu = None
+	elif mean_sport < 2 :
+		menu = Menu.objects.get(nb_cal=120)
+	else :
+		menu = Menu.objects.get(nb_cal=100)
+
 	context = {
+		'infos': infos,
 		'dates': dates,
 		'nb_h': nb_h,
 		'volumes': volumes,
-		'poids': poids
+		'poids': poids,
+		'mean_sport': mean_sport,
+		'mean_water': mean_water,
+		'menu': menu
 	}
 	return render(request, 'nutriform/compte.html', context)
 
@@ -85,9 +113,30 @@ def modif_compte(request):
 	}
 	return render(request, 'nutriform/modif_compte.html', context)
 
+@login_required
+def modif_infos(request):
+	user = request.user
+
+	info = get_object_or_404(InfosUser, user=user)
+
+	if request.method == 'POST':
+		form = InfoUserForm(request.POST, instance=info)
+		if form.is_valid():
+			user = form.save()
+			return redirect('compte')
+
+	else :
+		form = InfoUserForm(instance=info)
+
+	context	= {
+		'form': form,
+	}
+	return render(request, 'nutriform/modif_infos.html', context)
+
 @login_required
 def question_quotid(request):
 
+
 	if request.method == 'POST':
 		form = QuestionQuotidForm(request.POST)
 		if form.is_valid():
-- 
GitLab