122 lines
		
	
	
	
		
			3.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			122 lines
		
	
	
	
		
			3.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| // License: LGPL-3.0-or-later
 | |
| require('../../../components/wizard')
 | |
| var format_err = require('../../../common/format_response_error')
 | |
| var format = require('../../../common/format')
 | |
| var request = require('../../../common/super-agent-promise')
 | |
| var create_donation = require('../../../donations/create')
 | |
| var create_card = require('../../../cards/create')
 | |
| var formToObj = require('../../../common/form-to-object')
 | |
| 
 | |
| var wiz = {}
 | |
| 
 | |
| 	// Set the wizard's donation object to the form data
 | |
| 	// amount, interval, time_unit, designation
 | |
| wiz.set_donation = function(node) {
 | |
|   var data = formToObj(appl.prev_elem(node))
 | |
|   var rd = data.recurring_donation
 | |
|   if(rd.start_date) {
 | |
|     rd.start_date = format.date.toStandard(rd.start_date)
 | |
|   }
 | |
|   if(rd.end_date) {
 | |
|     rd.end_date = format.date.toStandard(rd.end_date)
 | |
|   }
 | |
|   if(data.dollars) {
 | |
|     data.amount = format.dollarsToCents(data.dollars)
 | |
|     delete data.dollars
 | |
|   }
 | |
| 	appl.def('rd_wizard.donation', data)
 | |
| 	appl.wizard.advance('rd_wizard')
 | |
| }
 | |
| 
 | |
| // Save the supporter info. Advance immediately but save the promise.
 | |
| wiz.save_supporter = function(form_obj) {
 | |
| 	appl.wizard.advance('rd_wizard')
 | |
| 	appl.rd_wizard.save_supporter_promise = request.post('/nonprofits/' + ENV.nonprofitID + '/supporters')
 | |
| 		.send({supporter: form_obj}).perform()
 | |
| 		.then(set_supporter_data)
 | |
| 		.catch(show_err)
 | |
| }
 | |
| 
 | |
| // Resume on the supporter post promise, create a card, then create the donation with nested recurring donation
 | |
| wiz.send_payment = function(card_obj) {
 | |
| 	if(appl.rd_wizard.loading) return
 | |
| 	appl.def('rd_wizard', {loading: true, error: ''})
 | |
| 	return appl.rd_wizard.save_supporter_promise
 | |
| 		.then(function(supporter) {
 | |
| 			return create_card({type: 'Supporter', id: supporter.id}, card_obj)
 | |
| 		})
 | |
| 		.then(function(card) {
 | |
| 			appl.rd_wizard.donation.token = card.token
 | |
|       return request.post('/nonprofits/' + ENV.nonprofitID + '/recurring_donations')
 | |
|         .send({ recurring_donation: appl.rd_wizard.donation }).perform()
 | |
| 		})
 | |
| 		.then(complete_wizard)
 | |
| 		.catch(show_err)
 | |
| }
 | |
| 
 | |
| // To be called on payment completion and a new recurring donation was successfully created
 | |
| function complete_wizard() {
 | |
|   appl.notify("Successfully created! Reloading page...")
 | |
|   appl.def('loading', false)
 | |
|   setTimeout(()=> window.location.reload(), 1000)
 | |
| }
 | |
| 
 | |
| appl.def('rd_wizard', wiz)
 | |
| 
 | |
| // Set the supporter values from a response to the wizard's data
 | |
| function set_supporter_data(resp) {
 | |
| 	appl.def('rd_wizard.donation', {
 | |
| 		supporter_id: resp.body.id
 | |
| 	})
 | |
| 	return resp.body
 | |
| }
 | |
| 
 | |
| // Set a general error on the wizard from an ajax response, displayed on any step
 | |
| function show_err(resp) {
 | |
| 	appl.def('rd_wizard.loading', false)
 | |
| 	appl.def('rd_wizard.error', format_err(resp))
 | |
| 	throw new Error(resp)
 | |
| }
 | |
| 
 | |
| // Set all the default values for the data used in the recurring donation wizard
 | |
| function set_defaults() {
 | |
| 	appl.def('rd_wizard.donation', null)
 | |
| 	appl.def('rd_wizard', {
 | |
| 		donation: {
 | |
| 			nonprofit_id: ENV.nonprofitID,
 | |
| 			recurring_donation: {
 | |
| 				interval: 1,
 | |
| 				time_unit: 'month'
 | |
| 			}
 | |
| 		}
 | |
| 	})
 | |
| }
 | |
| 
 | |
| // Initialize wizard defaults
 | |
| set_defaults()
 | |
| 
 | |
| 
 | |
| // Initialize the pikaday date picker inputs in the various fields on the page
 | |
| // jank
 | |
| var Pikaday = require('pikaday')
 | |
| var moment = require('moment')
 | |
| var el = $('#newRecurringDonationModal')
 | |
| el.find('input[name="recurring_donation.start_date"]').val(moment().format('MM-DD-YYYY'))
 | |
| new Pikaday({
 | |
| 	field: el.find('input[name="recurring_donation.start_date"]')[0],
 | |
| 	format: 'M/D/YYYY',
 | |
| 	minDate: moment().toDate()
 | |
| })
 | |
| 
 | |
| new Pikaday({
 | |
| 	field: el.find('input[name="recurring_donation.end_date"]')[0],
 | |
| 	format: 'M/D/YYYY',
 | |
| 	minDate: moment().toDate()
 | |
| })
 | |
| 
 | |
| new Pikaday({
 | |
| 	field: document.querySelector('#edit_end_date'),
 | |
| 	format: 'M/D/YYYY',
 | |
| 	minDate: moment().toDate()
 | |
| })
 | |
| 
 | 
