views.py
unknown
python
9 months ago
3.9 kB
12
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