def errors_or_paygov(self, account, data, host): """Return a 400 or the paygov data""" amount_form = DonationAmountForm(data, account=account) if not amount_form.is_valid(): errors = self.serialize_errors(amount_form) return Http400("validation error", error_form="amount", errors=errors) donorinfo_form = DonationPaymentForm(data) if not donorinfo_form.is_valid(): errors = self.serialize_errors(donorinfo_form) return Http400("validation error", error_form="donorinfo", errors=errors) # convert to cents payment_amount = int(amount_form.cleaned_data['payment_amount'] * 100) payment_data = dict(donorinfo_form.cleaned_data) payment_data['payment_amount'] = payment_amount payment_data['project_code'] = account.code paygov = convert_to_paygov(payment_data, account, "https://" + host) paygov.save() return { "agency_id": settings.PAY_GOV_AGENCY_ID, "agency_tracking_id": paygov.agency_tracking_id, "app_name": settings.PAY_GOV_APP_NAME, "oci_servlet_url": settings.PAY_GOV_OCI_URL, }
def errors_or_paygov(self, account, data, host): """Return a 400 or the paygov data""" amount_form = DonationAmountForm(data, account=account) if not amount_form.is_valid(): errors = self.serialize_errors(amount_form) return Http400( "validation error", error_form="amount", errors=errors) donorinfo_form = DonationPaymentForm(data) if not donorinfo_form.is_valid(): errors = self.serialize_errors(donorinfo_form) return Http400( "validation error", error_form="donorinfo", errors=errors) # convert to cents payment_amount = int(amount_form.cleaned_data['payment_amount'] * 100) payment_data = dict(donorinfo_form.cleaned_data) payment_data['payment_amount'] = payment_amount payment_data['project_code'] = account.code paygov = convert_to_paygov(payment_data, account, "https://" + host) paygov.save() return { "agency_id": settings.PAY_GOV_AGENCY_ID, "agency_tracking_id": paygov.agency_tracking_id, "app_name": settings.PAY_GOV_APP_NAME, "oci_servlet_url": settings.PAY_GOV_OCI_URL, }
def donation_payment(request, account, project=None, campaign=None): """Collect donor contact information. Expects a GET param, payment_amount, in dollars.""" form = DonationAmountForm(data=request.GET, account=account) if not form.is_valid(): if project: url = reverse('donate project', kwargs={'slug': project.slug}) else: url = reverse('donate campaign', kwargs={'slug': campaign.slug}) return HttpResponseRedirect( url + '?payment_amount=' + urlquote(request.GET.get('payment_amount', '')) + '&nonce=' + get_random_string(12) + '#amount-form') # convert to cents payment_amount = int(form.cleaned_data['payment_amount'] * 100) try: pay_gov_alert = PayGovAlert.objects.latest('id') except ObjectDoesNotExist: pay_gov_alert = None; context = { 'title': 'Giving Checkout', 'payment_amount': payment_amount, 'project': project, 'campaign': campaign, 'agency_id': settings.PAY_GOV_AGENCY_ID, 'app_name': settings.PAY_GOV_APP_NAME, 'oci_servlet_url': settings.PAY_GOV_OCI_URL, 'pay_gov_alert': pay_gov_alert, } if request.method == 'POST': form = DonationPaymentForm(request.POST) else: form = DonationPaymentForm() context['form'] = form if project: context['ajax_url'] = reverse('api:project_payment', kwargs={'slug': project.slug}) else: context['ajax_url'] = reverse('api:fund_payment', kwargs={'slug': campaign.slug}) if form.is_valid() and request.POST.get('force_form') != 'true': data = {k: v for k, v in form.cleaned_data.items()} data['payment_amount'] = payment_amount data['project_code'] = account.code paygov = convert_to_paygov( data, account, "https://" + request.get_host()) paygov.save() context['data'] = data context['agency_tracking_id'] = paygov.agency_tracking_id return render(request, 'donations/checkout_review.jinja', context) else: return render(request, 'donations/checkout_form.jinja', context)
def donation_payment(request, account, project=None, campaign=None): """Collect donor contact information. Expects a GET param, payment_amount, in dollars.""" form = DonationAmountForm(data=request.GET, account=account) if not form.is_valid(): if project: url = reverse('donate project', kwargs={'slug': project.slug}) else: url = reverse('donate campaign', kwargs={'slug': campaign.slug}) return HttpResponseRedirect( url + '?payment_amount=' + urlquote(request.GET.get('payment_amount', '')) + '&nonce=' + get_random_string(12) + '#amount-form') # convert to cents payment_amount = int(form.cleaned_data['payment_amount'] * 100) try: pay_gov_alert = PayGovAlert.objects.latest('id') except ObjectDoesNotExist: pay_gov_alert = None context = { 'title': 'Giving Checkout', 'payment_amount': payment_amount, 'project': project, 'campaign': campaign, 'agency_id': settings.PAY_GOV_AGENCY_ID, 'app_name': settings.PAY_GOV_APP_NAME, 'oci_servlet_url': settings.PAY_GOV_OCI_URL, 'pay_gov_alert': pay_gov_alert, } if request.method == 'POST': form = DonationPaymentForm(request.POST) else: form = DonationPaymentForm() context['form'] = form if project: context['ajax_url'] = reverse('api:project_payment', kwargs={'slug': project.slug}) else: context['ajax_url'] = reverse('api:fund_payment', kwargs={'slug': campaign.slug}) if form.is_valid() and request.POST.get('force_form') != 'true': data = {k: v for k, v in form.cleaned_data.items()} data['payment_amount'] = payment_amount data['project_code'] = account.code paygov = convert_to_paygov(data, account, "https://" + request.get_host()) paygov.save() context['data'] = data context['agency_tracking_id'] = paygov.agency_tracking_id return render(request, 'donations/checkout_review.jinja', context) else: return render(request, 'donations/checkout_form.jinja', context)
def donation_payment(request): """ Collect donor contact information. """ amount = request.GET.get('amount') if amount is None: return HttpResponseBadRequest('amount must be provided.') elif not amount.isdigit(): return HttpResponseBadRequest('amount must be an integer value') else: amount = int(amount) project_code = request.GET.get('project') if project_code is None: return HttpResponseBadRequest('project must be provided.') account = Account.objects.filter(code=project_code).first() if not account: return HttpResponseBadRequest('Invalid project') project = account.project_set.first() context = { 'amount': amount, 'project_code': project_code, 'project': project, 'account_name': account.name, 'agency_id': settings.PAY_GOV_AGENCY_ID, 'app_name': settings.PAY_GOV_APP_NAME, 'oci_servlet_url': settings.PAY_GOV_OCI_URL, } if request.method == 'POST': form = DonationPaymentForm(request.POST) else: data = {'payment_amount': amount, 'project_code': project_code} form = DonationPaymentForm(initial=data) context['form'] = form if form.is_valid() and request.POST.get('force_form') != 'true': data = {k: v for k, v in form.cleaned_data.items()} paygov = convert_to_paygov( data, account, "https://" + request.get_host()) paygov.save() context['data'] = data context['agency_tracking_id'] = paygov.agency_tracking_id return render(request, 'donations/checkout_review.jinja', context) else: return render(request, 'donations/checkout_form.jinja', context)
def test_convert_to_paygov_organization(self): """Organization donors should also have all data present""" data = donor_custom_fields() data['organization_contact'] = 'Bob Smith' data['organization_name'] = 'ABC Corp' data['payment_amount'] = 1234 data['project_code'] = '111-222' data['payment_type'] = 'CreditCard' account = Account.objects.create(code='111-222', category=Account.PROJECT) Project.objects.create( account=account, country=Country.objects.get(name='Canada'), slug='proj-proj') result = payxml.convert_to_paygov(data, account, "http://example.com") xml = result.xml self.assertTrue('(Bob Smith)' in xml) self.assertTrue('ABC Corp' in xml) account.delete()