Gestionnaire can have the history of cerfa updated on dossier show page

This commit is contained in:
Xavier J 2016-03-16 15:34:35 +01:00
parent 5d13276446
commit 4b7e6426b3
12 changed files with 87 additions and 49 deletions

View file

@ -0,0 +1,12 @@
$(document).on('page:load', modal_action);
$(document).ready(modal_action);
function modal_action() {
$('#PJmodal').on('show.bs.modal', function (event) {
var button = $(event.relatedTarget) // Button that triggered the modal
var modal_title = button.data('modal_title') // Extract info from data-* attributes
var modal = $(this)
modal.find('#PJmodal_title').html(modal_title)
})
}

View file

@ -11,7 +11,6 @@ class API::V1::DossiersController < APIController
EOS EOS
meta champs: { meta champs: {
} }
def index def index

View file

@ -34,8 +34,7 @@ class Users::DescriptionController < UsersController
if @procedure.cerfa_flag? if @procedure.cerfa_flag?
unless params[:cerfa_pdf].nil? unless params[:cerfa_pdf].nil?
cerfa = @dossier.cerfa cerfa = Cerfa.new(content: params[:cerfa_pdf], dossier: @dossier)
cerfa.content = params[:cerfa_pdf]
unless cerfa.save unless cerfa.save
flash.now.alert = cerfa.errors.full_messages.join('<br />').html_safe flash.now.alert = cerfa.errors.full_messages.join('<br />').html_safe
return render 'show' return render 'show'

View file

@ -38,6 +38,10 @@ class DossierFacades
@dossier.procedure @dossier.procedure
end end
def cerfas_ordered
@dossier.cerfa.order('created_at DESC')
end
def invites def invites
@dossier.invites @dossier.invites
end end

View file

@ -10,7 +10,7 @@ class Dossier < ActiveRecord::Base
has_one :etablissement, dependent: :destroy has_one :etablissement, dependent: :destroy
has_one :entreprise, dependent: :destroy has_one :entreprise, dependent: :destroy
has_one :cerfa, dependent: :destroy has_many :cerfa, dependent: :destroy
has_many :pieces_justificatives, dependent: :destroy has_many :pieces_justificatives, dependent: :destroy
has_many :champs, dependent: :destroy has_many :champs, dependent: :destroy
@ -27,7 +27,6 @@ class Dossier < ActiveRecord::Base
delegate :types_de_piece_justificative, to: :procedure delegate :types_de_piece_justificative, to: :procedure
delegate :types_de_champ, to: :procedure delegate :types_de_champ, to: :procedure
after_save :build_default_cerfa, if: Proc.new { procedure.cerfa_flag? && procedure_id_changed? }
after_save :build_default_pieces_justificatives, if: Proc.new { procedure_id_changed? } after_save :build_default_pieces_justificatives, if: Proc.new { procedure_id_changed? }
after_save :build_default_champs, if: Proc.new { procedure_id_changed? } after_save :build_default_champs, if: Proc.new { procedure_id_changed? }
@ -44,7 +43,6 @@ class Dossier < ActiveRecord::Base
end end
def build_default_pieces_justificatives def build_default_pieces_justificatives
procedure.types_de_piece_justificative.each do |type_de_piece_justificative| procedure.types_de_piece_justificative.each do |type_de_piece_justificative|
PieceJustificative.create(type_de_piece_justificative_id: type_de_piece_justificative.id, dossier_id: id) PieceJustificative.create(type_de_piece_justificative_id: type_de_piece_justificative.id, dossier_id: id)
end end
@ -190,7 +188,7 @@ class Dossier < ActiveRecord::Base
end end
def cerfa_available? def cerfa_available?
procedure.cerfa_flag? && !cerfa.empty? procedure.cerfa_flag? && cerfa.size != 0
end end
def as_csv(options={}) def as_csv(options={})
@ -199,12 +197,4 @@ class Dossier < ActiveRecord::Base
entreprise_attr = EntrepriseSerializer.new(self.entreprise).attributes.map {|k, v| ["entreprise.#{k}", v] }.to_h entreprise_attr = EntrepriseSerializer.new(self.entreprise).attributes.map {|k, v| ["entreprise.#{k}", v] }.to_h
dossier_attr.merge(etablissement_attr).merge(entreprise_attr) dossier_attr.merge(etablissement_attr).merge(entreprise_attr)
end end
private
def build_default_cerfa
create_cerfa
true
end
end end

