From b6f3ed6bd9bf6b39c446d0c89f0972b9b76a8c08 Mon Sep 17 00:00:00 2001 From: smilerz Date: Tue, 19 Mar 2024 09:12:31 -0500 Subject: [PATCH] handle auto_onhand on bulkShoppingListEntry api --- cookbook/views/api.py | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/cookbook/views/api.py b/cookbook/views/api.py index 670bd9cbf..a0ceada12 100644 --- a/cookbook/views/api.py +++ b/cookbook/views/api.py @@ -1168,12 +1168,24 @@ class ShoppingListEntryViewSet(viewsets.ModelViewSet): @decorators.action(detail=False, methods=['POST'], serializer_class=ShoppingListEntryBulkSerializer, permission_classes=[CustomIsUser]) def bulk(self, request): serializer = self.serializer_class(data=request.data) + if serializer.is_valid(): - ShoppingListEntry.objects.filter(Q(created_by=self.request.user) - | Q(created_by__in=list(self.request.user.get_shopping_share()))).filter(space=request.space, id__in=serializer.validated_data['ids'] - ).update(checked=serializer.validated_data['checked'], - updated_at=timezone.now(), - ) + print(serializer.validated_data) + bulk_entries = ShoppingListEntry.objects.filter( + Q(created_by=self.request.user) | Q(created_by__in=list(self.request.user.get_shopping_share())) + ).filter(space=request.space, id__in=serializer.validated_data['ids']) + bulk_entries.update(checked=(checked := serializer.validated_data['checked']), updated_at=timezone.now(), ) + + # update the onhand for food if shopping_add_onhand is True + if request.user.userpreference.shopping_add_onhand: + foods = Food.objects.filter(id__in=bulk_entries.values('food')) + if checked: + for f in foods: + f.onhand_users.add(*request.user.userpreference.shopping_share.all(), request.user) + elif checked == False: + for f in foods: + f.onhand_users.remove(*request.user.userpreference.shopping_share.all(), request.user) + return Response(serializer.data) else: return Response(serializer.errors, 400)