129 lines
		
	
	
	
		
			3.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			129 lines
		
	
	
	
		
			3.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 
								 | 
							
								// License: LGPL-3.0-or-later
							 | 
						||
| 
								 | 
							
								const h = require('snabbdom/h')
							 | 
						||
| 
								 | 
							
								const R = require('ramda')
							 | 
						||
| 
								 | 
							
								const marked = require('marked')
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const format = require('../../../../common/format')
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// generate titles and bodies from activity json data
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const pathPrefix = `/nonprofits/${app.nonprofit_id}`
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								module.exports = exports = {}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const viewPaymentLink = data =>
							 | 
						||
| 
								 | 
							
								  h('p', [ h('a', {props: {href: `${pathPrefix}/payments?pid=${data.attachment_id}`}}, 'View payment details.') ])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								exports.RecurringDonation = (data, state) => {
							 | 
						||
| 
								 | 
							
								  return {
							 | 
						||
| 
								 | 
							
								    title: `Paid $${format.centsToDollars(data.json_data.gross_amount)} towards a recurring donation`
							 | 
						||
| 
								 | 
							
								  , body: [
							 | 
						||
| 
								 | 
							
								      viewDedication(data)
							 | 
						||
| 
								 | 
							
								    , h('p', `Started on ${format.date.toSimple(data.json_data.start_date)}. `)
							 | 
						||
| 
								 | 
							
								    , viewPaymentLink(data)
							 | 
						||
| 
								 | 
							
								    ]
							 | 
						||
| 
								 | 
							
								  , icon: 'fa-heart'
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const viewDedication = data => 
							 | 
						||
| 
								 | 
							
								  data.json_data.dedication && data.json_data.dedication.name
							 | 
						||
| 
								 | 
							
								  ? h("p", [
							 | 
						||
| 
								 | 
							
								      `Dedicated in ${data.json_data.dedication.type || 'honor'} of `
							 | 
						||
| 
								 | 
							
								    , h('a', {props: {href: `/nonprofits/${ENV.nonprofitID}/supporters?sid=${data.json_data.dedication.supporter_id}`}}, data.json_data.dedication.name)
							 | 
						||
| 
								 | 
							
								    ])
							 | 
						||
| 
								 | 
							
								  : ''
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								exports.Donation = (data, state) => {
							 | 
						||
| 
								 | 
							
								  const desig = data.json_data.designation ? h('p', `Designation: ${data.json_data.designation}. `) : ''
							 | 
						||
| 
								 | 
							
								  return {
							 | 
						||
| 
								 | 
							
								    title: `Donated $${format.centsToDollars(data.json_data.gross_amount)}`
							 | 
						||
| 
								 | 
							
								  , body: [
							 | 
						||
| 
								 | 
							
								      desig
							 | 
						||
| 
								 | 
							
								    , viewDedication(data)
							 | 
						||
| 
								 | 
							
								    , viewPaymentLink(data)
							 | 
						||
| 
								 | 
							
								    ]
							 | 
						||
| 
								 | 
							
								  , icon: 'fa-heart'
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								exports.Ticket = (data, state) => {
							 | 
						||
| 
								 | 
							
								  var paren = data.json_data.gross_amount ? `(totalling $${format.centsToDollars(data.json_data.gross_amount)})` : '(for free)'
							 | 
						||
| 
								 | 
							
								  return {
							 | 
						||
| 
								 | 
							
								    title: `Redeemed ${data.json_data.quantity} tickets ${paren} for the event: ${data.json_data.event_name}`
							 | 
						||
| 
								 | 
							
								  , body: ''
							 | 
						||
| 
								 | 
							
								  , icon: 'fa-ticket'
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								exports.Refund = (data, state) => {
							 | 
						||
| 
								 | 
							
								  return {
							 | 
						||
| 
								 | 
							
								    title: `Refunded $${format.centsToDollars(-data.json_data.gross_amount)}`
							 | 
						||
| 
								 | 
							
								  , body: [
							 | 
						||
| 
								 | 
							
								      h('span', `Reason: ${format.snake_to_words(data.json_data.reason||'none')}. `)
							 | 
						||
| 
								 | 
							
								    , h('br')
							 | 
						||
| 
								 | 
							
								    , viewPaymentLink(data)
							 | 
						||
| 
								 | 
							
								    ]
							 | 
						||
| 
								 | 
							
								  , icon: 'fa-reply'
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								exports.Dispute = (data, state) => {
							 | 
						||
| 
								 | 
							
								  return {
							 | 
						||
| 
								 | 
							
								    title: `This supporter disputed (made a charge-back) on their payment for $${format.centsToDollars(data.json_data.gross_amount)} on ${format.date.toSimple(data.json_data.original_date)}`
							 | 
						||
| 
								 | 
							
								  , body: [
							 | 
						||
| 
								 | 
							
								      h('span', `Reason given: ${format.snake_to_words(data.json_data.reason||'none')}. `)
							 | 
						||
| 
								 | 
							
								    , h('br')
							 | 
						||
| 
								 | 
							
								    , viewPaymentLink(data)
							 | 
						||
| 
								 | 
							
								    ]
							 | 
						||
| 
								 | 
							
								  , icon: 'fa-ban'
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								exports.SupporterNote = (data, state) => {
							 | 
						||
| 
								 | 
							
								  const action = data.created_at === data.updated_at ? 'added' : 'edited'
							 | 
						||
| 
								 | 
							
								  const canEdit = data.user_id === app.user_id
							 | 
						||
| 
								 | 
							
								  return {
							 | 
						||
| 
								 | 
							
								    title: `Note ${action}${data.json_data.user_email ? ' by ' + data.json_data.user_email : ''}`
							 | 
						||
| 
								 | 
							
								  , body: [
							 | 
						||
| 
								 | 
							
								      h('span', {props: {innerHTML: marked(data.json_data.content ? data.json_data.content : '')}})
							 | 
						||
| 
								 | 
							
								    , canEdit 
							 | 
						||
| 
								 | 
							
								      ? h('span', [
							 | 
						||
| 
								 | 
							
								          h('a.u-marginRight--10', {on: {click: [state.editNote$, data]}}, 'Edit ')
							 | 
						||
| 
								 | 
							
								        , h('span.u-color--red.u-pointer', {on: {click: [state.deleteNote$, data]}}, 'Delete')
							 | 
						||
| 
								 | 
							
								        ])
							 | 
						||
| 
								 | 
							
								      : ''
							 | 
						||
| 
								 | 
							
								    ]
							 | 
						||
| 
								 | 
							
								  , icon: 'fa-pencil'
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								exports.SupporterEmail = (data, state) => {
							 | 
						||
| 
								 | 
							
								  var jd = data.json_data
							 | 
						||
| 
								 | 
							
								  var canView = false
							 | 
						||
| 
								 | 
							
								  var body = [h('span', `Subject: ${jd.subject}`), h('br')]
							 | 
						||
| 
								 | 
							
								  var thread =  h('a', {props: {href: '#'}, on: {click: [state.threadId$, jd.gmail_thread_id]}}, 'View thread')
							 | 
						||
| 
								 | 
							
								  
							 | 
						||
| 
								 | 
							
								  return {
							 | 
						||
| 
								 | 
							
								    title: `Email thread started by ${jd.from}`
							 | 
						||
| 
								 | 
							
								  , icon: 'fa-envelope'
							 | 
						||
| 
								 | 
							
								  , body: body
							 | 
						||
| 
								 | 
							
								 // , body: canView ? R.concat(body, thread) : R.concat(body, signIn)
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								exports.OffsitePayment = (data, state) => {
							 | 
						||
| 
								 | 
							
								  const desig = data.json_data.designation ? `Designation: ${data.json_data.designation}. ` : ''
							 | 
						||
| 
								 | 
							
								  return {
							 | 
						||
| 
								 | 
							
								    title: `Donated $${format.centsToDollars(data.json_data.gross_amount)} (offsite)`
							 | 
						||
| 
								 | 
							
								  , body: [
							 | 
						||
| 
								 | 
							
								      h('span', desig)
							 | 
						||
| 
								 | 
							
								    , desig ? h('br') : ''
							 | 
						||
| 
								 | 
							
								    , viewPaymentLink(data)
							 | 
						||
| 
								 | 
							
								    ]
							 | 
						||
| 
								 | 
							
								  , icon: 'fa-money'
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 |