View file

@ -9,7 +9,7 @@ class DossierSerializer < ActiveModel::Serializer
has_one :entreprise has_one :entreprise
has_one :etablissement has_one :etablissement
has_one :cerfa has_many :cerfa
has_many :commentaires has_many :commentaires
has_many :champs has_many :champs
has_many :pieces_justificatives has_many :pieces_justificatives

View file

@ -0,0 +1,31 @@
#PJmodal.modal.fade{"aria-labelledby" => "myModalLabel", :role => "dialog", :tabindex => "-1"}
.modal-dialog.modal-lg{:role => "document"}
.modal-content
.modal-header
%button.close{"aria-label" => "Close", "data-dismiss" => "modal", :type => "button"}
%span{"aria-hidden" => "true"} ×
%h4#myModalLabel.modal-title
Historique des
%span#PJmodal_title
.modal-body
%table.table#cerfa
%thead
%th
Utilisateur
%th
Date d'envoi
%th
Lien
-if @facade.procedure.cerfa_flag?
- if @facade.dossier.cerfa_available?
- @facade.cerfas_ordered.each do |cerfa|
%tr
%td.col-md-6.col-lg-4
= cerfa.dossier.user.email
%td.col-md-6.col-lg-4
= cerfa.created_at
%td.col-md-6.col-lg-4
=link_to 'Récupérer', cerfa.content_url, {target: :blank}
.modal-footer

View file

@ -1,6 +1,4 @@
#pieces_justificatives #pieces_justificatives
-#%h3.text-info Liste des pièces justificatives
-#%br
%table.table %table.table
-if @facade.procedure.cerfa_flag? -if @facade.procedure.cerfa_flag?
@ -12,7 +10,15 @@
- if user_signed_in? - if user_signed_in?
= 'Pièce fournie' = 'Pièce fournie'
- elsif gestionnaire_signed_in? - elsif gestionnaire_signed_in?
%a{ href: "#{@facade.dossier.cerfa.content_url}", target: '_blank' } Consulter %a{ href: "#{@facade.dossier.cerfa.last.content_url}", target: '_blank' } Consulter
%span{style:'margin-left:12px'}
\-
%a.btn.glyphicon.glyphicon-time{style:'color: black; padding-top: 0',
"data-target" => "#PJmodal",
"data-toggle" => "modal",
:type => "button",
"data-modal_title" => 'formulaires',
"data-modal_type" => 'cerfa'}
- else - else
= 'Pièce non fournie' = 'Pièce non fournie'
@ -31,4 +37,5 @@
- else - else
= 'Pièce non fournie' = 'Pièce non fournie'
- if gestionnaire_signed_in?
=render partial: '/dossiers/modal_historique'

View file

@ -234,14 +234,16 @@ describe API::V1::DossiersController do
end end
describe 'cerfa' do describe 'cerfa' do
let!(:dossier) { Timecop.freeze(date_creation) { create(:dossier, :with_entreprise, :with_cerfa_upload, procedure: procedure) } }
let(:content) { File.open('./spec/support/files/piece_justificative_388.pdf') } let(:content) { File.open('./spec/support/files/piece_justificative_388.pdf') }
before do before do
dossier.cerfa.content = content tmp_cerfa = dossier.cerfa.first
dossier.cerfa.save tmp_cerfa.content = content
tmp_cerfa.save
end end
subject { super()[:cerfa] } subject { super()[:cerfa].first }
it { expect(subject[:created_at]).not_to be_nil } it { expect(subject[:created_at]).not_to be_nil }
it { expect(subject[:url]).to match /^http:\/\/.*downloads.*_CERFA\.pdf$/ } it { expect(subject[:url]).to match /^http:\/\/.*downloads.*_CERFA\.pdf$/ }

View file

