2018-03-25 18:03:08 +00:00
|
|
|
// License: LGPL-3.0-or-later
|
2018-03-25 17:30:42 +00:00
|
|
|
var request = require('../../../common/super-agent-promise')
|
|
|
|
var format_err = require('../../../common/format_response_error')
|
|
|
|
var create_offline_donation = require('../../../donations/create_offline')
|
|
|
|
|
|
|
|
appl.def('supporter_details', {
|
|
|
|
resource_name: 'supporters',
|
|
|
|
|
|
|
|
// Assign the selected supporter to the one clicked on
|
|
|
|
// Fetch the full data for that supporter with ajax after setting
|
|
|
|
// Show the side panel
|
|
|
|
show: function(supporter) {
|
|
|
|
appl.open_side_panel()
|
|
|
|
appl.def('supporter_details', supporter)
|
|
|
|
appl.def('supporters.selected', [supporter])
|
|
|
|
appl.def('timeline_action', null)
|
|
|
|
appl.ajax_supporter.fetch(supporter.id)
|
|
|
|
var path = 'supporters/' + supporter.id + '/'
|
|
|
|
appl.def('supporter_details.tags.path_prefix', path)
|
|
|
|
appl.def('supporter_details.activities.path_prefix', path)
|
|
|
|
appl.def('supporter_details.supporter_notes.path_prefix', path)
|
|
|
|
appl.def('supporter_details.custom_fields.path_prefix', path)
|
|
|
|
request.get('/nonprofits/' + app.nonprofit_id + '/supporters/' + supporter.id + '/tag_joins').perform()
|
|
|
|
.then(function(r) { appl.def('supporter_details.tags', r.body) })
|
|
|
|
appl.ajax.index('supporter_details.custom_fields')
|
|
|
|
},
|
|
|
|
|
|
|
|
toggle_panel: function(supporter, node) {
|
|
|
|
appl.close_modal()
|
|
|
|
var tr = node.parentNode.parentNode
|
|
|
|
|
|
|
|
if(tr.hasAttribute('data-selected')) {
|
|
|
|
appl.close_side_panel()
|
|
|
|
tr.removeAttribute('data-selected','')
|
|
|
|
} else {
|
|
|
|
appl.supporter_details.show(supporter)
|
|
|
|
$('.mainPanel').find('tr').removeAttr('data-selected')
|
|
|
|
tr.setAttribute('data-selected','')
|
|
|
|
// add supporter_id to url param
|
|
|
|
var path = window.location.pathname + "?sid=" + supporter.id
|
|
|
|
window.history.pushState({},'supporter id', path)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
appl.def('ajax_supporter', {
|
|
|
|
update: function(id, form_obj, node) {
|
|
|
|
appl.def('loading', true)
|
|
|
|
appl.ajax.update('supporter_details', id, form_obj).then(function(resp) {
|
|
|
|
appl.def('loading', false)
|
|
|
|
appl.supporters.index()
|
|
|
|
if(resp.body.deleted) {
|
|
|
|
appl.find_and_remove('supporters.data', {id: resp.body.id})
|
|
|
|
appl.close_side_panel()
|
|
|
|
appl.notify('Supporter successfully deleted')
|
|
|
|
} else {
|
|
|
|
appl.find_and_set('supporters.data', {id: resp.id}, resp)
|
|
|
|
appl.close_modal()
|
|
|
|
appl.notify('Supporter updated!')
|
|
|
|
}
|
|
|
|
})
|
|
|
|
},
|
|
|
|
|
|
|
|
fetch: function(id) {
|
|
|
|
appl.def('loading', true)
|
|
|
|
appl.ajax.fetch('supporter_details', id).then(function(resp) {
|
|
|
|
appl.def('supporter_details.data.name_email_or_id',
|
|
|
|
resp.body.data.name || resp.body.data.fc_full_name || resp.body.data.email || 'Supporter #' + resp.body.data.id)
|
|
|
|
appl.def('supporter_details.data.websites',
|
|
|
|
resp.body.data.fc_websites ? resp.body.data.fc_websites.split(',') : false
|
|
|
|
)
|
|
|
|
appl.def('loading', false)
|
|
|
|
})
|
|
|
|
fetch_full_contact(id)
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
function fetch_full_contact(id){
|
|
|
|
appl.def('supporter_details.data.full_contact', {photo: false, current_job: false, interests: false, jobs: false, social: false})
|
|
|
|
request.get('/nonprofits/' + app.nonprofit_id + '/supporters/' + id + '/full_contact').perform()
|
|
|
|
.then(function(resp){
|
|
|
|
var data = resp.body.full_contact
|
|
|
|
if (!data) {
|
|
|
|
appl.def('supporter_details.data.full_contact', false)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
appl.def('supporter_details.data.full_contact', {
|
|
|
|
photo : data.photo && data.photo[0] ? data.photo[0].url : false
|
|
|
|
, current_job : data.orgs ? data.orgs.map(function(d){if (d.current) return d })[0] : false
|
|
|
|
, interests : data.topics
|
|
|
|
, jobs: data.orgs
|
|
|
|
, social: data.profiles
|
|
|
|
})
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
appl.ajax_supporter.create = function(form_obj, node) {
|
|
|
|
appl.def('supporter_details', {loading: true, error: ''})
|
|
|
|
return request.post('/nonprofits/' + app.nonprofit_id + '/supporters').send({supporter: form_obj}).perform()
|
|
|
|
.then(function() {
|
|
|
|
appl.def('supporter_details', {loading: false})
|
|
|
|
appl.close_modal()
|
|
|
|
appl.notify("Supporter successfully created!")
|
|
|
|
appl.supporters.index()
|
|
|
|
appl.prev_elem(node).reset()
|
|
|
|
})
|
|
|
|
.catch(function(resp) {
|
|
|
|
appl.def('supporter_details', {error: format_err(resp), loading: false})
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
appl.def('supporter_details.tags', {
|
|
|
|
resource_name: 'tag_joins'
|
|
|
|
})
|
|
|
|
|
|
|
|
appl.def('supporter_details.custom_fields', {
|
|
|
|
resource_name: 'custom_field_joins'
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
appl.def('supporter_details.activities', {
|
|
|
|
resource_name: 'activities'
|
|
|
|
})
|
|
|
|
|
|
|
|
appl.def('supporter_details.supporter_notes', {
|
|
|
|
resource_name: 'supporter_notes'
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
// Override the default 'close_side_panel' function provided by
|
|
|
|
// panels_layout.js so we can set some extra data
|
|
|
|
var old_close_fn = appl.close_side_panel
|
|
|
|
appl.def('close_side_panel', function(){
|
|
|
|
appl.def('supporters.selected', appl.get_checked_supporters())
|
|
|
|
old_close_fn.apply(appl)
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
appl.def('delete_selected_supporters', function(id){
|
|
|
|
appl.supporters.selected.forEach(function(supp) {
|
|
|
|
appl.ajax_supporter.update(supp.id, {deleted: true})
|
|
|
|
})
|
|
|
|
appl.close_side_panel()
|
|
|
|
})
|
|
|
|
|
|
|
|
appl.def('supporter_details.address_with_commas', utils.address_with_commas)
|
|
|
|
|
|
|
|
|
|
|
|
appl.def('create_offline_donation', function(form_obj, el) {
|
|
|
|
create_offline_donation(form_obj, createDonationUI)
|
|
|
|
.then(function(resp) {
|
|
|
|
appl.ajax.index('supporter_details.activities')
|
|
|
|
appl.prev_elem(el).reset()
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|
|
var createDonationUI = {
|
|
|
|
start: function(){
|
|
|
|
appl.is_loading()
|
|
|
|
appl.def('new_offline_donation', {loading: true, error: ''})
|
|
|
|
},
|
|
|
|
success: function(){
|
|
|
|
appl.not_loading()
|
|
|
|
appl.def('new_offline_donation', {loading: false})
|
|
|
|
appl.notify("Offline donation created successfully")
|
|
|
|
appl.close_modal()
|
|
|
|
},
|
|
|
|
fail: function(resp){
|
|
|
|
appl.def('new_offline_donation', {loading: false, error: format_err(resp)})
|
|
|
|
appl.def('loading', false).def('error', format_err(resp))
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Initialize the date picker inside the offline donation modal
|
|
|
|
var Pikaday = require('pikaday')
|
|
|
|
new Pikaday({
|
|
|
|
field: document.querySelector('#js-offsiteDonationDate'),
|
|
|
|
format: 'M/D/YYYY'
|
|
|
|
})
|