145 lines
5.8 KiB
Ruby
145 lines
5.8 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
# License: AGPL-3.0-or-later WITH Web-Template-Output-Additional-Permission-3.0-or-later
|
|
require 'param_validation'
|
|
require 'qx'
|
|
|
|
module OnboardAccounts
|
|
def self.create_org(params)
|
|
nonprofit_data = set_nonprofit_defaults(params['nonprofit'])
|
|
ParamValidation.new(nonprofit_data,
|
|
name: { required: true },
|
|
# email: {required: true},
|
|
# phone: {required: true},
|
|
city: { required: true },
|
|
state_code: { required: true })
|
|
user_data = set_user_defaults(params['user'])
|
|
ParamValidation.new(user_data,
|
|
name: { required: true },
|
|
email: { required: true },
|
|
password: { required: true },
|
|
phone: { required: true })
|
|
extra_info = params['extraInfo']
|
|
|
|
nonprofit = Qx.insert_into(:nonprofits)
|
|
.values(nonprofit_data).timestamps
|
|
.returning('*')
|
|
.execute.last
|
|
|
|
billing_plan_id = Houdini.default_bp.id
|
|
billing_subscription = Qx.insert_into(:billing_subscriptions)
|
|
.values(
|
|
nonprofit_id: nonprofit['id'],
|
|
billing_plan_id: billing_plan_id,
|
|
status: 'active'
|
|
)
|
|
.timestamps.execute.last
|
|
|
|
# Create the user using the User and Role models (since we have to use Devise)
|
|
user = User.create!(user_data)
|
|
role = Qx.insert_into(:roles)
|
|
.values(user_id: user.id, name: 'nonprofit_admin', host_id: nonprofit['id'], host_type: 'Nonprofit')
|
|
.timestamps
|
|
.execute.last
|
|
|
|
delay.send_onboard_email(nonprofit, nonprofit_data, user_data, extra_info)
|
|
|
|
{
|
|
nonprofit: nonprofit,
|
|
user: user,
|
|
role: role,
|
|
billing_subscription: billing_subscription
|
|
}
|
|
end
|
|
|
|
### ethis is a one time method in order to add a user without testing for the method. Do not use this long term
|
|
def self.create_org_with_user(params, user = nil)
|
|
nonprofit_data = set_nonprofit_defaults(params['nonprofit'])
|
|
ParamValidation.new(nonprofit_data,
|
|
name: { required: true },
|
|
# email: {required: true},
|
|
# phone: {required: true},
|
|
city: { required: true },
|
|
state_code: { required: true })
|
|
unless user
|
|
user_data = set_user_defaults(params['user'])
|
|
ParamValidation.new(user_data,
|
|
name: { required: true },
|
|
email: { required: true },
|
|
password: { required: true },
|
|
phone: { required: true })
|
|
end
|
|
extra_info = params['extraInfo']
|
|
|
|
nonprofit = Qx.insert_into(:nonprofits)
|
|
.values(nonprofit_data).timestamps
|
|
.returning('*')
|
|
.execute.last
|
|
# Create a billing subscription for the 6% fee tier
|
|
billing_plan_id = Houdini.default_bp.id
|
|
billing_subscription = Qx.insert_into(:billing_subscriptions)
|
|
.values(
|
|
nonprofit_id: nonprofit['id'],
|
|
billing_plan_id: billing_plan_id,
|
|
status: 'active'
|
|
)
|
|
.timestamps.execute.last
|
|
|
|
# Create the user using the User and Role models (since we have to use Devise)
|
|
user = !user ? User.create!(user_data) : user
|
|
role = Qx.insert_into(:roles)
|
|
.values(user_id: user.id, name: 'nonprofit_admin', host_id: nonprofit['id'], host_type: 'Nonprofit')
|
|
.timestamps
|
|
.execute.last
|
|
|
|
delay.send_onboard_email(nonprofit, nonprofit_data, user_data, extra_info)
|
|
|
|
{
|
|
nonprofit: nonprofit,
|
|
user: user,
|
|
role: role,
|
|
billing_subscription: billing_subscription
|
|
}
|
|
end
|
|
|
|
def self.set_nonprofit_defaults(data)
|
|
data = data.merge(
|
|
verification_status: 'unverified',
|
|
published: true,
|
|
vetted: Houdini.nonprofits_must_be_vetted ? false : true,
|
|
statement: data[:name][0..16],
|
|
city_slug: Format::Url.convert_to_slug(data[:city]),
|
|
state_code_slug: Format::Url.convert_to_slug(data[:state_code]),
|
|
slug: Format::Url.convert_to_slug(data[:name])
|
|
)
|
|
data
|
|
end
|
|
|
|
def self.set_user_defaults(data)
|
|
data
|
|
end
|
|
|
|
# np is the created nonprofit row in the database
|
|
# nonprofit_data is the data sent from the onboarding form, and may include extra stuff not in the db
|
|
# user_data and extra_info are additional data hashes sent from the onboarding form
|
|
def self.send_onboard_email(np, nonprofit_data, user_data, extra_info)
|
|
# Send the welcome email to the nonprofit
|
|
NonprofitCreateJob.perform_later(Nonprofit.find(np['id']))
|
|
# Send an email notifying people internal folks of the new nonporfit, with the above info and extra_info
|
|
to_emails = ['support@commitchange.com']
|
|
message = %(
|
|
New signup on CommitChange for an organization with the name "#{np['name']}"
|
|
Location: #{np['city']} #{np['state_code']}, #{np['zip_code']}
|
|
Org Email: #{nonprofit_data['email']}
|
|
Org Phone: #{nonprofit_data['phone']}
|
|
User Email: #{user_data['email']}
|
|
User Name: #{user_data['name']}
|
|
User Phone: #{user_data['phone']}
|
|
Entity Type: #{extra_info['entity_type']}
|
|
How they heard about us: #{extra_info['how_they_heard']}
|
|
What they want to use: #{%w[use_donations use_crm use_campaigns use_events].select { |x| extra_info[x] == 'on' }.join(', ')}
|
|
)
|
|
subject = "New Account Signup: #{np['name']}"
|
|
GenericMailer.generic_mail('support@commitchange.com', 'CC Bot', message, subject, to_emails, '').deliver
|
|
end
|
|
end
|