show_my_org in organizations list - validation of org national_unique_id
This commit is contained in:
@@ -319,7 +319,7 @@ class OrganizationViewSet(BaseViewSet, SoftDeleteMixin, ModelViewSet, DynamicSea
|
|||||||
""" list of organizations by province """
|
""" list of organizations by province """
|
||||||
|
|
||||||
if 'province' in request.GET.keys():
|
if 'province' in request.GET.keys():
|
||||||
queryset = self.get_queryset().filter(province=int(request.GET['province']))
|
queryset = self.get_queryset(show_my_org=True).filter(province=int(request.GET['province']))
|
||||||
else:
|
else:
|
||||||
queryset = self.get_queryset().filter(province=request.user.province)
|
queryset = self.get_queryset().filter(province=request.user.province)
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ from django.contrib.auth.hashers import make_password
|
|||||||
from django.db.models import Q
|
from django.db.models import Q
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
|
|
||||||
from apps.authentication.exceptions import UserExistException
|
from apps.authentication.exceptions import UserExistException, OrganizationNationalUniqueIDException
|
||||||
from apps.authentication.models import (
|
from apps.authentication.models import (
|
||||||
User,
|
User,
|
||||||
City,
|
City,
|
||||||
@@ -224,6 +224,17 @@ class OrganizationSerializer(serializers.ModelSerializer):
|
|||||||
]
|
]
|
||||||
extra_kwargs = {}
|
extra_kwargs = {}
|
||||||
|
|
||||||
|
def validate(self, attrs):
|
||||||
|
national_unique_id = self.context['request'].data['organization']['national_unique_id']
|
||||||
|
|
||||||
|
if not self.instance:
|
||||||
|
if self.Meta.model.objects.filter(national_unique_id=national_unique_id).exists():
|
||||||
|
raise OrganizationNationalUniqueIDException()
|
||||||
|
if self.instance:
|
||||||
|
if self.instance.national_unique_id != national_unique_id:
|
||||||
|
if self.Meta.model.objects.filter(national_unique_id=national_unique_id).exists():
|
||||||
|
raise OrganizationNationalUniqueIDException()
|
||||||
|
|
||||||
def to_representation(self, instance):
|
def to_representation(self, instance):
|
||||||
""" Custom output """
|
""" Custom output """
|
||||||
representation = super().to_representation(instance)
|
representation = super().to_representation(instance)
|
||||||
|
|||||||
@@ -19,6 +19,14 @@ class OrganizationBankAccountException(APIException):
|
|||||||
default_code = "برای این سازمان حساب بانکی تعریف نشده است" # noqa
|
default_code = "برای این سازمان حساب بانکی تعریف نشده است" # noqa
|
||||||
|
|
||||||
|
|
||||||
|
class OrganizationNationalUniqueIDException(APIException):
|
||||||
|
""" if organization unique id exist """
|
||||||
|
|
||||||
|
status_code = status.HTTP_403_FORBIDDEN
|
||||||
|
default_detail = _('این شناسه ملی قبلا ثبت شده است') # noqa
|
||||||
|
default_code = 'organization_unique_id_exist'
|
||||||
|
|
||||||
|
|
||||||
class UserExistException(APIException):
|
class UserExistException(APIException):
|
||||||
""" if user exist """
|
""" if user exist """
|
||||||
|
|
||||||
@@ -26,6 +34,7 @@ class UserExistException(APIException):
|
|||||||
default_detail = _('کاربری با این شماره موبایل یا با این نام کاربری از قبل وجود دارد') # noqa
|
default_detail = _('کاربری با این شماره موبایل یا با این نام کاربری از قبل وجود دارد') # noqa
|
||||||
default_code = 'user_does_not_exist'
|
default_code = 'user_does_not_exist'
|
||||||
|
|
||||||
|
|
||||||
class AdminDeleteException(APIException):
|
class AdminDeleteException(APIException):
|
||||||
""" admin user can not be deleted """
|
""" admin user can not be deleted """
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ class BaseViewSet(RegionFilterMixin, viewsets.ModelViewSet):
|
|||||||
It applies region-based filtering automatically to GET (list) requests.
|
It applies region-based filtering automatically to GET (list) requests.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def get_queryset(self):
|
def get_queryset(self, show_my_org: bool = None):
|
||||||
queryset = super().get_queryset()
|
queryset = super().get_queryset()
|
||||||
request = self.request
|
request = self.request
|
||||||
user = request.user
|
user = request.user
|
||||||
@@ -29,6 +29,10 @@ class BaseViewSet(RegionFilterMixin, viewsets.ModelViewSet):
|
|||||||
# get all child orgs
|
# get all child orgs
|
||||||
child_orgs = get_all_org_child(org)
|
child_orgs = get_all_org_child(org)
|
||||||
|
|
||||||
|
# if show_my_org is True, add current org to queryset
|
||||||
|
if show_my_org:
|
||||||
|
child_orgs.append(org)
|
||||||
|
|
||||||
model_name = queryset.model.__name__.lower()
|
model_name = queryset.model.__name__.lower()
|
||||||
|
|
||||||
if model_name == 'userrelations': # noqa
|
if model_name == 'userrelations': # noqa
|
||||||
|
|||||||
@@ -312,3 +312,13 @@ django.core.exceptions.FieldError: Unsupported lookup 'name' for ForeignKey or j
|
|||||||
[2025-10-28 13:50:37,425] INFO django.utils.autoreload | IP: - | Path: - | Watching for file changes with StatReloader
|
[2025-10-28 13:50:37,425] INFO django.utils.autoreload | IP: - | Path: - | Watching for file changes with StatReloader
|
||||||
[2025-10-28 13:53:02,285] INFO django.utils.autoreload | IP: - | Path: - | D:\Project\Rasaddam_Backend\apps\authentication\api\v1\api.py changed, reloading.
|
[2025-10-28 13:53:02,285] INFO django.utils.autoreload | IP: - | Path: - | D:\Project\Rasaddam_Backend\apps\authentication\api\v1\api.py changed, reloading.
|
||||||
[2025-10-28 13:53:05,015] INFO django.utils.autoreload | IP: - | Path: - | Watching for file changes with StatReloader
|
[2025-10-28 13:53:05,015] INFO django.utils.autoreload | IP: - | Path: - | Watching for file changes with StatReloader
|
||||||
|
[2025-10-28 13:54:21,998] INFO django.utils.autoreload | IP: - | Path: - | D:\Project\Rasaddam_Backend\apps\authentication\api\v1\serializers\serializer.py changed, reloading.
|
||||||
|
[2025-10-28 13:54:25,611] INFO django.utils.autoreload | IP: - | Path: - | Watching for file changes with StatReloader
|
||||||
|
[2025-10-28 13:54:54,355] INFO django.utils.autoreload | IP: - | Path: - | D:\Project\Rasaddam_Backend\apps\authentication\api\v1\serializers\serializer.py changed, reloading.
|
||||||
|
[2025-10-28 13:54:58,709] INFO django.utils.autoreload | IP: - | Path: - | Watching for file changes with StatReloader
|
||||||
|
[2025-10-28 14:28:42,019] INFO django.utils.autoreload | IP: - | Path: - | D:\Project\Rasaddam_Backend\apps\authentication\exceptions.py changed, reloading.
|
||||||
|
[2025-10-28 14:28:44,198] INFO django.utils.autoreload | IP: - | Path: - | Watching for file changes with StatReloader
|
||||||
|
[2025-10-28 14:28:53,263] INFO django.utils.autoreload | IP: - | Path: - | D:\Project\Rasaddam_Backend\apps\authentication\api\v1\serializers\serializer.py changed, reloading.
|
||||||
|
[2025-10-28 14:28:55,553] INFO django.utils.autoreload | IP: - | Path: - | Watching for file changes with StatReloader
|
||||||
|
[2025-10-28 14:35:00,268] INFO django.utils.autoreload | IP: - | Path: - | D:\Project\Rasaddam_Backend\apps\core\api.py changed, reloading.
|
||||||
|
[2025-10-28 14:35:02,391] INFO django.utils.autoreload | IP: - | Path: - | Watching for file changes with StatReloader
|
||||||
|
|||||||
Reference in New Issue
Block a user