Spaces:
Sleeping
Sleeping
File size: 6,045 Bytes
7bd7bef 5b2d4e7 7bd7bef 5b2d4e7 7bd7bef 5b2d4e7 7bd7bef 5b2d4e7 7bd7bef 5b2d4e7 7bd7bef 5b2d4e7 7bd7bef 5b2d4e7 7bd7bef 5b2d4e7 7bd7bef 5b2d4e7 7bd7bef 5b2d4e7 7bd7bef 5b2d4e7 7bd7bef 5b2d4e7 7bd7bef 5b2d4e7 7bd7bef 5b2d4e7 7bd7bef |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 |
import streamlit as st
import pandas as pd
from datetime import datetime, timedelta
from server.db.dbmanager import get_db_manager, load_chatbot_suggestions
db_manager = get_db_manager()
user_id = st.session_state["user_id"]
def get_week_dates(year, week):
"""Retourne les dates du Lundi au Dimanche pour une semaine donnée."""
first_day_of_year = datetime(year, 1, 1)
first_monday = first_day_of_year + timedelta(
days=(7 - first_day_of_year.weekday())
) # Trouver le premier lundi
start_date = first_monday + timedelta(
weeks=week - 1
) # Trouver le début de la semaine sélectionnée
return [
(start_date + timedelta(days=i)).strftime("%Y-%m-%d") for i in range(7)
] # 7 jours (Lundi → Dimanche)
def mealplan():
# 📆 Sélection de l'année et de la semaine
current_year = datetime.now().year
current_week = datetime.now().isocalendar()[1]
year_options = list(
range(current_year, current_year - 3, -1)
) # Années en ordre décroissant
col1, col2 = st.columns([0.5, 0.5]) # Réduction de la largeur des sélecteurs
with col1:
selected_year = st.selectbox("📅 Année", year_options, index=0)
with col2:
week_options = [f"Semaine {i}" for i in range(1, 53)]
selected_week_label = st.selectbox(
"📆 Semaine",
week_options,
index=week_options.index(f"Semaine {current_week}"),
)
selected_week = int(selected_week_label.split(" ")[1])
# 📌 Génération des 7 jours de la semaine sélectionnée
week_dates = get_week_dates(selected_year, selected_week)
# 📋 Initialisation des repas
if "meal_plan" not in st.session_state:
st.session_state["meal_plan"] = {}
for date in week_dates:
if date not in st.session_state["meal_plan"]:
st.session_state["meal_plan"][date] = {
"Petit-déjeuner": "",
"Déjeuner": "",
"Dîner": "",
}
# 📋 Affichage du planning pour 7 jours
st.subheader(f"📆 Planning des repas - {selected_week_label} ({selected_year})")
df = pd.DataFrame.from_dict(
{date: st.session_state["meal_plan"][date] for date in week_dates},
orient="index",
)
df.index = pd.to_datetime(df.index).strftime(
"%A %d %B"
) # Affichage clair des jours
st.dataframe(df, use_container_width=True)
# ✅ **Message de validation persistant**
if "validation_msg" in st.session_state:
st.success(st.session_state["validation_msg"])
st.session_state.pop(
"validation_msg"
) # Supprimer après affichage pour éviter la persistance infinie
# 🍽️ **Modification et Suppression d'un Repas**
st.subheader("✍️ Modifier un repas")
selected_day = st.selectbox("📅 Choisissez un jour", week_dates)
selected_meal = st.selectbox(
"🍽️ Sélectionnez le repas", ["Petit-déjeuner", "Déjeuner", "Dîner"]
)
# 📌 **Prévisualisation du repas existant**
existing_meal = st.session_state["meal_plan"][selected_day][selected_meal]
if existing_meal:
st.markdown(f"🔹 **Repas actuel pour {selected_meal} :**\n> {existing_meal}")
with st.form("meal_form"):
meal_input = st.text_area(
f"Ajoutez un plat pour {selected_meal} ({selected_day})",
value=existing_meal,
) # Pré-rempli avec le repas actuel
col1, col2 = st.columns([0.7, 0.3])
with col1:
submitted = st.form_submit_button("✅ Ajouter / Modifier")
with col2:
deleted = st.form_submit_button("❌ Supprimer le plat")
if submitted:
st.session_state["meal_plan"][selected_day][selected_meal] = meal_input
st.session_state[
"validation_msg"
] = f"✅ {selected_meal} ajouté/modifié pour le {selected_day} avec succès !"
st.rerun()
if deleted:
st.session_state["meal_plan"][selected_day][selected_meal] = ""
st.session_state[
"validation_msg"
] = f"❌ {selected_meal} supprimé pour le {selected_day} !"
st.rerun()
# 🤖 Ajout des suggestions du chatbot
st.subheader("🤖 Suggestions du Chatbot")
# 🔹 Charger les suggestions enregistrées si elles ne sont pas déjà en mémoire
if "chatbot_suggestions" not in st.session_state:
st.session_state["chatbot_suggestions"] = load_chatbot_suggestions(
db_manager, user_id
)
if st.session_state["chatbot_suggestions"]:
with st.form("chatbot_form"):
selected_recipe = st.selectbox(
"🔍 Sélectionnez une recette", st.session_state["chatbot_suggestions"]
)
selected_day_for_recipe = st.selectbox(
"📅 Assigner à quel jour ?", week_dates
)
selected_meal_for_recipe = st.selectbox(
"🍽️ Assigner à quel repas ?", ["Petit-déjeuner", "Déjeuner", "Dîner"]
)
add_recipe = st.form_submit_button("➕ Ajouter la recette au planning")
if add_recipe:
st.session_state["meal_plan"][selected_day_for_recipe][
selected_meal_for_recipe
] += f"\n- {selected_recipe}"
st.session_state[
"validation_msg"
] = f"✅ Recette ajoutée à {selected_meal_for_recipe} ({selected_day_for_recipe}) avec succès !"
st.rerun()
else:
st.write("⚠️ Aucune suggestion du chatbot pour le moment.")
# 📤 Exportation du planning en CSV
if st.button("📥 Exporter en CSV"):
df.to_csv("meal_plan.csv")
st.success("✅ Plan exporté en CSV avec succès !")
|