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
|
||||
|
||||
def index
|
||||
order = 'DESC'
|
||||
|
||||
@liste = params[:liste] || 'a_traiter'
|
||||
@dossiers_list_facade = DossiersListFacades.new current_user, (params[:liste] || 'a_traiter')
|
||||
|
||||
@dossiers = smart_listing_create :dossiers,
|
||||
dossiers_to_display,
|
||||
@dossiers_list_facade.dossiers_to_display,
|
||||
partial: "users/dossiers/list",
|
||||
array: true
|
||||
|
||||
total_dossiers_per_state
|
||||
end
|
||||
|
||||
def commencer
|
||||
|
@ -109,40 +105,6 @@ class Users::DossiersController < UsersController
|
|||
|
||||
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
|
||||
errors_valid_siret unless Siret.new(siret: siret).valid?
|
||||
end
|
||||
|
@ -183,5 +145,4 @@ class Users::DossiersController < UsersController
|
|||
def facade id = params[:id]
|
||||
DossierFacades.new id, current_user.email
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
@ -5,7 +5,15 @@ class DossiersListFacades
|
|||
end
|
||||
|
||||
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
|
||||
|
||||
def dossiers_to_display
|
||||
|
@ -28,6 +36,14 @@ class DossiersListFacades
|
|||
(@liste == 'deposes' ? 'active' : '')
|
||||
end
|
||||
|
||||
def valides_class
|
||||
(@liste == 'valides' ? 'active' : '')
|
||||
end
|
||||
|
||||
def en_instruction_class
|
||||
(@liste == 'en_instruction' ? 'active' : '')
|
||||
end
|
||||
|
||||
def a_instruire_class
|
||||
(@liste == 'a_instruire' ? 'active' : '')
|
||||
end
|
||||
|
@ -40,22 +56,36 @@ class DossiersListFacades
|
|||
(@liste == 'suivi' ? 'active' : '')
|
||||
end
|
||||
|
||||
def invite_class
|
||||
(@liste == 'invite' ? 'active' : '')
|
||||
end
|
||||
|
||||
def nouveaux_total
|
||||
service.nouveaux.count
|
||||
end
|
||||
|
||||
def a_traiter_total
|
||||
service.waiting_for_gestionnaire.count
|
||||
service.waiting_for_gestionnaire.count if gestionnaire?
|
||||
service.waiting_for_user.count if user?
|
||||
end
|
||||
|
||||
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
|
||||
|
||||
def deposes_total
|
||||
service.deposes.count
|
||||
end
|
||||
|
||||
def en_instruction_total
|
||||
service.en_instruction.count
|
||||
end
|
||||
|
||||
def a_instruire_total
|
||||
service.a_instruire.count
|
||||
end
|
||||
|
@ -67,4 +97,18 @@ class DossiersListFacades
|
|||
def suivi_total
|
||||
service.suivi.count
|
||||
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
|
|
@ -41,7 +41,9 @@ class Dossier < ActiveRecord::Base
|
|||
NOUVEAUX = %w(initiated)
|
||||
WAITING_FOR_GESTIONNAIRE = %w(updated)
|
||||
WAITING_FOR_USER = %w(replied validated)
|
||||
VALIDES = %w(validated)
|
||||
DEPOSES = %w(submitted)
|
||||
EN_INSTRUCTION = %w(submitted received)
|
||||
A_INSTRUIRE = %w(received)
|
||||
TERMINE = %w(closed refused without_continuation)
|
||||
|
||||
|
@ -152,10 +154,18 @@ class Dossier < ActiveRecord::Base
|
|||
DEPOSES.include?(state)
|
||||
end
|
||||
|
||||
def valides?
|
||||
VALIDES.include?(state)
|
||||
end
|
||||
|
||||
def a_instruire?
|
||||
A_INSTRUIRE.include?(state)
|
||||
end
|
||||
|
||||
def en_instruction?
|
||||
EN_INSTRUCTION.include?(state)
|
||||
end
|
||||
|
||||
def termine?
|
||||
TERMINE.include?(state)
|
||||
end
|
||||
|
@ -172,6 +182,10 @@ class Dossier < ActiveRecord::Base
|
|||
where(state: WAITING_FOR_USER, archived: false).order("updated_at #{order}")
|
||||
end
|
||||
|
||||
def self.valides order = 'ASC'
|
||||
where(state: VALIDES, archived: false).order("updated_at #{order}")
|
||||
end
|
||||
|
||||
def self.deposes order = 'ASC'
|
||||
where(state: DEPOSES, archived: false).order("updated_at #{order}")
|
||||
end
|
||||
|
@ -180,6 +194,10 @@ class Dossier < ActiveRecord::Base
|
|||
where(state: A_INSTRUIRE, archived: false).order("updated_at #{order}")
|
||||
end
|
||||
|
||||
def self.en_instruction order = 'ASC'
|
||||
where(state: EN_INSTRUCTION, 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_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'
|
||||
|
||||
= smart_listing_render :dossiers
|
||||
|
||||
%br
|
||||
%br
|
||||
= render partial: 'state_description', locals: {dossiers_list_facade: @dossiers_list_facade}
|
||||
|
|
|
@ -1,33 +1,55 @@
|
|||
%h1 Mes dossiers
|
||||
%br
|
||||
|
||||
%br
|
||||
#onglets
|
||||
%ul.nav.nav-tabs
|
||||
%li{ class: @a_traiter_class }
|
||||
%a{:href => "#{url_for users_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 users_dossiers_path(liste: 'en_attente')}"}
|
||||
%li{ class: @dossiers_list_facade.nouveaux_class }
|
||||
%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-info
|
||||
="En attente "
|
||||
= "Nouveau"
|
||||
.badge.progress-bar-info
|
||||
= @dossiers_en_attente_total
|
||||
= @dossiers_list_facade.nouveaux_total
|
||||
|
||||
%li{ class: @termine_class }
|
||||
%a{:href => "#{url_for users_dossiers_path(liste: 'termine')}"}
|
||||
%li{ class: @dossiers_list_facade.a_traiter_class }
|
||||
%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
|
||||
= "Terminé"
|
||||
= "Cloturé"
|
||||
.badge.progress-bar-success
|
||||
= @dossiers_termine_total
|
||||
= @dossiers_list_facade.termine_total
|
||||
|
||||
%li{ class: @invite_class }
|
||||
%a{:href => "#{url_for users_dossiers_path(liste: 'invite')}"}
|
||||
%h5{style: 'color: #696969'}
|
||||
= "Invitation"
|
||||
.badge{style: 'background-color: #696969'}
|
||||
= @dossiers_invite_total
|
||||
%ul.nav.nav-tabs.navbar-right{style:'border-bottom: none;'}
|
||||
%li{ class: @dossiers_list_facade.invite_class }
|
||||
%a{:href => "#{url_for users_dossiers_path(liste: 'invite')}"}
|
||||
%h5.text-warning
|
||||
= "Invitation"
|
||||
.badge.progress-bar-warning
|
||||
= @dossiers_list_facade.invite_total
|
||||
%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
|
||||
= 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') }
|
||||
|
||||
describe 'dossier initiated is present' do
|
||||
pending
|
||||
# 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.display_state) }
|
||||
# it { is_expected.to have_content(dossier.last_update) }
|
||||
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.display_state) }
|
||||
it { is_expected.to have_content(dossier.last_update) }
|
||||
end
|
||||
|
||||
describe 'dossier replied and closed are not present' do
|
||||
|
|
Loading…
Reference in a new issue