diff --git a/core/apps/wherehouse/admin/wherehouse.py b/core/apps/wherehouse/admin/wherehouse.py index ac12b6c..3dc263d 100644 --- a/core/apps/wherehouse/admin/wherehouse.py +++ b/core/apps/wherehouse/admin/wherehouse.py @@ -6,4 +6,5 @@ from core.apps.wherehouse.models.wherehouse import WhereHouse @admin.register(WhereHouse) class WhereHouseAdmin(admin.ModelAdmin): list_display = ['id','name', 'address',] - search_fields = ['name', 'address'] \ No newline at end of file + search_fields = ['name', 'address'] + filter_horizontal = ['users'] \ No newline at end of file diff --git a/core/apps/wherehouse/migrations/0017_wherehouse_users.py b/core/apps/wherehouse/migrations/0017_wherehouse_users.py new file mode 100644 index 0000000..cf49a54 --- /dev/null +++ b/core/apps/wherehouse/migrations/0017_wherehouse_users.py @@ -0,0 +1,20 @@ +# Generated by Django 5.2.4 on 2025-09-25 17:30 + +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('wherehouse', '0016_remove_wherehouse_branch'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.AddField( + model_name='wherehouse', + name='users', + field=models.ManyToManyField(blank=True, related_name='warehouses', to=settings.AUTH_USER_MODEL), + ), + ] diff --git a/core/apps/wherehouse/models/wherehouse.py b/core/apps/wherehouse/models/wherehouse.py index f14a034..174b25f 100644 --- a/core/apps/wherehouse/models/wherehouse.py +++ b/core/apps/wherehouse/models/wherehouse.py @@ -2,12 +2,12 @@ from django.db import models from django.utils.translation import gettext_lazy as _ from core.apps.shared.models import BaseModel -from core.apps.company.models.branch import Branch - +from core.apps.accounts.models import User class WhereHouse(BaseModel): name = models.CharField(max_length=200) address = models.CharField(max_length=200) + users = models.ManyToManyField(User, related_name='warehouses', blank=True) def __str__(self): return self.name diff --git a/core/apps/wherehouse/serializers/wherehouse.py b/core/apps/wherehouse/serializers/wherehouse.py index b68b526..caafe1d 100644 --- a/core/apps/wherehouse/serializers/wherehouse.py +++ b/core/apps/wherehouse/serializers/wherehouse.py @@ -3,16 +3,17 @@ from django.db import transaction from rest_framework import serializers from core.apps.wherehouse.models.wherehouse import WhereHouse -from core.apps.wherehouse.serializers.inventory import InventoryListSerializer -from core.apps.company.serializers.branch import BranchListSerializer -from core.apps.company.models import Branch +from core.apps.accounts.models import User +from core.apps.accounts.serializers.user import UserListSerializer class WhereHouseListSerializer(serializers.ModelSerializer): + users = UserListSerializer(many=True) + class Meta: model = WhereHouse fields = [ - 'id', 'name', 'address', + 'id', 'name', 'address', 'users' ] @@ -27,24 +28,34 @@ class WhereHouseDetailSerializer(serializers.ModelSerializer): class WhereHouseCreateSerializer(serializers.Serializer): name = serializers.CharField() address = serializers.CharField() + user_ids = serializers.ListField(child=serializers.UUIDField(required=False), required=False) def create(self, validated_data): with transaction.atomic(): - return WhereHouse.objects.create( + user_ids = validated_data.pop('user_ids', []) + wherehouse = WhereHouse.objects.create( name=validated_data.get('name'), address=validated_data.get('address'), ) + if user_ids: + users = User.objects.filter(id__in=user_ids) + wherehouse.users.set(users) + return wherehouse class WhereHouseUpdateSerializer(serializers.ModelSerializer): class Meta: model = WhereHouse fields = [ - 'name', 'address', + 'name', 'address', 'users' ] def update(self, instance, validated_data): instance.name = validated_data.get('name', instance.name) instance.address = validated_data.get('address', instance.address) + + users = validated_data.pop('users', None) + if users is not None: + instance.users.set(users) instance.save() return instance diff --git a/core/apps/wherehouse/views/wherehouse.py b/core/apps/wherehouse/views/wherehouse.py index 1690c52..59fc174 100644 --- a/core/apps/wherehouse/views/wherehouse.py +++ b/core/apps/wherehouse/views/wherehouse.py @@ -8,11 +8,20 @@ from core.apps.wherehouse.serializers import wherehouse as serializers from core.apps.accounts.permissions.permissions import HasRolePermission -class WhereHouseListApiView(generics.ListAPIView): +class WhereHouseListApiView(generics.GenericAPIView): serializer_class = serializers.WhereHouseListSerializer - queryset = WhereHouse.objects.all() + queryset = WhereHouse.objects.prefetch_related('users') permission_classes = [HasRolePermission] + def get(self, request): + mine = request.query_params.get('mine') + if mine and mine == 'true': + self.queryset = self.queryset.filter(users=request.user) + page = self.paginate_queryset(self.queryset) + if page is not None: + serializer = self.serializer_class(page, many=True) + return self.get_paginated_response(serializer.data) + class WhereHouseDetailApiView(generics.RetrieveAPIView): serializer_class = serializers.WhereHouseDetailSerializer