add company code to organization serialzier

This commit is contained in:
2025-06-16 08:29:17 +03:30
parent d8ca9d2256
commit 8df059bee9
7 changed files with 41 additions and 7 deletions

View File

@@ -141,6 +141,11 @@ class UserViewSet(ModelViewSet):
else: else:
return Response(serializer.errors, status=status.HTTP_403_FORBIDDEN) return Response(serializer.errors, status=status.HTTP_403_FORBIDDEN)
def destroy(self, request, *args, **kwargs):
instance = self.get_object()
self.perform_destroy(instance)
return Response(status=status.HTTP_204_NO_CONTENT)
@action( @action(
methods=['get'], methods=['get'],
detail=False, detail=False,

View File

@@ -5,6 +5,7 @@ from django.contrib.auth.models import update_last_login
from apps.authentication.models import User from apps.authentication.models import User
from rest_framework import exceptions from rest_framework import exceptions
from django.core.cache import cache from django.core.cache import cache
from rest_framework import status
from typing import Any from typing import Any
@@ -34,9 +35,9 @@ class CustomizedTokenObtainPairSerializer(TokenObtainPairSerializer): # noqa
data["otp_status"] = self.user.otp_status data["otp_status"] = self.user.otp_status
if not self.user.is_active: if not self.user.is_active:
raise exceptions.AuthenticationFailed( raise exceptions.APIException(
self.error_messages["no_active_account"], "user is not active",
"no_active_account", status.HTTP_403_FORBIDDEN
) )
if api_settings.UPDATE_LAST_LOGIN: if api_settings.UPDATE_LAST_LOGIN:

View File

@@ -191,7 +191,8 @@ class OrganizationSerializer(serializers.ModelSerializer):
'province', 'province',
'city', 'city',
'parent_organization', 'parent_organization',
'national_unique_id' 'national_unique_id',
'company_code'
] ]
extra_kwargs = {} extra_kwargs = {}

View File

@@ -1,3 +1,5 @@
from rest_framework.exceptions import APIException
from rest_framework import status
from django.db import connection from django.db import connection
from django.conf import settings from django.conf import settings
import os import os
@@ -34,7 +36,6 @@ class SqlPrintingMiddleware(object):
""" """
def __init__(self, get_response): def __init__(self, get_response):
# print("heloo")
self.get_response = get_response self.get_response = get_response
def __call__(self, request): def __call__(self, request):

View File

@@ -294,6 +294,12 @@ class Quota(BaseModel):
return factor_total + broker_total + coop + factory return factor_total + broker_total + coop + factory
@property
def remaining_quota_weight(self):
""" calculate remaining quota weight after distribution """
distributed_weight = self.distributions_assigned.aggregate(total=models.Sum("weight"))["total"] or 0
return self.quota_weight - distributed_weight
def save(self, calculate_final_price=None, *args, **kwargs): def save(self, calculate_final_price=None, *args, **kwargs):
if not self.quota_id: if not self.quota_id:
self.quota_id = self.generate_quota_id() self.quota_id = self.generate_quota_id()
@@ -424,4 +430,3 @@ class QuotaDistribution(BaseModel):
def save(self, *args, **kwargs): def save(self, *args, **kwargs):
return super(QuotaDistribution, self).save(*args, **kwargs) return super(QuotaDistribution, self).save(*args, **kwargs)

View File

@@ -424,6 +424,10 @@ class QuotaViewSet(viewsets.ModelViewSet): # noqa
quota.save(calculate_final_price=True) quota.save(calculate_final_price=True)
return Response(data, status=status.HTTP_201_CREATED) return Response(data, status=status.HTTP_201_CREATED)
@transaction.atomic
def update(self, request, *args, **kwargs):
pass
@action( @action(
methods=['get'], methods=['get'],
detail=False, detail=False,
@@ -489,7 +493,7 @@ class QuotaViewSet(viewsets.ModelViewSet): # noqa
return Response(e, status=status.HTTP_204_NO_CONTENT) return Response(e, status=status.HTTP_204_NO_CONTENT)
class QuotaIncentiveAssignmentViewSet(viewsets.ModelViewSet): class QuotaIncentiveAssignmentViewSet(viewsets.ModelViewSet): # noqa
""" apis for incentive assignment """ """ apis for incentive assignment """
queryset = product_models.QuotaIncentiveAssignment.objects.all() queryset = product_models.QuotaIncentiveAssignment.objects.all()

View File

@@ -50,6 +50,23 @@ class QuotaDistributionViewSet(viewsets.ModelViewSet):
return Response(serializer.data, status=status.HTTP_201_CREATED) return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_403_FORBIDDEN) return Response(serializer.errors, status=status.HTTP_403_FORBIDDEN)
@transaction.atomic
def update(self, request, *args, **kwargs):
""" Custom update of quota distribution """
partial = kwargs.pop('partial', False)
instance = self.get_object()
serializer = self.get_serializer(instance, data=request.data, partial=partial)
serializer.is_valid(raise_exception=True)
self.perform_update(serializer)
if getattr(instance, '_prefetched_objects_cache', None):
# If 'prefetch_related' has been applied to a queryset, we need to
# forcibly invalidate the prefetch cache on the instance.
instance._prefetched_objects_cache = {}
return Response(serializer.data)
@action( @action(
methods=['put'], methods=['put'],
detail=True, detail=True,