stakeholders create & list of psp organizations

This commit is contained in:
2025-08-11 11:35:43 +03:30
parent f9be8cf58d
commit 588e97ae2d
9 changed files with 237 additions and 9 deletions

View File

@@ -2,7 +2,13 @@ from datetime import timedelta
from apps.pos_device.web.api.v1.serilaizers import device as device_serializer
from apps.authorization.api.v1.serializers import UserRelationSerializer
from apps.authentication.api.v1.api import UserViewSet
from apps.pos_device.web.api.v1.viewsets.client import POSClientViewSet
from apps.authentication.api.v1.api import (
UserViewSet,
Organization,
OrganizationSerializer
)
from apps.core.mixins.search_mixin import DynamicSearchMixin
from apps.authorization.models import UserRelations
from common.helpers import get_organization_by_user
from rest_framework.exceptions import APIException
@@ -105,6 +111,25 @@ class DeviceViewSet(viewsets.ModelViewSet):
elif device.is_activated:
raise APIException('device is activated', code=403)
@action(
methods=['get'],
detail=False,
url_name='psp_organizations',
url_path='psp_organizations',
name='psp_organizations'
)
@transaction.atomic
def psp_organizations(self, request):
""" list of psp organizations """
organizations = Organization.objects.filter(type__key='PSP')
# paginate devices
page = self.paginate_queryset(organizations)
if page is not None:
serializer = OrganizationSerializer(page, many=True)
return self.get_paginated_response(serializer.data)
class DeviceVersionViewSet(viewsets.ModelViewSet):
queryset = pos_models.DeviceVersion.objects.all()
@@ -135,6 +160,14 @@ class DeviceAssignmentViewSet(viewsets.ModelViewSet):
organization = get_organization_by_user(request.user)
request.data.update({'organization': organization.id})
if 'client_data' in request.data.keys():
client = CustomOperations().custom_create(
request=request,
view=POSClientViewSet(),
data=request.data['client_data']
)
request.data.update({'client': client['id']})
# create assignment
serializer = self.serializer_class(data=request.data)
if serializer.is_valid():
@@ -158,12 +191,10 @@ class DeviceAssignmentViewSet(viewsets.ModelViewSet):
""" list of company device assignment to clients """
try:
company = pos_models.ProviderCompany.objects.get(
user_relation__user=request.user
)
organization = get_organization_by_user(request.user)
# get device assignment
assignments = self.queryset.filter(company=company)
assignments = self.queryset.filter(organization=organization)
serializer = self.serializer_class(assignments, many=True)
return Response(serializer.data, status=status.HTTP_200_OK)
@@ -171,6 +202,39 @@ class DeviceAssignmentViewSet(viewsets.ModelViewSet):
raise APIException('Non Object Error', code=403)
class StakeHoldersViewSet(viewsets.ModelViewSet):
class StakeHoldersViewSet(viewsets.ModelViewSet, DynamicSearchMixin):
queryset = pos_models.StakeHolders.objects.all()
serializer_class = device_serializer.StakeHoldersSerializer
@transaction.atomic
def create(self, request, *args, **kwargs):
""" create shares amount of stakeholders """
stakeholders_data = []
for stakeholder in request.data['stakeholders']:
serializer = self.serializer_class(data=stakeholder)
if serializer.is_valid():
serializer.save()
stakeholders_data.append(serializer.data)
return Response(stakeholders_data, status=status.HTTP_201_CREATED)
@action(
methods=['get'],
detail=True,
url_name='list_by_device',
url_path='list_by_device',
name='list_by_device',
)
@transaction.atomic
def list_by_device(self, request, pk=None):
""" list of stakeholders by device """
device = pos_models.Device.objects.get(id=pk)
stakeholders = device.stake_holders.all()
query = self.filter_query(stakeholders)
# paginate stakeholders
page = self.paginate_queryset(query)
if page is not None:
serializer = self.get_serializer(page, many=True)
return self.get_paginated_response(serializer.data)