Skip to content

Instantly share code, notes, and snippets.

@gabivoicu
Created September 7, 2017 21:13
Show Gist options
  • Save gabivoicu/e380ff4eea8a5f0f25e5975399562711 to your computer and use it in GitHub Desktop.
Save gabivoicu/e380ff4eea8a5f0f25e5975399562711 to your computer and use it in GitHub Desktop.
class ListCreateCompletedAchievements(FeedMixin, SendNotificationMixin, generics.ListCreateAPIView):
model = CompletedAchievement
permission_classes = (AchievementPermission,)
ordering = 'achievement__title'
def get_queryset(self):...
def get_serializer_class(self):...
def post(self, request):
with transaction.atomic():
serializer = CompletedAchievementCreateSerializer(data=request.data)
if serializer.is_valid():
achievement = Achievement.objects.get(id=serializer.data['achievement'])
stakeholder = Stakeholder.objects.get(id=serializer.data['stakeholder'])
if stakeholder.stakeholder_type in ['Parent', 'Counselor']:
return Response(status=status.HTTP_403_FORBIDDEN)
try:
completed_achievement = CompletedAchievement.objects.create(
achievement=achievement,
stakeholder=stakeholder)
self.achievement_actions(request, completed_achievement)
response_serializer = CompletedAchievementCreateSerializer(
completed_achievement)
if achievement.title == "Early Bird":
phase = stakeholder.phase
should_send = False
if phase in (JUNIOR, R_SENIOR, SENIOR):
should_send = True
if should_send:
tmpl_name = "Phase Complete"
fmt_args = {
"push_message_args": [phase],
"center_message_args": [phase]
}
self.send_notification(request, [stakeholder], tmpl_name,
PHASE_COMPLETED, fmt_args=fmt_args)
adults = [c.adult for c in
StakeholderRelationship.objects.filter(student=stakeholder)]
fmt_args = {
"push_message_args": [stakeholder.get_full_name(), phase],
"center_message_args": [
stakeholder.get_full_name(), phase],
}
self.send_notification(
request, adults, tmpl_name, PHASE_COMPLETED, fmt_args=fmt_args)
self.create_feed_event(
ACHIEVEMENT, achievement=completed_achievement,
stakeholder=stakeholder)
return Response(response_serializer.data, status=status.HTTP_201_CREATED)
except IntegrityError:
return Response(status=status.HTTP_409_CONFLICT)
if 'non_field_errors' in serializer.errors:
return Response(status=status.HTTP_409_CONFLICT)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def achievement_actions(self, request, completed_achievement):...
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment