|
55 | 55 |
|
56 | 56 |
|
57 | 57 | class ProjectList(generics.ListCreateAPIView): |
58 | | - queryset = Project.objects.get_projects_for_list_view() |
59 | 58 | serializer_class = ProjectListSerializer |
60 | 59 | permission_classes = [IsAuthenticated, permissions.IsAuthenticatedOrReadOnly] |
61 | 60 | filter_backends = (filters.DjangoFilterBackend,) |
62 | 61 | filterset_class = ProjectFilter |
63 | 62 | pagination_class = ProjectsPagination |
64 | 63 |
|
| 64 | + def get_queryset(self) -> QuerySet[Project]: |
| 65 | + queryset = Project.objects.get_projects_for_list_view() |
| 66 | + is_program_needed = self.request.query_params.get("partner_program", None) |
| 67 | + if not is_program_needed: |
| 68 | + queryset_without_projects_linked_to_programs = queryset.filter( |
| 69 | + partner_program_profiles__isnull=True |
| 70 | + ) |
| 71 | + return queryset_without_projects_linked_to_programs |
| 72 | + return queryset |
| 73 | + |
65 | 74 | def create(self, request, *args, **kwargs): |
66 | 75 | serializer = self.get_serializer(data=request.data) |
67 | 76 | serializer.is_valid(raise_exception=True) |
@@ -500,39 +509,38 @@ def post(self, request, project_pk): |
500 | 509 | ) |
501 | 510 |
|
502 | 511 |
|
| 512 | +# class SwitchLeaderRole(generics.GenericAPIView): |
| 513 | +# permission_classes = [IsProjectLeader] |
| 514 | +# queryset = Project.objects.all().select_related("leader") |
| 515 | +# |
| 516 | +# def _get_new_leader(self, user_id: int, project: Project) -> Collaborator: |
| 517 | +# try: |
| 518 | +# return Collaborator.objects.select_related("user").get( |
| 519 | +# user_id=user_id, project=project |
| 520 | +# ) |
| 521 | +# except ObjectDoesNotExist: |
| 522 | +# raise CollaboratorDoesNotExist( |
| 523 | +# f"""Collaborator with user_id: {user_id} does not exist. Either user_id is not correct, or project_id |
| 524 | +# is not correct, or try adding this user to a project (as collaborator) before making them a leader. """ |
| 525 | +# ) |
| 526 | +# |
| 527 | +# def patch(self, request, pk: int): |
| 528 | +# project = self.get_object() |
| 529 | +# |
| 530 | +# new_leader_id = int(request.data["new_leader_id"]) |
| 531 | +# new_leader = self._get_new_leader(new_leader_id, project) |
| 532 | +# |
| 533 | +# if project.leader.id == new_leader_id: |
| 534 | +# return Response( |
| 535 | +# {"error": "User is already a leader of a project"}, |
| 536 | +# status=status.HTTP_422_UNPROCESSABLE_ENTITY, |
| 537 | +# ) |
| 538 | +# |
| 539 | +# project.leader = new_leader.user |
| 540 | +# project.save() |
| 541 | +# return Response(status=204) |
503 | 542 |
|
504 | | -class SwitchLeaderRole(generics.GenericAPIView): |
505 | | - permission_classes = [IsProjectLeader] |
506 | | - queryset = Project.objects.all().select_related("leader") |
507 | | - |
508 | | - def _get_new_leader(self, user_id: int, project: Project) -> Collaborator: |
509 | | - try: |
510 | | - return Collaborator.objects.select_related("user").get( |
511 | | - user_id=user_id, project=project |
512 | | - ) |
513 | | - except ObjectDoesNotExist: |
514 | | - raise CollaboratorDoesNotExist( |
515 | | - f"""Collaborator with user_id: {user_id} does not exist. Either user_id is not correct, or project_id |
516 | | - is not correct, or try adding this user to a project (as collaborator) before making them a leader. """ |
517 | | - ) |
518 | | - |
519 | | - def patch(self, request, pk: int): |
520 | | - project = self.get_object() |
521 | | - |
522 | | - new_leader_id = int(request.data["new_leader_id"]) |
523 | | - new_leader = self._get_new_leader(new_leader_id, project) |
524 | | - |
525 | | - if project.leader.id == new_leader_id: |
526 | | - return Response( |
527 | | - {"error": "User is already a leader of a project"}, |
528 | | - status=status.HTTP_422_UNPROCESSABLE_ENTITY, |
529 | | - ) |
530 | | - |
531 | | - project.leader = new_leader.user |
532 | | - project.save() |
533 | | - return Response(status=204) |
534 | 543 |
|
535 | | - |
536 | 544 | class LeaveProject(generics.GenericAPIView): |
537 | 545 | permission_classes = [IsAuthenticated] |
538 | 546 |
|
|
0 commit comments