Nouvelles fonctionnalités : posibilité d'upload plusieurs pièces jointes pour un dossier.

This commit is contained in:
Xavier J 2015-08-11 15:39:16 +02:00
parent 77fe251d8a
commit 587081ff2f
5 changed files with 266 additions and 118 deletions

File diff suppressed because one or more lines are too long

View file

@ -2,6 +2,14 @@ class DescriptionController < ApplicationController
def show def show
@dossier = Dossier.find(params[:dossier_id]) @dossier = Dossier.find(params[:dossier_id])
@dossier = @dossier.decorate @dossier = @dossier.decorate
@array_id_pj_valides = Array.new
DossierPdf.where(dossier_id: @dossier.id).each do |pj_valide|
@array_id_pj_valides << pj_valide.ref_pieces_jointes_id
end
@liste_pieces_jointes = get_liste_piece_jointe
rescue rescue
redirect_to url_for({controller: :start, action: :error_dossier}) redirect_to url_for({controller: :start, action: :error_dossier})
end end
@ -14,23 +22,28 @@ class DescriptionController < ApplicationController
def create def create
@dossier = Dossier.find(params[:dossier_id]) @dossier = Dossier.find(params[:dossier_id])
@dossier.update_attributes(create_params)
@dossier.nom_projet = params[:nom_projet] if params[:cerfa_pdf] != nil
@dossier.description = params[:description] DossierPdf.destroy_all(dossier_id: @dossier.id, ref_pieces_jointes_id: 0)
@dossier.montant_projet = params[:montant_projet] @dossier_pdf = DossierPdf.new
@dossier.montant_aide_demande = params[:montant_aide_demande] @dossier_pdf.ref_dossier_pdf = params[:cerfa_pdf]
@dossier.date_previsionnelle = params[:date_previsionnelle] @dossier_pdf.ref_pieces_jointes_id = 0
@dossier.lien_plus_infos = params[:lien_plus_infos] @dossier_pdf.dossier = @dossier
@dossier.mail_contact = params[:mail_contact] @dossier_pdf.save
end
@dossier.save get_liste_piece_jointe.each do |pj|
if params["piece_jointe_#{pj.id}"] != nil
DossierPdf.destroy_all(dossier_id: @dossier.id, ref_pieces_jointes_id: pj.id)
#upload dossier pdf @dossier_pdf = DossierPdf.new
@dossier_pdf.ref_dossier_pdf = params["piece_jointe_#{pj.id}"]
@dossier_pdf = DossierPdf.new @dossier_pdf.ref_pieces_jointes_id = pj.id
@dossier_pdf.ref_dossier_pdf = params[:dossier_pdf] @dossier_pdf.dossier = @dossier
@dossier_pdf.dossier = @dossier @dossier_pdf.save
@dossier_pdf.save! end
end
if check_missing_attributes(params)||check_format_email(@dossier.mail_contact) == nil if check_missing_attributes(params)||check_format_email(@dossier.mail_contact) == nil
redirect_to url_for({controller: :description, action: :error}) redirect_to url_for({controller: :description, action: :error})
@ -49,11 +62,22 @@ class DescriptionController < ApplicationController
private private
def create_params
params.permit(:nom_projet, :description, :montant_projet, :montant_aide_demande, :date_previsionnelle, :lien_plus_infos, :mail_contact)
end
#TODO dans un validateur, dans le model
def check_missing_attributes params def check_missing_attributes params
params[:nom_projet].strip == '' || params[:description].strip == '' || params[:montant_projet].strip == '' || params[:montant_aide_demande].strip == '' || params[:date_previsionnelle].strip == '' || params[:mail_contact].strip == '' params[:nom_projet].strip == '' || params[:description].strip == '' || params[:montant_projet].strip == '' || params[:montant_aide_demande].strip == '' || params[:date_previsionnelle].strip == '' || params[:mail_contact].strip == ''
end end
#TODO dans un validateur, dans le model
def check_format_email email def check_format_email email
/\A[\w+\-.]+@[a-z\d\-]+(\.[a-z]+)*\.[a-z]+\z/.match(email) /\A[\w+\-.]+@[a-z\d\-]+(\.[a-z]+)*\.[a-z]+\z/.match(email)
end end
def get_liste_piece_jointe
@formulaire = RefFormulaire.find(@dossier.ref_formulaire)
RefPiecesJointe.where ("\"CERFA\" = '#{@formulaire.ref_demarche}'")
end
end end

