Пример #1
0
def user_reinvestment_reminder():
    """
    Mail worker

    Send email update to user that eligible for reinvestment.
    This should execute after month_allocation

    This how the script do:
    1. Read user profile with reinvest_pool >0 and subscribed_to_updates = True
    2. For each user send updated email

    """
    SITE_URL = settings.SITE_URL
    project_reinvest_list_url = SITE_URL + reverse('reinvest_list')
    project_portfolio_url = SITE_URL + reverse('dashboard')
    unsubscribe_update_url = SITE_URL + reverse('unsubscribe', kwargs={'action': 'updates'})
    for user in RevolvUserProfile.objects.filter(reinvest_pool__gt=0.0, subscribed_to_updates=True):
        data = dict()
        amount=user.reinvest_pool
        if amount > 0.00:
            data['amount'] = amount
            data['portfolio_link'] = project_portfolio_url + utils.get_query_string(user.user)
            data['projects_url'] = project_reinvest_list_url + utils.get_query_string(user.user)
            data['unsubscribe_url'] = unsubscribe_update_url + utils.get_query_string(user.user)
            if user.user.first_name:
                data['first_name'] = user.user.first_name.title()
            else:
                data['first_name'] = 'RE-volv Supporter'
            send_revolv_email(
                'reinvestment_reminder',
                data, [user.user.email]
            )
Пример #2
0
def user_reinvestment_reminder():
    """
    Mail worker

    Send email update to user that eligible for reinvestment.
    This should execute after month_allocation

    This how the script do:
    1. Read user profile with reinvest_pool >0 and subscribed_to_repayment_notifications = True
    2. For each user send updated email

    """
    SITE_URL = settings.SITE_URL
    project_reinvest_list_url = SITE_URL + reverse('reinvest_list')
    project_portfolio_url = SITE_URL + reverse('donor:dashboard')
    unsubscribe_update_url = SITE_URL + reverse('unsubscribe', kwargs={'action': 'confirmation'})
    for user in RevolvUserProfile.objects.filter(reinvest_pool__gt=0.0, subscribed_to_repayment_notifications=True):
        data = dict()
        data['amount'] = user.reinvest_pool
        data['portfolio_link'] = project_portfolio_url + utils.get_query_string(user.user)
        data['projects_url'] = project_reinvest_list_url + utils.get_query_string(user.user)
        data['unsubscribe_url'] = unsubscribe_update_url + utils.get_query_string(user.user)
        if user.user.first_name:
            data['first_name'] = user.user.first_name.title()
        else:
            data['first_name'] = 'RE-volv Supporter'

        send_revolv_email(
            'reinvestment_reminder',
            data, [user.user.email]
        )
Пример #3
0
 def form_valid(self, form):
     project = Project.objects.get(pk=self.kwargs.get('pk'))
     form.process_payment(project, self.user)
     context = {}
     context['user'] = self.user
     context['project'] = project
     context['amount'] = form.cleaned_data.get('amount')
     send_revolv_email('post_donation', context, [self.user.email])
     return JsonResponse({
         'amount': form.data['amount'],
     })
Пример #4
0
 def test_cc_admins(self):
     """
     Test that all admin users will be cc'd if the cc_admins flag is
     passed to send_revolv_email.
     """
     RevolvUserProfile.objects.create_user_as_admin("a", "*****@*****.**", "apass")
     RevolvUserProfile.objects.create_user_as_admin("b", "*****@*****.**", "bpass")
     send_revolv_email(self.email_template_name,
                       self.email_template_context, ["*****@*****.**"],
                       cc_admins=True)
     self.assertEqual(len(mail.outbox), 1)
     self.assertIn("*****@*****.**", mail.outbox[0].cc)
     self.assertIn("*****@*****.**", mail.outbox[0].cc)
Пример #5
0
 def test_fails_silently(self):
     """Test that invalid email parameters raise an error if we tell them to."""
     send_revolv_email(self.email_template_name,
                       self.email_template_context, ["mejksldafs"],
                       from_email="INVALID##&^%%%^*!  #Y* #$H*",
                       fail_silently=True)
     with mock.patch("revolv.lib.mailer.EmailMultiAlternatives.send",
                     side_effect=Exception):
         with self.assertRaises(Exception):
             send_revolv_email(self.email_template_name,
                               self.email_template_context, ["mejksldafs"],
                               from_email="INVALID##&^%%%^*!  #Y* #$H*",
                               fail_silently=False)
Пример #6
0
 def form_valid(self, form):
     project = Project.objects.get(pk=self.kwargs.get('pk'))
     form.process_payment(project, self.user)
     context = {}
     context['user'] = self.user
     context['project'] = project
     context['amount'] = form.cleaned_data.get('amount')
     send_revolv_email(
         'post_donation',
         context, [self.user.email]
     )
     return JsonResponse({
         'amount': form.data['amount'],
     })
Пример #7
0
 def test_cc_admins(self):
     """
     Test that all admin users will be cc'd if the cc_admins flag is
     passed to send_revolv_email.
     """
     RevolvUserProfile.objects.create_user_as_admin("a", "*****@*****.**", "apass")
     RevolvUserProfile.objects.create_user_as_admin("b", "*****@*****.**", "bpass")
     send_revolv_email(
         self.email_template_name,
         self.email_template_context,
         ["*****@*****.**"],
         cc_admins=True
     )
     self.assertEqual(len(mail.outbox), 1)
     self.assertIn("*****@*****.**", mail.outbox[0].cc)
     self.assertIn("*****@*****.**", mail.outbox[0].cc)
Пример #8
0
 def test_fails_silently(self):
     """Test that invalid email parameters raise an error if we tell them to."""
     send_revolv_email(
         self.email_template_name,
         self.email_template_context,
         ["mejksldafs"],
         from_email="INVALID##&^%%%^*!  #Y* #$H*",
         fail_silently=True
     )
     with mock.patch("revolv.lib.mailer.EmailMultiAlternatives.send", side_effect=Exception):
         with self.assertRaises(Exception):
             send_revolv_email(
                 self.email_template_name,
                 self.email_template_context,
                 ["mejksldafs"],
                 from_email="INVALID##&^%%%^*!  #Y* #$H*",
                 fail_silently=False
             )
