diff --git a/cookbook/templates/meal_plan.html b/cookbook/templates/meal_plan.html index cb0850747..84bf9b095 100644 --- a/cookbook/templates/meal_plan.html +++ b/cookbook/templates/meal_plan.html @@ -54,36 +54,32 @@ - - + + - [[mp.name]] + [[ meal_plan[t.id].name]] - - + +
-
-
- [[ planElementName(element)]] - + data-target="#id_plan_detail_modal">[[ planElementName(element)]]
[[ planElementName(element)]] + data-target="#id_plan_detail_modal">[[ planElementName(element)]]
@@ -107,7 +103,6 @@
-

-
-
- {% trans 'Shopping List' %} -
-
-
+
+
+
+
+ {% trans 'Shopping List' %} +
+
+
+
+
+
+ {% trans 'Plan' %} +
-
-
-
-
- [[meal_plan]] - @@ -251,6 +293,7 @@ days: moment.weekdays(true), plan_entries: [], meal_types: [], + meal_types_edit: [], meal_plan: {}, plan_detail: {shared: []}, recipes: [], @@ -300,6 +343,10 @@ console.log("GET TYPE EXECUTED") return this.$http.get("{% url 'api:mealtype-list' %}").then((response) => { this.meal_types = response.data; + this.meal_types_edit = Array.from(this.meal_types) + for (let mte of this.meal_types_edit) { + this.$set(mte, 'delete', false) + } }).catch((err) => { console.log(err); }) @@ -312,6 +359,7 @@ this.$set(this.meal_plan, t.id, { name: t.name, meal_type: t.id, + type: t, days: {} }) for (let d of this.days) { @@ -396,7 +444,7 @@ }, deleteEntry: function (entry) { console.log("delete click") - $('#exampleModal').modal('hide') + $('#id_plan_detail_modal').modal('hide') this.$http.delete(`{% url 'api:mealplan-list' %}${entry.id}/`, entry).then((response) => { console.log("delete success", response) this.meal_plan[entry.meal_type].days[entry.date].items = this.meal_plan[entry.meal_type].days[entry.date].items.filter(item => item !== entry) @@ -404,6 +452,47 @@ console.log("delete error", err); }) }, + updatePlanTypes: function () { + console.log("UPDATING TYPES") + let promise_list = [] + let i = 0 + for (let x of this.meal_types_edit) { + x.order = i + i++ + if (x.id === undefined && !x.delete) { + console.log("creating new ", x) + x.created_by = {{ request.user.id }} + promise_list.push(this.$http.post("{% url 'api:mealtype-list' %}", x).then((response) => { + console.log("successfully created plan type"); + }).catch((err) => { + console.log(err); + })) + } else if (x.delete) { + console.log("deleting ", x) + promise_list.push(this.$http.delete(`{% url 'api:mealtype-list' %}${x.id}/`, x).then((response) => { + console.log("successfully deleted plan type"); + }).catch((err) => { + console.log(err); + })) + } else { + console.log("updating ", x) + promise_list.push(this.$http.put(`{% url 'api:mealtype-list' %}${x.id}/`, x).then((response) => { + console.log("successfully updated plan type"); + }).catch((err) => { + console.log(err); + })) + } + } + Promise.allSettled(promise_list).then(() => { + this.updatePlan() + $('#id_plan_types_modal').modal('hide') + }) + }, + markTypeDelete: function (element) { + if (confirm('{% trans 'When deleting a meal type all entries using that type will be deleted as well. Deletion will apply when configuration is saved. Do you want to proceed?' %}')) { + element.delete = true + } + }, cloneRecipe: function (recipe) { console.log("clone recipe") return { diff --git a/cookbook/views/api.py b/cookbook/views/api.py index 7bfeae588..92752e6c6 100644 --- a/cookbook/views/api.py +++ b/cookbook/views/api.py @@ -52,12 +52,12 @@ class MealPlanViewSet(viewsets.ModelViewSet): class MealTypeViewSet(viewsets.ModelViewSet): - queryset = MealType.objects.all() + queryset = MealType.objects.order_by('order').all() serializer_class = MealTypeSerializer permission_classes = [permissions.IsAuthenticated] def get_queryset(self): - queryset = MealType.objects.filter(created_by=self.request.user).all() + queryset = MealType.objects.order_by('order', 'id').filter(created_by=self.request.user).all() return queryset