99from django .template .loader import render_to_string
1010from django .urls import reverse
1111from django .views .decorators .csrf import csrf_exempt
12+ from mailchimp3 .mailchimpclient import MailChimpError
1213from rolepermissions .roles import assign_role , remove_role
1314
15+ from pythonpro .core .forms import UserSignupForm
1416from pythonpro .mailchimp import facade as mailchimp_facade
1517from pythonpro .mailchimp .facade import tag_as
1618from pythonpro .payments import facade as payment_facade
@@ -26,14 +28,26 @@ def thanks(request):
2628 return render (request , 'payments/thanks.html' )
2729
2830
29- @login_required
3031@csrf_exempt
3132def pytools_capture (request ):
3233 if request .method != 'POST' :
3334 return
3435 pagarme_resp = payment_facade .pytools_capture (request .POST ['token' ])
36+ user = request .user
37+ if not user .is_authenticated :
38+ customer = pagarme_resp ['customer' ]
39+ first_name = customer ['name' ].split ()[0 ]
40+ form = UserSignupForm ({'first_name' : first_name , 'email' : customer ['email' ]})
41+ source = request .GET .get ('utm_source' , default = 'unknown' )
42+ user = form .save (source = source )
43+ if not pagarme_resp ['payment_method' ] == 'credit_card' :
44+ assign_role (user , 'lead' )
45+ try :
46+ mailchimp_facade .create_or_update_lead (form .first_name , form .email )
47+ except MailChimpError :
48+ pass
49+
3550 if pagarme_resp ['payment_method' ] == 'credit_card' :
36- user = request .user
3751 _promote_client (user )
3852 dct = {'redirect_url' : reverse ('payments:pytools_thanks' )}
3953 elif pagarme_resp ['payment_method' ] == 'boleto' :
@@ -60,7 +74,10 @@ def client_checkout(request):
6074def _promote_client (user ):
6175 remove_role (user , 'lead' )
6276 assign_role (user , 'client' )
63- mailchimp_facade .create_or_update_client (user .first_name , user .email )
77+ try :
78+ mailchimp_facade .create_or_update_client (user .first_name , user .email )
79+ except MailChimpError :
80+ pass
6481
6582
6683def pytools_thanks (request ):
@@ -77,10 +94,13 @@ def _extract_boleto_params(dct):
7794 return {k : dct [k ] for k in ['boleto_barcode' , 'boleto_url' ]}
7895
7996
80- @login_required
8197def client_landing_page (request ):
82- tag_as (request .user .email , 'potential-client' )
83- notification_url = reverse ('payments:pagarme_notification' , kwargs = {'user_id' : request .user .id })
98+ user = request .user
99+ if user .is_authenticated :
100+ tag_as (user .email , 'potential-client' )
101+ notification_url = reverse ('payments:pagarme_notification' , kwargs = {'user_id' : user .id })
102+ else :
103+ notification_url = reverse ('payments:pagarme_anonymous_notification' )
84104 return render (
85105 request ,
86106 'payments/client_landing_page.html' , {
@@ -129,3 +149,29 @@ def pagarme_notification(request, user_id: int):
129149 [user .email ]
130150 )
131151 return HttpResponse ('' )
152+
153+
154+ @csrf_exempt
155+ def pagarme_anonymous_notification (request ):
156+ if request .method != 'POST' :
157+ return HttpResponseNotAllowed ([request .method ])
158+ user_id = 0
159+ paymento_ok = payment_facade .confirm_boleto_payment (
160+ user_id , request .POST , request .body .decode ('utf8' ), request .headers ['X-Hub-Signature' ])
161+ if paymento_ok :
162+ user = get_user_model ().objects .get (id = user_id )
163+ _promote_client (user )
164+ msg = render_to_string (
165+ 'payments/pytools_email.txt' ,
166+ {
167+ 'user' : user ,
168+ 'ty_url' : request .build_absolute_uri (reverse ('payments:pytools_thanks' ))
169+ }
170+ )
171+ send_mail (
172+ 'Inscrição no curso Pytool realizada! Confira o link com detalhes.' ,
173+ msg ,
174+ settings .DEFAULT_FROM_EMAIL ,
175+ [user .email ]
176+ )
177+ return HttpResponse ('' )
0 commit comments