Пример #9
0
    def form_valid(self, form):
        project = Project.objects.get(pk=self.kwargs.get('pk'))
        form.process_payment(project, self.user)
        context = {}
        context['user'] = self.user
        context['project'] = project
        context['amount'] = form.cleaned_data.get('amount')

        send_revolv_email('post_donation', context, [self.user.email])
        try:
            amount = form.cleaned_data.get('amount')
            # send_donation_info.delay(self.user_profile.get_full_name(), float(amount),
            #                         project.title, self.user_profile.address)
        except:
            pass

        return JsonResponse({
            'amount': form.data['amount'],
        })
Пример #10
0
    def handle(self, *args, **options):
        """
        This handle function is run when the command "python manage.py monthlydonationemail"
        is typed into the command line.

        To run it on any day which is not the first day, use "python manage.py monthlydonationemail --override".

        To silence email notifications to administrators as well, add the "--silence_admin_notifications" flag.

        It iterates through all users, and sends a monthly donation email to any user who donated
        in the last month. (Specifically the last month, not the last 30 days, it it is run on 4/4,
        it'll email users who donated on 3/1 but not on 4/2.) It by default will also send an email
        notification to all administrators.

        """
        if timezone.now().day == 1 or options['override']:  # checks if the it is the first day of the month
            print "Running monthlydonationemail command on " + str(timezone.now()) + "."
            revolv_user_profiles = RevolvUserProfile.objects.all()
            num_emails_sent = 0
            for revolv_user_profile in revolv_user_profiles:
                donation_set = revolv_user_profile.payment_set.all()
                donation_set = get_last_month_donations(donation_set)
                if len(donation_set) > 0:
                    context = {}
                    user = revolv_user_profile.user
                    context['user'] = user
                    context['payments'] = donation_set
                    send_revolv_email(
                        'monthly_donation_email',
                        context, [user.email]
                    )
                    num_emails_sent = num_emails_sent + 1
            # Sends an email notification to administrators
            if not options['silence_admin_notifications']:
                context = {}
                context['emails_sent'] = num_emails_sent
                send_revolv_email(
                    'monthly_donation_email_admin_notification',
                    context, get_all_administrator_emails()
                )
        else:
            print "monthlydonationemail command was not run. Use --override to run it if it is currently not the first of the month."
Пример #11
0
 def test_send_email(self):
     """Test that we can send email correctly."""
     success = send_revolv_email(self.email_template_name,
                                 self.email_template_context,
                                 ["*****@*****.**"])
     self.assertEqual(success, 1)
     self.assertEqual(len(mail.outbox), 1)
     self.assertEqual(mail.outbox[0].subject,
                      "What's the best team in Blueprint?")
     self.assertEqual(len(mail.outbox[0].to), 1)
     self.assertEqual(mail.outbox[0].to[0], "*****@*****.**")
Пример #12
0
def user_reinvestment_reminder():
    """
    Mail worker

    Send email update to user that eligible for reinvestment.
    This should execute after month_allocation

    This how the script do:
    1. Read user profile with reinvest_pool >0 and subscribed_to_updates = True
    2. For each user send updated email

    """
    SITE_URL = settings.SITE_URL
    project_reinvest_list_url = SITE_URL + reverse("project:reinvest_list")
    unsubscribe_update_url = SITE_URL + reverse("unsubscribe", kwargs={"action": "updates"})
    for user in RevolvUserProfile.objects.filter(reinvest_pool__gt=0.0, subscribed_to_updates=True):
        data = dict()
        data["amount"] = user.reinvest_pool
        data["projects_url"] = project_reinvest_list_url + utils.get_query_string(user.user)
        data["unsubscribe_url"] = unsubscribe_update_url + utils.get_query_string(user.user)
        data["first_name"] = user.user.first_name
        send_revolv_email("reinvestment_reminder", data, [user.user.email])
Пример #13
0
    def form_valid(self, form):
        project = Project.objects.get(pk=self.kwargs.get('pk'))
        form.process_payment(project, self.user)
        context = {}
        context['user'] = self.user
        context['project'] = project
        context['amount'] = form.cleaned_data.get('amount')

        send_revolv_email(
            'post_donation',
            context, [self.user.email]
        )
        try:
            amount = form.cleaned_data.get('amount')
            # send_donation_info.delay(self.user_profile.get_full_name(), float(amount),
            #                         project.title, self.user_profile.address)
        except:
            pass

        return JsonResponse({
            'amount': form.data['amount'],
        })
Пример #14
0
 def test_send_email(self):
     """Test that we can send email correctly."""
     success = send_revolv_email(
         self.email_template_name,
         self.email_template_context,
         ["*****@*****.**"]
     )
     self.assertEqual(success, 1)
     self.assertEqual(len(mail.outbox), 1)
     self.assertEqual(
         mail.outbox[0].subject,
         "What's the best team in Blueprint?"
     )
     self.assertEqual(len(mail.outbox[0].to), 1)
     self.assertEqual(mail.outbox[0].to[0], "*****@*****.**")
Пример #15
0
def user_reinvestment_reminder():
    """
    Mail worker

    Send email update to user that eligible for reinvestment.
    This should execute after month_allocation

    This how the script do:
    1. Read user profile with reinvest_pool >0 and subscribed_to_updates = True
    2. For each user send updated email

    """
    project_reinvest_list_url = SITE_URL + reverse('project:reinvest_list')
    unsubscribe_update_url = SITE_URL + reverse('unsubscribe', kwargs={'action': 'updates'})
    for user in RevolvUserProfile.objects.filter(reinvest_pool__gt=0.0, subscribed_to_updates=True):
        data = dict()
        data['amount'] = user.reinvest_pool
        data['projects_url'] = project_reinvest_list_url + utils.get_query_string(user.user)
        data['unsubscribe_url'] = unsubscribe_update_url + utils.get_query_string(user.user)
        data['first_name'] = user.user.first_name
        send_revolv_email(
            'reinvestment_reminder',
            data, [user.user.email]
        )
