50 lines
1.6 KiB
JavaScript
50 lines
1.6 KiB
JavaScript
|
// License: LGPL-3.0-or-later
|
||
|
// This defines a create_donation function that will create a Donation and
|
||
|
// Charge in our database and on Stripe given a Supporter that has a valid Card
|
||
|
//
|
||
|
// Use this with the cards/fields.html.erb partial
|
||
|
//
|
||
|
// Call it like: create_donation(card_obj, donation_obj)
|
||
|
// where card object is the full card data (name, number, expiry, etc) from the cards/fields partial
|
||
|
// and donation_obj is all the donation data (amount, type, etc)
|
||
|
//
|
||
|
// This function will create a Donation if donation.recurring is falsy
|
||
|
// It will create a RecurringDonation if donation.recurring is true
|
||
|
|
||
|
var create_card = require('../cards/create')
|
||
|
var format_err = require('../common/format_response_error')
|
||
|
var format = require('../common/format')
|
||
|
var request = require('../common/super-agent-promise')
|
||
|
|
||
|
module.exports = create_donation
|
||
|
|
||
|
|
||
|
function create_donation(donation) {
|
||
|
if(donation.recurring_donation) {
|
||
|
var path = '/nonprofits/' + app.nonprofit_id + '/recurring_donations'
|
||
|
} else {
|
||
|
var path = '/nonprofits/' + app.nonprofit_id + '/donations'
|
||
|
}
|
||
|
if(donation.dollars) {
|
||
|
donation.amount = format.dollarsToCents(donation.dollars)
|
||
|
delete donation.dollars
|
||
|
}
|
||
|
return request.post(path).set('Content-Type', 'application/json').send( donation).perform()
|
||
|
// Reset the card form ui
|
||
|
.then(function(resp) {
|
||
|
appl.def('card_form', {status: '', error: false})
|
||
|
return resp.body
|
||
|
})
|
||
|
// Display any errors
|
||
|
.catch(function(resp) {
|
||
|
appl.def('card_form', {
|
||
|
loading: false,
|
||
|
error: true,
|
||
|
status: format_err(resp),
|
||
|
progress_width: '0%'
|
||
|
})
|
||
|
throw new Error(resp)
|
||
|
})
|
||
|
}
|
||
|
|