- migrate page show to edit for procedure admin

- create new page show for procedure admin
This commit is contained in:
Xavier J 2015-12-04 16:17:35 +01:00
parent debac1ed91
commit 92d57db91d
14 changed files with 236 additions and 73 deletions

View file

@ -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

View file

@ -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

View 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

View file

@ -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))

View 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

View file

@ -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

View file

@ -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 &nbsp;
%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 &nbsp;
%button.form-control.btn.btn-success#add_type_de_piece_justificative_procedure{type: 'button'} Ajouter

View file

@ -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)}"

View file

@ -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

View file

@ -1,4 +1,3 @@
= javascript_include_tag "https://code.highcharts.com/highcharts.js", "chartkick"
#infos_dossier
%div.row

View file

@ -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

View file

@ -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

View 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

View file

@ -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