Пример #16
0
def stripe_payment(request, pk):
    try:
        token = request.POST['stripeToken']
        tip_cents = request.POST['metadata']
        amount_cents = request.POST['amount_cents']
        email = request.POST['stripeEmail']
    except KeyError:
        logger.exception('stripe_payment called without required POST data')
        return HttpResponseBadRequest('bad POST data')

    try:
        tip_cents = int(tip_cents)
        amount_cents = int(amount_cents)
        if not (0 < amount_cents < MAX_PAYMENT_CENTS):
            raise ValueError('amount_cents cannot be negative')
        if not (0 <= tip_cents <= amount_cents):
            raise ValueError(
                'tip_cents cannot be negative or more than project contribution'
            )
    except ValueError:
        logger.exception('stripe_payment called with improper POST data')
        return HttpResponseBadRequest('bad POST data')

    project = get_object_or_404(Project, pk=pk)

    project_matching_donors = ProjectMatchingDonors.objects.filter(
        project=project, amount__gt=0)

    donation_cents = amount_cents - tip_cents

    error_msg = None
    try:
        stripe.Charge.create(source=token,
                             description="Donation for " + project.title,
                             currency="usd",
                             amount=amount_cents)
    except stripe.error.CardError as e:
        body = e.json_body
        error_msg = body['error']['message']
    except stripe.error.APIConnectionError as e:
        body = e.json_body
        error_msg = body['error']['message']
    except Exception:
        error_msg = "Payment error. Re-volv has been notified."
        logger.exception(error_msg)
    if error_msg:
        return render(request, "project/project_donate_error.html", {
            "msg": error_msg,
            "project": project
        })

    if project_matching_donors:
        for donor in project_matching_donors:
            if donor.amount > donation_cents / 100:
                matching_donation = donation_cents / 100
                donor.amount = donor.amount - donation_cents / 100
                donor.save()
            else:
                matching_donation = donor.amount
                donor.amount = 0
                donor.save()

            tip = None

            Payment.objects.create(
                user=donor.matching_donor,
                entrant=donor.matching_donor,
                amount=matching_donation,
                project=project,
                tip=tip,
                payment_type=PaymentType.objects.get_stripe(),
            )
            send_donation_info(donor.matching_donor.get_full_name(),
                               matching_donation,
                               donor.matching_donor.user.email,
                               project.title,
                               address='')

    if request.user.is_authenticated():
        user = request.user.revolvuserprofile
    else:
        user_id = User.objects.get(username='******').pk
        user = RevolvUserProfile.objects.get(user_id=user_id)

    tip = None
    if tip_cents > 0:
        tip = Tip.objects.create(
            amount=tip_cents / 100.0,
            user=user,
        )

    payment = Payment.objects.create(
        user=user,
        entrant=user,
        amount=donation_cents / 100.0,
        project=project,
        tip=tip,
        payment_type=PaymentType.objects.get_stripe(),
    )
    if request.session.has_key("utm_params"):
        utm_params = request.session.get("utm_params")
        utm_source = utm_params.get("utm_source")
        utm_medium = utm_params.get("utm_medium")
        utm_campaign = utm_params.get("utm_campaign")
        utm_content = utm_params.get("utm_content")
        referral_source_track = ReferralSourceTrack.objects.create(
            source=utm_source,
            medium=utm_medium,
            campaign=utm_campaign,
            content=utm_content,
            payment=payment)

    if not request.user.is_authenticated():
        my_ip = load(urlopen('http://jsonip.com'))['ip']

        url = 'http://api.ipstack.com/' + my_ip + '?access_key=' + settings.IP_STACK_ACCESS_KEY

        url_timezone = 'http://ip-api.com/json/' + my_ip

        response = load(urlopen(url))
        response_timezone = load(urlopen(url_timezone))

        try:
            AnonymousUserDonation.objects.create(
                payment=payment,
                email=email,
                ip_address=my_ip,
                city=response['city'],
                region_code=response['region_code'],
                region_name=response['region_name'],
                time_zone=response_timezone['timezone'],
                country_name=response['country_name'],
                zip_code=response['zip'])
        except:
            AnonymousUserDonation.objects.create(email=email, payment=payment)
        request.session['payment'] = payment.id
        SITE_URL = settings.SITE_URL
        portfolio_link = SITE_URL + reverse('dashboard')
        context = {}
        context['project'] = project
        context['amount'] = donation_cents / 100.0
        if tip_cents != 0:
            context['tip_cents'] = tip_cents / 100.0
        else:
            context['tip_cents'] = False
        context['amount_cents'] = amount_cents / 100.0
        context['portfolio_link'] = portfolio_link
        request.session['project'] = project.title
        previous_url = request.META.get('HTTP_REFERER')
        request.session['url'] = previous_url
        context['first_name'] = "RE-volv"
        context['last_name'] = "supporter"
        send_donation_info(email,
                           donation_cents / 100.0,
                           email,
                           project.title,
                           address='')
        send_revolv_email('post_donation', context, [email])
        response = redirect('/signin/#signup')
        response.set_cookie('last_project', payment.project.title)
        return response
    else:
        SITE_URL = settings.SITE_URL
        portfolio_link = SITE_URL + reverse('dashboard')
        user = RevolvUserProfile.objects.get(user=request.user)
        context = {}
        context['project'] = project
        context['amount'] = donation_cents / 100.0
        if tip_cents != 0:
            context['tip_cents'] = tip_cents / 100.0
        else:
            context['tip_cents'] = False
        context['amount_cents'] = amount_cents / 100.0
        context['portfolio_link'] = portfolio_link + utils.get_query_string(
            request.user)
        context['first_name'] = request.user.first_name.title
        context['last_name'] = request.user.last_name.title

        amount = donation_cents / 100.0
        cover_photo = Project.objects.values_list('cover_photo',
                                                  flat=True).filter(pk=pk)
        cover_photo = list(cover_photo)
        request.session['amount'] = str(amount)
        request.session['project'] = project.title
        previous_url = request.META.get('HTTP_REFERER')
        request.session['url'] = previous_url
        request.session['cover_photo'] = (SITE_URL +
                                          '/media/') + ''.join(cover_photo)
        request.session['social'] = "donation"
        send_donation_info(user.get_full_name(),
                           donation_cents / 100.0,
                           user.user.email,
                           project.title,
                           address='')
        send_revolv_email('post_donation', context, [request.user.email])
        return redirect('dashboard')
