-
Notifications
You must be signed in to change notification settings - Fork 7
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Update lead status from salesforce (#1213)
* script to update lead verification status from salesforce * add signup date to lead creation * task to clean up forgotten leads * confirm on lead creation task * modify lead save/error handling * can't check if string changed fix * tweak lead error handling * remove is_b_r_i user from contact sync * save not working in transaction * use prepend_before_action for privacy notice check * record lead changes to security log * add new roles and status to blazer * slight modification to showing privacy notice updates * revert changes to privacy for this PR * remove bad before_action * a couple more reverts * add security logs back in * use find_in_batches on lead update * lead.id -> string * only update leads that have been created in the last month
- Loading branch information
Showing
7 changed files
with
142 additions
and
64 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,77 @@ | ||
class UpdateUserLeadInfo | ||
|
||
def self.call | ||
new.call | ||
end | ||
def call | ||
# we are only using this to check users created in the last month | ||
start_date = Time.zone.now - 1.day | ||
end_date = Time.zone.now - 30.day | ||
|
||
users = User.where(salesforce_contact_id: nil).where("created_at <= ? AND created_at >= ?", start_date, end_date) | ||
.where.not(salesforce_lead_id: nil, role: :student, faculty_status: :rejected_faculty) | ||
|
||
if users.count > 300 | ||
Sentry.capture_message("Too many users #{users.count} to update in UpdateUserLeadInfo") | ||
exit | ||
end | ||
|
||
leads = OpenStax::Salesforce::Remote::Lead.select(:id, :accounts_uuid, :verification_status) | ||
.where(accounts_uuid: users.map(&:uuid)) | ||
.to_a | ||
.index_by(&:accounts_uuid) | ||
|
||
users.map do |user| | ||
lead = leads[user.uuid] | ||
|
||
unless lead.nil? | ||
previous_lead_id = user.salesforce_lead_id | ||
user.salesforce_lead_id = lead.id # it might change in SF lead merging | ||
|
||
if lead.id != previous_lead_id | ||
SecurityLog.create!( | ||
user: user, | ||
event_type: :user_lead_id_updated_from_salesforce, | ||
event_data: { previous_lead_id: previous_lead_id, new_lead_id: lead.id } | ||
) | ||
end | ||
|
||
old_fv_status = user.faculty_status | ||
user.faculty_status = case lead.verification_status | ||
when "confirmed_faculty" | ||
:confirmed_faculty | ||
when "pending_faculty" | ||
:pending_faculty | ||
when "rejected_faculty" | ||
:rejected_faculty | ||
when "rejected_by_sheerid" | ||
:rejected_by_sheerid | ||
when "incomplete_signup" | ||
:incomplete_signup | ||
when "no_faculty_info" | ||
:no_faculty_info | ||
when NilClass | ||
:no_faculty_info | ||
else | ||
Sentry.capture_message("Unknown faculty_verified field: '#{ | ||
lead.verification_status}'' on lead #{lead.id}") | ||
end | ||
|
||
if user.faculty_status_changed? | ||
SecurityLog.create!( | ||
user: user, | ||
event_type: :salesforce_updated_faculty_status, | ||
event_data: { | ||
user_id: user.id, | ||
salesforce_lead_id: lead.id, | ||
old_status: old_fv_status, | ||
new_status: user.faculty_status | ||
} | ||
) | ||
end | ||
|
||
user.save if user.changed? | ||
end | ||
end | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
30 changes: 24 additions & 6 deletions
30
lib/tasks/accounts/create_leads_for_instructors_not_sent_to_sf.rake
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,12 +1,30 @@ | ||
namespace :accounts do | ||
desc 'Create leads for faculty verified by SheerID and never sent to Salesforce' | ||
# rake accounts:create_leads_for_instructors_not_sent_to_sf | ||
# To be run to fix users that were not sent to SF during bug from 26Jan22 to xxFeb22 (hotfix release date) | ||
task :create_leads_for_instructors_not_sent_to_sf, [:day] => [:environment] do |t, args| | ||
# get all the instructors that don't have lead or contact ids | ||
users = User.where(salesforce_contact_id: nil, salesforce_lead_id: nil, role: :instructor, state: :activated).or(User.where.not(sheerid_verification_id: nil)) | ||
users.each { |user| | ||
Newflow::CreateSalesforceLead.perform_later(user: user) | ||
} | ||
# get all the instructors that don't have lead or contact ids and have a complete profile | ||
users = User.where(salesforce_contact_id: nil, salesforce_lead_id: nil, role: :instructor, is_profile_complete: true) | ||
STDOUT.puts "This will process #{users.count} users. Do you want to continue? (y/n)" | ||
|
||
begin | ||
input = STDIN.gets.strip.downcase | ||
end until %w(y n).include?(input) | ||
|
||
if input !='y' | ||
STDOUT.puts "Cancelling lead creation for abandoned users." | ||
return | ||
end | ||
|
||
users.each do |user| | ||
lead = OpenStax::Salesforce::Remote::Lead.select(:id, :verification_status).find_by(accounts_uuid: user.uuid) | ||
|
||
if lead.nil? | ||
Newflow::CreateOrUpdateSalesforceLead.call(user: user) | ||
else | ||
# set the lead id, this will update their status in UpdateUserLeadInfo | ||
user.salesforce_lead_id = lead.id | ||
user.save | ||
end | ||
end | ||
end | ||
end |