View file

@ -44,20 +44,42 @@
%h3 Documents administratifs %h3 Documents administratifs
%br %br
%table{class:'table', style:'width:50%; margin-left:5%'} //TODO a refactorer DO
%table{class:'table', style:'width:55%; margin-left:5%'}
%tr %tr
%th{class:'col-lg-4'} Charger votre dossier (.pdf) %th{class:'col-lg-6'}
%td{class:'col-lg-6'} ='Charger votre CERFA (.pdf)'
%input{type: 'file',name:'dossier_pdf', id:'dossier_pdf', accept: ".pdf"}
%br -if @formulaire.lien_demarche != nil
%p %a{style:'font-size:0.9em; padding-left:3px', id: 'lien_cerfa' ,href: "#{@formulaire.lien_demarche}", :target => '_blank'} Lien CERFA
='Afin de facilité votre démarche, nous avons récupéré pour vous :'
%ul %td{class:'col-lg-5'}
%li -if @array_id_pj_valides.include?(0)
='Votre déclaration sociale' %span.btn.btn-sm.btn-file.btn-success
%li ="Modifier"
='Votre déclaration fiscale' %input{type: 'file', name:'cerfa_pdf', id:'cerfa_pdf', accept: ".pdf"}
-else
%span.btn.btn-sm.btn-file.btn-info
="Choisir"
%input{type: 'file', name:'cerfa_pdf', id:'cerfa_pdf', accept: ".pdf"}
-@liste_pieces_jointes.each do |pj|
%tr
%th{class:'col-lg-6'}
=pj.libelle
%td{class:'col-lg-5'}
-if pj.api_entreprise
%span.text-success{id: "piece_jointe_#{pj.id}"} Nous l'avons récupéré pour vous.
-else
-if @array_id_pj_valides.include?(pj.id)
%span.btn.btn-sm.btn-file.btn-success
="Modifier"
%input{type: 'file', name:"piece_jointe_#{pj.id}", id:"piece_jointe_#{pj.id}", accept: ".pdf"}
-else
%span.btn.btn-sm.btn-file.btn-info
="Choisir"
%input{type: 'file', name:"piece_jointe_#{pj.id}", id:"piece_jointe_#{pj.id}", accept: ".pdf"}
//END
%div{style: 'text-align:right'} %div{style: 'text-align:right'}
%h6 Tous les champs portant un * sont obligatoires. %h6 Tous les champs portant un * sont obligatoires.

View file