Пример #17
0
def stripe_payment(request, pk):
    try:
        token = request.POST['stripeToken']
        tip_cents = request.POST['metadata']
        amount_cents = request.POST['amount_cents']
        email = request.POST['stripeEmail']
    except KeyError:
        logger.exception('stripe_payment called without required POST data')
        return HttpResponseBadRequest('bad POST data')

    try:
        tip_cents = int(tip_cents)
        amount_cents = int(amount_cents)
        if not (0 < amount_cents < MAX_PAYMENT_CENTS):
            raise ValueError('amount_cents cannot be negative')
        if not (0 <= tip_cents <= amount_cents):
            raise ValueError('tip_cents cannot be negative or more than project contribution')
    except ValueError:
        logger.exception('stripe_payment called with improper POST data')
        return HttpResponseBadRequest('bad POST data')

    project = get_object_or_404(Project, pk=pk)

    project_matching_donors = ProjectMatchingDonors.objects.filter(project=project, amount__gt=0)

    donation_cents = amount_cents - tip_cents

    error_msg = None
    try:
        stripe.Charge.create(source=token, description="Donation for " + project.title, currency="usd",
                             amount=amount_cents)
    except stripe.error.CardError as e:
        body = e.json_body
        error_msg = body['error']['message']
    except stripe.error.APIConnectionError as e:
        body = e.json_body
        error_msg = body['error']['message']
    except Exception:
        error_msg = "Payment error. Re-volv has been notified."
        logger.exception(error_msg)
    if error_msg:
        return render(request, "project/project_donate_error.html", {
            "msg": error_msg, "project": project
        })

    if project_matching_donors:
        for donor in project_matching_donors:
            if donor.amount > donation_cents / 100:
                matching_donation = donation_cents / 100
                donor.amount = donor.amount - donation_cents / 100
                donor.save()
            else:
                matching_donation = donor.amount
                donor.amount = 0
                donor.save()

            tip = None

            Payment.objects.create(
                user=donor.matching_donor,
                entrant=donor.matching_donor,
                amount=matching_donation,
                project=project,
                tip=tip,
                payment_type=PaymentType.objects.get_stripe(),
            )
            send_donation_info(donor.matching_donor.get_full_name(), matching_donation, donor.matching_donor.user.email,
                               project.title, address='')

    if request.user.is_authenticated():
        user = request.user.revolvuserprofile
    else:
        user_id = User.objects.get(username='******').pk
        user = RevolvUserProfile.objects.get(user_id=user_id)

    tip = None
    if tip_cents > 0:
        tip = Tip.objects.create(
            amount=tip_cents / 100.0,
            user=user,
        )

    payment = Payment.objects.create(
        user=user,
        entrant=user,
        amount=donation_cents / 100.0,
        project=project,
        tip=tip,
        payment_type=PaymentType.objects.get_stripe(),
    )
    if request.session.has_key("utm_params"):
        utm_params = request.session.get("utm_params")
        utm_source = utm_params.get("utm_source")
        utm_medium = utm_params.get("utm_medium")
        utm_campaign = utm_params.get("utm_campaign")
        utm_content = utm_params.get("utm_content")
        referral_source_track = ReferralSourceTrack.objects.create(
            source=utm_source,
            medium=utm_medium,
            campaign=utm_campaign,
            content=utm_content,
            payment=payment
        )

    if not request.user.is_authenticated():
        my_ip = load(urlopen('http://jsonip.com'))['ip']

        url = 'http://api.ipstack.com/' + my_ip + '?access_key=' + settings.IP_STACK_ACCESS_KEY

        url_timezone = 'http://ip-api.com/json/' + my_ip

        response = load(urlopen(url))
        response_timezone = load(urlopen(url_timezone))

        try:
            AnonymousUserDonation.objects.create(
                payment=payment,
                email=email,
                ip_address=my_ip,
                city=response['city'],
                region_code=response['region_code'],
                region_name=response['region_name'],
                time_zone=response_timezone['timezone'],
                country_name=response['country_name'],
                zip_code=response['zip']
            )
        except:
            AnonymousUserDonation.objects.create(email=email, payment=payment)
        request.session['payment'] = payment.id
        SITE_URL = settings.SITE_URL
        portfolio_link = SITE_URL + reverse('dashboard')
        context = {}
        context['project'] = project
        context['amount'] = donation_cents / 100.0
        if tip_cents != 0:
            context['tip_cents'] = tip_cents / 100.0
        else:
            context['tip_cents'] = False
        context['amount_cents'] = amount_cents / 100.0
        context['portfolio_link'] = portfolio_link
        request.session['project'] = project.title
        previous_url = request.META.get('HTTP_REFERER')
        request.session['url'] = previous_url
        context['first_name'] = "RE-volv"
        context['last_name'] = "supporter"
        send_donation_info(email, donation_cents / 100.0, email, project.title, address='')
        send_revolv_email(
            'post_donation',
            context, [email]
        )
        response = redirect('/signin/#signup')
        response.set_cookie('last_project', payment.project.title)
        return response
    else:
        SITE_URL = settings.SITE_URL
        portfolio_link = SITE_URL + reverse('dashboard')
        user = RevolvUserProfile.objects.get(user=request.user)
        context = {}
        context['project'] = project
        context['amount'] = donation_cents / 100.0
        if tip_cents != 0:
            context['tip_cents'] = tip_cents / 100.0
        else:
            context['tip_cents'] = False
        context['amount_cents'] = amount_cents / 100.0
        context['portfolio_link'] = portfolio_link + utils.get_query_string(request.user)
        context['first_name'] = request.user.first_name.title
        context['last_name'] = request.user.last_name.title

        amount = donation_cents / 100.0
        cover_photo = Project.objects.values_list('cover_photo', flat=True).filter(pk=pk)
        cover_photo = list(cover_photo)
        request.session['amount'] = str(amount)
        request.session['project'] = project.title
        previous_url = request.META.get('HTTP_REFERER')
        request.session['url'] = previous_url
        request.session['cover_photo'] = (SITE_URL + '/media/') + ''.join(cover_photo)
        request.session['social'] = "donation"
        send_donation_info(user.get_full_name(), donation_cents / 100.0, user.user.email, project.title, address='')
        send_revolv_email(
            'post_donation',
            context, [request.user.email]
        )
        return redirect('dashboard')
