add: add users field for warehouse model
This commit is contained in:
@@ -7,3 +7,4 @@ from core.apps.wherehouse.models.wherehouse import WhereHouse
|
|||||||
class WhereHouseAdmin(admin.ModelAdmin):
|
class WhereHouseAdmin(admin.ModelAdmin):
|
||||||
list_display = ['id','name', 'address',]
|
list_display = ['id','name', 'address',]
|
||||||
search_fields = ['name', 'address']
|
search_fields = ['name', 'address']
|
||||||
|
filter_horizontal = ['users']
|
||||||
20
core/apps/wherehouse/migrations/0017_wherehouse_users.py
Normal file
20
core/apps/wherehouse/migrations/0017_wherehouse_users.py
Normal file
@@ -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),
|
||||||
|
),
|
||||||
|
]
|
||||||
@@ -2,12 +2,12 @@ from django.db import models
|
|||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
from core.apps.shared.models import BaseModel
|
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):
|
class WhereHouse(BaseModel):
|
||||||
name = models.CharField(max_length=200)
|
name = models.CharField(max_length=200)
|
||||||
address = models.CharField(max_length=200)
|
address = models.CharField(max_length=200)
|
||||||
|
users = models.ManyToManyField(User, related_name='warehouses', blank=True)
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.name
|
return self.name
|
||||||
|
|||||||
@@ -3,16 +3,17 @@ from django.db import transaction
|
|||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
|
|
||||||
from core.apps.wherehouse.models.wherehouse import WhereHouse
|
from core.apps.wherehouse.models.wherehouse import WhereHouse
|
||||||
from core.apps.wherehouse.serializers.inventory import InventoryListSerializer
|
from core.apps.accounts.models import User
|
||||||
from core.apps.company.serializers.branch import BranchListSerializer
|
from core.apps.accounts.serializers.user import UserListSerializer
|
||||||
from core.apps.company.models import Branch
|
|
||||||
|
|
||||||
|
|
||||||
class WhereHouseListSerializer(serializers.ModelSerializer):
|
class WhereHouseListSerializer(serializers.ModelSerializer):
|
||||||
|
users = UserListSerializer(many=True)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = WhereHouse
|
model = WhereHouse
|
||||||
fields = [
|
fields = [
|
||||||
'id', 'name', 'address',
|
'id', 'name', 'address', 'users'
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
@@ -27,24 +28,34 @@ class WhereHouseDetailSerializer(serializers.ModelSerializer):
|
|||||||
class WhereHouseCreateSerializer(serializers.Serializer):
|
class WhereHouseCreateSerializer(serializers.Serializer):
|
||||||
name = serializers.CharField()
|
name = serializers.CharField()
|
||||||
address = serializers.CharField()
|
address = serializers.CharField()
|
||||||
|
user_ids = serializers.ListField(child=serializers.UUIDField(required=False), required=False)
|
||||||
|
|
||||||
def create(self, validated_data):
|
def create(self, validated_data):
|
||||||
with transaction.atomic():
|
with transaction.atomic():
|
||||||
return WhereHouse.objects.create(
|
user_ids = validated_data.pop('user_ids', [])
|
||||||
|
wherehouse = WhereHouse.objects.create(
|
||||||
name=validated_data.get('name'),
|
name=validated_data.get('name'),
|
||||||
address=validated_data.get('address'),
|
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 WhereHouseUpdateSerializer(serializers.ModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = WhereHouse
|
model = WhereHouse
|
||||||
fields = [
|
fields = [
|
||||||
'name', 'address',
|
'name', 'address', 'users'
|
||||||
]
|
]
|
||||||
|
|
||||||
def update(self, instance, validated_data):
|
def update(self, instance, validated_data):
|
||||||
instance.name = validated_data.get('name', instance.name)
|
instance.name = validated_data.get('name', instance.name)
|
||||||
instance.address = validated_data.get('address', instance.address)
|
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()
|
instance.save()
|
||||||
return instance
|
return instance
|
||||||
|
|||||||
@@ -8,11 +8,20 @@ from core.apps.wherehouse.serializers import wherehouse as serializers
|
|||||||
from core.apps.accounts.permissions.permissions import HasRolePermission
|
from core.apps.accounts.permissions.permissions import HasRolePermission
|
||||||
|
|
||||||
|
|
||||||
class WhereHouseListApiView(generics.ListAPIView):
|
class WhereHouseListApiView(generics.GenericAPIView):
|
||||||
serializer_class = serializers.WhereHouseListSerializer
|
serializer_class = serializers.WhereHouseListSerializer
|
||||||
queryset = WhereHouse.objects.all()
|
queryset = WhereHouse.objects.prefetch_related('users')
|
||||||
permission_classes = [HasRolePermission]
|
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):
|
class WhereHouseDetailApiView(generics.RetrieveAPIView):
|
||||||
serializer_class = serializers.WhereHouseDetailSerializer
|
serializer_class = serializers.WhereHouseDetailSerializer
|
||||||
|
|||||||
Reference in New Issue
Block a user