add product count

This commit is contained in:
behruz-dev
2025-08-19 11:32:39 +05:00
parent 9f4f6e1b0c
commit 6bf08d853e
4 changed files with 96 additions and 9 deletions

View File

@@ -4,10 +4,15 @@ from core.apps.products.models.folder import Folder, SubFolder
class FolderSerializer(serializers.ModelSerializer): class FolderSerializer(serializers.ModelSerializer):
product_count = serializers.SerializerMethodField(method_name='get_product_count')
class Meta: class Meta:
model = Folder model = Folder
fields = ['id', 'name'] fields = ['id', 'name', 'product_count']
extra_kwargs = {'id': {'read_only': True}} extra_kwargs = {
'id': {'read_only': True},
'product_count': {'read_only': True}
}
def create(self, validated_data): def create(self, validated_data):
return Folder.objects.create(**validated_data) return Folder.objects.create(**validated_data)
@@ -17,12 +22,21 @@ class FolderSerializer(serializers.ModelSerializer):
instance.save() instance.save()
return instance return instance
def get_product_count(self, obj):
return obj.products.count()
class SubFolderSerializer(serializers.ModelSerializer): class SubFolderSerializer(serializers.ModelSerializer):
product_count = serializers.SerializerMethodField(method_name='get_product_count')
class Meta: class Meta:
model = SubFolder model = SubFolder
fields = ['id', 'name', 'folder'] fields = ['id', 'name', 'folder']
extra_kwargs = {'id': {'read_only': True}, "folder": {"write_only": True}} extra_kwargs = {
'id': {'read_only': True},
"folder": {"write_only": True},
'product_count': {'read_only': True},
}
def create(self, validated_data): def create(self, validated_data):
return SubFolder.objects.create(**validated_data) return SubFolder.objects.create(**validated_data)
@@ -31,4 +45,7 @@ class SubFolderSerializer(serializers.ModelSerializer):
instance.name = validated_data.get('name', instance.name) instance.name = validated_data.get('name', instance.name)
instance.folder = validated_data.get('folder', instance.folder) instance.folder = validated_data.get('folder', instance.folder)
instance.save() instance.save()
return instance return instance
def get_product_count(self, obj):
return obj.products.count()

View File

@@ -1,8 +1,11 @@
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 WhereHouseInventoryListSerializer from core.apps.wherehouse.serializers.inventory import WhereHouseInventoryListSerializer
from core.apps.company.serializers.branch import BranchListSerializer from core.apps.company.serializers.branch import BranchListSerializer
from core.apps.company.models import Branch
class WhereHouseListSerializer(serializers.ModelSerializer): class WhereHouseListSerializer(serializers.ModelSerializer):
@@ -17,11 +20,45 @@ class WhereHouseListSerializer(serializers.ModelSerializer):
class WhereHouseDetailSerializer(serializers.ModelSerializer): class WhereHouseDetailSerializer(serializers.ModelSerializer):
branch = BranchListSerializer() branch = BranchListSerializer()
inventories = WhereHouseInventoryListSerializer(many=True)
class Meta: class Meta:
model = WhereHouse model = WhereHouse
fields = [ fields = [
'id', 'name', 'address', 'branch', 'inventories' 'id', 'name', 'address', 'branch',
] ]
class WhereHouseCreateSerializer(serializers.Serializer):
name = serializers.CharField()
address = serializers.CharField()
branch_id = serializers.UUIDField()
def validate(self, data):
branch = Branch.objects.filter(id=data.get('branch_id')).first()
if not branch:
raise serializers.ValidationError("Branch not found")
data['branch'] = branch
return data
def create(self, validated_data):
with transaction.atomic():
return WhereHouse.objects.create(
name=validated_data.get('name'),
address=validated_data.get('address'),
branch=validated_data.get('branch'),
)
class WhereHouseUpdateSerializer(serializers.ModelSerializer):
class Meta:
model = WhereHouse
fields = [
'name', 'address', 'branch'
]
def update(self, instance, validated_data):
instance.name = validated_data.get('name', instance.name)
instance.address = validated_data.get('address', instance.address)
instance.branch = validated_data.get('branch', instance.branch)
instance.save()
return instance

View File

@@ -8,6 +8,9 @@ urlpatterns = [
[ [
path('list/', wherehouse_views.WhereHouseListApiView.as_view()), path('list/', wherehouse_views.WhereHouseListApiView.as_view()),
path('<uuid:id>/', wherehouse_views.WhereHouseDetailApiView.as_view()), path('<uuid:id>/', wherehouse_views.WhereHouseDetailApiView.as_view()),
path('create/', wherehouse_views.WhereHouseCreateApiView.as_view()),
path('<uuid:id>/delete/', wherehouse_views.WhereHouseDeleteApiView.as_view()),
path('<uuid:id>/update/', wherehouse_views.WhereHouseUpdateApiView.as_view()),
] ]
)) )),
] ]

View File

@@ -1,4 +1,6 @@
from rest_framework import generics, status from django.shortcuts import get_object_or_404
from rest_framework import generics, views
from rest_framework.response import Response from rest_framework.response import Response
from core.apps.wherehouse.models import WhereHouse, Inventory from core.apps.wherehouse.models import WhereHouse, Inventory
@@ -15,7 +17,35 @@ class WhereHouseListApiView(generics.ListAPIView):
class WhereHouseDetailApiView(generics.RetrieveAPIView): class WhereHouseDetailApiView(generics.RetrieveAPIView):
serializer_class = serializers.WhereHouseDetailSerializer serializer_class = serializers.WhereHouseDetailSerializer
queryset = WhereHouse.objects.select_related('branch').prefetch_related('inventories') queryset = WhereHouse.objects.select_related('branch')
permission_classes = [HasRolePermission] permission_classes = [HasRolePermission]
required_permissions = [] required_permissions = []
lookup_field = 'id' lookup_field = 'id'
class WhereHouseCreateApiView(generics.CreateAPIView):
serializer_class = serializers.WhereHouseCreateSerializer
queryset = WhereHouse.objects.all()
permission_classes = [HasRolePermission]
required_permissions = []
class WhereHouseDeleteApiView(views.APIView):
permission_classes = [HasRolePermission]
required_permissions = []
def delete(self, request, id):
wherehouse = get_object_or_404(WhereHouse, id=id)
wherehouse.delete()
return Response(
{'success': True, 'message': 'Deleted!'},
status=204
)
class WhereHouseUpdateApiView(generics.UpdateAPIView):
serializer_class = serializers.WhereHouseUpdateSerializer
queryset = WhereHouse.objects.all()
lookup_field = 'id'
permission_classes = [HasRolePermission]
required_permissions = []