Esempio n. 1
0
    def create(self, request, *args, **kwargs):
        serializer = self.get_serializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        target_profile = Registration.objects.get(email=request.data['email'])
        user = User.objects.create_user(request.data['email'],
                                        request.data['email'],
                                        request.data['password'],
                                        is_donor=request.data['is_donor'])

        self.perform_create(user)
        target_profile.user = user
        target_profile.save()
        if request.data['is_donor'] == "True":
            # v Attila
            unique_donor_id = code_generator(length=8)
            while DonorProfile.objects.filter(
                    unique_donor_id=unique_donor_id).count() > 0:
                unique_donor_id = code_generator(length=8)
            DonorProfile.objects.create(user=user,
                                        unique_donor_id=unique_donor_id)
            # ^ Attila
            user.donor_profile.save()
        else:
            SeekerProfile.objects.create(user=user)
            user.seeker_profile.save()

        return Response(status=status.HTTP_201_CREATED)
Esempio n. 2
0
 def create(self, request, *args, **kwargs):
     serializer = self.get_serializer(data=request.data)
     serializer.is_valid(raise_exception=True)
     # v Attila
     unique_request_id = code_generator(length=8)
     while BloodRequest.objects.filter(
             unique_request_id=unique_request_id).count() > 0:
         unique_request_id = code_generator(length=8)
     # ^ Attila
     serializer.save(seeker=self.request.user.seeker_profile,
                     unique_request_id=unique_request_id)
     target_emails = self.get_target_blood_type_emails(
         serializer.validated_data.get('blood_group'))
     blood_type = serializer.validated_data.get('blood_group')
     seeker_name = request.user.seeker_profile.name
     if target_emails:
         subject = 'Looking for a donor'
         message = f'We are looking for a donor'
         to = target_emails
         sender = ''
         html_message = f"""
                 <html lang=en>
                     <head>
                         <meta charset=utf-8>
                         <title></title>
                     </head>
                     <body>
                             <p>&nbsp;</p>
                             <p>{seeker_name} is looking for donors with a blood type of 
                                 {blood_type}.</p>
                             <p>You can apply to the request 
                             <a href="https://blood-value.propulsion-learn.ch/dashboard/donor">here.</a></p>
                             <p>&nbsp;</p>
                             <p>Best regards,</p>
                             <p>{seeker_name}</p>
                             <p>&nbsp;</p>
                             <p><a href="https://blood-value.propulsion-learn.ch">
                             <span style="color: #262541; font-size: 18px; font-weight: 600;">
                             Bloodval</span><span style="color: #d33449; font-size: 24px; font-weight: 600;">U
                             </span></a></p>
                     </body>
                 </html>"""
         send_mail(subject=subject,
                   message=message,
                   html_message=html_message,
                   from_email=sender,
                   recipient_list=to,
                   fail_silently=False)
         return Response(serializer.data, status=status.HTTP_201_CREATED)
     else:
         return Response(serializer.data, status=status.HTTP_201_CREATED)
Esempio n. 3
0
 def update(self, request, *args, **kwargs):
     partial = kwargs.pop('partial', False)
     serializer = self.get_serializer(data=request.data, partial=partial)
     serializer.is_valid(raise_exception=True)
     target_profile = Registration.objects.get(email=request.data['email'])
     target_profile.user.set_password(request.data['password'])
     target_profile.user.save()
     target_profile.code = code_generator()
     target_profile.save()
     return Response(status=status.HTTP_202_ACCEPTED)
Esempio n. 4
0
 def create(self, request, *args, **kwargs):
     try:
         target_profile = Registration.objects.get(
             email=request.data['email'])
         target_profile.code = code_generator()
         target_profile.save()
         email = EmailMessage()
         email.subject = 'Your password Reset code'
         email.body = f'See your password reset code:{target_profile.code}'
         email.to = [target_profile.email]
         email.send(fail_silently=False)
         return Response(status=status.HTTP_201_CREATED)
     except Registration.DoesNotExist:
         return Response({"detail": "Your email isn't valid."},
                         status=status.HTTP_400_BAD_REQUEST)
