From 9cb0e5ce88f4d38fc3b299332434de146d7b80b1 Mon Sep 17 00:00:00 2001
From: renzon Módulo de Python Intermediário
Somado ao valor do bônus, o custo seria de R$ 1500,00..
-Mas você pode se inscrever hoje por APENAS R$ 99,99 para +
Mas você pode se inscrever hoje por APENAS R$ {{ price_float|floatformat:2 }} para aprender as 6 ferramentas que todo programador profissional usa em seu dia a dia.
+ {% if is_promotion_season %} +Promoção valida apenas até {{ promotion_end_date }}
+ {% endif %} diff --git a/pythonpro/payments/tests/test_landing_pages.py b/pythonpro/payments/tests/test_landing_pages.py index c7ea6ecd..39ec3866 100644 --- a/pythonpro/payments/tests/test_landing_pages.py +++ b/pythonpro/payments/tests/test_landing_pages.py @@ -1,6 +1,13 @@ +from datetime import datetime + +import freezegun import pytest +import pytz from django.urls import reverse +from pythonpro.django_assertions import dj_assert_contains +from pythonpro.payments import facade + @pytest.fixture def client_lp_resp(client_with_lead, mocker, logged_user): @@ -20,6 +27,24 @@ def test_logged_status_code(client_lp_resp): assert client_lp_resp.status_code == 200 +def test_logged_non_promotion_price(client_lp_resp): + dj_assert_contains(client_lp_resp, facade.PYTOOLS_PRICE) + + +@pytest.fixture +def client_promotion_lp_resp(client_with_lead, mocker, logged_user): + tag_as = mocker.patch('pythonpro.payments.views.tag_as') + logged_user.date_joined = datetime(2019, 6, 3, tzinfo=pytz.utc) + logged_user.save() + with freezegun.freeze_time('2019-07-22'): + yield client_with_lead.get(reverse('client_landing_page'), secure=True) + tag_as.assert_called_once_with(logged_user.email, 'potential-client') + + +def test_logged_promotion_price(client_promotion_lp_resp): + dj_assert_contains(client_promotion_lp_resp, facade.PYTOOLS_PROMOTION_PRICE) + + def test_anonymous_access_status_code(anonymous_client_lp_resp): assert anonymous_client_lp_resp.status_code == 200 diff --git a/pythonpro/payments/tests/test_pytools_promo.py b/pythonpro/payments/tests/test_pytools_promo.py index 13464c22..8170b702 100644 --- a/pythonpro/payments/tests/test_pytools_promo.py +++ b/pythonpro/payments/tests/test_pytools_promo.py @@ -12,7 +12,7 @@ ) def test_promotion_interval(now): with freeze_time(now): - begin, end = datetime(2019, 7, 22, 0, 0, 0, tzinfo=pytz.utc), datetime(2019, 7, 25, 23, 59, 59, tzinfo=pytz.utc) + begin, end = datetime(2019, 7, 22, 0, 0, 0, tzinfo=pytz.utc), datetime(2019, 7, 27, 23, 59, 59, tzinfo=pytz.utc) assert (begin, end) == calculate_pytools_promotion_interval() diff --git a/pythonpro/payments/views.py b/pythonpro/payments/views.py index 0da9b5d2..cdc54645 100644 --- a/pythonpro/payments/views.py +++ b/pythonpro/payments/views.py @@ -6,12 +6,13 @@ from django.shortcuts import render from django.template.loader import render_to_string from django.urls import reverse +from django.utils.timezone import now from django.views.decorators.csrf import csrf_exempt from pythonpro import facade from pythonpro.mailchimp.facade import tag_as from pythonpro.payments import facade as payment_facade -from pythonpro.payments.facade import PYTOOLS_PRICE, PagarmeNotPaidTransaction +from pythonpro.payments.facade import PYTOOLS_PRICE, PYTOOLS_PROMOTION_PRICE, PagarmeNotPaidTransaction def options(request): @@ -27,12 +28,13 @@ def thanks(request): def pytools_capture(request): if request.method != 'POST': return - pagarme_resp = payment_facade.pytools_capture(request.POST['token']) + user = request.user + user_creation = user.date_joined if user.is_authenticated else now() + pagarme_resp = payment_facade.pytools_capture(request.POST['token'], user_creation) customer = pagarme_resp['customer'] customer_email = customer['email'] source = request.GET.get('utm_source', default='unknown') customer_first_name = customer['name'].split()[0] - user = request.user payment_method = pagarme_resp['payment_method'] if payment_method == 'credit_card': if user.is_authenticated: @@ -97,11 +99,19 @@ def client_landing_page(request): notification_url = reverse('payments:pagarme_notification', kwargs={'user_id': user.id}) else: notification_url = reverse('payments:pagarme_anonymous_notification') + user_creation = user.date_joined if user.is_authenticated else now() + is_promotion_season = payment_facade.is_on_pytools_promotion_season(user_creation) + price = PYTOOLS_PROMOTION_PRICE if is_promotion_season else PYTOOLS_PRICE + price_float = price / 100 + _, promotion_end_date = payment_facade.calculate_pytools_promotion_interval() return render( request, 'payments/client_landing_page.html', { 'PAGARME_CRYPTO_KEY': settings.PAGARME_CRYPTO_KEY, - 'price': PYTOOLS_PRICE, + 'price': price, + 'price_float': price_float, + 'is_promotion_season': is_promotion_season, + 'promotion_end_date': promotion_end_date, 'notification_url': request.build_absolute_uri( notification_url )