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