2019-07-30 21:29:24 +00:00
# frozen_string_literal: true
2020-06-12 20:03:43 +00:00
# License: AGPL-3.0-or-later WITH WTO-AP-3.0-or-later
# Full license explanation at https://github.com/houdiniproject/houdini/blob/master/LICENSE
2018-03-25 17:30:42 +00:00
module Nonprofits
2019-07-30 21:29:24 +00:00
class SupportersController < ApplicationController
2020-05-11 18:38:50 +00:00
include Controllers :: Nonprofit :: Current
include Controllers :: Nonprofit :: Authorization
2019-07-30 21:29:24 +00:00
before_action :authenticate_nonprofit_user! , except : % i [ new create ]
# get /nonprofit/:nonprofit_id/supporters
def index
@panels_layout = true
2018-05-07 21:05:27 +00:00
@nonprofit = current_nonprofit
2019-07-30 21:29:24 +00:00
respond_to do | format |
format . html
format . json do
render json : QuerySupporters . full_search ( params [ :nonprofit_id ] , params )
end
format . csv do
file_date = Date . today . strftime ( '%m-%d-%Y' )
supporters = QuerySupporters . for_export ( params [ :nonprofit_id ] , params )
send_data ( Format :: Csv . from_vectors ( supporters ) , filename : " supporters- #{ file_date } .csv " )
end
end
2018-05-07 21:05:27 +00:00
end
2019-07-30 21:29:24 +00:00
def export
begin
@nonprofit = current_nonprofit
@user = current_user_id
ExportSupporters . initiate_export ( @nonprofit . id , params , @user )
rescue StandardError = > e
e
end
if e . nil?
flash [ :notice ] = " Your export was successfully initiated and you'll be emailed at #{ current_user . email } as soon as it's available. Feel free to use the site in the meantime. "
render json : { } , status : :ok
else
render json : e , status : :ok
end
2018-05-07 21:05:27 +00:00
end
2018-03-25 17:30:42 +00:00
2019-07-30 21:29:24 +00:00
def index_metrics
render_json do
QuerySupporters . full_search_metrics ( params [ :nonprofit_id ] , params )
end
2018-03-25 17:30:42 +00:00
end
2019-07-30 21:29:24 +00:00
def show
render json : { data : QuerySupporters . for_crm_profile ( params [ :nonprofit_id ] , [ params [ :id ] ] ) . first }
2018-03-25 17:30:42 +00:00
end
2019-07-30 21:29:24 +00:00
def email_address
render json : Supporter . find ( params [ :supporter_id ] ) . email
2018-03-25 17:30:42 +00:00
end
2019-07-30 21:29:24 +00:00
def full_contact
2020-06-18 19:20:18 +00:00
begin
s = Supporter . find params [ :id ]
if s . method_defined? :full_contact_infos && ( fc = s . full_contact_infos . first )
render json : { full_contact : QueryFullContactInfos . fetch_associated_tables ( fc . id ) }
else
render json : { full_contact : nil }
end
rescue
2019-07-30 21:29:24 +00:00
render json : { full_contact : nil }
end
end
def info_card
render json : QuerySupporters . for_info_card ( params [ :supporter_id ] )
end
# post /nonprofits/:nonprofit_id/supporters
def create
2019-12-10 22:00:36 +00:00
render_json { InsertSupporter . create_or_update ( params [ :nonprofit_id ] , create_supporter_params . to_h ) }
2019-07-30 21:29:24 +00:00
end
# put /nonprofits/:nonprofit_id/supporters/:id
def update
@supporter = current_nonprofit . supporters . find ( params [ :id ] )
2019-11-05 18:44:54 +00:00
json_saved UpdateSupporter . from_info ( @supporter , update_supporter_params [ :supporter ] )
2019-07-30 21:29:24 +00:00
end
def bulk_delete
if params [ :selecting_all ]
supporter_ids = QuerySupporters . full_filter_expr ( current_nonprofit . id , params [ :query ] ) . select ( 'supporters.id' ) . execute . map { | h | h [ 'id' ] }
else
supporter_ids = params [ :supporter_ids ] . map ( & :to_i )
end
render_json { UpdateSupporter . bulk_delete ( current_nonprofit . id , supporter_ids ) }
end
# get /nonprofits/:nonprofit_id/supporters/merge_data
# returns the info required to merge two supporters
def merge_data
render json : QuerySupporters . merge_data ( params [ :ids ] )
end
# post /nonprofits/:nonprofit_id/supporters/merge
def merge
render JsonResp . new ( params ) do | _params |
requires ( :supporter )
requires ( :nonprofit_id ) . as_int
requires ( :supporter_ids ) . as_array
end . when_valid do | params |
params [ :supporter ] [ :nonprofit_id ] = params [ :nonprofit_id ]
2019-11-05 18:44:54 +00:00
MergeSupporters . selected ( update_supporter_params [ :supporter ] , params [ :supporter_ids ] , params [ :nonprofit_id ] , current_user . id )
2019-07-30 21:29:24 +00:00
end
end
2019-11-05 18:44:54 +00:00
private
def create_supporter_params
2020-06-18 22:33:58 +00:00
params . require ( :supporter ) . permit ( :name , :address , :city , :state_code , :country , :address_line2 , :first_name , :last_name , :customFields , :email )
2019-11-05 18:44:54 +00:00
end
def update_supporter_params
params . require ( :supporter ) . permit ( :name , :address , :city , :state_code , :country , :address_line2 )
2019-07-30 21:29:24 +00:00
end
2019-11-07 18:11:39 +00:00
end
2018-03-25 17:30:42 +00:00
end