Merge pull request #6205 from betagouv/main

2021-05-11-02
This commit is contained in:
Paul Chavard 2021-05-11 18:01:13 +02:00 committed by GitHub
commit 9e1985d721
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 51 additions and 21 deletions

View file

@ -161,8 +161,7 @@ module Users
end end
def extend_conservation def extend_conservation
dossier.update(en_construction_conservation_extension: dossier.en_construction_conservation_extension + 1.month, dossier.update(conservation_extension: dossier.conservation_extension + 1.month)
conservation_extension: dossier.en_construction_conservation_extension + 1.month)
flash[:notice] = 'Votre dossier sera conservé un mois supplémentaire' flash[:notice] = 'Votre dossier sera conservé un mois supplémentaire'
redirect_to dossier_path(@dossier) redirect_to dossier_path(@dossier)
end end

View file

@ -32,6 +32,7 @@
# user_id :integer # user_id :integer
# #
class Dossier < ApplicationRecord class Dossier < ApplicationRecord
self.ignored_columns = [:en_construction_conservation_extension]
include DossierFilteringConcern include DossierFilteringConcern
include Discard::Model include Discard::Model
@ -86,7 +87,7 @@ class Dossier < ApplicationRecord
belongs_to :groupe_instructeur, optional: true belongs_to :groupe_instructeur, optional: true
belongs_to :revision, class_name: 'ProcedureRevision', optional: false belongs_to :revision, class_name: 'ProcedureRevision', optional: false
belongs_to :user, optional: false belongs_to :user, optional: true
has_one :procedure, through: :revision has_one :procedure, through: :revision
has_many :types_de_champ, through: :revision has_many :types_de_champ, through: :revision
@ -256,21 +257,22 @@ class Dossier < ApplicationRecord
scope :brouillon_close_to_expiration, -> do scope :brouillon_close_to_expiration, -> do
state_brouillon state_brouillon
.joins(:procedure) .joins(:procedure)
.where("dossiers.created_at + (duree_conservation_dossiers_dans_ds * INTERVAL '1 month') - INTERVAL :expires_in < :now", { now: Time.zone.now, expires_in: INTERVAL_BEFORE_EXPIRATION }) .where("dossiers.created_at + dossiers.conservation_extension + (duree_conservation_dossiers_dans_ds * INTERVAL '1 month') - INTERVAL :expires_in < :now", { now: Time.zone.now, expires_in: INTERVAL_BEFORE_EXPIRATION })
end end
scope :en_construction_close_to_expiration, -> do scope :en_construction_close_to_expiration, -> do
state_en_construction state_en_construction
.joins(:procedure) .joins(:procedure)
.where("dossiers.en_construction_at + dossiers.en_construction_conservation_extension + (duree_conservation_dossiers_dans_ds * INTERVAL '1 month') - INTERVAL :expires_in < :now", { now: Time.zone.now, expires_in: INTERVAL_BEFORE_EXPIRATION }) .where("dossiers.en_construction_at + dossiers.conservation_extension + (duree_conservation_dossiers_dans_ds * INTERVAL '1 month') - INTERVAL :expires_in < :now", { now: Time.zone.now, expires_in: INTERVAL_BEFORE_EXPIRATION })
end end
scope :en_instruction_close_to_expiration, -> do scope :en_instruction_close_to_expiration, -> do
state_en_instruction state_en_instruction
.joins(:procedure) .joins(:procedure)
.where("dossiers.en_instruction_at + (duree_conservation_dossiers_dans_ds * INTERVAL '1 month') - INTERVAL :expires_in < :now", { now: Time.zone.now, expires_in: INTERVAL_BEFORE_EXPIRATION }) .where("dossiers.en_instruction_at + (duree_conservation_dossiers_dans_ds * INTERVAL '1 month') - INTERVAL :expires_in < :now", { now: Time.zone.now, expires_in: INTERVAL_BEFORE_EXPIRATION })
end end
def self.termine_close_to_expiration scope :termine_close_to_expiration, -> do
dossier_ids = Traitement.termine_close_to_expiration.pluck(:dossier_id).uniq state_termine
Dossier.where(id: dossier_ids) .joins(:procedure)
.where(id: Traitement.termine_close_to_expiration.pluck(:dossier_id).uniq)
end end
scope :brouillon_expired, -> do scope :brouillon_expired, -> do
@ -347,7 +349,7 @@ class Dossier < ApplicationRecord
after_save :send_web_hook after_save :send_web_hook
after_create_commit :send_draft_notification_email after_create_commit :send_draft_notification_email
validates :user, presence: true validates :user, presence: true, if: -> { deleted_user_email_never_send.nil? }
validates :individual, presence: true, if: -> { revision.procedure.for_individual? } validates :individual, presence: true, if: -> { revision.procedure.for_individual? }
validates :groupe_instructeur, presence: true, if: -> { !brouillon? } validates :groupe_instructeur, presence: true, if: -> { !brouillon? }
@ -454,7 +456,15 @@ class Dossier < ApplicationRecord
end end
def en_construction_close_to_expiration? def en_construction_close_to_expiration?
Dossier.en_construction_close_to_expiration.where(id: self).present? self.class.en_construction_close_to_expiration.exists?(id: self)
end
def brouillon_close_to_expiration?
self.class.brouillon_close_to_expiration.exists?(id: self)
end
def close_to_expiration?
en_construction_close_to_expiration? || brouillon_close_to_expiration?
end end
def show_groupe_instructeur_details? def show_groupe_instructeur_details?

View file

@ -22,11 +22,17 @@
%li %li
= link_to "Tout le dossier", dossier_path(dossier, format: :pdf), target: "_blank", rel: "noopener", class: "menu-item menu-link" = link_to "Tout le dossier", dossier_path(dossier, format: :pdf), target: "_blank", rel: "noopener", class: "menu-item menu-link"
- if dossier.en_construction_close_to_expiration? - if dossier.close_to_expiration?
.card.warning .card.warning
.card-title Votre dossier va expirer .card-title Votre dossier va expirer
- if dossier.brouillon?
%p %p
Votre dossier a été déposé, mais va bientôt expirer. Cela signifie qu'il va bientôt être supprimé sans avoir été traité par ladministration. Votre dossier est en brouillon, mais va bientôt expirer. Cela signifie quil va bientôt être supprimé sans avoir été déposé.
Si vous souhaitez le conserver afin de poursuivre la démarche, vous pouvez le conserver
un mois de plus en cliquant sur le bouton ci-dessous.
- else
%p
Votre dossier a été déposé, mais va bientôt expirer. Cela signifie quil va bientôt être supprimé sans avoir été traité par ladministration.
Si vous souhaitez le conserver afin de poursuivre la démarche, vous pouvez le conserver Si vous souhaitez le conserver afin de poursuivre la démarche, vous pouvez le conserver
un mois de plus en cliquant sur le bouton ci-dessous. un mois de plus en cliquant sur le bouton ci-dessous.
%br %br

View file

@ -8,5 +8,5 @@ fr:
one: "Afin de limiter la conservation de vos données personnelles, le dossier en brouillon suivant sera bientôt automatiquement supprimé :" one: "Afin de limiter la conservation de vos données personnelles, le dossier en brouillon suivant sera bientôt automatiquement supprimé :"
other: "Afin de limiter la conservation de vos données personnelles, les dossiers en brouillon suivant seront bientôt automatiquement supprimés :" other: "Afin de limiter la conservation de vos données personnelles, les dossiers en brouillon suivant seront bientôt automatiquement supprimés :"
footer: footer:
one: "Si vous souhaitez toujours déposer ce dossier, vous pouvez retrouver votre brouillon pendant encore <b>un mois</b>. Et sinon, vous navez rien à faire." one: "Si vous souhaitez toujours déposer ce dossier, vous pouvez retrouver votre brouillon pendant encore <b>un mois</b>. Si vous souhaitez conserver votre dossier plus longtemps, vous pouvez <b>prolonger sa durée de conservation</b> dans l'interface. Et sinon, vous navez rien à faire."
other: "Si vous souhaitez toujours déposer ces dossiers, vous pouvez retrouver vos brouillons pendant encore <b>un mois</b>. Et sinon, vous navez rien à faire." other: "Si vous souhaitez toujours déposer ces dossiers, vous pouvez retrouver vos brouillons pendant encore <b>un mois</b>. Si vous souhaitez conserver vos dossiers plus longtemps, vous pouvez <b>prolonger leur durée de conservation</b> au cas par cas dans l'interface. Et sinon, vous navez rien à faire."

View file

@ -0,0 +1,5 @@
class AddDefaultToConservationExtension < ActiveRecord::Migration[6.1]
def change
change_column_default :dossiers, :conservation_extension, 0.days
end
end

View file

@ -10,7 +10,7 @@
# #
# It's strongly recommended that you check this file into your version control system. # It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema.define(version: 2021_05_05_115445) do ActiveRecord::Schema.define(version: 2021_05_06_135603) do
# These are extensions that must be enabled in order to support this database # These are extensions that must be enabled in order to support this database
enable_extension "plpgsql" enable_extension "plpgsql"
@ -274,7 +274,7 @@ ActiveRecord::Schema.define(version: 2021_05_05_115445) do
t.datetime "last_avis_updated_at" t.datetime "last_avis_updated_at"
t.datetime "last_commentaire_updated_at" t.datetime "last_commentaire_updated_at"
t.string "api_entreprise_job_exceptions", array: true t.string "api_entreprise_job_exceptions", array: true
t.interval "conservation_extension" t.interval "conservation_extension", default: "PT0S"
t.string "deleted_user_email_never_send" t.string "deleted_user_email_never_send"
t.index "to_tsvector('french'::regconfig, (search_terms || private_search_terms))", name: "index_dossiers_on_search_terms_private_search_terms", using: :gin t.index "to_tsvector('french'::regconfig, (search_terms || private_search_terms))", name: "index_dossiers_on_search_terms_private_search_terms", using: :gin
t.index "to_tsvector('french'::regconfig, search_terms)", name: "index_dossiers_on_search_terms", using: :gin t.index "to_tsvector('french'::regconfig, search_terms)", name: "index_dossiers_on_search_terms", using: :gin

View file

@ -52,6 +52,15 @@ describe Dossier do
is_expected.to include(just_expired_dossier) is_expected.to include(just_expired_dossier)
is_expected.to include(long_expired_dossier) is_expected.to include(long_expired_dossier)
end end
context 'does not include an expiring dossier that has been postponed' do
before do
expiring_dossier.update(conservation_extension: 1.month)
expiring_dossier.reload
end
it { is_expected.not_to include(expiring_dossier) }
end
end end
describe 'en_construction_close_to_expiration' do describe 'en_construction_close_to_expiration' do
@ -72,7 +81,7 @@ describe Dossier do
context 'does not include an expiring dossier that has been postponed' do context 'does not include an expiring dossier that has been postponed' do
before do before do
expiring_dossier.update(en_construction_conservation_extension: 1.month) expiring_dossier.update(conservation_extension: 1.month)
expiring_dossier.reload expiring_dossier.reload
end end

View file

@ -332,7 +332,7 @@ describe User, type: :model do
end end
end end
context 'with dossiers with processing strted' do context 'with dossiers with processing started' do
let!(:dossier_en_instruction) { create(:dossier, :en_instruction, user: user) } let!(:dossier_en_instruction) { create(:dossier, :en_instruction, user: user) }
let!(:dossier_termine) { create(:dossier, :accepte, user: user) } let!(:dossier_termine) { create(:dossier, :accepte, user: user) }
@ -347,6 +347,7 @@ describe User, type: :model do
expect(dossier_termine.reload).to be_present expect(dossier_termine.reload).to be_present
expect(dossier_termine.user).to be_nil expect(dossier_termine.user).to be_nil
expect(dossier_termine.user_email_for(:display)).to eq(user.email) expect(dossier_termine.user_email_for(:display)).to eq(user.email)
expect(dossier_termine.valid?).to be_truthy
expect { dossier_termine.user_email_for(:notification) }.to raise_error(RuntimeError) expect { dossier_termine.user_email_for(:notification) }.to raise_error(RuntimeError)
expect(User.find_by(id: user.id)).to be_nil expect(User.find_by(id: user.id)).to be_nil