@ -132,8 +132,9 @@ describe Users::DescriptionController, type: :controller do
dossier.reload dossier.reload
end end
context 'un CERFA PDF est envoyé' do context 'when a CERFA PDF is send' do
subject { dossier.cerfa } subject { dossier.cerfa.first }
it 'content' do it 'content' do
expect(subject['content']).to eq(name_piece_justificative) expect(subject['content']).to eq(name_piece_justificative)
end end
@ -143,21 +144,17 @@ describe Users::DescriptionController, type: :controller do
end end
end end
context 'les anciens CERFA PDF sont écrasées à chaque fois' do context 'les anciens CERFA PDF ne sont pas écrasées' do
let(:cerfas) { Cerfa.find_by_dossier_id(dossier_id) } let(:cerfas) { Cerfa.where(dossier_id: dossier_id) }
before do before do
post :create, dossier_id: dossier_id, nom_projet: nom_projet, description: description, cerfa_pdf: cerfa_pdf post :create, dossier_id: dossier_id, nom_projet: nom_projet, description: description, cerfa_pdf: cerfa_pdf
end end
it 'il n\'y a qu\'un CERFA PDF par dossier' do it "il y a deux CERFA PDF pour ce dossier" do
expect(cerfas.class).to eq Cerfa expect(cerfas.size).to eq 2
end end
end end
context 'pas de CERFA PDF' do
# TODO à écrire
end
end end
end end

View file

@ -23,23 +23,22 @@ FactoryGirl.define do
trait :with_two_quartier_prioritaires do trait :with_two_quartier_prioritaires do
after(:build) do |dossier, _evaluator| after(:build) do |dossier, _evaluator|
dossier.quartier_prioritaires << create(:quartier_prioritaire)
qp1 = create(:quartier_prioritaire) dossier.quartier_prioritaires << create(:quartier_prioritaire)
qp2 = create(:quartier_prioritaire)
dossier.quartier_prioritaires << qp1
dossier.quartier_prioritaires << qp2
end end
end end
trait :with_two_cadastres do trait :with_two_cadastres do
after(:build) do |dossier, _evaluator| after(:build) do |dossier, _evaluator|
dossier.cadastres << create(:cadastre)
dossier.cadastres << create(:cadastre)
end
end
qp1 = create(:cadastre) trait :with_cerfa_upload do
qp2 = create(:cadastre) after(:build) do |dossier, _evaluator|
dossier.cadastres << qp1 dossier.cerfa << create(:cerfa)
dossier.cadastres << qp2
end end
end end
end end

View file

@ -20,7 +20,7 @@ describe Dossier do
it { is_expected.to have_many(:commentaires) } it { is_expected.to have_many(:commentaires) }
it { is_expected.to have_many(:quartier_prioritaires) } it { is_expected.to have_many(:quartier_prioritaires) }
it { is_expected.to have_many(:cadastres) } it { is_expected.to have_many(:cadastres) }
it { is_expected.to have_one(:cerfa) } it { is_expected.to have_many(:cerfa) }
it { is_expected.to have_one(:etablissement) } it { is_expected.to have_one(:etablissement) }
it { is_expected.to have_one(:entreprise) } it { is_expected.to have_one(:entreprise) }
it { is_expected.to belong_to(:user) } it { is_expected.to belong_to(:user) }
@ -525,17 +525,15 @@ describe Dossier do
describe '#cerfa_available?' do describe '#cerfa_available?' do
let(:procedure) { create(:procedure, cerfa_flag: cerfa_flag) } let(:procedure) { create(:procedure, cerfa_flag: cerfa_flag) }
let(:dossier) { create(:dossier, procedure: procedure)} let(:dossier) { create(:dossier, procedure: procedure)}
context 'Procedure accepts CERFA' do context 'Procedure accepts CERFA' do
let(:cerfa_flag) { true } let(:cerfa_flag) { true }
context 'when cerfa is not uploaded' do context 'when cerfa is not uploaded' do
it { expect(dossier.cerfa_available?).to be_falsey } it { expect(dossier.cerfa_available?).to be_falsey }
end end
context 'when cerfa is uploaded' do context 'when cerfa is uploaded' do
let(:dossier_with_cerfa) { create(:dossier, procedure: procedure) } let(:dossier) { create :dossier, :with_cerfa_upload, procedure: procedure }
before do it { expect(dossier.cerfa_available?).to be_truthy }
allow_any_instance_of(Cerfa).to receive(:empty?).and_return(false)
end
it { expect(dossier_with_cerfa.cerfa_available?).to be_truthy }
end end
end end
context 'Procedure does not accept CERFA' do context 'Procedure does not accept CERFA' do