Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions Pipfile.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

21 changes: 21 additions & 0 deletions pythonpro/checkout/templates/django_pagarme/show_boleto_data.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
{% extends 'core/base_without_nav.html' %}
{% load django_pagarme %}
{% block title %}Dados do Boleto{% endblock %}
{% block description %}Dados de Boleto para Pagamento{% endblock %}
{% block head %}
{% endblock head %}

{% block body %}
<div class="container">
<div class="row">
<div class="col">
<h1>Dados do Boleto</h1>
<p>Código de Barras: {{ payment.boleto_barcode }}</p>
<p><a href="{{ payment.boleto_url }}" class="btn btn-success" target="_blank">Abrir em Boleto em Outra Aba</a></p>
<iframe src="{{ payment.boleto_url }}"></iframe>
</div>
</div>
</div>
{% endblock body %}

{% block footer %}{% endblock footer %}
8 changes: 8 additions & 0 deletions pythonpro/core/facade.py
Original file line number Diff line number Diff line change
Expand Up @@ -222,3 +222,11 @@ def subscribe_to_waiting_list(user: User, source: str):

def is_client(user: User):
return has_role(user, 'client')


def is_lead(user: User):
return has_role(user, 'lead')


def is_member(user: User):
return has_role(user, 'member')
33 changes: 33 additions & 0 deletions pythonpro/domain/checkout_domain.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
# Setup django pagarme listener
from celery import shared_task
from django_pagarme import facade as django_pagarme_facade

from pythonpro.core import facade as core_facade
from pythonpro.domain import user_facade
from pythonpro.email_marketing import facade as email_marketing_facade


Expand All @@ -20,3 +22,34 @@ def contact_info_listener(name, email, phone, payment_item_slug, user=None):


django_pagarme_facade.add_contact_info_listener(contact_info_listener)


def user_factory(pagarme_transaction):
customer = pagarme_transaction['customer']
customer_email = customer['email'].lower()
customer_first_name = customer['name'].split()[0]
return user_facade.force_register_lead(customer_first_name, customer_email)


django_pagarme_facade.set_user_factory(user_factory)


@shared_task()
def payment_handler_task(payment_id):
payment = django_pagarme_facade.find_payment(payment_id)
status = payment.status()
if status == django_pagarme_facade.PAID:
slug = payment.first_item_slug()
if 'pytools' in slug:
user_facade.promote_client(payment.user, 'unknow')
elif 'membership' in slug:
user_facade.promote_member(payment.user, 'unknow')
else:
raise ValueError(f'{slug} should contain pytools or membership')


def payment_change_handler(payment_id):
payment_handler_task.delay(payment_id)


django_pagarme_facade.add_payment_status_changed(payment_change_handler)
25 changes: 25 additions & 0 deletions pythonpro/domain/tests/test_checkout/conftest.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,38 @@
from importlib import import_module

import pytest
from django_pagarme import facade
from django_pagarme.models import PagarmeFormConfig, PagarmeItemConfig

# Workaround since module beginning with number can't be imported in regular way

migration_module = import_module('pythonpro.checkout.migrations.0001_payment_setup')


@pytest.fixture(autouse=True)
def execute_migration(db, pytestconfig):
if pytestconfig.known_args_namespace.nomigrations:
migration_module.setup_payment_configs_function(PagarmeFormConfig, PagarmeItemConfig)


@pytest.fixture(autouse=True)
def disable_email_marketing(settings):
settings.ACTIVE_CAMPAIGN_TURNED_ON = False


@pytest.fixture(autouse=True)
def disable_forum_integration(settings):
settings.DISCOURSE_BASE_URL = ''
settings.DISCOURSE_SSO_SECRET = ''
settings.DISCOURSE_API_KEY = ''
settings.DISCOURSE_API_USER = ''


@pytest.fixture
def pytools_item(execute_migration):
return facade.find_payment_item_config('pytools')


@pytest.fixture
def membership_item(execute_migration, cohort):
return facade.find_payment_item_config('membership')
Loading