diff --git a/app/services/expired/users_deletion_service.rb b/app/services/expired/users_deletion_service.rb index 478a097ed..7b48156e6 100644 --- a/app/services/expired/users_deletion_service.rb +++ b/app/services/expired/users_deletion_service.rb @@ -32,16 +32,10 @@ class Expired::UsersDeletionService < Expired::MailRateLimiter # rubocop:disable DS/Unscoped def expired_users_with_dossiers - users = User.arel_table - dossiers = Dossier.arel_table - expired_users - .joins( - users.join(dossiers, Arel::Nodes::InnerJoin) - .on(users[:id].eq(dossiers[:user_id]) - .and(dossiers[:state].not_eq(Dossier.states.fetch(:en_instruction)))) - .join_sources - ) + .joins(:dossiers) + .group("users.id") + .having("NOT 'en_instruction' = ANY(ARRAY_AGG(dossiers.state))") end def expired_users_without_dossiers diff --git a/app/views/user_mailer/notify_inactive_close_to_deletion.html.haml b/app/views/user_mailer/notify_inactive_close_to_deletion.html.haml index ea5c2cbe6..3fdb4efbe 100644 --- a/app/views/user_mailer/notify_inactive_close_to_deletion.html.haml +++ b/app/views/user_mailer/notify_inactive_close_to_deletion.html.haml @@ -5,18 +5,20 @@ %p Cela fait plus de deux ans que vous ne vous êtes pas connecté à #{APPLICATION_NAME}. - %br - Dans le respect du RGPD, nous allons - %strong supprimer votre compte d'ici #{distance_of_time_in_words(Expired::REMAINING_WEEKS_BEFORE_EXPIRATION.weeks)}. + - if @user.dossiers.not_brouillon.count == 0 + Aussi vous n'avez plus de dossier sur la plateforme. + %p - %strong Ne vous en faites pas, - vos dossiers restent conservé par l'administration. À tout moment vous pourrez re-créer une compte sur notre plateforme. - %br - Mais dans l'attente, nous tenons a respecter le RGPD et protéger ainsi votre vie privée. + Dans le respect du règlement général sur la protection des données, nous allons + %strong supprimer votre compte d'ici #{distance_of_time_in_words(Expired::REMAINING_WEEKS_BEFORE_EXPIRATION.weeks)}. - if @user.dossiers.not_brouillon.count > 0 %p + %strong Ne vous en faites pas, + vos dossiers traités sont conservés par l'administration. Aussi, à tout moment vous pourrez re-créer une compte sur notre plateforme. Au besoin, vous pouvez télécharger vos dossiers en suivant ce lien : = link_to dossiers_url, dossiers_url +%p Vous souhaitez conserver votre compte et vos dossiers ? Connectez-vous avec vos identifiants et nous conserverons vos données. + = render partial: "layouts/mailers/signature" diff --git a/spec/services/expired/expired_users_deletion_service_spec.rb b/spec/services/expired/expired_users_deletion_service_spec.rb index 67f16c178..8ae563f7c 100644 --- a/spec/services/expired/expired_users_deletion_service_spec.rb +++ b/spec/services/expired/expired_users_deletion_service_spec.rb @@ -165,6 +165,14 @@ describe Expired::UsersDeletionService do it { is_expected.to include(user) } end + context 'when user is expired and has a many dossier brouillon' do + before do + create(:dossier, :brouillon, user:, created_at: last_signed_in_expired) + create(:dossier, :brouillon, user:, created_at: last_signed_in_expired) + end + it { is_expected.to eq([user]) } + end + context 'when user is expired and has a dossier en_construction' do let(:dossier) { create(:dossier, :en_construction, user:, created_at: last_signed_in_expired) } it { is_expected.to include(user) } @@ -175,6 +183,14 @@ describe Expired::UsersDeletionService do it { is_expected.not_to include(user) } end + context 'when user is expired and has a dossier en_instruction plus another one brouillon' do + before do + create(:dossier, :en_instruction, user:, created_at: last_signed_in_expired) + create(:dossier, :brouillon, user:, created_at: last_signed_in_expired) + end + it { is_expected.to eq([]) } + end + context 'when user is expired and has a dossier termine' do let(:dossier) { create(:dossier, :accepte, user:, created_at: last_signed_in_expired) } it { is_expected.to include(user) }