Skip to content

Commit dda5bc6

Browse files
renzonrenzon
authored andcommitted
Implemented payment capture
close #2165
1 parent 62a827b commit dda5bc6

File tree

9 files changed

+751
-3
lines changed

9 files changed

+751
-3
lines changed

Pipfile.lock

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
{% extends 'core/base_without_nav.html' %}
2+
{% load django_pagarme %}
3+
{% block title %}Dados do Boleto{% endblock %}
4+
{% block description %}Dados de Boleto para Pagamento{% endblock %}
5+
{% block head %}
6+
{% endblock head %}
7+
8+
{% block body %}
9+
<div class="container">
10+
<div class="row">
11+
<div class="col">
12+
<h1>Dados do Boleto</h1>
13+
<p>Código de Barras: {{ payment.boleto_barcode }}</p>
14+
<p><a href="{{ payment.boleto_url }}" class="btn btn-success" target="_blank">Abrir em Boleto em Outra Aba</a></p>
15+
<iframe src="{{ payment.boleto_url }}"></iframe>
16+
</div>
17+
</div>
18+
</div>
19+
{% endblock body %}
20+
21+
{% block footer %}{% endblock footer %}

pythonpro/core/facade.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -222,3 +222,11 @@ def subscribe_to_waiting_list(user: User, source: str):
222222

223223
def is_client(user: User):
224224
return has_role(user, 'client')
225+
226+
227+
def is_lead(user: User):
228+
return has_role(user, 'lead')
229+
230+
231+
def is_member(user: User):
232+
return has_role(user, 'member')

pythonpro/domain/checkout_domain.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
# Setup django pagarme listener
2+
from celery import shared_task
23
from django_pagarme import facade as django_pagarme_facade
34

45
from pythonpro.core import facade as core_facade
6+
from pythonpro.domain import user_facade
57
from pythonpro.email_marketing import facade as email_marketing_facade
68

79

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

2123

2224
django_pagarme_facade.add_contact_info_listener(contact_info_listener)
25+
26+
27+
def user_factory(pagarme_transaction):
28+
customer = pagarme_transaction['customer']
29+
customer_email = customer['email'].lower()
30+
customer_first_name = customer['name'].split()[0]
31+
return user_facade.force_register_lead(customer_first_name, customer_email)
32+
33+
34+
django_pagarme_facade.set_user_factory(user_factory)
35+
36+
37+
@shared_task()
38+
def payment_handler_task(payment_id):
39+
payment = django_pagarme_facade.find_payment(payment_id)
40+
status = payment.status()
41+
if status == django_pagarme_facade.PAID:
42+
slug = payment.first_item_slug()
43+
if 'pytools' in slug:
44+
user_facade.promote_client(payment.user, 'unknow')
45+
elif 'membership' in slug:
46+
user_facade.promote_member(payment.user, 'unknow')
47+
else:
48+
raise ValueError(f'{slug} should contain pytools or membership')
49+
50+
51+
def payment_change_handler(payment_id):
52+
payment_handler_task.delay(payment_id)
53+
54+
55+
django_pagarme_facade.add_payment_status_changed(payment_change_handler)
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,38 @@
11
from importlib import import_module
22

33
import pytest
4+
from django_pagarme import facade
45
from django_pagarme.models import PagarmeFormConfig, PagarmeItemConfig
56

67
# Workaround since module beginning with number can't be imported in regular way
8+
79
migration_module = import_module('pythonpro.checkout.migrations.0001_payment_setup')
810

911

1012
@pytest.fixture(autouse=True)
1113
def execute_migration(db, pytestconfig):
1214
if pytestconfig.known_args_namespace.nomigrations:
1315
migration_module.setup_payment_configs_function(PagarmeFormConfig, PagarmeItemConfig)
16+
17+
18+
@pytest.fixture(autouse=True)
19+
def disable_email_marketing(settings):
20+
settings.ACTIVE_CAMPAIGN_TURNED_ON = False
21+
22+
23+
@pytest.fixture(autouse=True)
24+
def disable_forum_integration(settings):
25+
settings.DISCOURSE_BASE_URL = ''
26+
settings.DISCOURSE_SSO_SECRET = ''
27+
settings.DISCOURSE_API_KEY = ''
28+
settings.DISCOURSE_API_USER = ''
29+
30+
31+
@pytest.fixture
32+
def pytools_item(execute_migration):
33+
return facade.find_payment_item_config('pytools')
34+
35+
36+
@pytest.fixture
37+
def membership_item(execute_migration, cohort):
38+
return facade.find_payment_item_config('membership')

0 commit comments

Comments
 (0)