diff --git a/frontend/src/api/mealplan.js b/frontend/src/api/mealplan.js index 0271f51de..4de5d7a85 100644 --- a/frontend/src/api/mealplan.js +++ b/frontend/src/api/mealplan.js @@ -16,6 +16,7 @@ const mealPlanURLs = { export default { async create(postBody) { + console.log(postBody); let response = await apiReq.post(mealPlanURLs.create, postBody); return response; }, diff --git a/frontend/src/components/MealPlan/MealPlanCard.vue b/frontend/src/components/MealPlan/MealPlanCard.vue index 9fffa6e47..f88e27c17 100644 --- a/frontend/src/components/MealPlan/MealPlanCard.vue +++ b/frontend/src/components/MealPlan/MealPlanCard.vue @@ -17,7 +17,9 @@ :src="getImage(meal.slug)" @click="openSearch(index)" > - {{ $d( new Date(meal.date), 'short' ) }} + + {{ $d(new Date(meal.date.split("-")), "short") }} + {{ meal.name }} diff --git a/frontend/src/pages/MealPlan/Planner.vue b/frontend/src/pages/MealPlan/Planner.vue index 474b42a5f..20a5c0ff1 100644 --- a/frontend/src/pages/MealPlan/Planner.vue +++ b/frontend/src/pages/MealPlan/Planner.vue @@ -25,8 +25,8 @@ > - {{ $d(new Date(mealplan.startDate), "short") }} - - {{ $d(new Date(mealplan.endDate), "short") }} + {{ $d(new Date(mealplan.startDate.split("-")), "short") }} - + {{ $d(new Date(mealplan.endDate.split("-")), "short") }} @@ -44,7 +44,7 @@ diff --git a/frontend/src/utils/index.js b/frontend/src/utils/index.js index 69a8edbc2..94f604e9c 100644 --- a/frontend/src/utils/index.js +++ b/frontend/src/utils/index.js @@ -73,8 +73,8 @@ export default { return `${dow}, ${month} ${day}`; }, getDateAsPythonDate(dateObject) { - const month = dateObject.getMonth() + 1; - const day = dateObject.getDate(); + const month = dateObject.getUTCMonth() + 1; + const day = dateObject.getUTCDate(); const year = dateObject.getFullYear(); return `${year}-${month}-${day}`; diff --git a/mealie/db/models/mealplan.py b/mealie/db/models/mealplan.py index fa9915da4..7ce8b3994 100644 --- a/mealie/db/models/mealplan.py +++ b/mealie/db/models/mealplan.py @@ -29,7 +29,7 @@ class MealPlanModel(SqlAlchemyBase, BaseMixins): uid = sa.Column(sa.Integer, primary_key=True, unique=True) #! Probably Bad? startDate = sa.Column(sa.Date) endDate = sa.Column(sa.Date) - meals: List[Meal] = orm.relationship(Meal, cascade="all, delete") + meals: List[Meal] = orm.relationship(Meal, cascade="all, delete, delete-orphan") group_id = sa.Column(sa.String, sa.ForeignKey("groups.id")) group = orm.relationship("Group", back_populates="mealplans") @@ -42,7 +42,7 @@ class MealPlanModel(SqlAlchemyBase, BaseMixins): self.meals = [Meal(**meal) for meal in meals] def update(self, session, startDate, endDate, meals, uid, group) -> None: - MealPlanModel._sql_remove_list(session, [Meal], uid) + # MealPlanModel._sql_remove_list(session, [Meal], uid) self.__init__( startDate=startDate, diff --git a/mealie/routes/mealplans/crud.py b/mealie/routes/mealplans/crud.py index 7a3710708..e4a504ed0 100644 --- a/mealie/routes/mealplans/crud.py +++ b/mealie/routes/mealplans/crud.py @@ -1,3 +1,5 @@ +import datetime + from db.database import db from db.db_setup import generate_session from fastapi import APIRouter, Depends @@ -64,10 +66,17 @@ def get_this_week(session: Session = Depends(generate_session)): @router.get("/today", tags=["Meal Plan"]) -def get_today(session: Session = Depends(generate_session)): +def get_today( + session: Session = Depends(generate_session), + current_user: UserInDB = Depends(manager), +): """ Returns the recipe slug for the meal scheduled for today. If no meal is scheduled nothing is returned """ - return get_todays_meal(session) + group_in_db: GroupInDB = db.groups.get(session, current_user.group, "name") + recipe = get_todays_meal(session, group_in_db) + print(datetime.date.today()) + + return recipe.slug diff --git a/mealie/services/meal_services.py b/mealie/services/meal_services.py index 2d2851089..ab3f2ded8 100644 --- a/mealie/services/meal_services.py +++ b/mealie/services/meal_services.py @@ -1,14 +1,23 @@ -from datetime import date, timedelta +from datetime import date, timedelta, timezone +from typing import Union +import pytz from db.database import db +from db.db_setup import create_session +from pydantic.tools import T from schema.meal import MealIn, MealOut, MealPlanIn, MealPlanInDB, MealPlanProcessed from schema.recipe import Recipe +from schema.user import GroupInDB from sqlalchemy.orm.session import Session def process_meals(session: Session, meal_plan_base: MealPlanIn) -> MealPlanProcessed: meals = [] for x, meal in enumerate(meal_plan_base.meals): + # europe = pytz.timezone("America/Anchorage") + # d = europe.localize(meal_plan_base.startDate) + # print(d) + meal: MealIn try: recipe: Recipe = db.recipes.get(session, meal.slug) @@ -37,10 +46,35 @@ def process_meals(session: Session, meal_plan_base: MealPlanIn) -> MealPlanProce ) -def get_todays_meal(session): - meal_plan: MealPlanInDB = db.groups.get(session, limit=1, order_by="startDate") +def get_todays_meal(session: Session, group: Union[int, GroupInDB]) -> Recipe: + """Returns the given mealplan for today based off the group. If the group + Type is of type int, then a query will be made to the database to get the + grop object." - for meal in meal_plan.meals: - meal: MealOut - if meal.date == date.today(): - return meal.slug + Args: + session (Session): SqlAlchemy Session + group (Union[int, GroupInDB]): Either the id of the group or the GroupInDB Object + + Returns: + Recipe: Pydantic Recipe Object + """ + session = session if session else create_session() + + if isinstance(group, int): + group: GroupInDB = db.groups.get(session, group) + + if group.webhook_enable: + today_slug = None + + for mealplan in group.mealplans: + mealplan: MealPlanInDB + for meal in mealplan.meals: + meal: MealOut + if meal.date == date.today(): + today_slug = meal.slug + break + + if today_slug: + return db.recipes.get(session, today_slug) + else: + return None diff --git a/mealie/utils/post_webhooks.py b/mealie/utils/post_webhooks.py index fdf4d6482..a87cd58cf 100644 --- a/mealie/utils/post_webhooks.py +++ b/mealie/utils/post_webhooks.py @@ -1,35 +1,20 @@ -import json -from datetime import date - import requests from db.database import db from db.db_setup import create_session -from schema.meal import MealOut, MealPlanInDB from schema.user import GroupInDB +from services.meal_services import get_todays_meal from sqlalchemy.orm.session import Session def post_webhooks(group: int, session: Session = None): session = session if session else create_session() group_settings: GroupInDB = db.groups.get(session, group) + todays_recipe = get_todays_meal(session, group) - if group_settings.webhook_enable: - today_slug = None + if not todays_recipe: + return - for mealplan in group_settings.mealplans: - mealplan: MealPlanInDB - for meal in mealplan.meals: - meal: MealOut - if meal.date == date.today(): - today_slug = meal.slug - break - - if not today_slug: - return - - todays_meal = db.recipes.get(session, today_slug) - - for url in group_settings.webhook_urls: - requests.post(url, json=todays_meal.json()) + for url in group_settings.webhook_urls: + requests.post(url, json=todays_recipe.json()) session.close()