Ejemplo n.º 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,
        }
Ejemplo n.º 2
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,
        }
Ejemplo n.º 3
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)
Ejemplo n.º 4
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)
Ejemplo n.º 5
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)
Ejemplo n.º 6
0
    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()