Skip to content

Commit af8d24b

Browse files
committed
Assign project to partner program
1 parent 7ae7e5d commit af8d24b

4 files changed

Lines changed: 51 additions & 1 deletion

File tree

partner_programs/admin.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ class PartnerProgramUserProfileAdmin(admin.ModelAdmin):
4747
list_filter = ("partner_program",)
4848
raw_id_fields = (
4949
"user",
50+
"project",
5051
"partner_program",
5152
)
5253
date_hierarchy = "datetime_created"

projects/helpers.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
from django.contrib.auth import get_user_model
44

5+
from partner_programs.models import PartnerProgram, PartnerProgramUserProfile
56
from projects.constants import RECOMMENDATIONS_COUNT
67
from projects.models import Project, ProjectLink, Achievement
78

@@ -84,3 +85,16 @@ def update_links(links, pk):
8485
for link in links
8586
]
8687
)
88+
89+
90+
def update_partner_program(
91+
partner_program_id: int, user: "User", instance: "Project"
92+
) -> None:
93+
if partner_program_id:
94+
partner_program = PartnerProgram.objects.get(pk=partner_program_id)
95+
partner_program_profile = PartnerProgramUserProfile.objects.get(
96+
user=user,
97+
partner_program=partner_program,
98+
)
99+
partner_program_profile.project = instance
100+
partner_program_profile.save()

projects/views.py

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,14 @@
99
from core.permissions import IsStaffOrReadOnly
1010
from core.serializers import SetLikedSerializer
1111
from core.services import add_view, set_like
12+
from partner_programs.models import PartnerProgram, PartnerProgramUserProfile
1213
from projects.filters import ProjectFilter
1314
from projects.constants import VERBOSE_STEPS
14-
from projects.helpers import get_recommended_users, check_related_fields_update
15+
from projects.helpers import (
16+
get_recommended_users,
17+
check_related_fields_update,
18+
update_partner_program,
19+
)
1520
from projects.models import Project, Achievement, ProjectNews
1621
from projects.pagination import ProjectNewsPagination
1722
from projects.permissions import (
@@ -51,6 +56,21 @@ def create(self, request, *args, **kwargs):
5156
serializer.validated_data["leader"] = request.user
5257

5358
self.perform_create(serializer)
59+
60+
try:
61+
partner_program_id = request.data.get("partner_program_id")
62+
update_partner_program(partner_program_id, request.user, serializer.instance)
63+
except PartnerProgram.DoesNotExist:
64+
return Response(
65+
{"detail": "Partner program with this id does not exist"},
66+
status=status.HTTP_400_BAD_REQUEST,
67+
)
68+
except PartnerProgramUserProfile.DoesNotExist:
69+
return Response(
70+
{"detail": "User is not a member of this partner program"},
71+
status=status.HTTP_400_BAD_REQUEST,
72+
)
73+
5474
headers = self.get_success_headers(serializer.data)
5575
return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
5676

@@ -101,6 +121,20 @@ def retrieve(self, request, *args, **kwargs):
101121
return Response(serializer.data)
102122

103123
def put(self, request, pk, **kwargs):
124+
# fixme: add partner_program_id to docs
125+
try:
126+
partner_program_id = request.data.get("partner_program_id")
127+
update_partner_program(partner_program_id, request.user, self.get_object())
128+
except PartnerProgram.DoesNotExist:
129+
return Response(
130+
{"detail": "Partner program with this id does not exist"},
131+
status=status.HTTP_400_BAD_REQUEST,
132+
)
133+
except PartnerProgramUserProfile.DoesNotExist:
134+
return Response(
135+
{"detail": "User is not a member of this partner program"},
136+
status=status.HTTP_400_BAD_REQUEST,
137+
)
104138
check_related_fields_update(request.data, pk)
105139
return super(ProjectDetail, self).put(request, pk)
106140

users/views.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,7 @@ class CurrentUserPrograms(RetrieveAPIView):
136136

137137
def get(self, request, *args, **kwargs):
138138
user = User.objects.get(id=request.user.id)
139+
# fixme: mb hide finished programs
139140
programs = [
140141
profile.partner_program for profile in user.partner_program_profiles.all()
141142
]

0 commit comments

Comments
 (0)