Пример #18
0
def stripe_operation_donation(request):
    try:
        token = request.POST['stripeToken']
        amount_cents = request.POST.get('donation_amount_cents')
        if not amount_cents:
            amount_cents = request.POST.get('donation_amount_in_cents')
        email = request.POST['stripeEmail']
        check = request.POST.get('check')
    except KeyError:
        logger.exception('stripe_operation_donation called without required POST data')
        return HttpResponseBadRequest('bad POST data')

    project = get_object_or_404(Project, title='Operations')

    if check == None:
        amount = round(float(amount_cents) * 100)
        try:
            stripe.Charge.create(source=token, description="Donation for RE-volv operations donation", currency="usd",
                                 amount=int(amount))
        except stripe.error.CardError as e:
            body = e.json_body
            error_msg = body['error']['message']
            return HttpResponseBadRequest('bad POST data')

        except stripe.error.APIConnectionError as e:
            return HttpResponseBadRequest('bad POST data')

        except Exception:
            error_msg = "Payment error. Re-volv has been notified."
            logger.exception(error_msg)
            return HttpResponseBadRequest('bad POST data')

        if amount_cents > 0:
            if request.user.is_authenticated():
                user = RevolvUserProfile.objects.get(user=request.user)
                tip = None
                Payment.objects.create(
                    user=user,
                    entrant=user,
                    amount=amount / 100,
                    project=project,
                    tip=tip,
                    payment_type=PaymentType.objects.get_stripe(),
                )
            else:

                my_ip = load(urlopen('http://jsonip.com'))['ip']

                url = 'http://api.ipstack.com/' + my_ip + '?access_key=' + settings.IP_STACK_ACCESS_KEY

                response = load(urlopen(url))

                AnonymousUserDetail.objects.create(
                    email=email,
                    ip_address=my_ip,
                    amount=amount / 100,
                    city=response['city'],
                    region_code=response['region_code'],
                    region_name=response['region_name'],
                    country_name=response['country_name'],
                    zip_code=response['zip']
                )

                anonymous_user = User.objects.get(username='******')
                user = RevolvUserProfile.objects.get(user=anonymous_user)
                tip = None
                Payment.objects.create(
                    user=user,
                    entrant=user,
                    amount=amount / 100,
                    project=project,
                    tip=tip,
                    payment_type=PaymentType.objects.get_stripe(),
                )

            send_donation_info(user.get_full_name(), amount / 100, user.user.email, project.title, address='')

        context = {}
        if not request.user.is_authenticated():
            context['user'] = '******'
        else:
            if not (request.user.first_name and request.user.last_name):
                context['user'] = '******'
            else:
                context['user'] = request.user.first_name.title() + ' ' + request.user.last_name.title()

        context['amount'] = amount / 100.0
        send_revolv_email(
            'Post_operations_donation',
            context, [email]
        )

        return HttpResponse(json.dumps({'status': 'donation_success', 'amount': amount / float(100)}),
                            content_type="application/json")

    else:
        if amount_cents > 0:
            if request.user.is_authenticated():
                user = RevolvUserProfile.objects.get(user=request.user)
                try:
                    stripeDetail = StripeDetails.objects.get(user=user, amount__gt=0.0)
                except StripeDetails.DoesNotExist:
                    stripeDetail = None
                if not stripeDetail:
                    amount = round(float(amount_cents) * 100)
                    try:
                        customer = stripe.Customer.create(
                            email=email,
                            description="Donation for RE-volv Operations",
                            source=token  # obtained with Stripe.js
                        )
                        plan = stripe.Plan.create(
                            amount=int(amount),
                            interval="month",
                            name="Operation Donation " + str(amount_cents),
                            currency="usd",
                            id="operation_donation" + "_" + customer["id"] + "_" + str(amount_cents))

                        subscription = stripe.Subscription.create(
                            customer=customer,
                            plan=plan,
                        )


                    except stripe.error.CardError as e:
                        body = e.json_body
                        # error_msg = body['error']['message']
                        messages.error(request, 'Payment error')
                        return redirect('home')
                    except stripe.error.APIConnectionError as e:
                        body = e.json_body
                        # error_msg = body['error']['message']
                        messages.error(request, 'Internet connection error. Please check your internet connection.')
                        return redirect('home')
                    except Exception:
                        error_msg = "Payment error. RE-volv has been notified."
                        logger.exception(error_msg)

                        messages.error(request, 'Payment error. RE-volv has been notified.')
                        return redirect('home')

                else:
                    return HttpResponse(json.dumps({'status': 'already_exist'}), content_type="application/json")

            else:

                amount = round(float(amount_cents) * 100)
                try:
                    customer = stripe.Customer.create(
                        email=email,
                        description="Donation for RE-volv Operations",
                        source=token  # obtained with Stripe.js
                    )
                    plan = stripe.Plan.create(
                        amount=int(amount),
                        interval="month",
                        name="Operation Donation " + str(amount_cents),
                        currency="usd",
                        id="operation_donation" + "_" + customer["id"] + "_" + str(amount_cents))

                    subscription = stripe.Subscription.create(
                        customer=customer,
                        plan=plan,
                    )


                except stripe.error.CardError as e:
                    body = e.json_body
                    # error_msg = body['error']['message']
                    messages.error(request, 'Payment error')
                    return redirect('home')
                except stripe.error.APIConnectionError as e:
                    body = e.json_body
                    # error_msg = body['error']['message']
                    messages.error(request, 'Internet connection error. Please check your internet connection.')
                    return redirect('home')
                except Exception:
                    error_msg = "Payment error. RE-volv has been notified."
                    logger.exception(error_msg)

                    messages.error(request, 'Payment error. RE-volv has been notified.')
                    return redirect('home')

                my_ip = load(urlopen('http://jsonip.com'))['ip']

                url = 'http://api.ipstack.com/' + my_ip + '?access_key=' + settings.IP_STACK_ACCESS_KEY

                response = load(urlopen(url))

                AnonymousUserDetail.objects.create(
                    email=email,
                    ip_address=my_ip,
                    amount=amount / 100,
                    city=response['city'],
                    region_code=response['region_code'],
                    region_name=response['region_name'],
                    country_name=response['country_name'],
                    zip_code=response['zip']
                )
                anonymous_user = User.objects.get(username='******')
                user = RevolvUserProfile.objects.get(user=anonymous_user)

            StripeDetails.objects.create(
                user=user,
                stripe_customer_id=subscription.customer,
                subscription_id=subscription.id,
                plan=subscription.plan.id,
                stripe_email=email,
                amount=amount / float(100)
            )

            context = {}
            if not request.user.is_authenticated():
                context['user'] = '******'
            else:
                if not (request.user.first_name and request.user.last_name):
                    context['user'] = '******'
                else:
                    context['user'] = request.user.first_name.title() + ' ' + request.user.last_name.title()

            context['amount'] = amount / 100.0
            send_revolv_email(
                'Post_operations_donation',
                context, [email]
            )
            return HttpResponse(json.dumps({'status': 'subscription_success', 'amount': amount / float(100)}),
                                content_type="application/json")
