Dynamic display for champs on description and recapitulative page

This commit is contained in:
Xavier J 2015-11-04 11:14:07 +01:00
parent 3a4beadbd1
commit 591f52f654
9 changed files with 81 additions and 33 deletions

View file

@ -30,13 +30,14 @@ class Backoffice::DossiersController < ApplicationController
@entreprise = @dossier.entreprise.decorate
@etablissement = @dossier.etablissement
@pieces_justificatives = @dossier.pieces_justificatives
@commentaires = @dossier.commentaires.order(created_at: :desc)
@commentaires = @dossier.ordered_commentaires
@commentaires = @commentaires.all.decorate
@commentaire_email = current_gestionnaire.email
@procedure = @dossier.procedure
@dossier = @dossier.decorate
@champs = @dossier.ordered_champs
rescue ActiveRecord::RecordNotFound
flash.alert = t('errors.messages.dossier_not_found')
redirect_to url_for(controller: '/backoffice')

View file

@ -4,7 +4,7 @@ class Users::DescriptionController < UsersController
@dossier = @dossier.decorate
@procedure = @dossier.procedure
@champs = @dossier.champs.joins(', types_de_champs').where('champs.type_de_champs_id = types_de_champs.id').order('order_place')
@champs = @dossier.ordered_champs
rescue ActiveRecord::RecordNotFound
flash.alert = t('errors.messages.dossier_not_found')

View file

@ -3,14 +3,12 @@ class Users::RecapitulatifController < UsersController
@dossier = current_user_dossier
@dossier = @dossier.decorate
@procedure = @dossier.procedure
@champs = @dossier.ordered_champs
# mettre dans le modele
@commentaires = @dossier.commentaires.order(created_at: :desc)
@commentaires = @dossier.ordered_commentaires
@commentaires = @commentaires.all.decorate
#TODO load user email
@commentaire_email = 'user@email'
@commentaire_email = current_user.email
rescue ActiveRecord::RecordNotFound
flash.alert = t('errors.messages.dossier_not_found')
redirect_to url_for(root_path)

View file

@ -47,6 +47,14 @@ class Dossier < ActiveRecord::Base
end
end
def ordered_champs
champs.joins(', types_de_champs').where('champs.type_de_champs_id = types_de_champs.id').order('order_place')
end
def ordered_commentaires
commentaires.order(created_at: :desc)
end
def sous_domaine
if Rails.env.production?
'tps'

View file

@ -6,7 +6,6 @@
%h3.text-info
= @dossier.nom_projet
%br
.description
- begin
- @dossier.description.split(/(?:\n\r?|\r\n?')/).each do |line|
@ -14,10 +13,21 @@
%br
- rescue
=''
.col-lg-6.col-md-6
=render partial: '/dossiers/pieces_justificatives'
%br
-unless @champs.nil?
.row
.col-lg-12.col-md-12
%table.table#liste_champs
-@champs.each do |champ|
%tr
%th.col-md-3.col-lg-3
=champ.libelle
%td
=champ.value
%div.row{style: 'text-align:right'}
-unless gestionnaire_signed_in?
-if !@dossier.validated? && !@dossier.submitted? && !@dossier.closed?

View file

@ -2,6 +2,7 @@
%h2 Description de votre projet
%br
-#TODO use form_for
= form_tag(url_for({controller: :description, action: :create, dossier_id: @dossier.id}), class: 'form-inline', method: 'POST', multipart: true) do
%div
.row
@ -14,26 +15,27 @@
%h4 Description de votre projet *
= text_area_tag :description, @dossier.description, rows: '6', placeholder: 'Description du projet', class: 'form-control'
#liste_champs.row
#liste_champs
-unless @champs.nil?
-@champs.each do |champ|
%div{class: "type_champs-#{champ.type_champs}"}
%h4
= champ.libelle
.row
%div{class: "type_champs-#{champ.type_champs}"}
%h4
= champ.libelle
-if champ.type_champs == 'textarea'
%textarea.form-control{name:"champs['#{champ.id}']",
placeholder: champ.libelle,
id: "champs_#{champ.id}"}
=champ.value
-else
%input.form-control{name:"champs['#{champ.id}']",
value: champ.value,
placeholder: champ.libelle,
id: "champs_#{champ.id}",
type:"#{champ.type_champs}",
'data-provide' => ('datepicker' if champ.type_champs == 'datetime'),
'data-date-format' => ('dd/mm/yyyy' if champ.type_champs == 'datetime')}
-if champ.type_champs == 'textarea'
%textarea.form-control{name:"champs['#{champ.id}']",
placeholder: champ.libelle,
id: "champs_#{champ.id}"}
=champ.value
-else
%input.form-control{name:"champs['#{champ.id}']",
placeholder: champ.libelle,
id: "champs_#{champ.id}",
value: champ.value,
type:"#{champ.type_champs}",
'data-provide' => ('datepicker' if champ.type_champs == 'datetime'),
'data-date-format' => ('dd/mm/yyyy' if champ.type_champs == 'datetime')}
%br
%h3 Documents administratifs

View file

@ -3,9 +3,9 @@
%h2
='Récapitulatif'
%div.col-md-8.col-lg-8
%div.col-md-7.col-lg-7
%div.col-md-2.col-lg-2
%div.col-md-3.col-lg-3
%h2#dossier_id{:class => 'text-info', :style => 'text-align:right; margin-bottom:15px'}
= "Dossier n°#{@dossier.id}"

View file

@ -1,14 +1,22 @@
require 'spec_helper'
describe 'dossiers/_infos_dossier.html.haml', type: :view do
let(:dossier) { create(:dossier, :with_entreprise, :with_procedure) }
let(:maj_infos) { 'Mettre à jour les informations' }
let(:proposer) { 'Soumettre mon dossier' }
let(:dossier) { create(:dossier, :with_entreprise, :with_procedure, :with_user) }
before do
assign(:dossier, dossier.decorate)
assign(:commentaires, dossier.commentaires)
assign(:champs, dossier.ordered_champs)
assign(:procedure, dossier.procedure)
render
end
describe 'every champs are present on the page' do
let(:champs) { dossier.champs }
it { expect(rendered).to have_content(champs.first.libelle) }
it { expect(rendered).to have_content(champs.first.value) }
it { expect(rendered).to have_content(champs.last.libelle) }
it { expect(rendered).to have_content(champs.last.value) }
end
end

View file

@ -8,6 +8,7 @@ describe 'users/description/show.html.haml', type: :view do
before do
assign(:dossier, dossier)
assign(:procedure, dossier.procedure)
assign(:champs, dossier.ordered_champs)
end
context 'tous les attributs sont présents sur la page' do
@ -85,6 +86,26 @@ describe 'users/description/show.html.haml', type: :view do
end
end
context 'Champs' do
let(:champs) { dossier.champs }
before do
render
end
describe 'first champs' do
subject { dossier.champs.first }
it { expect(rendered).to have_css(".type_champs-#{subject.type_champs}") }
it { expect(rendered).to have_css("#champs_#{subject.id}") }
end
describe 'last champs' do
subject { dossier.champs.last }
it { expect(rendered).to have_css(".type_champs-#{subject.type_champs}") }
it { expect(rendered).to have_css("#champs_#{subject.id}") }
end
end
context 'Pièces justificatives' do
let(:all_type_pj_procedure_id) { dossier.procedure.type_de_piece_justificative_ids }