Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
87 changes: 87 additions & 0 deletions app/models/profile.rb
Original file line number Diff line number Diff line change
Expand Up @@ -256,6 +256,93 @@ def deactivate_due_to_ipp_expiration_during_fraud_review
)
end

def deactivate_duplicate
raise 'Profile not active' unless active
raise 'Profile not a duplicate' unless DuplicateProfile.exists?(['? = ANY(profile_ids)', id])

transaction do
update!(
active: false,
fraud_review_pending_at: nil,
fraud_rejection_at: Time.zone.now,
)
DuplicateProfile.where(['? = ANY(profile_ids)', id]).find_each do |duplicate_profile|
if duplicate_profile.profile_ids.length > 1
duplicate_profile.profile_ids.delete(id)
duplicate_profile.save
else
duplicate_profile.update!(
closed_at: Time.zone.now,
self_serviced: false,
fraud_investigation_conclusive: true,
)
end

service_provider = ServiceProvider.find_sole_by(issuer: duplicate_profile.service_provider)
user.confirmed_email_addresses.each do |email_address|
mailer = UserMailer.with(user: user, email_address: email_address)
mailer.dupe_profile_account_review_complete_locked(
agency_name: service_provider.friendly_name,
).deliver_now_or_later
end
end
end
end

def clear_duplicate
raise 'Profile not active' unless active
raise 'Profile not a duplicate' unless DuplicateProfile.exists?(['? = ANY(profile_ids)', id])
raise 'Profile has other duplicates' if DuplicateProfile.exists?(
['? = ANY(profile_ids) AND cardinality(profile_ids) > 1', id],
)

transaction do
DuplicateProfile.where(['? = ANY(profile_ids)', id]).find_each do |duplicate_profile|
duplicate_profile.update!(
closed_at: Time.zone.now,
self_serviced: false,
fraud_investigation_conclusive: true,
)

service_provider = ServiceProvider.find_sole_by(issuer: duplicate_profile.service_provider)
user.confirmed_email_addresses.each do |email_address|
mailer = UserMailer.with(user: user, email_address: email_address)
mailer.dupe_profile_account_review_complete_success(
agency_name: service_provider.friendly_name,
).deliver_now_or_later
end
end
end
end

def close_inconclusive_duplicate
raise 'Profile not active' unless active
raise 'Profile not a duplicate' unless DuplicateProfile.exists?(['? = ANY(profile_ids)', id])

transaction do
DuplicateProfile.where(['? = ANY(profile_ids)', id]).find_each do |duplicate_profile|
if duplicate_profile.profile_ids.length > 1
duplicate_profile.profile_ids.delete(id)
duplicate_profile.save
else
duplicate_profile.update!(
closed_at: Time.zone.now,
self_serviced: false,
fraud_investigation_conclusive: false,
)
end

service_provider = ServiceProvider.find_sole_by(issuer: duplicate_profile.service_provider)
user.confirmed_email_addresses.each do |email_address|
mailer = UserMailer.with(user: user, email_address: email_address)
mailer.dupe_profile_account_review_complete_unable(
agency_name: service_provider.friendly_name,
).deliver_now_or_later
end
end
end
end

def reject_for_fraud(notify_user:)
update!(
active: false,
Expand Down
36 changes: 36 additions & 0 deletions app/services/analytics_events.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6523,6 +6523,42 @@ def oidc_logout_visited(
)
end

# Tracks when fraud clears duplicate profile
# @param [Boolean] success Whether the profile was successfully cleared
# @param [Hash] errors Errors resulting from clearing
def one_account_clear_duplicate_profile(success:, errors:, **extra)
track_event(
:one_account_clear_duplicate_profile,
success: success,
errors: errors,
**extra,
)
end

# Tracks when fraud clears duplicate profile
# @param [Boolean] success Whether the profile was successfully cleared
# @param [Hash] errors Errors resulting from clearing
def one_account_close_inconclusive_duplicate(success:, errors:, **extra)
track_event(
:one_account_close_inconclusive_duplicate,
success: success,
errors: errors,
**extra,
)
end

# Tracks when fraud deactivates duplicate profile
# @param [Boolean] success Whether the profile was successfully deactivated
# @param [Hash] errors Errors resulting from deactivation
def one_account_deactivate_duplicate_profile(success:, errors:, **extra)
track_event(
:one_account_deactivate_duplicate_profile,
success: success,
errors: errors,
**extra,
)
end

# Tracks when user lands on page notifying them multiple profiles contain same information
def one_account_duplicate_profiles_detected
track_event(:one_account_duplicate_profiles_detected)
Expand Down
Loading