a8354bd103
The code paths for deleting a dossier were different, depending on whether the dossier was deleted by the user, or from the Manager. This commit unifies the two code paths into one. This has the effect of: - An operation log is now recorded when an user deletes its own dossier; - Gestionnaires are now notified even when the dossier is deleted from the Manager; - The `support:delete_user_account` task now requires the email address of the author.
70 lines
2 KiB
Ruby
70 lines
2 KiB
Ruby
require Rails.root.join("lib", "tasks", "task_helper")
|
||
|
||
namespace :support do
|
||
desc <<~EOD
|
||
Delete the user account for a given USER_EMAIL on the behalf of ADMIN_EMAIL.
|
||
Only works if the user has no dossier where the instruction has started.
|
||
EOD
|
||
task delete_user_account: :environment do
|
||
user_email = ENV['USER_EMAIL']
|
||
fail "Must specify a USER_EMAIL" if user_email.nil?
|
||
|
||
administration_email = ENV['ADMIN_EMAIL']
|
||
fail "Must specify the ADMIN_EMAIL of the operator performing the deletion (yourself)" if administration_email.nil?
|
||
|
||
user = User.find_by!(email: user_email)
|
||
administration = Administration.find_by!(email: administration_email)
|
||
|
||
if user.dossiers.state_instruction_commencee.any?
|
||
fail "Cannot delete this user because instruction has started for some dossiers"
|
||
end
|
||
|
||
user.dossiers.each do |dossier|
|
||
dossier.delete_and_keep_track(administration)
|
||
end
|
||
user.destroy
|
||
end
|
||
|
||
desc <<~EOD
|
||
Change the SIRET for a given dossier (specified by DOSSIER_ID)
|
||
EOD
|
||
task update_dossier_siret: :environment do
|
||
siret_number = ENV['SIRET']
|
||
dossier_id = ENV['DOSSIER_ID']
|
||
|
||
if siret_number.nil?
|
||
fail "Must specify a SIRET"
|
||
end
|
||
|
||
siret_number = siret_number.dup # Unfreeze the string
|
||
siret = Siret.new(siret: siret_number)
|
||
if siret.invalid?
|
||
fail siret.errors.full_messages.to_sentence
|
||
end
|
||
|
||
dossier = Dossier.find(dossier_id)
|
||
|
||
EtablissementUpdateJob.perform_now(dossier, siret_number)
|
||
end
|
||
|
||
desc <<~EOD
|
||
Change a user’s mail from OLD_EMAIL to NEW_EMAIL.
|
||
Also works for administrateurs and instructeurs.
|
||
EOD
|
||
task change_user_email: :environment do
|
||
old_email = ENV['OLD_EMAIL']
|
||
new_email = ENV['NEW_EMAIL']
|
||
|
||
if User.find_by(email: new_email).present?
|
||
fail "There is an existing account for #{new_email}, not overwriting"
|
||
end
|
||
|
||
user = User.find_by(email: old_email)
|
||
|
||
if user.nil?
|
||
fail "Couldn’t find existing account for #{old_email}"
|
||
end
|
||
|
||
user.update(email: new_email)
|
||
end
|
||
end
|