Пример #19
0
def stripe_payment(request, pk):
    try:
        token = request.POST['stripeToken']
        tip_cents = request.POST['metadata']
        amount_cents = request.POST['amount_cents']
        email = request.POST['stripeEmail']
    except KeyError:
        logger.exception('stripe_payment called without required POST data')
        return HttpResponseBadRequest('bad POST data')

    try:
        tip_cents = int(tip_cents)
        amount_cents = int(amount_cents)
        if not (0 < amount_cents < MAX_PAYMENT_CENTS):
            raise ValueError('amount_cents cannot be negative')
        if not (0 <= tip_cents < amount_cents):
            raise ValueError('tip_cents cannot be negative or more than project contribution')
    except ValueError:
        logger.exception('stripe_payment called with improper POST data')
        return HttpResponseBadRequest('bad POST data')

    project = get_object_or_404(Project, pk=pk)

    project_matching_donors = ProjectMatchingDonors.objects.filter(project=project, amount__gt=0)

    donation_cents = amount_cents - tip_cents

    error_msg = None
    try:
        stripe.Charge.create(source=token, description="Donation for "+project.title, currency="usd", amount=amount_cents)
    except stripe.error.CardError as e:
        body = e.json_body
        error_msg = body['error']['message']
    except stripe.error.APIConnectionError as e:
        body = e.json_body
        error_msg = body['error']['message']
    except Exception:
        error_msg = "Payment error. Re-volv has been notified."
        logger.exception(error_msg)
    if error_msg:
        return render(request, "project/project_donate_error.html", {
            "msg": error_msg, "project": project
        })

    if project_matching_donors:
        for donor in project_matching_donors:
            if donor.amount > donation_cents / 100:
                matching_donation = donation_cents / 100
                donor.amount = donor.amount - donation_cents / 100
                donor.save()
            else:
                matching_donation = donor.amount
                donor.amount = 0
                donor.save()

            tip = None

            Payment.objects.create(
                user=donor.matching_donor,
                entrant=donor.matching_donor,
                amount=matching_donation,
                project=project,
                tip=tip,
                payment_type=PaymentType.objects.get_stripe(),
            )
            send_donation_info(donor.matching_donor.get_full_name(), matching_donation, donor.matching_donor.user.email, project.title, address='')

    if request.user.is_authenticated():
        user = request.user.revolvuserprofile
    else:
        user_id = User.objects.get(username='******').pk
        user = RevolvUserProfile.objects.get(user_id=user_id)

    tip = None
    if tip_cents > 0:
        tip=Tip.objects.create(
            amount=tip_cents / 100.0,
            user=user,
        )

    payment=Payment.objects.create(
        user=user,
        entrant=user,
        amount=donation_cents/100.0,
        project=project,
        tip=tip,
        payment_type=PaymentType.objects.get_stripe(),
    )

    if not request.user.is_authenticated():
        request.session['payment'] = payment.id
        SITE_URL = settings.SITE_URL
        portfolio_link = SITE_URL + reverse('dashboard')
        context = {}
        context['project'] = project
        context['amount'] = donation_cents / 100.0
        context['tip_cents'] = tip_cents / 100.0
        context['amount_cents'] = amount_cents / 100.0
        context['portfolio_link'] = portfolio_link
        context['first_name'] = "RE-volv"
        context['last_name'] = "Supporter"
        send_donation_info(user.get_full_name(), donation_cents / 100.0, user.user.email, project.title, address='')
        send_revolv_email(
            'post_donation',
            context, [email]
        )
        return redirect('signin')
    else:
        SITE_URL = settings.SITE_URL
        portfolio_link = SITE_URL + reverse('dashboard')
        user=RevolvUserProfile.objects.get(user=request.user)
        context = {}
        context['project'] = project
        context['amount'] = donation_cents/100.0
        context['tip_cents'] = tip_cents / 100.0
        context['amount_cents'] = amount_cents/100.0
        context['portfolio_link'] = portfolio_link + utils.get_query_string(request.user)
        context['first_name'] = request.user.first_name
        context['last_name'] = request.user.last_name

        amount = donation_cents / 100.0
        cover_photo = Project.objects.values_list('cover_photo', flat=True).filter(pk=pk)
        cover_photo = list(cover_photo)
        request.session['amount'] = str(amount)
        request.session['project'] = project.title
        previous_url = request.META.get('HTTP_REFERER')
        request.session['url'] = previous_url
        request.session['cover_photo'] = (SITE_URL + '/media/') + ''.join(cover_photo)
        request.session['social'] = "donation"
        send_donation_info(user.get_full_name(), donation_cents/100.0, user.user.email, project.title, address='')
        send_revolv_email(
            'post_donation',
            context, [request.user.email]
        )
        return redirect('dashboard')