@ -1,6 +1,6 @@
require 'spec_helper' require 'spec_helper'
RSpec.describe DescriptionController, type: :controller do describe DescriptionController, type: :controller do
let (:dossier_id){10000} let (:dossier_id){10000}
let (:bad_dossier_id){1000} let (:bad_dossier_id){1000}
@ -24,22 +24,31 @@ RSpec.describe DescriptionController, type: :controller do
let(:montant_aide_demande){3000} let(:montant_aide_demande){3000}
let(:date_previsionnelle){'20/01/2016'} let(:date_previsionnelle){'20/01/2016'}
let(:mail_contact){'test@test.com'} let(:mail_contact){'test@test.com'}
let(:dossier_pdf) {''}
let(:name_dossier_pdf){'dossierPDF.pdf'}
let(:name_piece_jointe_103){'piece_jointe_103.pdf'}
let(:name_piece_jointe_692){'piece_jointe_692.pdf'}
let(:cerfa_pdf) {Rack::Test::UploadedFile.new("./spec/support/files/#{name_dossier_pdf}", 'application/pdf')}
let(:piece_jointe_103) {Rack::Test::UploadedFile.new("./spec/support/files/#{name_piece_jointe_103}", 'application/pdf')}
let(:piece_jointe_692) {Rack::Test::UploadedFile.new("./spec/support/files/#{name_piece_jointe_692}", 'application/pdf')}
context 'Tous les attributs sont bons' do context 'Tous les attributs sont bons' do
#TODO separer en deux tests : check donnees et check redirect
it 'Premier enregistrement des données' do it 'Premier enregistrement des données' do
post :create, :dossier_id => dossier_id, :nom_projet => nom_projet, :description => description, :montant_projet => montant_projet, :montant_aide_demande => montant_aide_demande, :date_previsionnelle => date_previsionnelle, :mail_contact => mail_contact post :create, :dossier_id => dossier_id, :nom_projet => nom_projet, :description => description, :montant_projet => montant_projet, :montant_aide_demande => montant_aide_demande, :date_previsionnelle => date_previsionnelle, :mail_contact => mail_contact
expect(response).to redirect_to("/dossiers/#{dossier_id}/recapitulatif") expect(response).to redirect_to("/dossiers/#{dossier_id}/recapitulatif")
end end
#TODO changer les valeurs des champs et check in bdd
context 'En train de modifier les données de description du projet' do context 'En train de modifier les données de description du projet' do
before do before do
post :create, :dossier_id => dossier_id, :nom_projet => nom_projet, :description => description, :montant_projet => montant_projet, :montant_aide_demande => montant_aide_demande, :date_previsionnelle => date_previsionnelle, :mail_contact => mail_contact, :back_url => 'recapitulatif' post :create, :dossier_id => dossier_id, :nom_projet => nom_projet, :description => description, :montant_projet => montant_projet, :montant_aide_demande => montant_aide_demande, :date_previsionnelle => date_previsionnelle, :mail_contact => mail_contact, :back_url => 'recapitulatif'
@last_commentaire_id = ActiveRecord::Base.connection.execute("SELECT currval('commentaires_id_seq')").getvalue(0,0)
end end
context 'Enregistrement d\'un commentaire informant la modification' do context 'Enregistrement d\'un commentaire informant la modification' do
subject{Commentaire.find(@last_commentaire_id)} subject{Commentaire.last}
it 'champs email' do it 'champs email' do
expect(subject.email).to eq('Modification détails') expect(subject.email).to eq('Modification détails')
@ -98,5 +107,66 @@ RSpec.describe DescriptionController, type: :controller do
expect(response).to redirect_to("/dossiers/#{dossier_id}/description/error") expect(response).to redirect_to("/dossiers/#{dossier_id}/description/error")
end end
end end
context 'Sauvegarde du CERFA PDF' do
before do
post :create, :dossier_id => dossier_id, :nom_projet => nom_projet, :description => description, :montant_projet => montant_projet, :montant_aide_demande => montant_aide_demande, :date_previsionnelle => date_previsionnelle, :mail_contact => mail_contact, :cerfa_pdf => cerfa_pdf
end
context 'un CERFA PDF est envoyé' do
subject{DossierPdf.last}
it 'ref_dossier_pdf' do
expect(subject['ref_dossier_pdf']).to eq(name_dossier_pdf)
end
it 'dossier_id' do
expect(subject.dossier_id).to eq(dossier_id)
end
it 'ref_pieces_jointes_id' do
expect(subject.ref_pieces_jointes_id).to eq(0)
end
end
context 'les anciens CERFA PDF sont écrasées à chaque fois' do
it 'il n\'y a qu\'un CERFA PDF par dossier' do
post :create, :dossier_id => dossier_id, :nom_projet => nom_projet, :description => description, :montant_projet => montant_projet, :montant_aide_demande => montant_aide_demande, :date_previsionnelle => date_previsionnelle, :mail_contact => mail_contact, :cerfa_pdf => cerfa_pdf
cerfa = DossierPdf.where(ref_pieces_jointes_id: '0', dossier_id: dossier_id)
expect(cerfa.many?).to eq(false)
end
end
context 'pas de CERFA PDF' do
#TODO à écrire
end
end
context 'Sauvegarde des pièces jointes' do
before do
post :create, :dossier_id => dossier_id, :nom_projet => nom_projet, :description => description, :montant_projet => montant_projet, :montant_aide_demande => montant_aide_demande, :date_previsionnelle => date_previsionnelle, :mail_contact => mail_contact, :piece_jointe_692 => piece_jointe_692, :piece_jointe_103 => piece_jointe_103
end
context 'sauvegarde de 2 pieces jointes' do
it 'les deux pièces sont présentes en base' do
piece_jointe_1 = DossierPdf.where(ref_pieces_jointes_id: '103', dossier_id: dossier_id)
piece_jointe_2 = DossierPdf.where(ref_pieces_jointes_id: '692', dossier_id: dossier_id)
expect(piece_jointe_1.first['ref_dossier_pdf']).to eq(name_piece_jointe_103)
expect(piece_jointe_2.first['ref_dossier_pdf']).to eq(name_piece_jointe_692)
end
context 'les pièces sont ecrasées à chaque fois' do
it 'il n\'y a qu\'une pièce jointe par type par dossier' do
post :create, :dossier_id => dossier_id, :nom_projet => nom_projet, :description => description, :montant_projet => montant_projet, :montant_aide_demande => montant_aide_demande, :date_previsionnelle => date_previsionnelle, :mail_contact => mail_contact, :piece_jointe_692 => piece_jointe_692, :piece_jointe_103 => piece_jointe_103
piece_jointe_1 = DossierPdf.where(ref_pieces_jointes_id: '103', dossier_id: dossier_id)
piece_jointe_2 = DossierPdf.where(ref_pieces_jointes_id: '692', dossier_id: dossier_id)
expect(piece_jointe_1.many?).to eq(false)
expect(piece_jointe_2.many?).to eq(false)
end
end
end
end
end end
end end

