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): """ Collect donor contact information. """ amount = request.GET.get('amount', None) project_code = request.GET.get('project', None) if amount is None or project_code is None: return HttpResponseBadRequest('amount and project must be provided.') try: amount = int(amount) except ValueError: return HttpResponseBadRequest('amount must be an integer value') readable_amount = humanize_amount(amount) if request.method == 'POST': form = DonationPaymentForm(request.POST) if form.is_valid(): data = {} for k, v in form.cleaned_data.items(): data[k] = v return donation_payment_review(request, data) else: data = {'donation_amount': amount, 'project_code': project_code} form = DonationPaymentForm(initial=data) return render(request, 'donations/donation_payment.jinja', { 'form': form, 'amount': readable_amount, 'project_code': project_code })
def donation_payment(request): """ Collect donor contact information. """ amount = request.GET.get('amount', None) project_code = request.GET.get('project', None) if amount is None or project_code is None: return HttpResponseBadRequest( 'amount and project must be provided.') try: amount = int(amount) except ValueError: return HttpResponseBadRequest('amount must be an integer value') readable_amount = humanize_amount(amount) if request.method == 'POST': form = DonationPaymentForm(request.POST) if form.is_valid(): data = {} for k, v in form.cleaned_data.items(): data[k] = v return donation_payment_review(request, data) else: data = {'donation_amount': amount, 'project_code': project_code} form = DonationPaymentForm(initial=data) return render( request, 'donations/donation_payment.jinja', { 'form': form, 'amount': readable_amount, 'project_code': project_code })
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 test_organization_donation_required(self): """ Check the minimum required data for the organization form. """ form_data = self.form_data(clear=['payer_name'], is_org=True, organization_name='Big Corporation', organization_contact='Mr A. Suit') form = DonationPaymentForm(data=form_data) self.assertTrue(form.is_valid())
def test_organization_donation_required(self): """ Check the minimum required data for the organization form. """ form_data = self.form_data( clear=['payer_name'], is_org=True, organization_name='Big Corporation', organization_contact='Mr A. Suit') form = DonationPaymentForm(data=form_data) self.assertTrue(form.is_valid())
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 test_zip_state_requirements(self): """Zip code and state are only required when the country is the US""" form_data = self.form_data(clear=["state", "zip_code"]) form = DonationPaymentForm(data=form_data) self.assertFalse(form.is_valid()) form_data["country"] = "CAN" form = DonationPaymentForm(data=form_data) self.assertTrue(form.is_valid())
def test_organization_donation_required(self): """ Check the minimum required data for the organization form. """ form_data = self.form_data( clear=["name"], donor_type="Organization", organization_name="Big Corporation", organization_contact="Mr A. Suit", ) form = DonationPaymentForm(data=form_data) self.assertTrue(form.is_valid())
def test_individual_requirements(self): """Verify that "name" is required if it is Individual. Further, verify that the organization fields get cleared""" form_data = self.form_data( clear=['payer_name'], organization_name='Big Corporation', organization_contact='Mr A. Suit') form = DonationPaymentForm(data=form_data) self.assertFalse(form.is_valid()) form_data['payer_name'] = 'Bob' form = DonationPaymentForm(data=form_data) self.assertTrue(form.is_valid()) self.assertFalse('organization_name' in form.cleaned_data) self.assertFalse('organization_contact' in form.cleaned_data)
def test_individual_requirements(self): """Verify that "name" is required if donor_type is Individual. Further, verify that the organization fields get cleared""" form_data = self.form_data( clear=["name"], organization_name="Big Corporation", organization_contact="Mr A. Suit" ) form = DonationPaymentForm(data=form_data) self.assertFalse(form.is_valid()) form_data["name"] = "Bob" form = DonationPaymentForm(data=form_data) self.assertTrue(form.is_valid()) self.assertFalse("organization_name" in form.cleaned_data) self.assertFalse("organization_contact" in form.cleaned_data)
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_organization_requirements(self): """Verify that "organization_name" and "organization_contact" are required if it is an Organization. Also verify that the (Individual's) name field gets cleared""" form_data = self.form_data(is_org=True) form = DonationPaymentForm(data=form_data) self.assertFalse(form.is_valid()) form_data['organization_name'] = 'Org org' form = DonationPaymentForm(data=form_data) self.assertFalse(form.is_valid()) form_data['organization_contact'] = 'Contact' form = DonationPaymentForm(data=form_data) self.assertTrue(form.is_valid()) self.assertFalse('payer_name' in form.cleaned_data)
def test_zip_state_requirements(self): """Zip code and state are only required when the country is the US""" form_data = self.form_data(clear=['state', 'zip_code']) form = DonationPaymentForm(data=form_data) self.assertFalse(form.is_valid()) form_data['country'] = 'CAN' form = DonationPaymentForm(data=form_data) self.assertTrue(form.is_valid())
def test_zip_state_requirements(self): """Zip code and state are only required when the country is the US""" form_data = self.form_data(clear=['billing_state']) form = DonationPaymentForm(data=form_data) self.assertFalse(form.is_valid()) form_data = self.form_data(billing_state='') form = DonationPaymentForm(data=form_data) self.assertFalse(form.is_valid()) form_data = self.form_data(clear=['billing_zip']) form = DonationPaymentForm(data=form_data) self.assertFalse(form.is_valid()) form_data = self.form_data(clear=['billing_state', 'billing_zip']) form_data['country'] = 'CAN' form = DonationPaymentForm(data=form_data) self.assertTrue(form.is_valid())
def test_individual_requirements(self): """Verify that "name" is required if it is Individual. Further, verify that the organization fields get cleared""" form_data = self.form_data(clear=['payer_name'], organization_name='Big Corporation', organization_contact='Mr A. Suit') form = DonationPaymentForm(data=form_data) self.assertFalse(form.is_valid()) form_data['payer_name'] = 'Bob' form = DonationPaymentForm(data=form_data) self.assertTrue(form.is_valid()) self.assertFalse('organization_name' in form.cleaned_data) self.assertFalse('organization_contact' in form.cleaned_data)
def test_organization_requirements(self): """Verify that "organization_name" and "organization_contact" are required if donor_type is Organization. Also verify that the (Individual's) name field gets cleared""" form_data = self.form_data(donor_type="Organization") form = DonationPaymentForm(data=form_data) self.assertFalse(form.is_valid()) form_data["organization_name"] = "Org org" form = DonationPaymentForm(data=form_data) self.assertFalse(form.is_valid()) form_data["organization_contact"] = "Contact" form = DonationPaymentForm(data=form_data) self.assertTrue(form.is_valid()) self.assertFalse("name" in form.cleaned_data)
def test_individual_donation_required(self): """ Check the minimum required data. """ form_data = self.form_data() form = DonationPaymentForm(data=form_data) self.assertTrue(form.is_valid())
def test_individual_ACH(self): """" Set the payment_type to ACH and check validation. """ form_data = self.form_data() form_data['payment_type'] = 'CreditACH' form = DonationPaymentForm(data=form_data) self.assertTrue(form.is_valid())