diff --git a/app/controllers/new_user/dossiers_controller.rb b/app/controllers/new_user/dossiers_controller.rb index 697087f49..ba2b4ee39 100644 --- a/app/controllers/new_user/dossiers_controller.rb +++ b/app/controllers/new_user/dossiers_controller.rb @@ -95,7 +95,7 @@ module NewUser end def dossier_with_champs - @dossier_with_champs ||= current_user.dossiers.includes(champs: :type_de_champ).find(params[:id]) + @dossier_with_champs ||= current_user.dossiers.with_ordered_champs.find(params[:id]) end def ensure_ownership! diff --git a/app/models/dossier.rb b/app/models/dossier.rb index 9d2aaaa43..13cf95853 100644 --- a/app/models/dossier.rb +++ b/app/models/dossier.rb @@ -60,6 +60,7 @@ class Dossier < ApplicationRecord scope :en_cours, -> { not_archived.state_en_construction_ou_instruction } scope :without_followers, -> { left_outer_joins(:follows).where(follows: { id: nil }) } scope :followed_by, -> (gestionnaire) { joins(:follows).where(follows: { gestionnaire: gestionnaire }) } + scope :with_ordered_champs, -> { includes(champs: :type_de_champ).order('types_de_champ.order_place') } accepts_nested_attributes_for :individual @@ -108,10 +109,6 @@ class Dossier < ApplicationRecord champs.joins(', types_de_champ').where("champs.type_de_champ_id = types_de_champ.id AND types_de_champ.procedure_id = #{procedure.id}").order('order_place') end - def ordered_champs_v2 - champs.includes(:type_de_champ).order('types_de_champ.order_place') - end - def ordered_champs_private # TODO: use the line below when the procedure preview does not leak champ with dossier_id == 0 # champs_private.includes(:type_de_champ).order('types_de_champ.order_place') diff --git a/app/views/new_user/dossiers/modifier.html.haml b/app/views/new_user/dossiers/modifier.html.haml index c409b495d..dde467161 100644 --- a/app/views/new_user/dossiers/modifier.html.haml +++ b/app/views/new_user/dossiers/modifier.html.haml @@ -7,7 +7,7 @@ %p.thanks Les champs avec une asterisque (*) sont obligatoires. = form_for @dossier, html: { class: 'form', multipart: true } do |f| - = f.fields_for :champs, @dossier.ordered_champs_v2 do |champ_form| + = f.fields_for :champs, @dossier.champs do |champ_form| - champ = champ_form.object = render partial: "shared/dossiers/editable_champs/editable_champ", locals: { champ: champ, form: champ_form } diff --git a/spec/models/dossier_spec.rb b/spec/models/dossier_spec.rb index 3317ff946..219e3e05a 100644 --- a/spec/models/dossier_spec.rb +++ b/spec/models/dossier_spec.rb @@ -10,6 +10,21 @@ describe Dossier do it { expect(Dossier.without_followers.to_a).to eq([dossier2]) } end + describe 'with_ordered_champs' do + let(:procedure) { create(:procedure) } + let(:dossier) { Dossier.create(user: create(:user), procedure: procedure) } + + before do + create(:type_de_champ, libelle: 'l1', order_place: 1, procedure: procedure) + create(:type_de_champ, libelle: 'l3', order_place: 3, procedure: procedure) + create(:type_de_champ, libelle: 'l2', order_place: 2, procedure: procedure) + end + + it do + expect(Dossier.with_ordered_champs.find(dossier.id).champs.map(&:libelle)).to match(%w(l1 l2 l3)) + end + end + describe 'methods' do let(:dossier) { create(:dossier, :with_entreprise, user: user) }