diff --git a/apps/authorization/api/v1/serializers.py b/apps/authorization/api/v1/serializers.py index 7d22f0d..aff45ee 100644 --- a/apps/authorization/api/v1/serializers.py +++ b/apps/authorization/api/v1/serializers.py @@ -92,10 +92,10 @@ class RoleSerializer(serializers.ModelSerializer): 'role_name', 'description', 'type', - 'permissions' + 'permissions' # noqa ] extra_kwargs = { - 'permissions': {'required': False} # permissions not required for some roles + 'permissions': {'required': False} # permissions not required for some roles # noqa } def to_representation(self, instance): @@ -120,14 +120,14 @@ class UserRelationSerializer(serializers.ModelSerializer): 'user', 'organization', 'role', - 'permissions', + 'permissions', # noqa ] extra_kwargs = { 'organization': { 'required': False }, - 'permissions': { + 'permissions': { # noqa 'required': False }, 'role': { diff --git a/apps/pos_device/web/api/v1/viewsets/device.py b/apps/pos_device/web/api/v1/viewsets/device.py index bae04ff..64d9143 100644 --- a/apps/pos_device/web/api/v1/viewsets/device.py +++ b/apps/pos_device/web/api/v1/viewsets/device.py @@ -40,7 +40,7 @@ class ProviderCompanyViewSet(SoftDeleteMixin, viewsets.ModelViewSet): # noqa # paginate devices page = self.paginate_queryset(self.queryset.order_by('-create_date')) - if page is not None: + if page is not None: # noqa serializer = self.get_serializer(page, many=True) return self.get_paginated_response(serializer.data) @@ -60,7 +60,7 @@ class ProviderCompanyViewSet(SoftDeleteMixin, viewsets.ModelViewSet): # noqa # paginate devices page = self.paginate_queryset(users) - if page is not None: + if page is not None: # noqa serializer = UserRelationSerializer(page, many=True) return self.get_paginated_response(serializer.data) @@ -100,7 +100,7 @@ class DeviceViewSet(SoftDeleteMixin, viewsets.ModelViewSet, AdminFilterMixin): # paginate devices page = self.paginate_queryset(devices) - if page is not None: + if page is not None: # noqa serializer = self.get_serializer(page, many=True) return self.get_paginated_response(serializer.data) @@ -108,7 +108,7 @@ class DeviceViewSet(SoftDeleteMixin, viewsets.ModelViewSet, AdminFilterMixin): """ activations of pos by a temporary code """ device = self.queryset.filter(serial=request.data['serial']).first() - if not device or not device.is_activated: + if not device or not device.is_activated: # noqa code = generate_code() pos_models.DeviceActivationCode.objects.create( code=code, @@ -133,7 +133,7 @@ class DeviceViewSet(SoftDeleteMixin, viewsets.ModelViewSet, AdminFilterMixin): # paginate devices page = self.paginate_queryset(organizations) - if page is not None: + if page is not None: # noqa serializer = OrganizationSerializer(page, many=True) return self.get_paginated_response(serializer.data) @@ -152,7 +152,7 @@ class DeviceViewSet(SoftDeleteMixin, viewsets.ModelViewSet, AdminFilterMixin): # paginate devices page = self.paginate_queryset(devices) - if page is not None: + if page is not None: # noqa serializer = self.get_serializer(page, many=True) return self.get_paginated_response(serializer.data) @@ -332,7 +332,7 @@ class StakeHoldersViewSet(SoftDeleteMixin, viewsets.ModelViewSet, DynamicSearchM # paginate stakeholders page = self.paginate_queryset(query) - if page is not None: + if page is not None: # noqa serializer = self.get_serializer(page, many=True) return self.get_paginated_response(serializer.data) @@ -355,12 +355,12 @@ class StakeHoldersViewSet(SoftDeleteMixin, viewsets.ModelViewSet, DynamicSearchM # paginate stakeholders page = self.paginate_queryset(stakeholders) - if page is not None: + if page is not None: # noqa serializer = self.get_serializer(page, many=True) return self.get_paginated_response(serializer.data) -class StakeHolderShareAmountViewSet(SoftDeleteMixin, viewsets.ModelViewSet, DynamicSearchMixin): +class StakeHolderShareAmountViewSet(viewsets.ModelViewSet, DynamicSearchMixin, SoftDeleteMixin): queryset = pos_models.StakeHolderShareAmount.objects.select_related('quota_distribution', 'stakeholders') serializer_class = device_serializer.StakeHolderShareAmountSerializer @@ -417,6 +417,21 @@ class StakeHolderShareAmountViewSet(SoftDeleteMixin, viewsets.ModelViewSet, Dyna return Response(serializer.data, status=status.HTTP_200_OK) return Response(serializer.errors, status=status.HTTP_403_FORBIDDEN) + def destroy(self, request, pk=None, *args, **kwargs): + """Soft delete share_holder and its quota_distribution safely.""" + share_holder = self.get_object() + + with transaction.atomic(): + share_holder.quota_distribution.__class__.objects.filter( + id=share_holder.quota_distribution.id + ).update(trash=True) + + share_holder.__class__.objects.filter( + id=share_holder.id + ).update(trash=True) + + return Response(status=status.HTTP_200_OK) + @action( methods=['get'], detail=False, @@ -435,7 +450,7 @@ class StakeHolderShareAmountViewSet(SoftDeleteMixin, viewsets.ModelViewSet, Dyna # paginate stakeholders page = self.paginate_queryset(stakeholders_sharing) - if page is not None: + if page is not None: # noqa serializer = self.get_serializer(page, many=True) return self.get_paginated_response(serializer.data) @@ -456,6 +471,6 @@ class StakeHolderShareAmountViewSet(SoftDeleteMixin, viewsets.ModelViewSet, Dyna # paginate stakeholders page = self.paginate_queryset(stakeholder_sharing) - if page is not None: + if page is not None: # noqa serializer = self.get_serializer(page, many=True) return self.get_paginated_response(serializer.data) diff --git a/apps/product/web/api/v1/serializers/quota_distribution_serializers.py b/apps/product/web/api/v1/serializers/quota_distribution_serializers.py index 20d98e2..3169931 100644 --- a/apps/product/web/api/v1/serializers/quota_distribution_serializers.py +++ b/apps/product/web/api/v1/serializers/quota_distribution_serializers.py @@ -1,14 +1,15 @@ -from rest_framework import serializers -from apps.product import models as product_models -from rest_framework.exceptions import APIException -from apps.product.web.api.v1.serializers.quota_serializers import QuotaSerializer from django.db import models +from rest_framework import serializers +from rest_framework.exceptions import APIException + +from apps.product import models as product_models from apps.product.exceptions import ( QuotaWeightException, QuotaClosedException, QuotaExpiredTimeException, QuotaLimitByOrganizationException ) +from apps.product.web.api.v1.serializers.quota_serializers import QuotaSerializer class QuotaDistributionSerializer(serializers.ModelSerializer): @@ -67,7 +68,7 @@ class QuotaDistributionSerializer(serializers.ModelSerializer): raise APIException("وزن وارد شده کمتر از وزن ورودی به انبار است", code=403) # noqa # if weight is more than distribution remaining weight - if self.instance.weight > self.instance.remaining_weight: + if amount > self.instance.remaining_weight + self.instance.weight: raise APIException("وزن وارد شده بیشتر از وزن باقیمانده است", code=403) # noqa return data