From 7722ddfc849b127898859cc5ece59f1a49281b8d Mon Sep 17 00:00:00 2001 From: Mojtaba-z Date: Mon, 25 Aug 2025 13:09:17 +0330 Subject: [PATCH] make default stake holder when creating assignment --- apps/pos_device/models.py | 1 + apps/pos_device/web/api/v1/viewsets/device.py | 30 ++++++++++++++----- apps/warehouse/pos/api/v1/api.py | 8 ++--- 3 files changed, 26 insertions(+), 13 deletions(-) diff --git a/apps/pos_device/models.py b/apps/pos_device/models.py index 667cff9..91c4572 100644 --- a/apps/pos_device/models.py +++ b/apps/pos_device/models.py @@ -258,6 +258,7 @@ class StakeHolders(BaseModel): null=True ) share_percent = models.FloatField(default=0) + default = models.BooleanField(default=False) def __str__(self): return f'Device: {self.assignment.device.serial}-organization: {self.organization.name}' diff --git a/apps/pos_device/web/api/v1/viewsets/device.py b/apps/pos_device/web/api/v1/viewsets/device.py index 736a686..42eefea 100644 --- a/apps/pos_device/web/api/v1/viewsets/device.py +++ b/apps/pos_device/web/api/v1/viewsets/device.py @@ -182,13 +182,14 @@ class DeviceAssignmentViewSet(viewsets.ModelViewSet): if client.exists(): request.data.update({'client': client.first().id}) - else: - client = CustomOperations().custom_create( - request=request, - view=POSClientViewSet(), - data=request.data['client_data'] - ) - request.data.update({'client': client['id']}) + + # create client + 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) @@ -204,6 +205,15 @@ class DeviceAssignmentViewSet(viewsets.ModelViewSet): assignment.client.organization.has_pos = True assignment.client.organization.save() + # after pos device assignment, must set owner + # as default stake holder + pos_models.StakeHolders.objects.create( + assignment=assignment, + device=assignment.device, + organization=assignment.client.organization, + default=True + ) + return Response(serializer.data, status=status.HTTP_201_CREATED) return Response(serializer.errors, status=status.HTTP_403_FORBIDDEN) @@ -225,6 +235,12 @@ class DeviceAssignmentViewSet(viewsets.ModelViewSet): if serializer.is_valid(): assignment = serializer.save() + if assignment.client.organization: + # update default stake holder for device (assignment) + stake_holder = assignment.stake_holders.filter(default=True).first() + stake_holder.organization = assignment.client.organization + stake_holder.save() + return Response(serializer.data, status=status.HTTP_200_OK) return Response(serializer.errors, status=status.HTTP_403_FORBIDDEN) diff --git a/apps/warehouse/pos/api/v1/api.py b/apps/warehouse/pos/api/v1/api.py index b969601..682d94f 100644 --- a/apps/warehouse/pos/api/v1/api.py +++ b/apps/warehouse/pos/api/v1/api.py @@ -3,15 +3,11 @@ from apps.warehouse.services.services import can_buy_from_inventory from apps.pos_device.mixins.pos_device_mixin import POSDeviceMixin from apps.core.mixins.search_mixin import DynamicSearchMixin from apps.warehouse import models as warehouse_models -from common.helpers import get_organization_by_user from rest_framework.permissions import AllowAny from rest_framework.decorators import action -from rest_framework.response import Response -from rest_framework import viewsets, filters +from rest_framework import viewsets from apps.herd.models import Rancher from django.db import transaction -from rest_framework import status -import typing class InventoryEntryViewSet(viewsets.ModelViewSet, DynamicSearchMixin, POSDeviceMixin): @@ -113,4 +109,4 @@ class InventoryQuotaSaleTransactionViewSet(viewsets.ModelViewSet, DynamicSearchM page = self.paginate_queryset(queryset) if page is not None: serializer = self.get_serializer(page, many=True) - return self.get_paginated_response(serializer.data) \ No newline at end of file + return self.get_paginated_response(serializer.data)