Exemple #1
0
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)
Exemple #7
0
 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)