+ |
@@ -107,7 +103,6 @@
-
-
-
-
-
+
+
+
+
+
{% trans 'Shopping List currently empty' %}
@@ -156,28 +152,30 @@
target="_blank">{% trans 'Open Shopping List' %}
- {% trans 'Recipes' %}
+ {% trans 'Recipes' %}
+
+
-
-
-
- [[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
|