Esempio n. 5
0
    def create(self, request, *args, **kwargs):
        try:
            target_profile = Registration.objects.get(
                email=request.data['email'])
            target_profile.code = code_generator()
            target_profile.save()

            subject = 'Password reset'
            message = f'Here is your test code: {target_profile.code}'
            to = {target_profile.email}
            sender = ''
            html_message = f"""
                    <html lang=en>
                        <head>
                            <meta charset=utf-8>
                            <title></title>
                        </head>
                        <body>
                            <p>&nbsp;</p>
                            <p>Here is your validation code to reset the password : {target_profile.code}</p>
                            <p>&nbsp;</p>
                            <p><a href="https://blood-value.propulsion-learn.ch">
                            <span style="color: #262541; font-size: 18px; font-weight: 600;">
                            Bloodval</span><span style="color: #d33449; font-size: 24px; font-weight: 600;">U
                            </span></a></p>
                        </body>
                    </html>"""
            send_mail(subject=subject,
                      message=message,
                      html_message=html_message,
                      from_email=sender,
                      recipient_list=to,
                      fail_silently=False)

            return Response(status=status.HTTP_201_CREATED)
        except Registration.DoesNotExist:
            return Response({"detail": "Your email isn't valid."},
                            status=status.HTTP_400_BAD_REQUEST)
Esempio n. 6
0
 def post(self, request, *args, **kwargs):
     target_blood_request = self.get_object()
     target_donor = target_blood_request.selected_donor
     if target_donor is None:
         return Response(
             {
                 "detail":
                 "You cannot complete a request with no selected donor"
             },
             status=status.HTTP_400_BAD_REQUEST)
     elif target_blood_request.status == "COM":
         return Response(
             {"detail": "This request has already been completed"},
             status=status.HTTP_400_BAD_REQUEST)
     else:
         target_blood_request.status = "COM"
         target_donor.next_donation = timezone.now() + datetime.timedelta(
             days=90)
         target_donor.total_points += int(target_blood_request.points_value)
         target_donor.has_been_selected = False
         target_donor.save()
         for donor in target_blood_request.applicants.all():
             new_data = DonorData.objects.create(
                 seeker=self.request.user.seeker_profile,
                 blood_request=target_blood_request,
                 zip_code=donor.zip_code,
                 birthday=donor.birthday,
                 selected_donor=bool(
                     donor == target_blood_request.selected_donor),
                 country=donor.country,
                 street=donor.street,
                 gender=donor.gender,
                 blood_group=donor.blood_group,
             )
             new_data.save()
         target_blood_request.save()
         if target_blood_request.is_renewable:
             cloned_blood_request = BloodRequest.objects.get(
                 id=target_blood_request.id)
             cloned_blood_request.id = None
             cloned_blood_request.save()
             cloned_blood_request.status = 'OP'
             # v Attila
             unique_request_id = code_generator(length=8)
             while BloodRequest.objects.filter(
                     unique_request_id=unique_request_id).count() > 0:
                 unique_request_id = code_generator(length=8)
             # ^ Attila
             cloned_blood_request.unique_request_id = unique_request_id
             cloned_blood_request.selected_donor = None
             cloned_blood_request.applicants.clear()
             cloned_blood_request.save()
         donor_email = target_blood_request.selected_donor.user.email
         subject = 'Thank you'
         message = f'Thank you'
         to = {donor_email}
         points_value = target_blood_request.points_value
         sender = ''
         html_message = f"""
                             <html lang=en>
                                 <head>
                                     <meta charset=utf-8>
                                     <title></title>
                                 </head>
                                 <body>
                                     <p>&nbsp;</p>
                                         <p>Thank you for your generous donation.</p>
                                         <p>&nbsp;</p>
                                         <p>{points_value} points have been added to your profile.</p>
                                         <p>&nbsp;</p>
                                         <p>Please visit our <a href="https://blood-value.propulsion-learn.ch">website</a> to see the available tests.</p>
                                         <p>&nbsp;</p>
                                         <p><a href="https://blood-value.propulsion-learn.ch">
                                         <span style="color: #262541; font-size: 18px; font-weight: 600;">
                                         Bloodval</span><span style="color: #d33449; font-size: 24px; font-weight: 600;">U
                                         </span></a></p>
                                 </body>
                             </html>"""
         send_mail(subject=subject,
                   message=message,
                   html_message=html_message,
                   from_email=sender,
                   recipient_list=to,
                   fail_silently=False)
         return Response(self.get_serializer(target_blood_request).data)