fix bugs
This commit is contained in:
@@ -4,26 +4,22 @@ from rest_framework import serializers
|
||||
|
||||
from core.apps.projects.models.project import Project, ProjectFolder, ProjectLocation
|
||||
from core.apps.projects.serializers.project_location import ProjectLocationSerializer, ProjectLocationListSerializer
|
||||
from core.apps.accounts.serializers.user import UserListSerializer
|
||||
from core.apps.wherehouse.serializers.wherehouse import WhereHouseListSerializer
|
||||
from core.apps.finance.serializers.cash_transaction import CashTransactionListSerializer
|
||||
|
||||
|
||||
class ProjectListSerializer(serializers.ModelSerializer):
|
||||
location = ProjectLocationListSerializer()
|
||||
folder_name = serializers.SerializerMethodField(method_name='get_folder_name')
|
||||
|
||||
class Meta:
|
||||
model = Project
|
||||
fields = [
|
||||
'id', 'name', 'location', 'start_date', 'end_date'
|
||||
'id', 'name', 'start_date', 'end_date', 'status', 'folder_name'
|
||||
]
|
||||
|
||||
|
||||
class ProjectDetailSerialzier(serializers.ModelSerializer):
|
||||
location = ProjectLocationListSerializer()
|
||||
|
||||
class Meta:
|
||||
model = Project
|
||||
fields = [
|
||||
'id', 'name', 'location', 'start_date', 'end_date', 'status', 'benifit_plan'
|
||||
]
|
||||
def get_folder_name(self, obj):
|
||||
return obj.folder.name if obj.folder else None
|
||||
|
||||
|
||||
class ProjectUpdateSerialzier(serializers.ModelSerializer):
|
||||
@@ -142,11 +138,14 @@ class ProjectFolderCreateSerializer(serializers.Serializer):
|
||||
|
||||
|
||||
class ProjectFolderListSerializer(serializers.ModelSerializer):
|
||||
projects = ProjectListSerializer(many=True)
|
||||
projects_count = serializers.SerializerMethodField(method_name='get_projects_count')
|
||||
|
||||
class Meta:
|
||||
model = ProjectFolder
|
||||
fields = ['id', 'name', 'projects']
|
||||
fields = ['id', 'name', 'projects_count']
|
||||
|
||||
def get_projects_count(self, obj):
|
||||
return obj.projects.count()
|
||||
|
||||
|
||||
class ProjectFolderProjectCreateSerializer(serializers.Serializer):
|
||||
@@ -257,4 +256,31 @@ class ChangeProjectFolderSerializer(serializers.Serializer):
|
||||
raise serializers.ValidationError("the project folder is attached for this project")
|
||||
data['project'] = project
|
||||
data['project_folder'] = project_folder
|
||||
return data
|
||||
return data
|
||||
|
||||
|
||||
|
||||
|
||||
class ProjectDetailSerialzier(serializers.ModelSerializer):
|
||||
location = ProjectLocationListSerializer()
|
||||
folder = ProjectFolderListSerializer()
|
||||
builder = serializers.SerializerMethodField(method_name='get_builder')
|
||||
boss = UserListSerializer(many=True)
|
||||
foreman = UserListSerializer(many=True)
|
||||
other_members = UserListSerializer(many=True)
|
||||
wherehouse = WhereHouseListSerializer(many=True)
|
||||
cash_transaction = CashTransactionListSerializer(many=True)
|
||||
|
||||
class Meta:
|
||||
model = Project
|
||||
fields = [
|
||||
'id', 'name', 'location', 'start_date', 'end_date', 'status', 'benifit_plan',
|
||||
'area', 'currency',
|
||||
'folder', 'builder', 'boss', 'foreman', 'other_members', 'wherehouse', 'cash_transaction', 'is_archive'
|
||||
]
|
||||
|
||||
def get_builder(self, obj):
|
||||
return {
|
||||
'id': obj.builder.id,
|
||||
'name': obj.builder.name
|
||||
}
|
||||
@@ -12,18 +12,24 @@ from core.apps.shared.paginations.custom import CustomPageNumberPagination
|
||||
|
||||
class ProjectListApiView(generics.ListAPIView):
|
||||
serializer_class = serializers.ProjectListSerializer
|
||||
queryset = Project.objects.filter(is_archive=False).select_related('location')
|
||||
queryset = Project.objects.all()
|
||||
permission_classes = [HasRolePermission]
|
||||
required_permissions = ['project']
|
||||
pagination_class = CustomPageNumberPagination
|
||||
|
||||
def get_queryset(self):
|
||||
return Project.objects.exclude(folder__isnull=False)
|
||||
|
||||
return (
|
||||
Project.objects
|
||||
.select_related('location')
|
||||
.exclude(is_archive=True)
|
||||
.exclude(folder__isnull=False)
|
||||
)
|
||||
|
||||
class ProjectDetailApiView(generics.RetrieveAPIView):
|
||||
serializer_class = serializers.ProjectDetailSerialzier
|
||||
queryset = Project.objects.select_related('location')
|
||||
queryset = Project.objects.select_related('location', 'folder', 'builder').prefetch_related(
|
||||
'boss', 'foreman', 'other_members', 'wherehouse', 'cash_transaction',
|
||||
)
|
||||
permission_classes = [HasRolePermission]
|
||||
required_permissions = ['project']
|
||||
lookup_field = 'id'
|
||||
@@ -73,9 +79,7 @@ class ProjectFolderCreateApiView(generics.CreateAPIView):
|
||||
|
||||
class ProjectFolderListApiView(generics.ListAPIView):
|
||||
serializer_class = serializers.ProjectFolderListSerializer
|
||||
queryset = ProjectFolder.objects.prefetch_related(
|
||||
Prefetch('projects', Project.objects.filter(is_archive=False))
|
||||
)
|
||||
queryset = ProjectFolder.objects.prefetch_related('projects')
|
||||
permission_classes = [HasRolePermission]
|
||||
required_permissions = ['project_folder']
|
||||
pagination_class = CustomPageNumberPagination
|
||||
@@ -110,7 +114,13 @@ class ProjectFolderDetailApiView(generics.GenericAPIView):
|
||||
required_permissions = ['project_folder']
|
||||
|
||||
def get(self, request, id):
|
||||
folder = get_object_or_404(ProjectFolder, id=id)
|
||||
folder = (
|
||||
ProjectFolder.objects
|
||||
.prefetch_related(
|
||||
Prefetch('projects', queryset=Project.objects.exclude(is_archive=True))
|
||||
)
|
||||
.get(id=id)
|
||||
)
|
||||
serializer = self.serializer_class(folder)
|
||||
return Response(serializer.data, status=200)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user