View Javadoc
1   /*
2    * Copyright (c) 2002-2021, City of Paris
3    * All rights reserved.
4    *
5    * Redistribution and use in source and binary forms, with or without
6    * modification, are permitted provided that the following conditions
7    * are met:
8    *
9    *  1. Redistributions of source code must retain the above copyright notice
10   *     and the following disclaimer.
11   *
12   *  2. Redistributions in binary form must reproduce the above copyright notice
13   *     and the following disclaimer in the documentation and/or other materials
14   *     provided with the distribution.
15   *
16   *  3. Neither the name of 'Mairie de Paris' nor 'Lutece' nor the names of its
17   *     contributors may be used to endorse or promote products derived from
18   *     this software without specific prior written permission.
19   *
20   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21   * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23   * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
24   * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25   * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26   * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27   * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28   * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30   * POSSIBILITY OF SUCH DAMAGE.
31   *
32   * License 1.0
33   */
34  package fr.paris.lutece.plugins.ctv.service;
35  
36  import static fr.paris.lutece.plugins.ctv.bo.SearchBeanForAlertes.CategorieAlertes.DEMANDES_ANNULEES;
37  import static fr.paris.lutece.plugins.ctv.bo.SearchBeanForAlertes.CategorieAlertes.DEMANDES_SIGNEES;
38  import static fr.paris.lutece.plugins.ctv.bo.SearchBeanForAlertes.CategorieAlertes.FIN_EMPRISE_DEPASSEE;
39  import static fr.paris.lutece.plugins.ctv.bo.SearchBeanForAlertes.CategorieAlertes.PJ_AJOUTEES;
40  import static fr.paris.lutece.plugins.ctv.bo.SearchBeanForAlertes.CategorieAlertes.PRESENCE_BARRAGE_US;
41  import static fr.paris.lutece.plugins.ctv.bo.SearchBeanForAlertes.CategorieAlertes.ROC_PROCHE;
42  import static fr.paris.lutece.plugins.ctv.constant.StatutEmprise.A_COMPLETER;
43  import static fr.paris.lutece.plugins.ctv.constant.StatutEmprise.A_COORDONNEE;
44  import static fr.paris.lutece.plugins.ctv.constant.StatutEmprise.A_MODIFIER;
45  import static fr.paris.lutece.plugins.ctv.constant.StatutEmprise.A_SIGNER;
46  import static fr.paris.lutece.plugins.ctv.constant.StatutEmprise.A_TRAITER;
47  import static fr.paris.lutece.plugins.ctv.constant.StatutEmprise.A_VALIDER;
48  import static fr.paris.lutece.plugins.ctv.constant.StatutEmprise.COORDONNEE;
49  import static fr.paris.lutece.plugins.ctv.constant.StatutEmprise.FIN_TRAVAUX_RESEAUX;
50  import static fr.paris.lutece.plugins.ctv.constant.StatutEmprise.FIN_TRAVAUX_VOIRIE;
51  import static fr.paris.lutece.plugins.ctv.constant.StatutEmprise.GARANTIE;
52  import static fr.paris.lutece.plugins.ctv.constant.StatutEmprise.PROLONGATION;
53  import static fr.paris.lutece.plugins.ctv.constant.StatutEmprise.REFECTION_EN_COURS;
54  import static fr.paris.lutece.plugins.ctv.constant.StatutEmprise.REFECTION_TERMINEE;
55  import static fr.paris.lutece.plugins.ctv.constant.StatutEmprise.REMISE_EN_CIRCULATION;
56  import static fr.paris.lutece.plugins.ctv.constant.StatutEmprise.SIGNE;
57  import static fr.paris.lutece.plugins.ctv.constant.StatutEmprise.TRAVAUX_EN_COURS;
58  import static fr.paris.lutece.plugins.ctv.constant.TypeDemande.BARRAGE_US;
59  import static fr.paris.lutece.plugins.ctv.constant.TypeDemande.INTENTION_TRAVAUX;
60  import static fr.paris.lutece.plugins.ctv.constant.TypeDemande.INTERVENTION;
61  import static fr.paris.lutece.plugins.ctv.constant.TypeDemande.OCCUPATION;
62  import static fr.paris.lutece.plugins.ctv.constant.TypeDemande.TRAVAUX_IMPERATIFS_NON_PROGRAMMES;
63  import static fr.paris.lutece.plugins.ctv.constant.TypeProfileCtv.INSTRUCTEUR;
64  import static fr.paris.lutece.plugins.ctv.constant.TypeProfileCtv.SUPERVISEUR_1;
65  import static fr.paris.lutece.plugins.ctv.constant.TypeProfileCtv.SUPERVISEUR_2;
66  
67  import java.util.ArrayList;
68  import java.util.Arrays;
69  import java.util.LinkedHashMap;
70  import java.util.List;
71  import java.util.Map;
72  
73  import javax.servlet.http.HttpServletRequest;
74  
75  import fr.paris.lutece.plugins.ctv.bo.SearchBeanForAlertes;
76  import fr.paris.lutece.plugins.ctv.bo.SearchBeanForAlertes.CategorieAlertes;
77  import fr.paris.lutece.plugins.ctv.bo.SearchBeanForEmprises;
78  import fr.paris.lutece.plugins.ctv.constant.Constants;
79  import fr.paris.lutece.plugins.ctv.constant.StatutDemande;
80  import fr.paris.lutece.plugins.ctv.constant.StatutEmprise;
81  import fr.paris.lutece.plugins.ctv.constant.TypeDemande;
82  import fr.paris.lutece.plugins.ctv.constant.TypeProfileCtv;
83  import fr.paris.lutece.plugins.ctv.view.object.BanniereViewObject;
84  import fr.paris.lutece.plugins.unittree.business.unit.Unit;
85  import fr.paris.lutece.portal.business.user.AdminUser;
86  import fr.paris.lutece.portal.service.datastore.DatastoreService;
87  
88  public class TableauDeBordInstructionControllerService extends AbstractTableauDeBordControllerService
89  {
90  
91      private static final long serialVersionUID = -9119149650491996161L;
92  
93      private static ITableauDeBordControllerService tableauDeBordInstructionControllerService = new TableauDeBordInstructionControllerService( );
94  
95      public static ITableauDeBordControllerService getInstance( )
96      {
97          return tableauDeBordInstructionControllerService;
98      }
99  
100     private TableauDeBordInstructionControllerService( )
101     {
102     }
103 
104     @Override
105     public void putCompteurs( Map<String, Object> model, AdminUser user, HttpServletRequest request )
106     {
107 
108         putCompteursNouveau( model, user, request );
109         putCompteursAtraiter( model, user, request );
110         putCompteursEnCours( model, user, request );
111         putCompteursAlertes( model, user, request );
112 
113         if ( request.getSession( ).getAttribute( "profile_default" ) != null )
114         {
115             model.put( "profileInSession", ( (TypeProfileCtv) request.getSession( ).getAttribute( "profile_default" ) ).getKey( ) );
116         }
117     }
118 
119     private void putCompteursAlertes( Map<String, Object> model, AdminUser user, HttpServletRequest request )
120     {
121 
122         Map<String, Integer> compteursAlertes = new LinkedHashMap<String, Integer>( );
123         List<CategorieAlertes> categories = new ArrayList<>( );
124         boolean isSuperviseur1 = isSuperviseur1( user, request );
125         boolean isInstructeur = isUserInstructeur( user, request );
126         if ( isSuperviseur1 )
127         {
128             categories = Arrays.asList( FIN_EMPRISE_DEPASSEE, PRESENCE_BARRAGE_US, CategorieAlertes.TRAVAUX_IMPERATIFS_NON_PROGRAMMES );
129         }
130         else
131             if ( isInstructeur )
132             {
133                 categories = Arrays.asList( ROC_PROCHE, FIN_EMPRISE_DEPASSEE, DEMANDES_SIGNEES, DEMANDES_ANNULEES, PJ_AJOUTEES );
134             }
135 
136         for ( CategorieAlertes categorie : categories )
137         {
138             int count = demandeService.countDemandesWithEmpriseByAlertesCriteria( getSearchBeanForAlert( categorie, user, request ) );
139             compteursAlertes.put( categorie.name( ), count );
140         }
141 
142         model.put( "compteurs_alertes", compteursAlertes );
143     }
144 
145     private List<Integer> getSuperviseursUnitSectorIds( AdminUser user )
146     {
147         List<Unit> unitsUser = unitService.getUnitsByIdUser( user.getUserId( ), false );
148         List<Unit> unitsSectors = new ArrayList<>( );
149         for ( Unit unitUser : unitsUser )
150         {
151             List<Unit> unitsSubdi = unitService.getSubUnits( unitUser.getIdUnit( ), false );
152             for ( Unit unitArrondissement : unitsSubdi )
153             {
154                 unitsSectors.addAll( unitService.getSubUnits( unitArrondissement.getIdUnit( ), false ) );
155             }
156         }
157         List<Integer> unitSectorsId = new ArrayList<>( );
158         for ( Unit unit : unitsSectors )
159         {
160             unitSectorsId.add( unit.getIdUnit( ) );
161         }
162         return unitSectorsId;
163     }
164 
165     private void putCompteursNouveau( Map<String, Object> model, AdminUser user, HttpServletRequest request )
166     {
167         boolean isInstructeur = isUserInstructeur( user, request );
168         if ( isInstructeur )
169         {
170             Map<String, Integer> compteursNouveau = new LinkedHashMap<String, Integer>( );
171             List<StatutEmprise> statutsEmprise = new ArrayList<>( Arrays.asList( StatutEmprise.values( ) ) );
172             statutsEmprise.remove( StatutEmprise.ANNULEE );
173             boolean isTransformInactif = false;
174             for ( TypeDemande typeDemande : getTypesDemandes( ) )
175             {
176                 if ( typeDemande.equals( TypeDemande.INTENTION_TRAVAUX ) || typeDemande.equals( TypeDemande.BARRAGE_US )
177                         || typeDemande.equals( TypeDemande.TRAVAUX_IMPERATIFS_NON_PROGRAMMES ) )
178                 {
179                     isTransformInactif = true;
180                 }
181                 else
182                 {
183                     isTransformInactif = false;
184                 }
185                 compteursNouveau.put( typeDemande.name( ), demandeService.getNombreTotalDemandes( 0, statutsEmprise, getStatusBySearchCriteria( ),
186                         isTransformInactif, null, Constants.NOUVEAU, TypeProfileCtv.INSTRUCTEUR, setUnitIds( user ), typeDemande ) );
187             }
188             model.put( "compteurs_nouveau", compteursNouveau );
189         }
190     }
191 
192     private void putCompteursAtraiter( Map<String, Object> model, AdminUser user, HttpServletRequest request )
193     {
194         Map<String, Integer> compteursAtraiter = new LinkedHashMap<String, Integer>( );
195         List<BanniereViewObject> listeBanniereATraiter = new ArrayList<>( );
196 
197         boolean isInstructeur = isUserInstructeur( user, request );
198         boolean isSuperviseur1 = isSuperviseur1( user, request );
199         boolean isSuperviseur2 = ctvProfileService.hasUserProfile( user, SUPERVISEUR_2, getPlugin( ), request );
200         if ( isInstructeur )
201         {
202             initStatutAndTypeAtraiter( listeBanniereATraiter, INSTRUCTEUR );
203         }
204         else
205             if ( isSuperviseur1 )
206             {
207                 initAtraiterSuperviseur1( listeBanniereATraiter, SUPERVISEUR_1 );
208             }
209             else
210                 if ( isSuperviseur2 )
211                 {
212                     initAtraiterSuperviseur2( listeBanniereATraiter, SUPERVISEUR_2 );
213                 }
214 
215         getCompteurFromProfileATraiter( user, compteursAtraiter, listeBanniereATraiter );
216         model.put( "compteurs_a_traiter", compteursAtraiter );
217     }
218 
219     private boolean isSuperviseur1( AdminUser user, HttpServletRequest request )
220     {
221         return ctvProfileService.hasUserProfile( user, SUPERVISEUR_1, getPlugin( ), request );
222     }
223 
224     private boolean isUserInstructeur( AdminUser user, HttpServletRequest request )
225     {
226         return ctvProfileService.hasUserProfile( user, INSTRUCTEUR, getPlugin( ), request );
227     }
228 
229     private void putCompteursEnCours( Map<String, Object> model, AdminUser user, HttpServletRequest request )
230     {
231 
232         Map<String, Integer> compteursEnCours = new LinkedHashMap<String, Integer>( );
233         List<BanniereViewObject> listeBanniereEnCours = new ArrayList<>( );
234 
235         boolean isInstructeur = isUserInstructeur( user, request );
236         boolean isSuperviseur1 = isSuperviseur1( user, request );
237         boolean isSuperviseur2 = ctvProfileService.hasUserProfile( user, SUPERVISEUR_2, getPlugin( ), request );
238 
239         if ( isInstructeur )
240         {
241             initStatutAndTypeEnCours( listeBanniereEnCours, INSTRUCTEUR );
242         }
243         else
244             if ( isSuperviseur1 )
245             {
246                 initStatutAndTypeEnCours( listeBanniereEnCours, SUPERVISEUR_1 );
247             }
248             else
249                 if ( isSuperviseur2 )
250                 {
251                     initStatutAndTypeEnCours( listeBanniereEnCours, SUPERVISEUR_2 );
252                 }
253 
254         getCompteurFromProfileEnCours( user, compteursEnCours, listeBanniereEnCours );
255         model.put( "compteurs_dossiers_en_cours", compteursEnCours );
256 
257     }
258 
259     private void initAtraiterSuperviseur1( List<BanniereViewObject> listeBanniereATraiterSuperviseur1, TypeProfileCtv userType )
260     {
261 
262         listeBanniereATraiterSuperviseur1.add( new BanniereViewObject( userType, INTERVENTION.name( ), new TypeDemande [ ] {
263                 INTERVENTION, BARRAGE_US
264         }, A_VALIDER ) );
265         listeBanniereATraiterSuperviseur1.add( new BanniereViewObject( userType, OCCUPATION.name( ), new TypeDemande [ ] {
266                 OCCUPATION
267         }, A_VALIDER ) );
268         listeBanniereATraiterSuperviseur1.add( new BanniereViewObject( userType, OCCUPATION.name( ), new TypeDemande [ ] {
269                 OCCUPATION
270         }, A_VALIDER ) );
271         listeBanniereATraiterSuperviseur1.add( new BanniereViewObject( userType, Constants.PROLONGATION, new TypeDemande [ ] {
272                 OCCUPATION, INTERVENTION
273         }, PROLONGATION ) );
274     }
275 
276     private void initAtraiterSuperviseur2( List<BanniereViewObject> listeBanniereATraiterSuperviseur2, TypeProfileCtv userType )
277     {
278         listeBanniereATraiterSuperviseur2.add( new BanniereViewObject( INTERVENTION.name( ), new TypeDemande [ ] {
279                 INTERVENTION, BARRAGE_US
280         }, A_SIGNER ) );
281         listeBanniereATraiterSuperviseur2.add( new BanniereViewObject( OCCUPATION.name( ), new TypeDemande [ ] {
282                 OCCUPATION
283         }, A_SIGNER ) );
284         listeBanniereATraiterSuperviseur2.add( new BanniereViewObject( userType, Constants.PROLONGATION, new TypeDemande [ ] {
285                 OCCUPATION, INTERVENTION
286         }, PROLONGATION ) );
287 
288     }
289 
290     @Override
291     protected SearchBeanForEmprises initSearchBean( AdminUser user )
292     {
293         return new SearchBeanForEmprises( );
294     }
295 
296     private void initSearchBeanBlocInstructeur( SearchBeanForEmprises searchBean, List<StatutDemande> statusDemande, AdminUser user, String typeDeDemande,
297             List<BanniereViewObject> listeBanniereEnCours )
298     {
299         searchBean.setLibeleByBloc( typeDeDemande );
300         statusDemande.addAll( getStatusBySearchCriteria( ) );
301         for ( BanniereViewObject bvo : listeBanniereEnCours )
302         {
303             if ( typeDeDemande.equals( bvo.getName( ) ) )
304             {
305                 searchBean.setStatutEmpriseArray( bvo.getStatutEmprise( ) );
306                 searchBean.setTypesDemande( bvo.getTypeDemande( ) );
307                 searchBean.setLastInstructeur( user.getUserId( ) );
308             }
309         }
310     }
311 
312     private void initSearchBeanBlocSuperviseurs( SearchBeanForEmprises searchBean, List<StatutDemande> statusDemande, String typeDeDemande,
313             List<BanniereViewObject> listeBanniereATraiter )
314     {
315         statusDemande.addAll( getStatusBySearchCriteria( ) );
316         for ( BanniereViewObject bvo : listeBanniereATraiter )
317         {
318             if ( typeDeDemande.equals( bvo.getName( ) ) )
319             {
320                 searchBean.setStatutEmpriseArray( bvo.getStatutEmprise( ) );
321                 searchBean.setTypesDemande( bvo.getTypeDemande( ) );
322             }
323         }
324     }
325 
326     private void initStatutAndTypeAtraiter( List<BanniereViewObject> listeBanniere, TypeProfileCtv userType )
327     {
328 
329         listeBanniere.add( new BanniereViewObject( INSTRUCTEUR, INTENTION_TRAVAUX.name( ), new TypeDemande [ ] {
330                 INTENTION_TRAVAUX
331         }, A_COORDONNEE ) );
332         listeBanniere.add( new BanniereViewObject( INSTRUCTEUR, BARRAGE_US.name( ), new TypeDemande [ ] {
333                 BARRAGE_US
334         }, new StatutEmprise [ ] {
335                 StatutEmprise.A_COORDONNEE, StatutEmprise.A_TRAITER
336         } ) );
337         listeBanniere.add( new BanniereViewObject( INSTRUCTEUR, TRAVAUX_IMPERATIFS_NON_PROGRAMMES.name( ), new TypeDemande [ ] {
338                 TRAVAUX_IMPERATIFS_NON_PROGRAMMES
339         }, A_COORDONNEE ) );
340         listeBanniere.add( new BanniereViewObject( INSTRUCTEUR, INTERVENTION.name( ), new TypeDemande [ ] {
341                 INTERVENTION
342         }, new StatutEmprise [ ] {
343                 A_TRAITER
344         } ) );
345         listeBanniere.add( new BanniereViewObject( INSTRUCTEUR, OCCUPATION.name( ), new TypeDemande [ ] {
346                 OCCUPATION
347         }, new StatutEmprise [ ] {
348                 A_TRAITER
349         } ) );
350         listeBanniere.add( new BanniereViewObject( INSTRUCTEUR, Constants.FIN_TRAVAUX_RESEAUX, new TypeDemande [ ] {
351                 OCCUPATION, INTERVENTION
352         }, new StatutEmprise [ ] {
353                 FIN_TRAVAUX_RESEAUX
354         } ) );
355         listeBanniere.add( new BanniereViewObject( INSTRUCTEUR, Constants.FIN_TRAVAUX_VOIRIE, new TypeDemande [ ] {
356                 OCCUPATION, INTERVENTION
357         }, new StatutEmprise [ ] {
358                 FIN_TRAVAUX_VOIRIE
359         } ) );
360         listeBanniere.add( new BanniereViewObject( INSTRUCTEUR, Constants.REMISE_CIRCULATION, new TypeDemande [ ] {
361                 OCCUPATION, INTERVENTION
362         }, new StatutEmprise [ ] {
363                 REMISE_EN_CIRCULATION
364         } ) );
365 
366         listeBanniere.add( new BanniereViewObject( INSTRUCTEUR, Constants.PROLONGATION, new TypeDemande [ ] {
367                 OCCUPATION, INTERVENTION
368         }, new StatutEmprise [ ] {
369                 PROLONGATION
370         } ) );
371 
372     }
373 
374     private void initStatutAndTypeEnCours( List<BanniereViewObject> listeBanniere, TypeProfileCtv userType )
375     {
376         StatutEmprise [ ] statutEmpriseIntention = new StatutEmprise [ ] {
377                 A_COORDONNEE, COORDONNEE, A_MODIFIER
378         };
379 
380         StatutEmprise [ ] statutEmpriseIntentionBU = new StatutEmprise [ ] {
381                 A_COORDONNEE, COORDONNEE, A_COMPLETER, A_MODIFIER, A_TRAITER, A_VALIDER, SIGNE, A_SIGNER
382         };
383 
384         StatutEmprise [ ] statutEmpriseInterventionOccupation = new StatutEmprise [ ] {
385                 A_TRAITER, A_COMPLETER, A_VALIDER, A_SIGNER, SIGNE
386         };
387         listeBanniere.add( new BanniereViewObject( userType, INTENTION_TRAVAUX.name( ), new TypeDemande [ ] {
388                 INTENTION_TRAVAUX
389         }, statutEmpriseIntention ) );
390         listeBanniere.add( new BanniereViewObject( userType, BARRAGE_US.name( ), new TypeDemande [ ] {
391                 BARRAGE_US
392         }, statutEmpriseIntentionBU ) );
393         listeBanniere.add( new BanniereViewObject( userType, TRAVAUX_IMPERATIFS_NON_PROGRAMMES.name( ), new TypeDemande [ ] {
394                 TRAVAUX_IMPERATIFS_NON_PROGRAMMES
395         }, statutEmpriseIntention ) );
396         listeBanniere.add( new BanniereViewObject( userType, INTERVENTION.name( ), new TypeDemande [ ] {
397                 INTERVENTION
398         }, statutEmpriseInterventionOccupation ) );
399         listeBanniere.add( new BanniereViewObject( userType, OCCUPATION.name( ), new TypeDemande [ ] {
400                 OCCUPATION
401         }, statutEmpriseInterventionOccupation ) );
402         listeBanniere.add( new BanniereViewObject( userType, Constants.TRAVAUX_EN_COURS, new TypeDemande [ ] {
403                 OCCUPATION, INTERVENTION
404         }, TRAVAUX_EN_COURS, FIN_TRAVAUX_RESEAUX, FIN_TRAVAUX_VOIRIE, REFECTION_TERMINEE, REFECTION_EN_COURS, REMISE_EN_CIRCULATION, PROLONGATION ) );
405         listeBanniere.add( new BanniereViewObject( userType, Constants.GARANTIE, new TypeDemande [ ] {
406                 OCCUPATION, INTERVENTION
407         }, GARANTIE ) );
408     }
409 
410     @Override
411     protected void putPathDemande( Map<String, Object> model )
412     {
413         model.put( MARK_PATH_DEMANDE_INTENTION, PATH_DEMANDE_INTENTION );
414         model.put( MARK_PATH_DEMANDE_OCCUPATION, PATH_DEMANDE_OCCUPATION );
415         model.put( MARK_PATH_DEMANDE_INTERVENTION, PATH_DEMANDE_INTERVENTION );
416     }
417 
418     private boolean isIntention( String demandeType )
419     {
420         return demandeType.equals( INTENTION_TRAVAUX.name( ) ) || demandeType.equals( BARRAGE_US.name( ) )
421                 || demandeType.equals( TRAVAUX_IMPERATIFS_NON_PROGRAMMES.name( ) );
422     }
423 
424     private void getCompteurFromProfileEnCours( AdminUser user, Map<String, Integer> compteurs, List<BanniereViewObject> listeBanniere )
425     {
426 
427         for ( BanniereViewObject bvo : listeBanniere )
428         {
429             boolean isTransformNull = isIntention( bvo.getName( ) );
430             compteurs.put( bvo.getName( ), demandeService.getNombreTotalDemandes( user.getUserId( ), Arrays.asList( bvo.getStatutEmprise( ) ),
431                     getStatusBySearchCriteria( ), isTransformNull, null, bvo.getName( ), bvo.getUserType( ), setUnitIds( user ), bvo.getTypeDemande( ) ) );
432         }
433     }
434 
435     private void getCompteurFromProfileATraiter( AdminUser user, Map<String, Integer> compteurs, List<BanniereViewObject> listeBanniere )
436     {
437 
438         for ( BanniereViewObject bvo : listeBanniere )
439         {
440             boolean isTransformNull = isIntention( bvo.getName( ) );
441             compteurs.put( bvo.getName( ), demandeService.getNombreTotalDemandes( user.getUserId( ), Arrays.asList( bvo.getStatutEmprise( ) ),
442                     getStatusBySearchCriteria( ), isTransformNull, null, bvo.getName( ), bvo.getUserType( ), setUnitIds( user ), bvo.getTypeDemande( ) ) );
443         }
444     }
445 
446     @Override
447     protected String getPage( Map<String, Object> model )
448     {
449         return getPage( TABLEAU_BORD_PAGE_TITLE, TEMPLATE_TABLEAU_DE_BORD, model );
450     }
451 
452     @Override
453     protected List<StatutDemande> getStatusByBlocs( SearchBeanForEmprises searchBean, HttpServletRequest request, List<StatutDemande> statusDemande,
454             AdminUser user, String itemSelected )
455     {
456 
457         List<BanniereViewObject> listeBanniereATraiterSuperviseur1 = new ArrayList<>( );
458         List<BanniereViewObject> listeBanniereATraiterSuperviseur2 = new ArrayList<>( );
459 
460         List<BanniereViewObject> listeBanniereATraiter = new ArrayList<>( );
461         List<BanniereViewObject> listeBanniereEnCours = new ArrayList<>( );
462         initStatutAndTypeAtraiter( listeBanniereATraiter, null );
463         String blocSelected = request.getParameter( PARAMETER_STATUT );
464 
465         boolean isSuperviseur1 = isSuperviseur1( user, request );
466         boolean isSuperviseur2 = ctvProfileService.hasUserProfile( user, SUPERVISEUR_2, getPlugin( ), request );
467         boolean isInstructeur = isUserInstructeur( user, request );
468 
469         if ( isInstructeur )
470         {
471             switch( blocSelected )
472             {
473                 case BLOC_NOUVEAU:
474                     statusDemande.addAll( getStatusBySearchCriteria( ) );
475                     searchBean.setEmpriseTransformee( isIntention( itemSelected ) );
476                     searchBean.setTypeUser( TypeProfileCtv.INSTRUCTEUR );
477                     searchBean.setIsInstructeurBlockAlerteNouveau( true );
478                     break;
479                 case BLOC_A_TRAITER:
480                     searchBean.setEmpriseTransformee( !isIntention( itemSelected ) );
481                     searchBean.setTypeUser( TypeProfileCtv.INSTRUCTEUR );
482                     initSearchBeanBlocInstructeur( searchBean, statusDemande, user, itemSelected, listeBanniereATraiter );
483                     break;
484                 case BLOC_EN_COURS:
485                     initStatutAndTypeEnCours( listeBanniereEnCours, INSTRUCTEUR );
486                     searchBean.setEmpriseTransformee( !isIntention( itemSelected ) );
487                     searchBean.setTypeUser( TypeProfileCtv.INSTRUCTEUR );
488                     initSearchBeanBlocInstructeur( searchBean, statusDemande, user, itemSelected, listeBanniereEnCours );
489                     break;
490                 default:
491                     statusDemande.addAll( getStatusBySearchCriteria( ) );
492                     break;
493             }
494         }
495         else
496             if ( isSuperviseur1 )
497             {
498                 switch( blocSelected )
499                 {
500                     case BLOC_A_TRAITER:
501                         initAtraiterSuperviseur1( listeBanniereATraiterSuperviseur1, SUPERVISEUR_1 );
502                         initSearchBeanBlocSuperviseurs( searchBean, statusDemande, itemSelected, listeBanniereATraiterSuperviseur1 );
503                         break;
504                     case BLOC_EN_COURS:
505                         initStatutAndTypeEnCours( listeBanniereEnCours, SUPERVISEUR_1 );
506                         searchBean.setEmpriseTransformee( !isIntention( itemSelected ) );
507                         initSearchBeanBlocSuperviseurs( searchBean, statusDemande, itemSelected, listeBanniereEnCours );
508                         break;
509                     default:
510                         statusDemande.addAll( getStatusBySearchCriteria( ) );
511                         break;
512                 }
513             }
514             else
515                 if ( isSuperviseur2 )
516                 {
517                     switch( blocSelected )
518                     {
519                         case BLOC_A_TRAITER:
520                             initAtraiterSuperviseur2( listeBanniereATraiterSuperviseur2, null );
521                             initSearchBeanBlocSuperviseurs( searchBean, statusDemande, itemSelected, listeBanniereATraiterSuperviseur2 );
522                             break;
523                         case BLOC_EN_COURS:
524                             initStatutAndTypeEnCours( listeBanniereEnCours, SUPERVISEUR_2 );
525                             searchBean.setEmpriseTransformee( !isIntention( itemSelected ) );
526                             initSearchBeanBlocSuperviseurs( searchBean, statusDemande, itemSelected, listeBanniereEnCours );
527                             break;
528                         default:
529                             statusDemande.addAll( getStatusBySearchCriteria( ) );
530                             break;
531                     }
532                 }
533         return statusDemande;
534     }
535 
536     @Override
537     protected TypeDemande [ ] getTypesDemandes( )
538     {
539         return TypeDemande.values( );
540     }
541 
542     @Override
543     protected List<StatutDemande> getStatusBySearchCriteria( )
544     {
545         List<StatutDemande> statusDemande = new ArrayList<StatutDemande>( );
546         statusDemande.addAll( Arrays.asList( StatutDemande.values( ) ) );
547         statusDemande.remove( StatutDemande.BROUILLON );
548         return statusDemande;
549     }
550 
551     @Override
552     protected SearchBeanForAlertes getSearchBeanForAlert( CategorieAlertes categorieAlerte, AdminUser user, HttpServletRequest request )
553     {
554         if ( isSuperviseur1( user, request ) )
555         {
556             return new SearchBeanForAlertes( categorieAlerte, getSuperviseursUnitSectorIds( user ) );
557         }
558         else
559             if ( isUserInstructeur( user, request ) )
560             {
561                 String delaiRocProche = DatastoreService.getDataValue( "parametre.numeric.alerte.date.roc.proche", "7" );
562                 return new SearchBeanForAlertes( categorieAlerte, user.getUserId( ), delaiRocProche );
563             }
564         return null;
565     }
566 
567     /**
568      * Renvoie les subdivision par défault de l'utilisateur connecté
569      */
570     @Override
571     protected String getDefaultUserUnits ( HttpServletRequest request )
572     {
573         return request.getParameter( "userUnitsId" );
574     }
575 
576 }