diff --git a/.gitignore b/.gitignore index f8ba944..5270754 100644 --- a/.gitignore +++ b/.gitignore @@ -13,6 +13,7 @@ media resources/media/ resources/static/ .log +django.log.* # If your build process includes running collectstatic, then you probably don't need or want to include staticfiles/ # in your Git repository. Update and uncomment the following line accordingly. # /staticfiles/ diff --git a/core/apps/orders/serializers/party.py b/core/apps/orders/serializers/party.py index 20a613d..ac59013 100644 --- a/core/apps/orders/serializers/party.py +++ b/core/apps/orders/serializers/party.py @@ -136,4 +136,25 @@ class DeletedPartyListSerializer(serializers.ModelSerializer): return { 'id': obj.party.mediator.id, 'name': obj.party.mediator.full_name - } \ No newline at end of file + } + + +class PartyUpdateSerializer(serializers.ModelSerializer): + class Meta: + model = Party + fields = [ + 'mediator', 'delivery_date', 'payment_date', + ] + extra_kwargs = { + 'mediator': {'required': False}, + 'delivery_date': {'required': False}, + 'payment_date': {'required':False} + } + + def update(self, instance, validated_data): + with transaction.atomic(): + instance.mediator = validated_data.get('mediator', instance.mediator) + instance.delivery_date = validated_data.get('delivery_date', instance.delivery_date) + instance.payment_date = validated_data.get('payment_date', instance.payment_date) + instance.save() + return instance \ No newline at end of file diff --git a/core/apps/orders/urls.py b/core/apps/orders/urls.py index 271fa65..1da4197 100644 --- a/core/apps/orders/urls.py +++ b/core/apps/orders/urls.py @@ -32,6 +32,7 @@ urlpatterns = [ path('/', party_views.PartyDetailApiView.as_view()), path('/delete/', party_views.PartyDeleteApiView.as_view()), path('deleted_pary/list/', party_views.DeletedPartyListApiView.as_view()), + path('/update/', party_views.PartyUpdateApiView.as_view()), ] )), ] \ No newline at end of file diff --git a/core/apps/orders/views/party.py b/core/apps/orders/views/party.py index 0532951..0b1745c 100644 --- a/core/apps/orders/views/party.py +++ b/core/apps/orders/views/party.py @@ -1,3 +1,5 @@ +from django.shortcuts import get_object_or_404 + from rest_framework import generics, views from rest_framework.response import Response @@ -93,4 +95,22 @@ class DeletedPartyListApiView(generics.GenericAPIView): if page is not None: serializer = self.serializer_class(page, many=True) return self.get_paginated_response(serializer.data) - return Response(serializer.data, status=200) \ No newline at end of file + return Response(serializer.data, status=200) + + +class PartyUpdateApiView(generics.GenericAPIView): + serializer_class = serializers.PartyUpdateSerializer + queryset = Party.objects.all() + pagination_class = [HasRolePermission] + required_permissions = ['party'] + pagination_class = None + + def patch(self, request, id): + party = get_object_or_404(Party, id=id) + serializer = self.serializer_class(data=request.data, instance=party, partial=True) + if serializer.is_valid(raise_exception=True): + serializer.save() + return Response({ + 'success': True, 'message': 'update', + }, status=200) + return Response({'success': False, 'error': serializer.errors}, status=400) \ No newline at end of file