| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186 |
- from django.shortcuts import render, redirect, get_object_or_404
- from django.contrib.auth.decorators import login_required
- from django.contrib import messages
- from datetime import date, timedelta
- from .models import Journee, Repas, CompositionRepas, Aliment, TypeJournee, TypeRepas
- from .forms import JourneeForm, RepasForm, CompositionRepasForm
- def index(request):
- """Page d'accueil avec explications du carb-cycling"""
- return render(request, 'nutrition/index.html')
- @login_required
- def tableau_de_bord(request):
- """Tableau de bord affichant les journées de la semaine"""
- aujourdhui = date.today()
- debut_semaine = aujourdhui - timedelta(days=aujourdhui.weekday())
- fin_semaine = debut_semaine + timedelta(days=6)
-
- journees = Journee.objects.filter(
- user=request.user,
- date__gte=debut_semaine,
- date__lte=fin_semaine
- ).prefetch_related('repas__compositions__aliment')
-
- # Créer un dictionnaire des journées par date
- journees_dict = {j.date: j for j in journees}
-
- # Générer les 7 jours de la semaine
- semaine = []
- for i in range(7):
- jour = debut_semaine + timedelta(days=i)
- semaine.append({
- 'date': jour,
- 'journee': journees_dict.get(jour)
- })
-
- context = {
- 'semaine': semaine,
- 'debut_semaine': debut_semaine,
- 'fin_semaine': fin_semaine,
- }
- return render(request, 'nutrition/tableau_de_bord.html', context)
- @login_required
- def creer_journee(request, date_str=None):
- """Créer une nouvelle journée"""
- if date_str:
- date_journee = date.fromisoformat(date_str)
- else:
- date_journee = date.today()
-
- if request.method == 'POST':
- form = JourneeForm(request.POST)
- if form.is_valid():
- journee = form.save(commit=False)
- journee.user = request.user
- journee.date = date_journee
- journee.save()
- messages.success(request, 'Journée créée avec succès!')
- return redirect('detail_journee', pk=journee.pk)
- else:
- form = JourneeForm(initial={'date': date_journee})
-
- return render(request, 'nutrition/creer_journee.html', {
- 'form': form,
- 'date_journee': date_journee
- })
- @login_required
- def detail_journee(request, pk):
- """Détail d'une journée avec ses repas"""
- journee = get_object_or_404(Journee, pk=pk, user=request.user)
- repas = journee.repas.all().prefetch_related('compositions__aliment')
-
- # Calculer les apports recommandés selon le type de journée
- recommandations = get_recommandations(journee.type_journee)
-
- context = {
- 'journee': journee,
- 'repas': repas,
- 'recommandations': recommandations,
- }
- return render(request, 'nutrition/detail_journee.html', context)
- def get_recommandations(type_journee):
- """Retourne les recommandations selon le type de journée"""
- if type_journee == TypeJournee.PAUVRE:
- return {
- 'titre': 'Journée pauvre en glucides',
- 'glucides': '0-1 apport',
- 'proteines': '3-4 apports',
- 'lipides': '3-4 apports',
- 'legumes': 'Sans modération',
- 'description': 'Privilégiez les protéines et les lipides. Limitez les glucides au maximum.'
- }
- elif type_journee == TypeJournee.NORMAL:
- return {
- 'titre': 'Journée normale',
- 'glucides': '2-3 apports',
- 'proteines': '3-4 apports',
- 'lipides': '2-3 apports',
- 'legumes': 'Sans modération',
- 'description': 'Équilibre entre glucides, protéines et lipides.'
- }
- else: # RICHE
- return {
- 'titre': 'Journée riche en glucides',
- 'glucides': '4-5 apports',
- 'proteines': '3-4 apports',
- 'lipides': '1-2 apports',
- 'legumes': 'Sans modération',
- 'description': 'Rechargez vos batteries! Privilégiez les glucides, réduisez les lipides.'
- }
- @login_required
- def ajouter_repas(request, journee_pk):
- """Ajouter un repas à une journée"""
- journee = get_object_or_404(Journee, pk=journee_pk, user=request.user)
-
- if request.method == 'POST':
- form = RepasForm(request.POST)
- if form.is_valid():
- repas = form.save(commit=False)
- repas.journee = journee
- repas.save()
- messages.success(request, 'Repas ajouté avec succès!')
- return redirect('detail_repas', pk=repas.pk)
- else:
- form = RepasForm()
-
- return render(request, 'nutrition/ajouter_repas.html', {
- 'form': form,
- 'journee': journee
- })
- @login_required
- def detail_repas(request, pk):
- """Détail d'un repas avec sa composition"""
- repas = get_object_or_404(Repas, pk=pk, journee__user=request.user)
- compositions = repas.compositions.all().select_related('aliment')
-
- return render(request, 'nutrition/detail_repas.html', {
- 'repas': repas,
- 'compositions': compositions,
- })
- @login_required
- def ajouter_aliment_repas(request, repas_pk):
- """Ajouter un aliment à un repas"""
- repas = get_object_or_404(Repas, pk=repas_pk, journee__user=request.user)
-
- if request.method == 'POST':
- form = CompositionRepasForm(request.POST)
- if form.is_valid():
- composition = form.save(commit=False)
- composition.repas = repas
- composition.save()
- messages.success(request, 'Aliment ajouté!')
- return redirect('detail_repas', pk=repas.pk)
- else:
- form = CompositionRepasForm()
-
- return render(request, 'nutrition/ajouter_aliment.html', {
- 'form': form,
- 'repas': repas
- })
- def guide_carb_cycling(request):
- """Page explicative du carb-cycling"""
- return render(request, 'nutrition/guide.html')
- def liste_aliments(request):
- """Liste des aliments par catégorie"""
- aliments = Aliment.objects.all()
-
- # Regrouper par catégorie
- aliments_par_categorie = {}
- for aliment in aliments:
- categorie = aliment.get_categorie_display()
- if categorie not in aliments_par_categorie:
- aliments_par_categorie[categorie] = []
- aliments_par_categorie[categorie].append(aliment)
-
- return render(request, 'nutrition/liste_aliments.html', {
- 'aliments_par_categorie': aliments_par_categorie
- })
|