Files
centurion_erp/app/api/views/project_management/projects.py

106 lines
3.1 KiB
Python

from django.db.models import Q
from django.shortcuts import get_object_or_404
from drf_spectacular.utils import extend_schema, OpenApiResponse, OpenApiRequest, PolymorphicProxySerializer
from rest_framework import generics, viewsets
from rest_framework.response import Response
from access.mixin import OrganizationMixin
from api.serializers.project_management.projects import ProjectSerializer, ProjectImportSerializer
from api.views.mixin import OrganizationPermissionAPI
from project_management.models.projects import Project
from settings.models.user_settings import UserSettings
class View(OrganizationMixin, viewsets.ModelViewSet):
filterset_fields = [
'external_system',
'external_ref',
]
search_fields = [
'name',
'description',
]
permission_classes = [
OrganizationPermissionAPI
]
queryset = Project.objects.all()
# serializer_class = ProjectSerializer
def get_serializer_class(self):
if self.has_organization_permission(
organization = UserSettings.objects.get(user = self.request.user).default_organization,
permissions_required = ['project_management.import_project']
) or self.request.user.is_superuser:
return ProjectImportSerializer
return ProjectSerializer
@extend_schema(
summary = 'Create a project',
description = """**Note:** Users whom lack permssion `import_project`,
will be unable to add, edit and view fields: `created`, `external_ref`, `external_system`,
and `is_deleted`.
""",
methods=["POST"],
request = ProjectImportSerializer,
responses = {
201: OpenApiResponse(description='project created', response=ProjectImportSerializer),
403: OpenApiResponse(description='User is missing create permissions'),
}
)
def create(self, request, *args, **kwargs):
return super().create(request, *args, **kwargs)
@extend_schema(
summary='Fetch projects',
description = """**Note:** Users whom lack permssion `import_project`,
will be unable to add, edit and view fields: `created`, `external_ref`, `external_system`,
and `is_deleted`.
""",
methods=["GET"],
responses = {
200: OpenApiResponse(description='projects', response=ProjectImportSerializer)
}
)
def list(self, request):
return super().list(request)
@extend_schema(
summary='Fetch the selected project',
description = """**Note:** Users whom lack permssion `import_project`,
will be unable to add, edit and view fields: `created`, `external_ref`, `external_system`,
and `is_deleted`.
""",
methods=["GET"],
responses = {
200: OpenApiResponse(description='projects', response=ProjectImportSerializer)
}
)
def retrieve(self, request, *args, **kwargs):
return super().retrieve(request, *args, **kwargs)
def get_view_name(self):
if self.detail:
return "Project"
return 'Projects'