Add new state on User UI.
/!/ WARNING : No tests fix
This commit is contained in:
parent
1a92382259
commit
6adfcac5bf
10 changed files with 232 additions and 72 deletions
|
@ -10,16 +10,12 @@ class Users::DossiersController < UsersController
|
||||||
end
|
end
|
||||||
|
|
||||||
def index
|
def index
|
||||||
order = 'DESC'
|
@dossiers_list_facade = DossiersListFacades.new current_user, (params[:liste] || 'a_traiter')
|
||||||
|
|
||||||
@liste = params[:liste] || 'a_traiter'
|
|
||||||
|
|
||||||
@dossiers = smart_listing_create :dossiers,
|
@dossiers = smart_listing_create :dossiers,
|
||||||
dossiers_to_display,
|
@dossiers_list_facade.dossiers_to_display,
|
||||||
partial: "users/dossiers/list",
|
partial: "users/dossiers/list",
|
||||||
array: true
|
array: true
|
||||||
|
|
||||||
total_dossiers_per_state
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def commencer
|
def commencer
|
||||||
|
@ -109,40 +105,6 @@ class Users::DossiersController < UsersController
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def dossiers_to_display
|
|
||||||
{'a_traiter' => waiting_for_user,
|
|
||||||
'en_attente' => waiting_for_gestionnaire,
|
|
||||||
'termine' => termine,
|
|
||||||
'invite' => invite}[@liste]
|
|
||||||
end
|
|
||||||
|
|
||||||
def waiting_for_user
|
|
||||||
@a_traiter_class = (@liste == 'a_traiter' ? 'active' : '')
|
|
||||||
@waiting_for_user ||= current_user.dossiers.waiting_for_user 'DESC'
|
|
||||||
end
|
|
||||||
|
|
||||||
def waiting_for_gestionnaire
|
|
||||||
@en_attente_class = (@liste == 'en_attente' ? 'active' : '')
|
|
||||||
@waiting_for_gestionnaire ||= current_user.dossiers.waiting_for_gestionnaire 'DESC'
|
|
||||||
end
|
|
||||||
|
|
||||||
def termine
|
|
||||||
@termine_class = (@liste == 'termine' ? 'active' : '')
|
|
||||||
@termine ||= current_user.dossiers.termine 'DESC'
|
|
||||||
end
|
|
||||||
|
|
||||||
def invite
|
|
||||||
@invite_class = (@liste == 'invite' ? 'active' : '')
|
|
||||||
@invite ||= current_user.invites
|
|
||||||
end
|
|
||||||
|
|
||||||
def total_dossiers_per_state
|
|
||||||
@dossiers_a_traiter_total = waiting_for_user.count
|
|
||||||
@dossiers_en_attente_total = waiting_for_gestionnaire.count
|
|
||||||
@dossiers_termine_total = termine.count
|
|
||||||
@dossiers_invite_total = invite.count
|
|
||||||
end
|
|
||||||
|
|
||||||
def check_siret
|
def check_siret
|
||||||
errors_valid_siret unless Siret.new(siret: siret).valid?
|
errors_valid_siret unless Siret.new(siret: siret).valid?
|
||||||
end
|
end
|
||||||
|
@ -183,5 +145,4 @@ class Users::DossiersController < UsersController
|
||||||
def facade id = params[:id]
|
def facade id = params[:id]
|
||||||
DossierFacades.new id, current_user.email
|
DossierFacades.new id, current_user.email
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -5,7 +5,15 @@ class DossiersListFacades
|
||||||
end
|
end
|
||||||
|
|
||||||
def service
|
def service
|
||||||
@service ||= DossiersListGestionnaireService.new @current_devise_profil, @liste
|
if gestionnaire?
|
||||||
|
@service ||= DossiersListGestionnaireService.new @current_devise_profil, @liste
|
||||||
|
elsif user?
|
||||||
|
@service ||= DossiersListUserService.new @current_devise_profil, @liste
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def liste
|
||||||
|
@liste
|
||||||
end
|
end
|
||||||
|
|
||||||
def dossiers_to_display
|
def dossiers_to_display
|
||||||
|
@ -28,6 +36,14 @@ class DossiersListFacades
|
||||||
(@liste == 'deposes' ? 'active' : '')
|
(@liste == 'deposes' ? 'active' : '')
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def valides_class
|
||||||
|
(@liste == 'valides' ? 'active' : '')
|
||||||
|
end
|
||||||
|
|
||||||
|
def en_instruction_class
|
||||||
|
(@liste == 'en_instruction' ? 'active' : '')
|
||||||
|
end
|
||||||
|
|
||||||
def a_instruire_class
|
def a_instruire_class
|
||||||
(@liste == 'a_instruire' ? 'active' : '')
|
(@liste == 'a_instruire' ? 'active' : '')
|
||||||
end
|
end
|
||||||
|
@ -40,22 +56,36 @@ class DossiersListFacades
|
||||||
(@liste == 'suivi' ? 'active' : '')
|
(@liste == 'suivi' ? 'active' : '')
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def invite_class
|
||||||
|
(@liste == 'invite' ? 'active' : '')
|
||||||
|
end
|
||||||
|
|
||||||
def nouveaux_total
|
def nouveaux_total
|
||||||
service.nouveaux.count
|
service.nouveaux.count
|
||||||
end
|
end
|
||||||
|
|
||||||
def a_traiter_total
|
def a_traiter_total
|
||||||
service.waiting_for_gestionnaire.count
|
service.waiting_for_gestionnaire.count if gestionnaire?
|
||||||
|
service.waiting_for_user.count if user?
|
||||||
end
|
end
|
||||||
|
|
||||||
def en_attente_total
|
def en_attente_total
|
||||||
service.waiting_for_user.count
|
service.waiting_for_user.count if gestionnaire?
|
||||||
|
service.waiting_for_gestionnaire.count if user?
|
||||||
|
end
|
||||||
|
|
||||||
|
def valides_total
|
||||||
|
service.valides.count
|
||||||
end
|
end
|
||||||
|
|
||||||
def deposes_total
|
def deposes_total
|
||||||
service.deposes.count
|
service.deposes.count
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def en_instruction_total
|
||||||
|
service.en_instruction.count
|
||||||
|
end
|
||||||
|
|
||||||
def a_instruire_total
|
def a_instruire_total
|
||||||
service.a_instruire.count
|
service.a_instruire.count
|
||||||
end
|
end
|
||||||
|
@ -67,4 +97,18 @@ class DossiersListFacades
|
||||||
def suivi_total
|
def suivi_total
|
||||||
service.suivi.count
|
service.suivi.count
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def invite_total
|
||||||
|
service.invite.count
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def gestionnaire?
|
||||||
|
@current_devise_profil.class == Gestionnaire
|
||||||
|
end
|
||||||
|
|
||||||
|
def user?
|
||||||
|
@current_devise_profil.class == User
|
||||||
|
end
|
||||||
end
|
end
|
|
@ -41,7 +41,9 @@ class Dossier < ActiveRecord::Base
|
||||||
NOUVEAUX = %w(initiated)
|
NOUVEAUX = %w(initiated)
|
||||||
WAITING_FOR_GESTIONNAIRE = %w(updated)
|
WAITING_FOR_GESTIONNAIRE = %w(updated)
|
||||||
WAITING_FOR_USER = %w(replied validated)
|
WAITING_FOR_USER = %w(replied validated)
|
||||||
|
VALIDES = %w(validated)
|
||||||
DEPOSES = %w(submitted)
|
DEPOSES = %w(submitted)
|
||||||
|
EN_INSTRUCTION = %w(submitted received)
|
||||||
A_INSTRUIRE = %w(received)
|
A_INSTRUIRE = %w(received)
|
||||||
TERMINE = %w(closed refused without_continuation)
|
TERMINE = %w(closed refused without_continuation)
|
||||||
|
|
||||||
|
@ -152,10 +154,18 @@ class Dossier < ActiveRecord::Base
|
||||||
DEPOSES.include?(state)
|
DEPOSES.include?(state)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def valides?
|
||||||
|
VALIDES.include?(state)
|
||||||
|
end
|
||||||
|
|
||||||
def a_instruire?
|
def a_instruire?
|
||||||
A_INSTRUIRE.include?(state)
|
A_INSTRUIRE.include?(state)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def en_instruction?
|
||||||
|
EN_INSTRUCTION.include?(state)
|
||||||
|
end
|
||||||
|
|
||||||
def termine?
|
def termine?
|
||||||
TERMINE.include?(state)
|
TERMINE.include?(state)
|
||||||
end
|
end
|
||||||
|
@ -172,6 +182,10 @@ class Dossier < ActiveRecord::Base
|
||||||
where(state: WAITING_FOR_USER, archived: false).order("updated_at #{order}")
|
where(state: WAITING_FOR_USER, archived: false).order("updated_at #{order}")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def self.valides order = 'ASC'
|
||||||
|
where(state: VALIDES, archived: false).order("updated_at #{order}")
|
||||||
|
end
|
||||||
|
|
||||||
def self.deposes order = 'ASC'
|
def self.deposes order = 'ASC'
|
||||||
where(state: DEPOSES, archived: false).order("updated_at #{order}")
|
where(state: DEPOSES, archived: false).order("updated_at #{order}")
|
||||||
end
|
end
|
||||||
|
@ -180,6 +194,10 @@ class Dossier < ActiveRecord::Base
|
||||||
where(state: A_INSTRUIRE, archived: false).order("updated_at #{order}")
|
where(state: A_INSTRUIRE, archived: false).order("updated_at #{order}")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def self.en_instruction order = 'ASC'
|
||||||
|
where(state: EN_INSTRUCTION, archived: false).order("updated_at #{order}")
|
||||||
|
end
|
||||||
|
|
||||||
def self.termine order = 'ASC'
|
def self.termine order = 'ASC'
|
||||||
where(state: TERMINE, archived: false).order("updated_at #{order}")
|
where(state: TERMINE, archived: false).order("updated_at #{order}")
|
||||||
end
|
end
|
||||||
|
|
44
app/services/dossiers_list_user_service.rb
Normal file
44
app/services/dossiers_list_user_service.rb
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
class DossiersListUserService
|
||||||
|
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_user,
|
||||||
|
'en_attente' => waiting_for_gestionnaire,
|
||||||
|
'valides' => valides,
|
||||||
|
'en_instruction' => en_instruction,
|
||||||
|
'termine' => termine,
|
||||||
|
'invite' => invite}[@liste]
|
||||||
|
end
|
||||||
|
|
||||||
|
def nouveaux
|
||||||
|
@nouveaux ||= @current_devise_profil.dossiers.nouveaux
|
||||||
|
end
|
||||||
|
|
||||||
|
def waiting_for_gestionnaire
|
||||||
|
@waiting_for_gestionnaire ||= @current_devise_profil.dossiers.waiting_for_gestionnaire
|
||||||
|
end
|
||||||
|
|
||||||
|
def waiting_for_user
|
||||||
|
@waiting_for_user ||= @current_devise_profil.dossiers.waiting_for_user
|
||||||
|
end
|
||||||
|
|
||||||
|
def invite
|
||||||
|
@invite ||= @current_devise_profil.invites
|
||||||
|
end
|
||||||
|
|
||||||
|
def valides
|
||||||
|
@valides ||= @current_devise_profil.dossiers.valides
|
||||||
|
end
|
||||||
|
|
||||||
|
def en_instruction
|
||||||
|
@en_instruction ||= @current_devise_profil.dossiers.en_instruction
|
||||||
|
end
|
||||||
|
|
||||||
|
def termine
|
||||||
|
@termine ||= @current_devise_profil.dossiers.termine
|
||||||
|
end
|
||||||
|
end
|
19
app/views/backoffice/dossiers/_state_description.html.haml
Normal file
19
app/views/backoffice/dossiers/_state_description.html.haml
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
#state_description.row{style:'width: 50%; margin-left: auto; margin-right: auto'}
|
||||||
|
.panel.panel-info
|
||||||
|
.panel-body.center
|
||||||
|
.row
|
||||||
|
.col-md-1.col-lg-1
|
||||||
|
.fa.fa-info-circle.text-info{style:'font-size: 2em; margin-top: 20%'}
|
||||||
|
.col-md-11.col-lg-11
|
||||||
|
-if dossiers_list_facade.liste == 'nouveaux'
|
||||||
|
plop
|
||||||
|
-elsif dossiers_list_facade.liste == 'a_traiter'
|
||||||
|
plop
|
||||||
|
-elsif dossiers_list_facade.liste == 'en_attente'
|
||||||
|
plop
|
||||||
|
-elsif dossiers_list_facade.liste == 'deposes'
|
||||||
|
plop
|
||||||
|
-elsif dossiers_list_facade.liste == 'a_instruire'
|
||||||
|
plop
|
||||||
|
-elsif dossiers_list_facade.liste == 'termine'
|
||||||
|
plop
|
|
@ -4,3 +4,7 @@
|
||||||
= render partial: 'onglets'
|
= render partial: 'onglets'
|
||||||
|
|
||||||
= smart_listing_render :dossiers
|
= smart_listing_render :dossiers
|
||||||
|
|
||||||
|
%br
|
||||||
|
%br
|
||||||
|
= render partial: 'state_description', locals: {dossiers_list_facade: @dossiers_list_facade}
|
||||||
|
|
|
@ -1,33 +1,55 @@
|
||||||
%h1 Mes dossiers
|
%h1 Mes dossiers
|
||||||
%br
|
|
||||||
|
|
||||||
|
%br
|
||||||
#onglets
|
#onglets
|
||||||
%ul.nav.nav-tabs
|
%ul.nav.nav-tabs
|
||||||
%li{ class: @a_traiter_class }
|
%li{ class: @dossiers_list_facade.nouveaux_class }
|
||||||
%a{:href => "#{url_for users_dossiers_path(liste: 'a_traiter')}"}
|
%a{:href => "#{url_for users_dossiers_path(liste: 'nouveaux')}", 'data-toggle' => :tooltip, title: 'Les nouveaux dossiers qui n\'ont pas encore été vus par votre accompagnateur.'}
|
||||||
%h5.text-danger
|
|
||||||
= "À traiter "
|
|
||||||
.badge.progress-bar-danger
|
|
||||||
= @dossiers_a_traiter_total
|
|
||||||
|
|
||||||
%li{ class: @en_attente_class }
|
|
||||||
%a{:href => "#{url_for users_dossiers_path(liste: 'en_attente')}"}
|
|
||||||
%h5.text-info
|
%h5.text-info
|
||||||
="En attente "
|
= "Nouveau"
|
||||||
.badge.progress-bar-info
|
.badge.progress-bar-info
|
||||||
= @dossiers_en_attente_total
|
= @dossiers_list_facade.nouveaux_total
|
||||||
|
|
||||||
%li{ class: @termine_class }
|
%li{ class: @dossiers_list_facade.a_traiter_class }
|
||||||
%a{:href => "#{url_for users_dossiers_path(liste: 'termine')}"}
|
%a{:href => "#{url_for users_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 users_dossiers_path(liste: 'en_attente')}", 'data-toggle' => :tooltip, title: 'Les dossiers en cours de relecture par votre accompagnateur.'}
|
||||||
|
%h5.text-default
|
||||||
|
="Etude en cours"
|
||||||
|
.badge.progress-bar-default
|
||||||
|
= @dossiers_list_facade.en_attente_total
|
||||||
|
|
||||||
|
%li{ class: @dossiers_list_facade.valides_class }
|
||||||
|
%a{:href => "#{url_for users_dossiers_path(liste: 'valides')}", 'data-toggle' => :tooltip, title: 'Les dossiers relus par votre accompagnateur pouvant être déposés pour instruction.'}
|
||||||
|
%h5.text-purple
|
||||||
|
="À déposer"
|
||||||
|
.badge.progress-bar-purple
|
||||||
|
= @dossiers_list_facade.valides_total
|
||||||
|
|
||||||
|
%li{ class: @dossiers_list_facade.en_instruction_class }
|
||||||
|
%a{:href => "#{url_for users_dossiers_path(liste: 'en_instruction')}", 'data-toggle' => :tooltip, title: 'Les dossiers en cours d\'instruction par l\'administration compétante.'}
|
||||||
|
%h5.text-default
|
||||||
|
="En instruction"
|
||||||
|
.badge.progress-bar-default
|
||||||
|
= @dossiers_list_facade.en_instruction_total
|
||||||
|
|
||||||
|
%li{ class: @dossiers_list_facade.termine_class }
|
||||||
|
%a{:href => "#{url_for users_dossiers_path(liste: 'termine')}", 'data-toggle' => :tooltip, title: 'Les dossiers cloturés qui peuvent être "Accepté", "Refusé" ou "Sans suite".'}
|
||||||
%h5.text-success
|
%h5.text-success
|
||||||
= "Terminé"
|
= "Cloturé"
|
||||||
.badge.progress-bar-success
|
.badge.progress-bar-success
|
||||||
= @dossiers_termine_total
|
= @dossiers_list_facade.termine_total
|
||||||
|
|
||||||
%li{ class: @invite_class }
|
%ul.nav.nav-tabs.navbar-right{style:'border-bottom: none;'}
|
||||||
%a{:href => "#{url_for users_dossiers_path(liste: 'invite')}"}
|
%li{ class: @dossiers_list_facade.invite_class }
|
||||||
%h5{style: 'color: #696969'}
|
%a{:href => "#{url_for users_dossiers_path(liste: 'invite')}"}
|
||||||
= "Invitation"
|
%h5.text-warning
|
||||||
.badge{style: 'background-color: #696969'}
|
= "Invitation"
|
||||||
= @dossiers_invite_total
|
.badge.progress-bar-warning
|
||||||
|
= @dossiers_list_facade.invite_total
|
||||||
%br
|
%br
|
||||||
|
|
45
app/views/users/dossiers/_state_description.html.haml
Normal file
45
app/views/users/dossiers/_state_description.html.haml
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
#state_description.row{style:'width: 55%; margin-left: auto; margin-right: auto'}
|
||||||
|
.panel.panel-info
|
||||||
|
.panel-body.center
|
||||||
|
.row
|
||||||
|
.col-md-1.col-lg-1
|
||||||
|
.fa.fa-info-circle.text-info{style:'font-size: 2em; margin-top: 20%'}
|
||||||
|
.col-md-11.col-lg-11
|
||||||
|
-if dossiers_list_facade.liste == 'nouveaux'
|
||||||
|
Les dossiers présents dans cette liste
|
||||||
|
%b
|
||||||
|
n'ont pas encore été ouverts
|
||||||
|
par votre accompagnteur. Une notification vous sera envoyée quand votre demande aura été étudiée.
|
||||||
|
-elsif dossiers_list_facade.liste == 'a_traiter'
|
||||||
|
Les dossiers présents dans cette liste
|
||||||
|
%b
|
||||||
|
attendent une action de votre part.
|
||||||
|
Plus d'informations vous sont généralement données par votre accompagnateur dans le flux de commentaires du dossier.
|
||||||
|
-elsif dossiers_list_facade.liste == 'en_attente'
|
||||||
|
Les dossiers présents dans cette liste sont
|
||||||
|
%b
|
||||||
|
en cours de relecture par votre accompagnateur.
|
||||||
|
Il reviendra vers vous si des informations ou documents sont manquants pour la future instruction de votre dossier.
|
||||||
|
-elsif dossiers_list_facade.liste == 'valides'
|
||||||
|
Les dossiers présents dans cette liste ont été
|
||||||
|
%b
|
||||||
|
relus et considérés comme complet
|
||||||
|
pour instruction par votre accompagnateur. Ceux-ci ne peuvent maintenant plus être modifié. Il faut que vous procédiez à leurs dépôts afin qu'une décision finale soit rendue.
|
||||||
|
-elsif dossiers_list_facade.liste == 'en_instruction'
|
||||||
|
Les dossiers présents dans cette liste sont
|
||||||
|
%b
|
||||||
|
en cours de réception
|
||||||
|
ou
|
||||||
|
%b
|
||||||
|
en cours d'instruction
|
||||||
|
par l'administration compétente. Une notification vous sera envoyée une fois qu'une décision aura été rendue.
|
||||||
|
-elsif dossiers_list_facade.liste == 'termine'
|
||||||
|
Les dossiers présents dans cette liste sont ceux qui ont été instruits par l'admnistration et
|
||||||
|
%b
|
||||||
|
une décision finale a été rendue.
|
||||||
|
Ils peuvent posséder trois états différents : Accepté, Refusé ou Sans Suite.
|
||||||
|
-elsif dossiers_list_facade.liste == 'invite'
|
||||||
|
Les dossiers présents dans cete liste sont ceux
|
||||||
|
%b
|
||||||
|
auxquels vous avez été invités
|
||||||
|
à participer afin d'émettre un avis et/ou à founir des documents complétmentaires.
|
|
@ -1,4 +1,8 @@
|
||||||
#users_index
|
#users_index
|
||||||
= render partial: 'onglets'
|
= render partial: 'onglets'
|
||||||
|
|
||||||
= smart_listing_render :dossiers
|
= smart_listing_render :dossiers
|
||||||
|
|
||||||
|
%br
|
||||||
|
%br
|
||||||
|
= render partial: 'state_description', locals: {dossiers_list_facade: @dossiers_list_facade}
|
||||||
|
|
|
@ -75,11 +75,10 @@ describe 'users/dossiers/index.html.haml', type: :view do
|
||||||
it { is_expected.to have_css('#users_index') }
|
it { is_expected.to have_css('#users_index') }
|
||||||
|
|
||||||
describe 'dossier initiated is present' do
|
describe 'dossier initiated is present' do
|
||||||
pending
|
it { is_expected.to have_content(dossier.procedure.libelle) }
|
||||||
# it { is_expected.to have_content(dossier.procedure.libelle) }
|
it { is_expected.to have_content(dossier.entreprise.raison_sociale) }
|
||||||
# it { is_expected.to have_content(dossier.entreprise.raison_sociale) }
|
it { is_expected.to have_content(dossier.display_state) }
|
||||||
# it { is_expected.to have_content(dossier.display_state) }
|
it { is_expected.to have_content(dossier.last_update) }
|
||||||
# it { is_expected.to have_content(dossier.last_update) }
|
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'dossier replied and closed are not present' do
|
describe 'dossier replied and closed are not present' do
|
||||||
|
|
Loading…
Add table
Reference in a new issue