def forget_password(request): data = {} EMAIL_TYPE = 'E' type = request.POST.get('type_forget') if type == EMAIL_TYPE: email = request.POST.get('forget_email') try: user = User.objects.get(email=email) except User.DoesNotExist: data['message'] = 'Usuário não encontrado' return Response( data, status=status.HTTP_404_NOT_FOUND, ) else: subject = "Esqueceu sua senha?" context = {} context['user'] = user context['domain'] = get_current_site(request).domain context['uid'] = urlsafe_base64_encode(force_bytes( user.pk)).decode() context['token'] = default_token_generator.make_token(user) context['protocol'] = 'https' if request.is_secure() else 'http' send_mail_template(subject, "emails/forget_password_email.html", context, [email]) return Response( data, status=status.HTTP_200_OK, )
def post(self, request): serializer = SolicitationSerializer(data=request.data) if serializer.is_valid(): solicitation = Solicitation() with transaction.atomic(): data = {} solicitation.owner = request.user solicitation.donation = Donation.objects.get(id=request.POST.get('donation')) if request.POST.get('comment') == '': solicitation.comment = 'Nenhum comentário' else: solicitation.comment = request.POST.get('comment') if solicitation.donation.status != Donation.ACTIVE: data['message'] = 'Esta doação não pode ser solicitada.' return Response(data, status=status.HTTP_403_FORBIDDEN) solicitation.save() donation = Donation.objects.get(id=request.POST.get('donation')) message = 'A sua doação ' + donation.slug + ' foi solicitada pelo usuário ' + solicitation.owner.get_name() + '.' notification = Notification.objects.create(message=message, notified=donation.donator, sender=solicitation.owner, type=Notification.MY_DONATIONS) send_push_notification(notification) subject = "Sua doação foi solicitada" context = {} context['user'] = donation.donator context['domain'] = get_current_site(request).domain context['protocol'] = 'https' if request.is_secure() else 'http' context['donation'] = donation context['solicitation'] = solicitation send_mail_template(subject, "emails/notification_solicitation_email.html", context, [donation.donator.email]) data['message'] = 'Solicitação feita com sucesso!' return Response(data, status=status.HTTP_201_CREATED,) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def post(self, request): data = {} with transaction.atomic(): solicitation_pk = request.POST.get('solicitation', None) if not solicitation_pk: data['message'] = "Solicitação não encontrada." return Response(data, status=status.HTTP_404_NOT_FOUND,) reason_rejection = request.POST.get('reason_rejection') if reason_rejection == '': data['message'] = "O motivo de rejeição não pode ficar em branco." return Response(data, status=status.HTTP_400_BAD_REQUEST,) solicitation = Solicitation.objects.get(pk=solicitation_pk) solicitation.status = Solicitation.REJECTED solicitation.reason_rejection = reason_rejection solicitation.save() #Validação da doação donation = Donation.objects.get(pk=solicitation.donation.pk) if donation.status == Donation.INVALID: data['message'] = 'Esta solicitação não pode ser movimentada, a doação está vencida.' return Response(data, status=status.HTTP_400_BAD_REQUEST) list_solicitations = [] queryset = Solicitation.objects.filter(donation__id=donation.pk) for obj in queryset: obj.update_status() list_solicitations.append(obj) serializer = SolicitationSerializer(list_solicitations, many=True) data['solicitations'] = serializer.data data['message'] = 'Solicitação rejeitada com sucesso.' #Notificação message = 'A sua solicitação ' + solicitation.slug + ' foi rejeitada pelo usuário ' + donation.donator.get_name() + '.' notification = Notification.objects.create(message=message, notified=solicitation.owner, sender=donation.donator, type=Notification.MY_SOLICITATIONS) send_push_notification(notification) #E-mail subject = "Sua solicitação foi rejeitada" context = {} context['user'] = solicitation.owner context['domain'] = get_current_site(request).domain context['protocol'] = 'https' if request.is_secure() else 'http' context['donation'] = donation context['solicitation'] = solicitation send_mail_template(subject, "emails/notification_rejection_solicitation_email.html", context, [solicitation.owner.email]) return Response(data, status=status.HTTP_200_OK) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def post(self, request): data = {} solicitation_pk = request.POST.get('solicitation') try: solicitation = Solicitation.objects.get(pk=solicitation_pk) except: data['message'] = 'Solicitação não encontrada.' return with transaction.atomic(): solicitation.status = Solicitation.COMPLETED solicitation.save() serializer = SolicitationSerializer(solicitation) donation = Donation.objects.get(pk=solicitation.donation.pk) donation.status = Donation.COMPLETED donation.is_accepted = True donation.receiver = solicitation.owner donation.save() message = 'A sua solicitação ' + solicitation.slug + ' da doação ' + donation.slug + 'foi finalizada. Obrigado por usar o AlimentAÍ.' notification = Notification.objects.create(message=message, notified=solicitation.owner, sender=donation.donator, type=Notification.MY_SOLICITATIONS) send_push_notification(notification) subject = "Parabéns - Sua solicitação foi finalizada" context = {} context['user'] = solicitation.owner context['domain'] = get_current_site(request).domain context['protocol'] = 'https' if request.is_secure() else 'http' context['donation'] = donation context['solicitation'] = solicitation send_mail_template(subject, "emails/notification_finalize_solicitation_email.html", context, [solicitation.owner.email]) list_solicitations = [] for obj in donation.solicitations.all(): if obj.pk != solicitation.pk: if obj.status != Solicitation.REJECTED: obj.status = Solicitation.UNCOMPLETED obj.save() list_solicitations.append(obj) serializer = SolicitationSerializer(list_solicitations, many=True) data['solicitations'] = serializer.data data['message'] = 'Solicitação finalizada com sucesso.' return Response(data, status=status.HTTP_200_OK) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def post(self, request): data = {} solicitation_pk = request.POST.get('solicitation') try: solicitation = Solicitation.objects.get(pk=solicitation_pk) except: data['message'] = 'Solicitação não encontrada.' with transaction.atomic(): solicitation.status = Solicitation.CREATED solicitation.save() donation = Donation.objects.get(pk=solicitation.donation.pk) for obj in donation.solicitations.all(): if obj.status != Solicitation.REJECTED: obj.status = Solicitation.CREATED obj.save() message = 'A sua solicitação ' + solicitation.slug + ' foi cancelada pelo usuário ' + donation.donator.get_name() + '.' notification = Notification.objects.create(message=message, notified=solicitation.owner, sender=donation.donator, type=Notification.MY_SOLICITATIONS) send_push_notification(notification) list_solicitations = [] queryset = Solicitation.objects.filter(donation__id=donation.pk) for obj in queryset: obj.update_status() list_solicitations.append(obj) serializer = SolicitationSerializer(list_solicitations, many=True) if donation.status != Donation.INVALID: donation.status = Donation.ACTIVE donation.save() data['solicitations'] = serializer.data data['message'] = 'Solicitação rejeitada com sucesso.' subject = "Sua solicitação foi rejeitada" context = {} context['user'] = solicitation.owner context['domain'] = get_current_site(request).domain context['protocol'] = 'https' if request.is_secure() else 'http' context['donation'] = donation context['solicitation'] = solicitation send_mail_template(subject, "emails/notification_cancelation_solicitation_email.html", context, [solicitation.owner.email]) return Response(data, status=status.HTTP_200_OK) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def post(self, request): data = {} solicitation_pk = request.POST.get('solicitation') try: solicitation = Solicitation.objects.get(pk=solicitation_pk) except: data['message'] = 'Solicitação não encontrada.' return Response(data, status=status.HTTP_404_NOT_FOUND) with transaction.atomic(): solicitation.status = Solicitation.UNCOMPLETED solicitation.save() donation = Donation.objects.get(pk=solicitation.donation.pk) message = 'A sua solicitação ' + solicitation.slug + ' da doação ' + donation.slug + ' foi marcada como incompleta, pois você não compareceu no local determinado.' notification = Notification.objects.create(message=message, notified=solicitation.owner, sender=donation.donator, type=Notification.MY_SOLICITATIONS) send_push_notification(notification) subject = "Sua solicitação está imcompleta" context = {} context['user'] = solicitation.owner context['domain'] = get_current_site(request).domain context['protocol'] = 'https' if request.is_secure() else 'http' context['donation'] = donation context['solicitation'] = solicitation send_mail_template(subject, "emails/notification_not_appear_solicitation_email.html", context, [solicitation.owner.email]) list_solicitations = [] for obj in donation.solicitations.all(): if obj.pk != solicitation.pk and obj.status != Solicitation.REJECTED and obj.status != Solicitation.UNCOMPLETED: obj.status = Solicitation.CREATED obj.save() list_solicitations.append(obj) serializer = SolicitationSerializer(list_solicitations, many=True) if donation.status != Donation.INVALID: donation.status = Donation.ACTIVE donation.save() data['solicitations'] = serializer.data data['message'] = 'Solicitação atualizada com sucesso.' return Response(data, status=status.HTTP_200_OK) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def post(self, request): serializer = PersonSerializer(data=request.data) if serializer.is_valid(): instance = serializer.validated_data person = Person(email=instance.get('email'), first_name=instance.get('first_name'), last_name=instance.get('last_name'), cpf=instance.get('cpf'), birthday=instance.get('birthday'), phone=instance.get('phone'), cell_phone=instance.get('cell_phone'), neighborhood=instance.get('neighborhood'), street=instance.get('street'), number=instance.get('number'), cep=instance.get("cep"), uf=instance.get("uf"), city=instance.get("city"), complement=instance.get("complement")) with transaction.atomic(): person.set_password(instance.get('password')) person.photo = request.FILES.get('photo') person.save() subject = "Ative sua conta" context = {} context['user'] = person context['domain'] = get_current_site(request).domain context['uid'] = urlsafe_base64_encode(force_bytes( person.pk)).decode() context['token'] = account_activation_token.make_token(person) context['protocol'] = 'https' if request.is_secure( ) else 'http' send_mail_template(subject, "emails/activate_email.html", context, [instance.get('email')]) return Response( serializer.data, status=status.HTTP_201_CREATED, ) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def post(self, request): data = {} solicitation_pk = request.POST.get('solicitation') validity = request.POST.get('validity') validity_hour = request.POST.get('validity_hour') with transaction.atomic(): if validity == '' or validity_hour == '' or solicitation_pk == '': data['message'] = "Nenhum dos campos podem ficar em branco." return Response(data, status=status.HTTP_401_UNAUTHORIZED,) try: solicitation = Solicitation.objects.get(pk=solicitation_pk) except: data['message'] = 'Solicitação não encontrada.' return Response(data, status=status.HTTP_404_NOT_FOUND) #Doação donation = Donation.objects.get(pk=solicitation.donation.pk) # Verificação se a validade da doação é maior ou menor que a validade da solicitação combined_time_donation = datetime.combine(donation.validity, donation.validity_hour) combined_time_solicitation = datetime.combine(datetime.strptime(validity, '%Y-%m-%d'), datetime.strptime(validity_hour, '%H:%M').time()) if combined_time_solicitation > combined_time_donation: data['message'] = "A validade da solicitação tem que ser menor ou igual ao validade da doação." return Response(data, status=status.HTTP_401_UNAUTHORIZED,) #Doação fica com status de espera donation.status = Donation.ON_HOLD donation.save() # Solicitação fica com status de aceita solicitation.is_accepted = True solicitation.status = Solicitation.ACCEPTED solicitation.validity = validity solicitation.validity_hour = validity_hour solicitation.save() # As outras solicitações da doação ficam em espera for obj in donation.solicitations.all(): if obj.pk != solicitation.pk and obj.status != Solicitation.REJECTED and obj.status != Solicitation.UNCOMPLETED: obj.status = Solicitation.ON_HOLD obj.save() # Notificação message = 'A sua solicitação ' + solicitation.slug + ' foi aceita pelo usuário ' + donation.donator.get_name() + '.' notification = Notification.objects.create(message=message, notified=solicitation.owner, sender=donation.donator, type=Notification.MY_SOLICITATIONS) send_push_notification(notification) #Email subject = "Sua solicitação foi aceita" context = {} context['user'] = solicitation.owner context['domain'] = get_current_site(request).domain context['protocol'] = 'https' if request.is_secure() else 'http' context['donation'] = donation context['solicitation'] = solicitation send_mail_template(subject, "emails/notification_accept_solicitation_email.html", context, [solicitation.owner.email]) #Feedback usuário list_solicitations = [] queryset = Solicitation.objects.filter(donation__id=donation.pk) for obj in queryset: obj.update_status() list_solicitations.append(obj) serializer = SolicitationSerializer(list_solicitations, many=True) data['solicitations'] = serializer.data data['message'] = 'Solicitação aceita com sucesso!' return Response(data, status=status.HTTP_200_OK) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)