Manage GET prefill by creating a dossier
This commit is contained in:
parent
802a23057b
commit
deb51e3880
5 changed files with 30 additions and 37 deletions
|
@ -2,15 +2,22 @@ module Users
|
||||||
class CommencerController < ApplicationController
|
class CommencerController < ApplicationController
|
||||||
layout 'procedure_context'
|
layout 'procedure_context'
|
||||||
|
|
||||||
before_action :retrieve_prefilled_dossier, if: -> { params[:prefill_token].present? }, only: :commencer
|
|
||||||
before_action :set_prefilled_dossier_ownership, if: -> { user_signed_in? && @prefilled_dossier&.orphan? }, only: :commencer
|
|
||||||
before_action :check_prefilled_dossier_ownership, if: -> { user_signed_in? && @prefilled_dossier }, only: :commencer
|
|
||||||
|
|
||||||
def commencer
|
def commencer
|
||||||
@procedure = retrieve_procedure
|
@procedure = retrieve_procedure
|
||||||
return procedure_not_found if @procedure.blank? || @procedure.brouillon?
|
return procedure_not_found if @procedure.blank? || @procedure.brouillon?
|
||||||
|
|
||||||
@revision = @procedure.published_revision
|
@revision = @procedure.published_revision
|
||||||
|
|
||||||
|
if prefill_params_present?
|
||||||
|
build_prefilled_dossier
|
||||||
|
elsif params[:prefill_token].present?
|
||||||
|
retrieve_prefilled_dossier
|
||||||
|
end
|
||||||
|
|
||||||
|
if user_signed_in?
|
||||||
|
set_prefilled_dossier_ownership if @prefilled_dossier&.orphan?
|
||||||
|
check_prefilled_dossier_ownership if @prefilled_dossier
|
||||||
|
end
|
||||||
|
|
||||||
render 'commencer/show'
|
render 'commencer/show'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -22,22 +29,6 @@ module Users
|
||||||
render 'commencer/show'
|
render 'commencer/show'
|
||||||
end
|
end
|
||||||
|
|
||||||
def preremplir
|
|
||||||
@procedure = retrieve_procedure
|
|
||||||
dossier = Dossier.new(
|
|
||||||
revision: @procedure.active_revision,
|
|
||||||
groupe_instructeur: @procedure.defaut_groupe_instructeur_for_new_dossier,
|
|
||||||
state: Dossier.states.fetch(:brouillon),
|
|
||||||
prefilled: true
|
|
||||||
)
|
|
||||||
dossier.build_default_individual
|
|
||||||
if dossier.save
|
|
||||||
dossier.prefill!(PrefillParams.new(dossier, params.to_unsafe_h).to_a)
|
|
||||||
end
|
|
||||||
|
|
||||||
redirect_to commencer_url(@procedure.path, prefill_token: dossier.prefill_token)
|
|
||||||
end
|
|
||||||
|
|
||||||
def dossier_vide_pdf
|
def dossier_vide_pdf
|
||||||
@procedure = retrieve_procedure_with_closed
|
@procedure = retrieve_procedure_with_closed
|
||||||
return procedure_not_found if @procedure.blank? || @procedure.brouillon?
|
return procedure_not_found if @procedure.blank? || @procedure.brouillon?
|
||||||
|
@ -82,6 +73,10 @@ module Users
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
|
def prefill_params_present?
|
||||||
|
params.keys.find { |param| param.split('_').first == "champ" }
|
||||||
|
end
|
||||||
|
|
||||||
def retrieve_procedure
|
def retrieve_procedure
|
||||||
Procedure.publiees.or(Procedure.brouillons).find_by(path: params[:path])
|
Procedure.publiees.or(Procedure.brouillons).find_by(path: params[:path])
|
||||||
end
|
end
|
||||||
|
@ -90,6 +85,19 @@ module Users
|
||||||
Procedure.publiees.or(Procedure.brouillons).or(Procedure.closes).order(published_at: :desc).find_by(path: params[:path])
|
Procedure.publiees.or(Procedure.brouillons).or(Procedure.closes).order(published_at: :desc).find_by(path: params[:path])
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def build_prefilled_dossier
|
||||||
|
@prefilled_dossier = Dossier.new(
|
||||||
|
revision: @revision,
|
||||||
|
groupe_instructeur: @procedure.defaut_groupe_instructeur_for_new_dossier,
|
||||||
|
state: Dossier.states.fetch(:brouillon),
|
||||||
|
prefilled: true
|
||||||
|
)
|
||||||
|
@prefilled_dossier.build_default_individual
|
||||||
|
if @prefilled_dossier.save
|
||||||
|
@prefilled_dossier.prefill!(PrefillParams.new(@prefilled_dossier, params.to_unsafe_h).to_a)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def retrieve_prefilled_dossier
|
def retrieve_prefilled_dossier
|
||||||
@prefilled_dossier = Dossier.state_brouillon.prefilled.find_by!(prefill_token: params[:prefill_token])
|
@prefilled_dossier = Dossier.state_brouillon.prefilled.find_by!(prefill_token: params[:prefill_token])
|
||||||
end
|
end
|
||||||
|
|
|
@ -27,7 +27,7 @@ class PrefillDescription < SimpleDelegator
|
||||||
end
|
end
|
||||||
|
|
||||||
def prefill_link
|
def prefill_link
|
||||||
@prefill_link ||= commencer_preremplissage_url({ path: path }.merge(prefilled_champs_for_link))
|
@prefill_link ||= commencer_url({ path: path }.merge(prefilled_champs_for_link))
|
||||||
end
|
end
|
||||||
|
|
||||||
def prefill_query
|
def prefill_query
|
||||||
|
|
|
@ -295,7 +295,6 @@ Rails.application.routes.draw do
|
||||||
get '/test/:path/dossier_vide', action: :dossier_vide_pdf_test, as: :dossier_vide_test
|
get '/test/:path/dossier_vide', action: :dossier_vide_pdf_test, as: :dossier_vide_test
|
||||||
get '/test/:path', action: 'commencer_test', as: :test
|
get '/test/:path', action: 'commencer_test', as: :test
|
||||||
get '/:path', action: 'commencer'
|
get '/:path', action: 'commencer'
|
||||||
get '/preremplir/:path', action: 'preremplir', as: :preremplissage
|
|
||||||
get '/:path/dossier_vide', action: 'dossier_vide_pdf', as: :dossier_vide
|
get '/:path/dossier_vide', action: 'dossier_vide_pdf', as: :dossier_vide
|
||||||
get '/:path/sign_in', action: 'sign_in', as: :sign_in
|
get '/:path/sign_in', action: 'sign_in', as: :sign_in
|
||||||
get '/:path/sign_up', action: 'sign_up', as: :sign_up
|
get '/:path/sign_up', action: 'sign_up', as: :sign_up
|
||||||
|
|
|
@ -15,16 +15,6 @@ describe Users::CommencerController, type: :controller do
|
||||||
expect(assigns(:procedure)).to eq published_procedure
|
expect(assigns(:procedure)).to eq published_procedure
|
||||||
expect(assigns(:revision)).to eq published_procedure.published_revision
|
expect(assigns(:revision)).to eq published_procedure.published_revision
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when there are query params' do
|
|
||||||
subject { get :commencer, params: { path: path, any_param: "any param" } }
|
|
||||||
|
|
||||||
it "stores the parameters in session" do
|
|
||||||
subject
|
|
||||||
|
|
||||||
expect(session[:stored_params]).to be_present
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when the path is for a draft procedure' do
|
context 'when the path is for a draft procedure' do
|
||||||
|
|
|
@ -1082,10 +1082,6 @@ describe Users::DossiersController, type: :controller do
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
before { session[:stored_params] = params.to_json }
|
|
||||||
|
|
||||||
it { expect { subject }.to change { session[:stored_params] }.to(nil) }
|
|
||||||
|
|
||||||
it { expect { subject }.to change { Dossier.count }.by(1) }
|
it { expect { subject }.to change { Dossier.count }.by(1) }
|
||||||
|
|
||||||
it "prefills the dossier's champs with the given values" do
|
it "prefills the dossier's champs with the given values" do
|
||||||
|
|
Loading…
Reference in a new issue