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()