- migrate page show to edit for procedure admin
- create new page show for procedure admin
This commit is contained in:
parent
debac1ed91
commit
92d57db91d
14 changed files with 236 additions and 73 deletions
|
@ -8,18 +8,18 @@ class Admin::ProceduresController < AdminController
|
|||
|
||||
def archived
|
||||
@procedures = current_administrateur.procedures.where(archived: true)
|
||||
.paginate(:page => params[:page]).decorate
|
||||
.paginate(:page => params[:page]).decorate
|
||||
@page = 'archived'
|
||||
end
|
||||
|
||||
def show
|
||||
@procedure = current_administrateur.procedures.find(params[:id]).decorate
|
||||
@types_de_champ = @procedure.types_de_champ.order(:order_place)
|
||||
@types_de_piece_justificative = @procedure.types_de_piece_justificative.order(:libelle)
|
||||
informations
|
||||
|
||||
rescue ActiveRecord::RecordNotFound
|
||||
flash.alert = 'Procédure inéxistante'
|
||||
redirect_to admin_procedures_path
|
||||
@facade = AdminProceduresShowFacades.new @procedure
|
||||
end
|
||||
|
||||
def edit
|
||||
informations
|
||||
end
|
||||
|
||||
def new
|
||||
|
@ -43,7 +43,7 @@ class Admin::ProceduresController < AdminController
|
|||
|
||||
unless @procedure.update_attributes(create_procedure_params)
|
||||
flash.now.alert = @procedure.errors.full_messages.join('<br />').html_safe
|
||||
return render 'show'
|
||||
return render 'edit'
|
||||
end
|
||||
flash.notice = 'Préocédure modifiée'
|
||||
redirect_to admin_procedures_path
|
||||
|
@ -66,4 +66,12 @@ class Admin::ProceduresController < AdminController
|
|||
def create_procedure_params
|
||||
params.require(:procedure).permit(:libelle, :description, :organisation, :direction, :lien_demarche, :use_api_carto).merge(administrateur_id: current_administrateur.id)
|
||||
end
|
||||
|
||||
def informations
|
||||
@procedure = current_administrateur.procedures.find(params[:id]).decorate
|
||||
|
||||
rescue ActiveRecord::RecordNotFound
|
||||
flash.alert = 'Procédure inéxistante'
|
||||
redirect_to admin_procedures_path
|
||||
end
|
||||
end
|
||||
|
|
|
@ -13,6 +13,16 @@ class DossierDecorator < Draper::Decorator
|
|||
end
|
||||
|
||||
def state_fr
|
||||
DossierDecorator.case_state_fr state
|
||||
end
|
||||
|
||||
def state_color_class
|
||||
return 'text-danger' if waiting_for_gestionnaire?
|
||||
return 'text-info' if waiting_for_user?
|
||||
return 'text-success' if termine?
|
||||
end
|
||||
|
||||
def self.case_state_fr state=self.state
|
||||
case state
|
||||
when 'draft'
|
||||
'Brouillon'
|
||||
|
@ -32,10 +42,4 @@ class DossierDecorator < Draper::Decorator
|
|||
fail 'State not valid'
|
||||
end
|
||||
end
|
||||
|
||||
def state_color_class
|
||||
return 'text-danger' if waiting_for_gestionnaire?
|
||||
return 'text-info' if waiting_for_user?
|
||||
return 'text-success' if termine?
|
||||
end
|
||||
end
|
||||
|
|
43
app/facades/admin_procedures_show_facades.rb
Normal file
43
app/facades/admin_procedures_show_facades.rb
Normal file
|
@ -0,0 +1,43 @@
|
|||
class AdminProceduresShowFacades
|
||||
def initialize procedure
|
||||
@procedure = procedure
|
||||
end
|
||||
|
||||
def procedure
|
||||
@procedure
|
||||
end
|
||||
|
||||
def dossiers
|
||||
@procedure.dossiers.where.not(state: :draft)
|
||||
end
|
||||
|
||||
def dossiers_for_pie_highchart
|
||||
dossiers.where.not(state: :draft, archived: true).group(:state).count
|
||||
.map{|key, value| { (DossierDecorator.case_state_fr key) => value } }
|
||||
.reduce({}, :merge)
|
||||
end
|
||||
|
||||
def dossiers_archived_by_state_total
|
||||
dossiers.select('state, count(*) as total').where(archived: true).where.not(state: :termine).group(:state).order(:state).decorate
|
||||
end
|
||||
|
||||
def dossiers_archived_total
|
||||
dossiers.where(archived: true).where.not(state: :termine).size
|
||||
end
|
||||
|
||||
def dossiers_total
|
||||
dossiers.size
|
||||
end
|
||||
|
||||
def dossiers_waiting_gestionnaire_total
|
||||
dossiers.waiting_for_gestionnaire.size
|
||||
end
|
||||
|
||||
def dossiers_waiting_user_total
|
||||
dossiers.waiting_for_user.size
|
||||
end
|
||||
|
||||
def dossiers_termine_total
|
||||
dossiers.where(state: :termine).size
|
||||
end
|
||||
end
|
|
@ -3,7 +3,8 @@
|
|||
%br
|
||||
|
||||
%ul.nav.nav-tabs
|
||||
%li= link_to('Description', admin_procedure_path(@procedure))
|
||||
%li= link_to('Informations', admin_procedure_path(@procedure))
|
||||
%li= link_to('Description', edit_admin_procedure_path(@procedure))
|
||||
%li= link_to('Champs', admin_procedure_types_de_champ_path(@procedure))
|
||||
%li.active= link_to('Pièces justificatives', admin_procedure_pieces_justificatives_path(@procedure))
|
||||
|
||||
|
|
20
app/views/admin/procedures/edit.html.haml
Normal file
20
app/views/admin/procedures/edit.html.haml
Normal file
|
@ -0,0 +1,20 @@
|
|||
%h2.text-info
|
||||
=@procedure.libelle
|
||||
%br
|
||||
|
||||
%ul.nav.nav-tabs
|
||||
%li
|
||||
= link_to('Informations', admin_procedure_path(@procedure))
|
||||
%li.active
|
||||
= link_to('Description', edit_admin_procedure_path(@procedure))
|
||||
%li
|
||||
= link_to('Champs', admin_procedure_types_de_champ_path(@procedure))
|
||||
%li
|
||||
= link_to('Pièces justificatives', admin_procedure_pieces_justificatives_path(@procedure))
|
||||
|
||||
#procedure_new.section.section-label
|
||||
= form_for @procedure, url: url_for({controller: 'admin/procedures', action: :update, id: @procedure.id}) do |f|
|
||||
= render partial: 'informations', locals: {f: f}
|
||||
= f.submit 'Editer', class: 'btn btn-success', style: 'float:right'
|
||||
%br
|
||||
%br
|
|
@ -4,7 +4,9 @@
|
|||
|
||||
%ul.nav.nav-tabs
|
||||
%li.active
|
||||
= link_to('Description', admin_procedure_path(@procedure))
|
||||
= link_to('Informations', admin_procedure_path(@procedure))
|
||||
%li
|
||||
= link_to('Description', edit_admin_procedure_path(@procedure))
|
||||
%li
|
||||
= link_to('Champs', admin_procedure_types_de_champ_path(@procedure))
|
||||
%li
|
||||
|
@ -25,9 +27,52 @@
|
|||
%i.fa.fa-remove
|
||||
Annuler
|
||||
|
||||
#procedure_new.section.section-label
|
||||
= form_for @procedure, url: url_for({controller: 'admin/procedures', action: :update, id: @procedure.id}) do |f|
|
||||
= render partial: 'informations', locals: {f: f}
|
||||
= f.submit 'Editer', class: 'btn btn-success', style: 'float:right'
|
||||
|
||||
%br
|
||||
%div
|
||||
|
||||
%h3 Lien procédure
|
||||
%div{style:'margin-left:3%'}
|
||||
= @procedure.lien
|
||||
|
||||
%br
|
||||
%h3 Dossiers
|
||||
|
||||
.row
|
||||
.col-md-6.col-lg-6{style:'margin-left:3%'}
|
||||
%h4 Total
|
||||
%div
|
||||
= @facade.dossiers_total
|
||||
|
||||
%h4.text-danger Attente Gestionnaire
|
||||
%div
|
||||
= @facade.dossiers_waiting_gestionnaire_total
|
||||
|
||||
%h4.text-info Attente User
|
||||
%div
|
||||
= @facade.dossiers_waiting_user_total
|
||||
|
||||
%h4.text-success Terminé
|
||||
%div
|
||||
= @facade.dossiers_termine_total
|
||||
|
||||
%h4 Archivé
|
||||
|
||||
- unless @facade.dossiers_archived_total == 0
|
||||
%ul
|
||||
- @facade.dossiers_archived_by_state_total.each do |dossier|
|
||||
%li
|
||||
= dossier.state_fr
|
||||
\:
|
||||
= dossier.total
|
||||
- else
|
||||
%p
|
||||
0
|
||||
|
||||
.col-md-5.col-lg-5
|
||||
%h4 Non archivés
|
||||
= javascript_include_tag "https://code.highcharts.com/highcharts.js", "chartkick"
|
||||
- if @facade.dossiers_for_pie_highchart.blank?
|
||||
Aucune statistique pour le moment
|
||||
-else
|
||||
=pie_chart @facade.dossiers_for_pie_highchart
|
|
@ -1,25 +0,0 @@
|
|||
- types_de_piece_justificative.each do |type_de_piece_justificative|
|
||||
- type_de_piece_justificative.id.nil? ? object_for = "new_type_de_piece_justificative[#{index}]" : object_for = 'types_de_piece_justificative[]'
|
||||
|
||||
= f.fields_for object_for, type_de_piece_justificative do |ff|
|
||||
.form-inline{id:"type_de_piece_justificative_#{type_de_piece_justificative.id || index}", class: 'type_de_piece_justificative', style: 'padding-bottom:8px'}
|
||||
.form-group{ style: 'padding-right: 2%' }
|
||||
%h4 Libellé
|
||||
=ff.text_field :libelle, class: 'form-control libelle', placeholder: 'Libellé'
|
||||
|
||||
.form-group{ style: 'padding-right: 2%' }
|
||||
%h4
|
||||
Description
|
||||
=ff.text_area :description, class: 'form-control description', placeholder: 'Description'
|
||||
|
||||
=ff.hidden_field '_destroy', value: 'false', class: 'destroy'
|
||||
|
||||
.form-group{ id: "delete_type_de_piece_justificative_#{type_de_piece_justificative.id || index}_button", style: ("display:none" if type_de_piece_justificative.id.nil?) }
|
||||
%br
|
||||
%button.form-control.btn.btn-danger.fa.fa-trash-o{type: 'button', id: "delete_type_de_piece_justificative_#{type_de_piece_justificative.id || index}_procedure"}
|
||||
|
||||
-if type_de_piece_justificative.id.nil?
|
||||
.form-group#add_type_de_piece_justificative_button
|
||||
%br
|
||||
%button.form-control.btn.btn-success#add_type_de_piece_justificative_procedure{type: 'button'} Ajouter
|
||||
|
|
@ -1,11 +0,0 @@
|
|||
#liste_piece_justificative
|
||||
-unless @types_de_piece_justificative.nil?
|
||||
=render partial: 'admin/procedures/types_de_piece_justificative/form', locals:{ types_de_piece_justificative: @types_de_piece_justificative, f: f }
|
||||
|
||||
#liste_delete_piece_justificative
|
||||
|
||||
#new_type_de_piece_justificative
|
||||
=render partial: 'admin/procedures/types_de_piece_justificative/form', locals:{ types_de_piece_justificative: [TypeDePieceJustificative.new], index: (@types_de_piece_justificative.nil? || @types_de_piece_justificative.last.nil? ? 0 : @procedure.types_de_piece_justificative.last.id+1), f: f }
|
||||
|
||||
%script{ type:'text/javascript' }
|
||||
="var types_de_piece_justificative_index = #{(@types_de_piece_justificative.nil? || @types_de_piece_justificative.last.nil? ? 0 : @procedure.types_de_piece_justificative.last.id+1)}"
|
|
@ -4,7 +4,9 @@
|
|||
|
||||
%ul.nav.nav-tabs
|
||||
%li
|
||||
= link_to('Description', admin_procedure_path(@procedure))
|
||||
= link_to('Informations', admin_procedure_path(@procedure))
|
||||
%li
|
||||
= link_to('Description', edit_admin_procedure_path(@procedure))
|
||||
%li.active
|
||||
= link_to('Champs', admin_procedure_types_de_champ_path(@procedure))
|
||||
%li
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
= javascript_include_tag "https://code.highcharts.com/highcharts.js", "chartkick"
|
||||
|
||||
#infos_dossier
|
||||
%div.row
|
||||
|
|
|
@ -21,11 +21,8 @@ module TPS
|
|||
config.i18n.default_locale = :fr
|
||||
config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}')]
|
||||
|
||||
config.autoload_paths += %W(#{config.root}/lib #{config.root}/app/validators)
|
||||
config.autoload_paths += %W(#{config.root}/lib #{config.root}/app/validators #{config.root}/app/facades)
|
||||
config.assets.paths << Rails.root.join('app', 'assets', 'javascript')
|
||||
config.assets.paths << Rails.root.join('app', 'assets', 'javascript', 'api_carto')
|
||||
config.assets.paths << Rails.root.join('app', 'assets', 'javascript', 'api_carto', 'lib')
|
||||
config.assets.paths << Rails.root.join('app', 'assets', 'javascript', 'api_carto', 'lib', 'images')
|
||||
|
||||
# Do not swallow errors in after_commit/after_rollback callbacks.
|
||||
config.active_record.raise_in_transactional_callbacks = true
|
||||
|
|
|
@ -40,11 +40,11 @@ describe Admin::ProceduresController, type: :controller do
|
|||
it { expect(response.status).to eq(200) }
|
||||
end
|
||||
|
||||
describe 'GET #show' do
|
||||
let(:procedure) { create(:procedure, :with_type_de_champ, :with_two_type_de_piece_justificative, administrateur: admin) }
|
||||
describe 'GET #edit' do
|
||||
let(:procedure) { create(:procedure, administrateur: admin) }
|
||||
let(:procedure_id) { procedure.id }
|
||||
|
||||
subject { get :show, id: procedure_id }
|
||||
subject { get :edit, id: procedure_id }
|
||||
|
||||
context 'when user is not connected' do
|
||||
before do
|
||||
|
|
75
spec/facades/admin_procedures_show_facades_spec.rb
Normal file
75
spec/facades/admin_procedures_show_facades_spec.rb
Normal file
|
@ -0,0 +1,75 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe AdminProceduresShowFacades do
|
||||
let!(:procedure) { create(:procedure) }
|
||||
|
||||
let!(:dossier_0) { create(:dossier, :with_user, procedure: procedure, state: 'draft') }
|
||||
let!(:dossier_1) { create(:dossier, :with_user, procedure: procedure, state: 'initiated') }
|
||||
let!(:dossier_2) { create(:dossier, :with_user, procedure: procedure, state: 'validated') }
|
||||
let!(:dossier_3) { create(:dossier, :with_user, procedure: procedure, state: 'validated') }
|
||||
let!(:dossier_4) { create(:dossier, :with_user, procedure: procedure, archived: true, state: 'validated') }
|
||||
let!(:dossier_5) { create(:dossier, :with_user, procedure: procedure, archived: true, state: 'validated') }
|
||||
let!(:dossier_6) { create(:dossier, :with_user, procedure: procedure, archived: true, state: 'initiated') }
|
||||
|
||||
subject { AdminProceduresShowFacades.new procedure }
|
||||
|
||||
describe '.procedure' do
|
||||
subject { super().procedure }
|
||||
|
||||
it { is_expected.to eq(procedure) }
|
||||
end
|
||||
|
||||
describe '.dossiers' do
|
||||
subject { super().dossiers }
|
||||
|
||||
it { expect(subject.size).to eq(6) }
|
||||
end
|
||||
|
||||
describe '.dossiers_for_pie_highchart' do
|
||||
subject { super().dossiers_for_pie_highchart }
|
||||
|
||||
it { expect(subject).to eq({'Soumis' => 1, 'Validé' => 2}) }
|
||||
end
|
||||
|
||||
describe '.dossiers_archived_by_state_total' do
|
||||
subject { super().dossiers_archived_by_state_total }
|
||||
|
||||
it { expect(subject.size).to eq(2) }
|
||||
|
||||
it { expect(subject.first.state).to eq('initiated') }
|
||||
it { expect(subject.first.total).to eq(1) }
|
||||
|
||||
it { expect(subject.last.state).to eq('validated') }
|
||||
it { expect(subject.last.total).to eq(2) }
|
||||
end
|
||||
|
||||
describe 'dossiers_archived_total' do
|
||||
subject { super().dossiers_archived_total }
|
||||
|
||||
it { is_expected.to eq(3) }
|
||||
end
|
||||
|
||||
describe 'dossiers_total' do
|
||||
subject { super().dossiers_total }
|
||||
|
||||
it { is_expected.to eq(6) }
|
||||
end
|
||||
|
||||
describe 'dossiers_waiting_gestionnaire_total' do
|
||||
subject { super().dossiers_waiting_gestionnaire_total }
|
||||
|
||||
it { is_expected.to eq(1) }
|
||||
end
|
||||
|
||||
describe 'dossiers_waiting_user_total' do
|
||||
subject { super().dossiers_waiting_user_total }
|
||||
|
||||
it { is_expected.to eq(2) }
|
||||
end
|
||||
|
||||
describe 'dossiers_termine_total' do
|
||||
subject { super().dossiers_termine_total }
|
||||
|
||||
it { is_expected.to eq(0) }
|
||||
end
|
||||
end
|
|
@ -1,16 +1,17 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe 'admin/procedures/show.html.haml', type: :view do
|
||||
let(:procedure) { create(:procedure) }
|
||||
|
||||
before do
|
||||
assign(:procedure, procedure.decorate)
|
||||
assign(:facade, AdminProceduresShowFacades.new(procedure))
|
||||
|
||||
render
|
||||
end
|
||||
|
||||
describe 'archive and unarchive button' do
|
||||
|
||||
before do
|
||||
assign(:procedure, procedure)
|
||||
render
|
||||
end
|
||||
|
||||
context 'when procedure is active' do
|
||||
let(:procedure) { create(:procedure) }
|
||||
|
||||
it { expect(rendered).to have_content('Archiver') }
|
||||
end
|
||||
|
||||
|
@ -20,4 +21,8 @@ describe 'admin/procedures/show.html.haml', type: :view do
|
|||
it { expect(rendered).to have_content('Réactiver') }
|
||||
end
|
||||
end
|
||||
|
||||
describe 'procedure link is present' do
|
||||
it { expect(rendered).to have_content(new_users_dossiers_url(procedure_id: procedure.id)) }
|
||||
end
|
||||
end
|
Loading…
Add table
Add a link
Reference in a new issue