- 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:
parent
85e7af840a
commit
1a92382259
19 changed files with 506 additions and 195 deletions
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
70
app/facades/dossiers_list_facades.rb
Normal file
70
app/facades/dossiers_list_facades.rb
Normal 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
|
|
@ -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
|
||||
|
|
44
app/services/dossiers_list_gestionnaire_service.rb
Normal file
44
app/services/dossiers_list_gestionnaire_service.rb
Normal 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
|
|
@ -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
|
|
@ -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'
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue