Merge pull request #10836 from mfo/US/fix-mistake-changing-dossier-repasser-en-construciton

ETQ administrateur, je ne souhaite pas voir des dossiers en instruction repasser en construction pour une donnée qui ne m'est pas necessaire
This commit is contained in:
mfo 2024-09-23 11:54:56 +00:00 committed by GitHub
commit d16a40b6aa
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 84 additions and 7 deletions

View file

@ -26,13 +26,15 @@ module Maintenance
champ.code = formated_results.first[:value]
champ.save!
else # otherwise, we can't find the expected departement
champ.code_departement = nil
champ.code_postal = nil
champ.external_id = nil
champ.value = nil
champ.save(validate: false)
if champ.dossier.en_construction?
champ.code_departement = nil
champ.code_postal = nil
champ.external_id = nil
champ.value = nil
champ.save(validate: false)
ask_user_correction(champ)
ask_user_correction(champ)
end
end
end
end

View file

@ -0,0 +1,43 @@
# frozen_string_literal: true
module Maintenance
class ResolvePendingCorrectionForDossierWithInvalidCommuneExternalIdTask < MaintenanceTasks::Task
DEFAULT_INSTRUCTEUR_EMAIL = ENV.fetch('DEFAULT_INSTRUCTEUR_EMAIL') { CONTACT_EMAIL }
no_collection
def process
DossierCorrection.joins(:commentaire)
.where(commentaire: { instructeur_id: current_instructeur.id })
.where(resolved_at: nil)
.find_each do |dossier_correction|
penultimate_traitement, last_traitement = *dossier_correction.dossier.traitements.last(2)
dossier_correction.resolve!
if last_traitement_by_us?(last_traitement) && last_transition_to_en_construction?(last_traitement, penultimate_traitement)
dossier_correction.dossier.passer_en_instruction(instructeur: current_instructeur) if dossier_correction.dossier.validate(:champs_public_value)
end
end
end
def current_instructeur
@current_instructeur = User.find_by(email: DEFAULT_INSTRUCTEUR_EMAIL).instructeur
end
def current_instructeur_id
current_instructeur.id
end
def current_instructeur_email
current_instructeur.email
end
def last_traitement_by_us?(traitement)
traitement.instructeur_email == DEFAULT_INSTRUCTEUR_EMAIL
end
def last_transition_to_en_construction?(last_traitement, penultimate_traitement)
last_traitement.state == "en_construction" && penultimate_traitement.state == 'en_instruction'
end
end
end

View file

@ -30,7 +30,7 @@ module Maintenance
end
context 'en_instruction (go back to en_construction!), send comment' do
let(:state) { [:en_instruction, :en_construction].sample }
let(:state) { :en_construction }
it 'flags as pending correction' do
expect { subject }.to change { champ.reload.value }.from('Marseille').to(nil)

View file

@ -0,0 +1,32 @@
# frozen_string_literal: true
require "rails_helper"
module Maintenance
RSpec.describe ResolvePendingCorrectionForDossierWithInvalidCommuneExternalIdTask do
describe "#process" do
subject(:process) { described_class.process }
let!(:instructeur) { create(:instructeur, email: ENV.fetch('DEFAULT_INSTRUCTEUR_EMAIL') { CONTACT_EMAIL }) }
let(:commentaire) { create(:commentaire, instructeur:) }
let(:dossier_correction) { create(:dossier_correction, commentaire:, dossier:, resolved_at: nil) }
before { dossier_correction }
context 'when dossier did transitioned to en_construction from en_instruction' do
let(:dossier) { create(:dossier, :en_instruction) }
before { dossier.repasser_en_construction!(instructeur:) }
it 'goes back to en_instruction (my mistake, sorry dear colleague, users etc...)' do
expect { subject }.to change { dossier.reload.state }.from('en_construction').to('en_instruction')
end
end
context 'when dossier didnt transitioned' do
let(:dossier) { create(:dossier, :en_construction) }
before { create(:traitement, dossier:) }
it 'noop' do
expect { subject }.not_to change { dossier.reload.state }
end
end
end
end
end