Пример #20
0
def stripe_operation_donation(request):
    try:
        token = request.POST['stripeToken']
        amount_cents = request.POST.get('donation_amount_cents')
        if not amount_cents:
            amount_cents = request.POST.get('donation_amount_in_cents')
        email = request.POST['stripeEmail']
        check = request.POST.get('check')
    except KeyError:
        logger.exception('stripe_operation_donation called without required POST data')
        return HttpResponseBadRequest('bad POST data')

    project = get_object_or_404(Project, title='Operations')

    if check==None:
        amount = round(float(amount_cents) * 100)
        try:
            stripe.Charge.create(source=token, description="Donation for RE-volv operations donation", currency="usd", amount=int(amount))
        except stripe.error.CardError as e:
            body = e.json_body
            error_msg = body['error']['message']
            return HttpResponseBadRequest('bad POST data')

        except stripe.error.APIConnectionError as e:
            return HttpResponseBadRequest('bad POST data')

        except Exception:
            error_msg = "Payment error. Re-volv has been notified."
            logger.exception(error_msg)
            return HttpResponseBadRequest('bad POST data')


        if amount_cents > 0:
            if request.user.is_authenticated():
               user = RevolvUserProfile.objects.get(user=request.user)
               tip = None
               Payment.objects.create(
                    user=user,
                    entrant=user,
                    amount=amount/100,
                    project=project,
                    tip=tip,
                     payment_type=PaymentType.objects.get_stripe(),
                )
            else:
                from requests import get

                my_ip = request.META.get('REMOTE_ADDR')

                url = 'http://freegeoip.net/json/' + my_ip

                response = load(urlopen(url))

                AnonymousUserDetail.objects.create(
                    email=email,
                    ip_address=my_ip,
                    amount=amount / 100,
                    city=response['city'],
                    region_code=response['region_code'],
                    region_name=response['region_name'],
                    time_zone=response['time_zone'],
                    country_name=response['country_name'],
                    zip_code=response['zip_code']
                )

                anonymous_user = User.objects.get(username='******')
                user = RevolvUserProfile.objects.get(user=anonymous_user)
                tip = None
                Payment.objects.create(
                    user=user,
                    entrant=user,
                    amount=amount/100,
                    project=project,
                    tip=tip,
                    payment_type=PaymentType.objects.get_stripe(),
                )

            send_donation_info(user.get_full_name(), amount/100,user.user.email,project.title, address='')

        context = {}
        if not request.user.is_authenticated():
            context['user'] = '******'
        else:
            if not (request.user.first_name and request.user.last_name):
                context['user'] = '******'
            else:
                context['user'] = request.user.first_name.title() + ' ' + request.user.last_name.title()

        context['amount'] = amount / 100.0
        send_revolv_email(
            'Post_operations_donation',
            context, [email]
        )

        return HttpResponse(json.dumps({'status': 'donation_success','amount':amount/float(100)}), content_type="application/json")

    else:
        if amount_cents > 0:
            if request.user.is_authenticated():
               user = RevolvUserProfile.objects.get(user=request.user)
               try:
                    stripeDetail = StripeDetails.objects.get(user=user, amount__gt=0.0)
               except StripeDetails.DoesNotExist:
                   stripeDetail = None
               if not stripeDetail:
                   amount = round(float(amount_cents) * 100)
                   try:
                       customer = stripe.Customer.create(
                           email=email,
                           description="Donation for RE-volv Operations",
                           source=token  # obtained with Stripe.js
                       )
                       plan = stripe.Plan.create(
                           amount=int(amount),
                           interval="month",
                           name="Operation Donation " + str(amount_cents),
                           currency="usd",
                           id="operation_donation" + "_" + customer["id"] + "_" + str(amount_cents))

                       subscription = stripe.Subscription.create(
                           customer=customer,
                           plan=plan,
                       )


                   except stripe.error.CardError as e:
                       body = e.json_body
                       # error_msg = body['error']['message']
                       messages.error(request, 'Payment error')
                       return redirect('home')
                   except stripe.error.APIConnectionError as e:
                       body = e.json_body
                       # error_msg = body['error']['message']
                       messages.error(request, 'Internet connection error. Please check your internet connection.')
                       return redirect('home')
                   except Exception:
                       error_msg = "Payment error. RE-volv has been notified."
                       logger.exception(error_msg)

                       messages.error(request, 'Payment error. RE-volv has been notified.')
                       return redirect('home')

               else:
                   return HttpResponse(json.dumps({'status': 'already_exist'}), content_type="application/json")

            else:

                amount = round(float(amount_cents) * 100)
                try:
                    customer = stripe.Customer.create(
                        email=email,
                        description="Donation for RE-volv Operations",
                        source=token  # obtained with Stripe.js
                    )
                    plan = stripe.Plan.create(
                        amount=int(amount),
                        interval="month",
                        name="Operation Donation " + str(amount_cents),
                        currency="usd",
                        id="operation_donation" + "_" + customer["id"] + "_" + str(amount_cents))

                    subscription = stripe.Subscription.create(
                        customer=customer,
                        plan=plan,
                    )


                except stripe.error.CardError as e:
                    body = e.json_body
                    # error_msg = body['error']['message']
                    messages.error(request, 'Payment error')
                    return redirect('home')
                except stripe.error.APIConnectionError as e:
                    body = e.json_body
                    # error_msg = body['error']['message']
                    messages.error(request, 'Internet connection error. Please check your internet connection.')
                    return redirect('home')
                except Exception:
                    error_msg = "Payment error. RE-volv has been notified."
                    logger.exception(error_msg)

                    messages.error(request, 'Payment error. RE-volv has been notified.')
                    return redirect('home')

                my_ip = load(urlopen('http://jsonip.com'))['ip']

                url = 'http://freegeoip.net/json/' + my_ip

                response = load(urlopen(url))

                AnonymousUserDetail.objects.create(
                    email = email,
                    ip_address = my_ip,
                    amount = amount / 100,
                    city = response['city'],
                    region_code = response['region_code'],
                    region_name = response['region_name'],
                    time_zone = response['time_zone'],
                    country_name = response['country_name'],
                    zip_code = response['zip_code']
                )
                anonymous_user = User.objects.get(username='******')
                user = RevolvUserProfile.objects.get(user=anonymous_user)

            StripeDetails.objects.create(
                    user=user,
                    stripe_customer_id=subscription.customer,
                    subscription_id=subscription.id,
                    plan=subscription.plan.id,
                    stripe_email=email,
                    amount=amount/float(100)
            )

            context = {}
            if not request.user.is_authenticated():
                context['user'] = '******'
            else:
                if not (request.user.first_name and request.user.last_name):
                    context['user'] = '******'
                else:
                    context['user'] = request.user.first_name.title() + ' ' + request.user.last_name.title()

            context['amount'] = amount / 100.0
            send_revolv_email(
                'Post_operations_donation',
                context, [email]
            )
            return HttpResponse(json.dumps({'status': 'subscription_success','amount':amount/float(100)}), content_type="application/json")
Пример #21
0
def send_email(template, context):
    send_revolv_email(template, context, ['*****@*****.**'])