View file

@ -52,12 +52,12 @@ feature 'Description#Show Page' do
expect(page).to have_selector('input[type=email][id=mail_contact]') expect(page).to have_selector('input[type=email][id=mail_contact]')
end end
scenario 'Charger un dossier pdf' do scenario 'Charger votre CERFA (PDF)' do
expect(page).to have_selector('input[id=dossier_pdf][name=dossier_pdf]') expect(page).to have_selector('input[type=file][name=cerfa_pdf][id=cerfa_pdf]')
end end
scenario 'Charger un dossier pdf est de type file' do scenario 'Lien CERFA' do
expect(page).to have_selector('input[type=file][id=dossier_pdf]') expect(page).to have_selector('#lien_cerfa')
end end
end end
@ -121,4 +121,38 @@ feature 'Description#Show Page' do
expect(page).to have_selector("input[id=mail_contact][value='#{mail_contact}']") expect(page).to have_selector("input[id=mail_contact][value='#{mail_contact}']")
end end
end end
context 'Pièces jointes' do
context 'la liste des pièces jointes a envoyé est affichée' do
it 'Attestation RDI' do
expect(page).to have_selector('input[type=file][name=piece_jointe_103][id=piece_jointe_103]')
end
it 'Devis' do
expect(page).to have_selector('input[type=file][name=piece_jointe_388][id=piece_jointe_388]')
end
it 'Pièce d\'identité' do
expect(page).to have_selector('input[type=file][name=piece_jointe_692][id=piece_jointe_692]')
end
it 'Plan de transmission du capital social' do
expect(page).to have_selector('input[type=file][name=piece_jointe_764][id=piece_jointe_764]')
end
it 'RIB ou RIP' do
expect(page).to have_selector('input[type=file][name=piece_jointe_849][id=piece_jointe_849]')
end
end
context 'la liste des pièces récupérées automatiquement est signaliée' do
it 'Attestation MSA' do
expect(page.find_by_id('piece_jointe_93')).to have_content('Nous l\'avons récupéré pour vous.')
end
it 'KBIS' do
expect(page.find_by_id('piece_jointe_571')).to have_content('Nous l\'avons récupéré pour vous.')
end
end
end
end end