Add new state on User UI.

/!/ WARNING : No tests fix
This commit is contained in:
Xavier J 2016-08-12 13:56:10 +02:00
parent 1a92382259
commit 6adfcac5bf
10 changed files with 232 additions and 72 deletions

View file

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

View file

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

View file

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

View 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

View 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

View file

@ -4,3 +4,7 @@
= render partial: 'onglets'
= smart_listing_render :dossiers
%br
%br
= render partial: 'state_description', locals: {dossiers_list_facade: @dossiers_list_facade}

View file

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

View 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.

View file

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

View file

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