Пример #22
0
def stripe_payment(request, pk):
    try:
        token = request.POST['stripeToken']
        tip_cents = request.POST['metadata']
        amount_cents = request.POST['amount_cents']
    except KeyError:
        logger.exception('stripe_payment called without required POST data')
        return HttpResponseBadRequest('bad POST data')

    try:
        tip_cents = int(tip_cents)
        amount_cents = int(amount_cents)
        if not (0 < amount_cents < MAX_PAYMENT_CENTS):
            raise ValueError('amount_cents cannot be negative')
        if not (0 <= tip_cents < amount_cents):
            raise ValueError(
                'tip_cents cannot be negative or more than project contribution'
            )
    except ValueError:
        logger.exception('stripe_payment called with improper POST data')
        return HttpResponseBadRequest('bad POST data')

    project = get_object_or_404(Project, pk=pk)

    project_matching_donors = ProjectMatchingDonors.objects.filter(
        project=project, amount__gt=0)

    donation_cents = amount_cents - tip_cents

    error_msg = None
    try:
        stripe.Charge.create(source=token,
                             description="Donation for " + project.title,
                             currency="usd",
                             amount=amount_cents)
    except stripe.error.CardError as e:
        body = e.json_body
        error_msg = body['error']['message']
    except stripe.error.APIConnectionError as e:
        body = e.json_body
        error_msg = body['error']['message']
    except Exception:
        error_msg = "Payment error. Re-volv has been notified."
        logger.exception(error_msg)
    if error_msg:
        return render(request, "project/project_donate_error.html", {
            "msg": error_msg,
            "project": project
        })

    if project_matching_donors:
        for donor in project_matching_donors:
            if donor.amount > donation_cents / 100:
                matching_donation = donation_cents / 100
                donor.amount = donor.amount - donation_cents / 100
                donor.save()
            else:
                matching_donation = donor.amount
                donor.amount = 0
                donor.save()

            tip = None

            Payment.objects.create(
                user=donor.matching_donor,
                entrant=donor.matching_donor,
                amount=matching_donation,
                project=project,
                tip=tip,
                payment_type=PaymentType.objects.get_stripe(),
            )

    tip = None
    if tip_cents > 0:
        tip = Tip.objects.create(
            amount=tip_cents / 100.0,
            user=request.user.revolvuserprofile,
        )

    Payment.objects.create(
        user=request.user.revolvuserprofile,
        entrant=request.user.revolvuserprofile,
        amount=donation_cents / 100.0,
        project=project,
        tip=tip,
        payment_type=PaymentType.objects.get_stripe(),
    )

    SITE_URL = settings.SITE_URL
    portfolio_link = SITE_URL + reverse('dashboard')
    context = {}
    context['user'] = request.user
    context['project'] = project
    context['amount'] = donation_cents / 100.0
    context['tip_cents'] = tip_cents / 100.0
    context['amount_cents'] = amount_cents / 100.0
    context['portfolio_link'] = portfolio_link + utils.get_query_string(
        request.user)
    send_revolv_email('post_donation', context, [request.user.email])
    return redirect('dashboard')
Пример #23
0
def send_email(template, context):
    send_revolv_email(template, context, ['*****@*****.**'])
Пример #24
0
def stripe_operation_donation(request):
    try:
        token = request.POST['stripeToken']
        amount_cents = request.POST['donation_amount_cents']
        email = request.POST['stripeEmail']
        check = request.POST.get('check')
    except KeyError:
        logger.exception(
            'stripe_operation_donation called without required POST data')
        return HttpResponseBadRequest('bad POST data')

    if check == None:
        amount = round(float(amount_cents) * 100)
        try:
            stripe.Charge.create(
                source=token,
                description="Donation for RE-volv operations donation",
                currency="usd",
                amount=int(amount))
        except stripe.error.CardError as e:
            body = e.json_body
            error_msg = body['error']['message']
            return HttpResponseBadRequest('bad POST data')

        except stripe.error.APIConnectionError as e:
            return HttpResponseBadRequest('bad POST data')

        except Exception:
            error_msg = "Payment error. Re-volv has been notified."
            logger.exception(error_msg)
            return HttpResponseBadRequest('bad POST data')

        context = {}

        if not request.user.is_authenticated():
            my_ip = request.META.get('REMOTE_ADDR')

            url = 'http://freegeoip.net/json/' + my_ip

            response = load(urlopen(url))

            AnonymousUserDetail.objects.create(
                email=email,
                ip_address=my_ip,
                amount=amount / 100,
                city=response['city'],
                region_code=response['region_code'],
                region_name=response['region_name'],
                time_zone=response['time_zone'],
                country_name=response['country_name'],
                zip_code=response['zip_code'])

            context['user'] = '******'
        else:
            if not (request.user.first_name and request.user.last_name):
                context['user'] = '******'
            else:
                context['user'] = request.user.first_name.title(
                ) + ' ' + request.user.last_name.title()

        context['amount'] = amount / 100.0
        send_revolv_email('Post_operations_donation', context, [email])

        #messages.info(request, "Thank you for donating to RE-volv's mission to empower communities with solar energy!")
        return HttpResponse(json.dumps({'status': 'donation_success'}),
                            content_type="application/json")

    else:
        amount = round(float(amount_cents) * 100)
        try:
            customer = stripe.Customer.create(
                email=email,
                description="Donation for RE-volv Operations",
                source=token  # obtained with Stripe.js
            )
            plan = stripe.Plan.create(
                amount=int(amount),
                interval="month",
                name="Revolv Donation " + str(amount_cents),
                currency="usd",
                id="revolv_donation" + "_" + customer["id"] + "_" +
                str(amount_cents))

            stripe.Subscription.create(customer=customer, plan=plan)

        except stripe.error.CardError as e:
            body = e.json_body
            #error_msg = body['error']['message']
            messages.error(request, 'Payment error')
            return redirect('home')
        except stripe.error.APIConnectionError as e:
            body = e.json_body
            # error_msg = body['error']['message']
            messages.error(
                request,
                'Internet connection error. Please check your internet connection.'
            )
            return redirect('home')
        except Exception:
            error_msg = "Payment error. RE-volv has been notified."
            logger.exception(error_msg)

            messages.error(request,
                           'Payment error. RE-volv has been notified.')
            return redirect('home')

        context = {}
        if not request.user.is_authenticated():
            context['user'] = '******'
        else:
            my_ip = request.META.get('REMOTE_ADDR')

            url = 'http://freegeoip.net/json/' + my_ip

            response = load(urlopen(url))

            AnonymousUserDetail.objects.create(
                email=email,
                ip_address=my_ip,
                amount=amount / 100,
                city=response['city'],
                region_code=response['region_code'],
                region_name=response['region_name'],
                time_zone=response['time_zone'],
                country_name=response['country_name'],
                zip_code=response['zip_code'])

            if not (request.user.first_name and request.user.last_name):
                context['user'] = '******'
            else:
                context['user'] = request.user.first_name.title(
                ) + ' ' + request.user.last_name.title()

        context['amount'] = amount / 100.0
        send_revolv_email('Post_operations_donation', context, [email])

        #messages.info(request, "Thank you for donating monthly to RE-volv's mission to empower communities with solar energy!")
        return HttpResponse(json.dumps({'status': 'subscription_success'}),
                            content_type="application/json")