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)
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> </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> </p> <p>Best regards,</p> <p>{seeker_name}</p> <p> </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)
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)
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)
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> </p> <p>Here is your validation code to reset the password : {target_profile.code}</p> <p> </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)
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> </p> <p>Thank you for your generous donation.</p> <p> </p> <p>{points_value} points have been added to your profile.</p> <p> </p> <p>Please visit our <a href="https://blood-value.propulsion-learn.ch">website</a> to see the available tests.</p> <p> </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)