views.py
unknown
python
a month ago
3.9 kB
3
Indexable
from rest_framework import generics, permissions, status from rest_framework.response import Response from .models import Project, UserProjectAssociation, Task, Activity from features.serializers import ( ProjectSerializer, UserProjectAssociationSerializer, TaskSerializer, ActivitySerializer, UserSerializer, CreateTeamSerializer ) from core.base_classes import BaseModelViewSet, AdminManagerPermission from django.contrib.auth import get_user_model from rest_framework.views import APIView from accounts.constants import RoleIDs from django.db import connection User = get_user_model() class ProjectViewSet(BaseModelViewSet): serializer_class = ProjectSerializer permission_classes = [AdminManagerPermission] pagination_class = None def get_queryset(self): user = self.request.user if user.role.id in [1,3]: return Project.objects.all() return Project.objects.filter(project_user__user = user) class ProjectTeamViewSet(BaseModelViewSet): # queryset = UserProjectAssociation.objects.all() serializer_class = UserProjectAssociationSerializer permission_classes = [permissions.IsAuthenticated] pagination_class = None def get_queryset(self): try: user = self.request.user pk = self.request.query_params.get('project_id') print(self.request.query_params) if pk: return UserProjectAssociation.objects.filter(project__id=int(pk)) return UserProjectAssociation.objects.all() except Exception as e: print(e) class TaskViewSet(BaseModelViewSet): queryset = Task.objects.all() serializer_class = TaskSerializer permission_classes = [permissions.IsAuthenticated] pagination_class = None class ActivityViewSet(BaseModelViewSet): queryset = Activity.objects.all().order_by("-created_at") serializer_class = ActivitySerializer permission_classes = [permissions.IsAuthenticated] pagination_class = None class ActivityReportViewSet(BaseModelViewSet): def list(self, request): query = """ SELECT auth_user.username, task.title AS task_title, SUM(activity.time_spent) AS total_hours FROM activity JOIN auth_user ON activity.user_id = auth_user.id JOIN task ON activity.task_id = task.id WHERE activity.activity_type = 'time_log' GROUP BY auth_user.username, task.title ORDER BY total_hours DESC """ with connection.cursor() as cursor: cursor.execute(query) rows = cursor.fetchall() result = [ {"username": row[0], "task": row[1], "total_hours": row[2]} for row in rows ] return Response(result, status=status.HTTP_200_OK) class TaskListView(generics.ListAPIView): """Allow Managers to see all users""" permission_classes = [permissions.IsAuthenticated] serializer_class = UserSerializer def get_queryset(self): project_id = self.request.GET.get("project_id") user_role = self.request.user.role if project_id: return Task.objects.filter(project=project_id) return Task.objects.all() class UserListView(generics.ListAPIView): serializer_class = UserSerializer permission_classes = [AdminManagerPermission] queryset = User.objects.all() class CreateTeamView(APIView): permission_classes = [permissions.IsAuthenticated] def post(self, request, project_id): serializer = CreateTeamSerializer(data=request.data, context={'project_id': project_id}) if serializer.is_valid(): serializer.create(serializer.validated_data) return Response(serializer.data, status=status.HTTP_201_CREATED) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
Editor is loading...
Leave a Comment