fix edit distribution exception bug

This commit is contained in:
2025-10-25 15:35:38 +03:30
parent 6a146c5fb4
commit c8eef46b6f
3 changed files with 36 additions and 20 deletions

View File

@@ -92,10 +92,10 @@ class RoleSerializer(serializers.ModelSerializer):
'role_name', 'role_name',
'description', 'description',
'type', 'type',
'permissions' 'permissions' # noqa
] ]
extra_kwargs = { 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): def to_representation(self, instance):
@@ -120,14 +120,14 @@ class UserRelationSerializer(serializers.ModelSerializer):
'user', 'user',
'organization', 'organization',
'role', 'role',
'permissions', 'permissions', # noqa
] ]
extra_kwargs = { extra_kwargs = {
'organization': { 'organization': {
'required': False 'required': False
}, },
'permissions': { 'permissions': { # noqa
'required': False 'required': False
}, },
'role': { 'role': {

View File

@@ -40,7 +40,7 @@ class ProviderCompanyViewSet(SoftDeleteMixin, viewsets.ModelViewSet): # noqa
# paginate devices # paginate devices
page = self.paginate_queryset(self.queryset.order_by('-create_date')) 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) serializer = self.get_serializer(page, many=True)
return self.get_paginated_response(serializer.data) return self.get_paginated_response(serializer.data)
@@ -60,7 +60,7 @@ class ProviderCompanyViewSet(SoftDeleteMixin, viewsets.ModelViewSet): # noqa
# paginate devices # paginate devices
page = self.paginate_queryset(users) page = self.paginate_queryset(users)
if page is not None: if page is not None: # noqa
serializer = UserRelationSerializer(page, many=True) serializer = UserRelationSerializer(page, many=True)
return self.get_paginated_response(serializer.data) return self.get_paginated_response(serializer.data)
@@ -100,7 +100,7 @@ class DeviceViewSet(SoftDeleteMixin, viewsets.ModelViewSet, AdminFilterMixin):
# paginate devices # paginate devices
page = self.paginate_queryset(devices) page = self.paginate_queryset(devices)
if page is not None: if page is not None: # noqa
serializer = self.get_serializer(page, many=True) serializer = self.get_serializer(page, many=True)
return self.get_paginated_response(serializer.data) return self.get_paginated_response(serializer.data)
@@ -108,7 +108,7 @@ class DeviceViewSet(SoftDeleteMixin, viewsets.ModelViewSet, AdminFilterMixin):
""" activations of pos by a temporary code """ """ activations of pos by a temporary code """
device = self.queryset.filter(serial=request.data['serial']).first() 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() code = generate_code()
pos_models.DeviceActivationCode.objects.create( pos_models.DeviceActivationCode.objects.create(
code=code, code=code,
@@ -133,7 +133,7 @@ class DeviceViewSet(SoftDeleteMixin, viewsets.ModelViewSet, AdminFilterMixin):
# paginate devices # paginate devices
page = self.paginate_queryset(organizations) page = self.paginate_queryset(organizations)
if page is not None: if page is not None: # noqa
serializer = OrganizationSerializer(page, many=True) serializer = OrganizationSerializer(page, many=True)
return self.get_paginated_response(serializer.data) return self.get_paginated_response(serializer.data)
@@ -152,7 +152,7 @@ class DeviceViewSet(SoftDeleteMixin, viewsets.ModelViewSet, AdminFilterMixin):
# paginate devices # paginate devices
page = self.paginate_queryset(devices) page = self.paginate_queryset(devices)
if page is not None: if page is not None: # noqa
serializer = self.get_serializer(page, many=True) serializer = self.get_serializer(page, many=True)
return self.get_paginated_response(serializer.data) return self.get_paginated_response(serializer.data)
@@ -332,7 +332,7 @@ class StakeHoldersViewSet(SoftDeleteMixin, viewsets.ModelViewSet, DynamicSearchM
# paginate stakeholders # paginate stakeholders
page = self.paginate_queryset(query) page = self.paginate_queryset(query)
if page is not None: if page is not None: # noqa
serializer = self.get_serializer(page, many=True) serializer = self.get_serializer(page, many=True)
return self.get_paginated_response(serializer.data) return self.get_paginated_response(serializer.data)
@@ -355,12 +355,12 @@ class StakeHoldersViewSet(SoftDeleteMixin, viewsets.ModelViewSet, DynamicSearchM
# paginate stakeholders # paginate stakeholders
page = self.paginate_queryset(stakeholders) page = self.paginate_queryset(stakeholders)
if page is not None: if page is not None: # noqa
serializer = self.get_serializer(page, many=True) serializer = self.get_serializer(page, many=True)
return self.get_paginated_response(serializer.data) 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') queryset = pos_models.StakeHolderShareAmount.objects.select_related('quota_distribution', 'stakeholders')
serializer_class = device_serializer.StakeHolderShareAmountSerializer 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.data, status=status.HTTP_200_OK)
return Response(serializer.errors, status=status.HTTP_403_FORBIDDEN) 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( @action(
methods=['get'], methods=['get'],
detail=False, detail=False,
@@ -435,7 +450,7 @@ class StakeHolderShareAmountViewSet(SoftDeleteMixin, viewsets.ModelViewSet, Dyna
# paginate stakeholders # paginate stakeholders
page = self.paginate_queryset(stakeholders_sharing) page = self.paginate_queryset(stakeholders_sharing)
if page is not None: if page is not None: # noqa
serializer = self.get_serializer(page, many=True) serializer = self.get_serializer(page, many=True)
return self.get_paginated_response(serializer.data) return self.get_paginated_response(serializer.data)
@@ -456,6 +471,6 @@ class StakeHolderShareAmountViewSet(SoftDeleteMixin, viewsets.ModelViewSet, Dyna
# paginate stakeholders # paginate stakeholders
page = self.paginate_queryset(stakeholder_sharing) page = self.paginate_queryset(stakeholder_sharing)
if page is not None: if page is not None: # noqa
serializer = self.get_serializer(page, many=True) serializer = self.get_serializer(page, many=True)
return self.get_paginated_response(serializer.data) return self.get_paginated_response(serializer.data)

View File

@@ -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 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 ( from apps.product.exceptions import (
QuotaWeightException, QuotaWeightException,
QuotaClosedException, QuotaClosedException,
QuotaExpiredTimeException, QuotaExpiredTimeException,
QuotaLimitByOrganizationException QuotaLimitByOrganizationException
) )
from apps.product.web.api.v1.serializers.quota_serializers import QuotaSerializer
class QuotaDistributionSerializer(serializers.ModelSerializer): class QuotaDistributionSerializer(serializers.ModelSerializer):
@@ -67,7 +68,7 @@ class QuotaDistributionSerializer(serializers.ModelSerializer):
raise APIException("وزن وارد شده کمتر از وزن ورودی به انبار است", code=403) # noqa raise APIException("وزن وارد شده کمتر از وزن ورودی به انبار است", code=403) # noqa
# if weight is more than distribution remaining weight # 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 raise APIException("وزن وارد شده بیشتر از وزن باقیمانده است", code=403) # noqa
return data return data