From e981a5b42d215f4a3dc5ff3ce26674fab849d93d Mon Sep 17 00:00:00 2001 From: behruz-dev Date: Fri, 29 Aug 2025 15:18:03 +0500 Subject: [PATCH] add: add StockMovemendUpdate api --- .../wherehouse/serializers/stock_movmend.py | 27 ++++++++++++++++++- core/apps/wherehouse/urls.py | 1 + core/apps/wherehouse/views/stock_movemend.py | 15 +++++++++++ 3 files changed, 42 insertions(+), 1 deletion(-) diff --git a/core/apps/wherehouse/serializers/stock_movmend.py b/core/apps/wherehouse/serializers/stock_movmend.py index b990199..fe800bb 100644 --- a/core/apps/wherehouse/serializers/stock_movmend.py +++ b/core/apps/wherehouse/serializers/stock_movmend.py @@ -139,4 +139,29 @@ class StockMovemendListSerializer(serializers.ModelSerializer): return { 'id': obj.project.id, 'name': obj.project.name - } if obj.project else None \ No newline at end of file + } if obj.project else None + + +class StockMovemendProductUpdateSerializer(serializers.Serializer): + movemend_product_id = serializers.UUIDField() + quantity = serializers.IntegerField() + + def validate(self, data): + movemend_product = StockMovmendProduct.objects.filter(id=data['movemend_product_id']).first() + if not movemend_product: + raise serializers.ValidationError("Stock Movemend Product not found") + if movemend_product.inventory.quantity < data['quantity']: + raise serializers.ValidationError("invalid quantity, quantity must les than product quantity") + data['movemend_product'] + return data + +class StockMovemendUpdateSerializer(serializers.ModelSerializer): + movemend_product = StockMovemendProductUpdateSerializer(many=True, required=False) + + class Meta: + model = StockMovemend + fields = [ + 'wherehouse_from', 'project_folder', 'project', 'date', + 'comment', 'movemend_product' + ] + extra_kwargs = {'wherehouse_from': {'required': False}} \ No newline at end of file diff --git a/core/apps/wherehouse/urls.py b/core/apps/wherehouse/urls.py index 20c3efd..74e4cdd 100644 --- a/core/apps/wherehouse/urls.py +++ b/core/apps/wherehouse/urls.py @@ -35,6 +35,7 @@ urlpatterns = [ path('list/', stock_movemend_views.StockMovemendListApiView.as_view()), path('/delete/', stock_movemend_views.StockMovemendDeleteApiView.as_view()), path('/remove//', stock_movemend_views.StockMovemendProductRemoveApiView.as_view()), + path('/update/', stock_movemend_views.StockMovemendUpdateApiView.as_view()), ] )), ] diff --git a/core/apps/wherehouse/views/stock_movemend.py b/core/apps/wherehouse/views/stock_movemend.py index 2640286..20127fd 100644 --- a/core/apps/wherehouse/views/stock_movemend.py +++ b/core/apps/wherehouse/views/stock_movemend.py @@ -100,3 +100,18 @@ class StockMovemendProductRemoveApiView(generics.GenericAPIView): {'success': True, 'message': 'removed'}, status=200 ) + + +class StockMovemendUpdateApiView(generics.GenericAPIView): + serializer_class = serializers.StockMovemendUpdateSerializer + queryset = StockMovemend.objects.all() + permission_classes = [HasRolePermission] + required_permissions = [] + + def patch(self, request, id): + stock_movemend = get_object_or_404(StockMovemend, id=id) + serializer = self.serializer_class(data=request.data, instance=stock_movemend, partial=True) + if serializer.is_valid(raise_exception=True): + serializer.save() + return Response({'success': True, 'message': 'updated!'}, status=200) + return Response({'success': False, 'error_message': serializer.errors}, status=400)