def completar_pagamento(request, doacao_id): if not request.method == 'POST': return redirect( reverse('financeiro:doacao_pagamento:index', kwargs={'doacao_id': doacao_id})) doacao = get_object_or_404(Doacao, id=doacao_id, usuario=request.user) payment_method = request.POST.get('payment_method') pagseguro_item = PagSeguroItem(id=str(doacao.aniversario.id), description=str(doacao), amount='%.2f' % float(doacao.pagamento.valor), quantity=1) if payment_method == 'pagseguro': pagseguro_api = PagSeguroApi(reference=str(doacao.id)) pagseguro_api.add_item(pagseguro_item) pagseguro_data = pagseguro_api.checkout() doacao.pagamento.checkout = Checkout.objects.get( code=pagseguro_data.get('code')) doacao.pagamento.save(update_fields=['checkout']) return redirect(pagseguro_data.get('redirect_url')) sender = { 'name': request.user.nome, 'area_code': request.user.telefone_ddd, 'phone': request.user.telefone_numero, 'email': request.user.email, 'cpf': request.user.cleaned_cpf } endereco = None if request.POST.get('endereco') == 'novo': endereco = Endereco.objects.create( usuario=request.user, lagradouro=request.POST.get('endereco-lagradouro'), numero=int(request.POST.get('endereco-numero')), complemento=request.POST.get('endereco-complemento'), bairro=request.POST.get('endereco-bairro'), cep=request.POST.get('endereco-cep'), cidade=request.POST.get('endereco-cidade'), estado=request.POST.get('endereco-estado')) else: endereco = Endereco.objects.get(usuario=request.user, id=int(request.POST.get('endereco'))) if endereco: pagseguro_api = PagSeguroApiTransparent(reference=str(doacao.id)) pagseguro_api.add_item(pagseguro_item) pagseguro_api.set_sender(**sender) pagseguro_api.set_shipping(**endereco.pagseguro_serialize()) pagseguro_api.set_payment_method(payment_method) pagseguro_api.set_sender_hash(request.POST.get('sender_hash')) if payment_method == 'boleto': pagseguro_data = pagseguro_api.checkout() doacao.pagamento.boleto_link = pagseguro_data.get( 'transaction').get('paymentLink') doacao.pagamento.save(update_fields=['boleto_link']) return redirect( reverse('financeiro:doacao_pagamento:gerar_boleto', kwargs={'doacao_id': doacao.id})) if payment_method == 'creditcard': pagseguro_api.set_creditcard_token(request.POST.get('card_token')) pagseguro_api.set_creditcard_data( quantity=1, value='%.2f' % doacao.pagamento.valor, name=request.POST.get('nome-no-cartao'), birth_date=request.POST.get('data-nascimento-cartao'), cpf=request.POST.get('cpf-cartao'), area_code=request.POST.get('telefone-ddd'), phone=request.POST.get('telefone')) endereco_cartao = None endereco_cartao_opt = request.POST.get('endereco-cartao') if endereco_cartao_opt == 'mesmo': endereco_cartao = endereco elif endereco_cartao_opt == 'novo': endereco_cartao = Endereco.objects.create( usuario=request.user, lagradouro=request.POST.get('endereco-cartao-lagradouro'), numero=int(request.POST.get('endereco-cartao-numero')), complemento=request.POST.get( 'endereco-cartao-complemento'), bairro=request.POST.get('endereco-cartao-bairro'), cep=request.POST.get('endereco-cartao-cep'), cidade=request.POST.get('endereco-cartao-cidade'), estado=request.POST.get('endereco-cartao-estado')) else: endereco_cartao = Endereco.objects.get( usuario=request.user, id=int(request.POST.get('endereco-cartao'))) pagseguro_api.set_creditcard_billing_address( **endereco_cartao.pagseguro_serialize()) pagseguro_data = pagseguro_api.checkout() doacao.pagamento.cartao = Checkout.objects.get( code=pagseguro_data.get('code')) doacao.pagamento.save(update_fields=['cartao']) return redirect( reverse('aniversario:doacao_realizada', kwargs={ 'slug_usuario': doacao.aniversario.usuario.slug, 'slug_missao': doacao.aniversario.missao.slug })) raise Http404()