- Add new status for a dossier : received, refused and without_continuation

- Add new and rename tabs on gestionnaire all dossiers view
/!\ WARNING : One test does not pasted. He will be corrected in the next commit
This commit is contained in:
Xavier J 2016-08-11 15:27:35 +02:00
parent 85e7af840a
commit 1a92382259
19 changed files with 506 additions and 195 deletions

View file

@ -32,8 +32,18 @@
//= require handlebars
//= require typeahead.bundle
$(document).on('page:load', scroll_to);
$(document).ready(scroll_to);
$(document).on('page:load', application_init);
$(document).ready(application_init);
function application_init(){
tooltip_init();
scroll_to();
}
function tooltip_init() {
$('[data-toggle="tooltip"]').tooltip({delay: { "show": 800, "hide": 100 }});
}
function scroll_to() {
$('.js-scrollTo').on('click', function () { // Au clic sur un élément

View file

@ -36,7 +36,7 @@ body {
}
.wysihtml5-sandbox {
resize:vertical;
resize: vertical;
}
#wrap {
@ -101,7 +101,6 @@ body {
margin-right: 105px;
}
#header {
top: 0;
left: -3px;
@ -111,7 +110,6 @@ body {
}
.navbar {
height: 35px;
background-color: rgba(235, 235, 235, 0.95);
@ -123,6 +121,18 @@ body {
}
.text-purple {
color: #8B008B
}
.text-default {
color: grey;
}
.progress-bar-purple {
background-color: #800080;
}
.btn {
box-shadow: none !important;
}
@ -178,12 +188,12 @@ div.pagination {
text-align: center;
}
.alert{
.alert {
margin-bottom: 0px;
}
.alert.alert-success.move_up,
.alert.alert-danger.siret{
.alert.alert-danger.siret {
position: fixed;
top: 0px;
left: 0;

View file

@ -5,11 +5,7 @@ class Backoffice::DossiersController < ApplicationController
before_action :authenticate_gestionnaire!
def index
@liste = params[:liste] || 'a_traiter'
smartlisting_dossier
total_dossiers_per_state
smartlisting_dossier (params[:liste] || 'a_traiter')
end
def show
@ -21,13 +17,14 @@ class Backoffice::DossiersController < ApplicationController
@search_terms = params[:q]
@dossiers_search, @dossier = Dossier.search(current_gestionnaire, @search_terms)
create_dossiers_list_facade
unless @dossiers_search.empty?
@dossiers_search = @dossiers_search.paginate(:page => params[:page]).decorate
end
@dossier = @dossier.decorate unless @dossier.nil?
total_dossiers_per_state
rescue RuntimeError
@dossiers_search = []
end
@ -65,52 +62,25 @@ class Backoffice::DossiersController < ApplicationController
rescue NoMethodError
@liste = 'a_traiter'
end
smartlisting_dossier
smartlisting_dossier @liste
render 'backoffice/dossiers/index', formats: :js
end
private
def smartlisting_dossier
def smartlisting_dossier liste
create_dossiers_list_facade liste
@dossiers = smart_listing_create :dossiers,
dossiers_to_display,
@dossiers_list_facade.dossiers_to_display,
partial: "backoffice/dossiers/list",
array: true
end
def dossiers_to_display
{'a_traiter' => waiting_for_gestionnaire,
'en_attente' => waiting_for_user,
'termine' => termine,
'suivi' => suivi}[@liste]
end
def waiting_for_gestionnaire
@a_traiter_class = (@liste == 'a_traiter' ? 'active' : '')
@waiting_for_gestionnaire ||= current_gestionnaire.dossiers_filter.waiting_for_gestionnaire
end
def waiting_for_user
@en_attente_class = (@liste == 'en_attente' ? 'active' : '')
@waiting_for_user ||= current_gestionnaire.dossiers_filter.waiting_for_user
end
def termine
@termine_class = (@liste == 'termine' ? 'active' : '')
@termine ||= current_gestionnaire.dossiers_filter.termine
end
def suivi
@suivi_class = (@liste == 'suivi' ? 'active' : '')
@suivi ||= current_gestionnaire.dossiers_follow
end
def total_dossiers_per_state
@dossiers_a_traiter_total = waiting_for_gestionnaire.count
@dossiers_en_attente_total = waiting_for_user.count
@dossiers_termine_total = termine.count
@dossiers_suivi_total = suivi.count
def create_dossiers_list_facade liste='a_traiter'
@dossiers_list_facade = DossiersListFacades.new current_gestionnaire, liste
end
def create_dossier_facade dossier_id

View file

@ -0,0 +1,70 @@
class DossiersListFacades
def initialize current_devise_profil, liste
@current_devise_profil = current_devise_profil
@liste = liste
end
def service
@service ||= DossiersListGestionnaireService.new @current_devise_profil, @liste
end
def dossiers_to_display
service.dossiers_to_display
end
def nouveaux_class
(@liste == 'nouveaux' ? 'active' : '')
end
def a_traiter_class
(@liste == 'a_traiter' ? 'active' : '')
end
def en_attente_class
(@liste == 'en_attente' ? 'active' : '')
end
def deposes_class
(@liste == 'deposes' ? 'active' : '')
end
def a_instruire_class
(@liste == 'a_instruire' ? 'active' : '')
end
def termine_class
(@liste == 'termine' ? 'active' : '')
end
def suivi_class
(@liste == 'suivi' ? 'active' : '')
end
def nouveaux_total
service.nouveaux.count
end
def a_traiter_total
service.waiting_for_gestionnaire.count
end
def en_attente_total
service.waiting_for_user.count
end
def deposes_total
service.deposes.count
end
def a_instruire_total
service.a_instruire.count
end
def termine_total
service.termine.count
end
def suivi_total
service.suivi.count
end
end

View file

@ -2,11 +2,15 @@ class Dossier < ActiveRecord::Base
enum state: {draft: 'draft',
initiated: 'initiated',
replied: 'replied',
updated: 'updated',
replied: 'replied', #action utilisateur demandé
updated: 'updated',#etude par l'administration en cours
validated: 'validated',
submitted: 'submitted',
closed: 'closed'}
received: 'received',
closed: 'closed',
refused: 'refused',
without_continuation: 'without_continuation'
}
has_one :etablissement, dependent: :destroy
has_one :entreprise, dependent: :destroy
@ -34,9 +38,12 @@ class Dossier < ActiveRecord::Base
validates :user, presence: true
WAITING_FOR_GESTIONNAIRE = %w(initiated updated submitted)
NOUVEAUX = %w(initiated)
WAITING_FOR_GESTIONNAIRE = %w(updated)
WAITING_FOR_USER = %w(replied validated)
TERMINE = %w(closed)
DEPOSES = %w(submitted)
A_INSTRUIRE = %w(received)
TERMINE = %w(closed refused without_continuation)
def retrieve_last_piece_justificative_by_type(type)
pieces_justificatives.where(type_de_piece_justificative_id: type).last
@ -129,6 +136,10 @@ class Dossier < ActiveRecord::Base
state
end
def nouveaux?
NOUVEAUX.include?(state)
end
def waiting_for_gestionnaire?
WAITING_FOR_GESTIONNAIRE.include?(state)
end
@ -137,10 +148,22 @@ class Dossier < ActiveRecord::Base
WAITING_FOR_USER.include?(state)
end
def deposes?
DEPOSES.include?(state)
end
def a_instruire?
A_INSTRUIRE.include?(state)
end
def termine?
TERMINE.include?(state)
end
def self.nouveaux order = 'ASC'
where(state: NOUVEAUX, archived: false).order("updated_at #{order}")
end
def self.waiting_for_gestionnaire order = 'ASC'
where(state: WAITING_FOR_GESTIONNAIRE, archived: false).order("updated_at #{order}")
end
@ -149,6 +172,14 @@ class Dossier < ActiveRecord::Base
where(state: WAITING_FOR_USER, archived: false).order("updated_at #{order}")
end
def self.deposes order = 'ASC'
where(state: DEPOSES, archived: false).order("updated_at #{order}")
end
def self.a_instruire order = 'ASC'
where(state: A_INSTRUIRE, archived: false).order("updated_at #{order}")
end
def self.termine order = 'ASC'
where(state: TERMINE, archived: false).order("updated_at #{order}")
end

View file

@ -0,0 +1,44 @@
class DossiersListGestionnaireService
def initialize current_devise_profil, liste
@current_devise_profil = current_devise_profil
@liste = liste
end
def dossiers_to_display
{'nouveaux' => nouveaux,
'a_traiter' => waiting_for_gestionnaire,
'en_attente' => waiting_for_user,
'deposes' => deposes,
'a_instruire' => a_instruire,
'termine' => termine,
'suivi' => suivi}[@liste]
end
def nouveaux
@nouveaux ||= @current_devise_profil.dossiers_filter.nouveaux
end
def waiting_for_gestionnaire
@waiting_for_gestionnaire ||= @current_devise_profil.dossiers_filter.waiting_for_gestionnaire
end
def waiting_for_user
@waiting_for_user ||= @current_devise_profil.dossiers_filter.waiting_for_user
end
def deposes
@deposes ||= @current_devise_profil.dossiers_filter.deposes
end
def a_instruire
@a_instruire ||= @current_devise_profil.dossiers_filter.a_instruire
end
def termine
@termine ||= @current_devise_profil.dossiers_filter.termine
end
def suivi
@suivi ||= @current_devise_profil.dossiers_follow
end
end

View file

@ -3,33 +3,47 @@
#onglets
%ul.nav.nav-tabs
%li{ class: (@a_traiter_class) }
%a{:href => "#{url_for backoffice_dossiers_path(liste: 'a_traiter')}"}
%h5.text-danger
= "À traiter "
.badge.progress-bar-danger
=@dossiers_a_traiter_total
%li{ class: (@en_attente_class) }
%a{:href => "#{url_for backoffice_dossiers_path(liste: 'en_attente')}"}
%li{ class: (@dossiers_list_facade.nouveaux_class)}
%a{:href => "#{url_for backoffice_dossiers_path(liste: 'nouveaux')}", 'data-toggle' => :tooltip, title: 'Les nouveaux dossiers non ouverts.'}
%h5.text-info
="En attente "
= "Nouveaux "
.badge.progress-bar-info
=@dossiers_en_attente_total
=@dossiers_list_facade.nouveaux_total
%li{ class: (@suivi_class) }
%a{:href => "#{url_for backoffice_dossiers_path(liste: 'suivi')}"}
%li{ class: (@dossiers_list_facade.a_traiter_class) }
%a{:href => "#{url_for backoffice_dossiers_path(liste: 'a_traiter')}", 'data-toggle' => :tooltip, title: 'Les dossiers qui requièrent une action de votre part.'}
%h5.text-danger
= "Action requise"
.badge.progress-bar-danger
=@dossiers_list_facade.a_traiter_total
%li{ class: (@dossiers_list_facade.en_attente_class) }
%a{:href => "#{url_for backoffice_dossiers_path(liste: 'en_attente')}", 'data-toggle' => :tooltip, title: 'Les dossiers en attentes d\'une action de la part de l\'usager.'}
%h5.text-default
="Attente usager "
.badge.progress-bar-default
=@dossiers_list_facade.en_attente_total
%li{ class: (@dossiers_list_facade.deposes_class) }
%a{:href => "#{url_for backoffice_dossiers_path(liste: 'deposes')}", 'data-toggle' => :tooltip, title: 'Les dossiers qui ont été validés et déposés par les usager qui attendent une réponse de bonne réception avant instruction.'}
%h5.text-purple
="À réceptionner"
.badge.progress-bar-purple
=@dossiers_list_facade.deposes_total
%li{ class: (@dossiers_list_facade.a_instruire_class) }
%a{:href => "#{url_for backoffice_dossiers_path(liste: 'a_instruire')}", 'data-toggle' => :tooltip, title: 'Les dossiers qui ont été notifiés comme bien réceptionnés et qui attendent un verdict final.'}
%h5.text-warning
="Suivi"
= "À instruire"
.badge.progress-bar-warning
=@dossiers_suivi_total
=@dossiers_list_facade.a_instruire_total
%li{ class: (@termine_class) }
%a{:href => "#{url_for backoffice_dossiers_path(liste: 'termine')}"}
%li{ class: (@dossiers_list_facade.termine_class) }
%a{:href => "#{url_for backoffice_dossiers_path(liste: 'termine')}",'data-toggle' => :tooltip, title: 'Tous les dossiers qui ont été traité avec un statut "Validé", "Refusé" ou "Sans suite "'}
%h5.text-success
= "Terminé"
.badge.progress-bar-success
=@dossiers_termine_total
=@dossiers_list_facade.termine_total
%ul.nav.nav-tabs.navbar-right{style:'border-bottom: none;'}
%li#search{class: "#{'active' unless @dossiers_search.nil?}"}
@ -46,5 +60,4 @@
%a.btn#pref_list_dossier_open_action{href: '#'}
%i.fa.fa-columns
%br

View file

@ -41,7 +41,7 @@
%br
.row{style: 'text-align:right'}
- if !@facade.dossier.validated? && !@facade.dossier.submitted? && !@facade.dossier.closed?
- if !@facade.dossier.validated? && !@facade.dossier.received? && !@facade.dossier.submitted? && !@facade.dossier.closed? && !@facade.dossier.refused? && !@facade.dossier.without_continuation?
- if user_signed_in? && (current_user.email == @facade.dossier.user.email)
- if @facade.procedure.cerfa_flag? || @facade.dossier.types_de_piece_justificative.size > 0
%a.btn.btn-success{"data-target" => "#UploadPJmodal",
@ -60,7 +60,7 @@
= 'Modifier mon dossier'
-if gestionnaire_signed_in?
-if !@facade.dossier.validated? && !@facade.dossier.submitted? && !@facade.dossier.closed?
-if !@facade.dossier.validated? && !@facade.dossier.received? && !@facade.dossier.submitted? && !@facade.dossier.closed? && !@facade.dossier.refused? && !@facade.dossier.without_continuation?
= form_tag(url_for({controller: 'backoffice/dossiers', action: :valid, dossier_id: @facade.dossier.id}), class: 'form-inline', method: 'POST') do
%button#action_button.btn.btn-success
= 'Valider le dossier'