143 lines
4.2 KiB
Ruby
Executable file
143 lines
4.2 KiB
Ruby
Executable file
class NonprofitsController < ApplicationController
|
|
include NonprofitHelper
|
|
|
|
helper_method :current_nonprofit_user?
|
|
before_filter :authenticate_nonprofit_user!, only: [:dashboard, :dashboard_metrics, :dashboard_todos, :payment_history, :profile_todos, :recurring_donation_stats, :update, :verify_identity]
|
|
before_filter :authenticate_super_admin!, only: [:destroy]
|
|
|
|
# get /nonprofits/:id
|
|
# get /:state_code/:city/:name
|
|
def show
|
|
if !current_nonprofit.published && !current_role?(:super_admin)
|
|
block_with_sign_in
|
|
return
|
|
end
|
|
@nonprofit = current_nonprofit
|
|
@url = Format::Url.concat(root_url, @nonprofit.url)
|
|
@supporters = @nonprofit.supporters.not_deleted
|
|
@profiles = @nonprofit.profiles.order('total_raised DESC').limit(5).includes(:user).uniq
|
|
|
|
events = @nonprofit.events.not_deleted.order('start_datetime desc')
|
|
campaigns = @nonprofit.campaigns.not_deleted.order('created_at desc')
|
|
|
|
@events = events.upcoming
|
|
@any_past_events = events.past.any?
|
|
@active_campaigns = campaigns.active
|
|
@any_past_campaigns = campaigns.past.any?
|
|
|
|
@nonprofit_background_image = FetchBackgroundImage.with_model(@nonprofit)
|
|
|
|
respond_to do |format|
|
|
format.html
|
|
format.json {render json: @nonprofit}
|
|
end
|
|
end
|
|
|
|
def recurring_donation_stats
|
|
render json: QueryRecurringDonations.overall_stats(params[:nonprofit_id])
|
|
end
|
|
|
|
def profile_todos
|
|
render json: FetchTodoStatus.for_profile(current_nonprofit)
|
|
end
|
|
|
|
def dashboard_todos
|
|
render json: FetchTodoStatus.for_dashboard(current_nonprofit)
|
|
end
|
|
|
|
def create
|
|
current_user ||= User.find(params[:user_id])
|
|
json_saved Nonprofit.register(current_user, params[:nonprofit])
|
|
end
|
|
|
|
def update
|
|
flash[:notice] = 'Update successful!'
|
|
current_nonprofit.update_attributes params[:nonprofit].except(:verification_status)
|
|
json_saved current_nonprofit
|
|
end
|
|
|
|
def destroy
|
|
current_nonprofit.destroy
|
|
flash[:notice] = 'Nonprofit removed'
|
|
render json: {}
|
|
end
|
|
|
|
# get /nonprofits/:id/donate
|
|
def donate
|
|
@nonprofit = current_nonprofit
|
|
@referer = params[:origin] || request.env['HTTP_REFERER']
|
|
@campaign = current_nonprofit.campaigns.find_by_id(params[:campaign_id]) if params[:campaign_id]
|
|
@countries_translations = countries_list(I18n.locale)
|
|
respond_to { |format| format.html{render layout: 'layouts/embed'} }
|
|
end
|
|
|
|
def btn
|
|
@nonprofit = current_nonprofit
|
|
respond_to { |format| format.html{render layout: 'layouts/embed'} }
|
|
end
|
|
|
|
# get /nonprofits/:id/supporter_form
|
|
def supporter_form
|
|
@nonprofit = current_nonprofit
|
|
respond_to { |format| format.html{render layout: 'layouts/embed'} }
|
|
end
|
|
|
|
# post /nonprofits/:id/supporter_with_tag
|
|
def custom_supporter
|
|
@nonprofit = current_nonprofit
|
|
render json: InsertSupporter.with_tags_and_fields(@nonprofit.id, params[:supporter])
|
|
end
|
|
|
|
def dashboard
|
|
@nonprofit = current_nonprofit
|
|
respond_to { |format| format.html }
|
|
end
|
|
|
|
def dashboard_metrics
|
|
render json: Hamster::Hash[data: NonprofitMetrics.all_metrics(current_nonprofit.id)]
|
|
end
|
|
|
|
def payment_history
|
|
render json: NonprofitMetrics.payment_history(params)
|
|
end
|
|
|
|
# put /nonprofits/:id/verify_identity
|
|
def verify_identity
|
|
if params[:legal_entity][:address]
|
|
tos = {
|
|
ip: current_user.current_sign_in_ip,
|
|
date: Time.current.to_i,
|
|
user_agent: request.user_agent
|
|
}
|
|
end
|
|
render_json{ UpdateNonprofit.verify_identity(params[:nonprofit_id], params[:legal_entity], tos) }
|
|
end
|
|
|
|
def search
|
|
render json: QueryNonprofits.by_search_string(params[:npo_name])
|
|
end
|
|
|
|
def onboard
|
|
render_json do
|
|
result = OnboardAccounts.create_org(params)
|
|
sign_in result[:user]
|
|
result
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def countries_list(locale)
|
|
all_countries = ISO3166::Country.translations(locale)
|
|
|
|
if Settings.intntl.all_countries
|
|
countries = all_countries.select{ |code, name| Settings.intntl.all_countries.include? code }
|
|
countries = countries.map{ |code, name| [code.upcase, name] }.sort{ |a, b| a[1] <=> b[1] }
|
|
countries.push([Settings.intntl.other_country.upcase, I18n.t('nonprofits.donate.info.supporter.other_country')]) if Settings.intntl.other_country
|
|
countries
|
|
else
|
|
all_countries.map{ |code, name| [code.upcase, name] }.sort{ |a, b| a[1] <=> b[1] }
|
|
end
|
|
end
|
|
|
|
end
|