Exemple #1
0
    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,
        }
Exemple #2
0
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
    })
Exemple #3
0
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
        })
Exemple #4
0
    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,
        }
Exemple #5
0
 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())
Exemple #7
0
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())
Exemple #10
0
    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)
Exemple #12
0
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)
Exemple #13
0
    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())
Exemple #15
0
    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())
Exemple #16
0
    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)
Exemple #17
0
    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_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)
Exemple #19
0
 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())
Exemple #20
0
 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())
Exemple #21
0
 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())
Exemple #22
0
 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())