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.bo.controller.demandes;
35  
36  import static fr.paris.lutece.plugins.ctv.constant.Document.ROC_AUTRES;
37  import static fr.paris.lutece.plugins.ctv.constant.Document.ROC_PV;
38  import static fr.paris.lutece.plugins.ctv.constant.Document.SAISINE_AUTRE_SERVICE;
39  import static fr.paris.lutece.plugins.ctv.constant.Document.SAISINE_COMMISSARIAT;
40  import static fr.paris.lutece.plugins.ctv.constant.Document.SAISINE_PREFECTURE_POLICE;
41  import static fr.paris.lutece.plugins.ctv.constants.CtvConstants.HAS_ERRORS;
42  import static fr.paris.lutece.plugins.ctv.constants.CtvConstants.MAX_FILE_SIZE;
43  import static fr.paris.lutece.plugins.ctv.constants.CtvConstants.SESSION_NUM_DEMANDE_ID;
44  
45  import java.lang.reflect.InvocationTargetException;
46  import java.util.HashMap;
47  import java.util.LinkedHashMap;
48  import java.util.List;
49  import java.util.Map;
50  
51  import javax.servlet.http.HttpServletRequest;
52  
53  import org.apache.commons.beanutils.BeanUtils;
54  import org.apache.commons.beanutils.ConvertUtils;
55  import org.apache.commons.lang.StringUtils;
56  import org.apache.commons.logging.Log;
57  import org.apache.commons.logging.LogFactory;
58  
59  import fr.paris.lutece.plugins.ctv.bo.AlerteDemande.TypeAlerteDemande;
60  import fr.paris.lutece.plugins.ctv.bo.Conflit;
61  import fr.paris.lutece.plugins.ctv.bo.Emprise;
62  import fr.paris.lutece.plugins.ctv.bo.InfosSuperviseur;
63  import fr.paris.lutece.plugins.ctv.bo.InfosSuperviseur.Autorisation;
64  import fr.paris.lutece.plugins.ctv.bo.InfosSuperviseur.AutorisationIntervention;
65  import fr.paris.lutece.plugins.ctv.bo.InfosSuperviseur.Intervention;
66  import fr.paris.lutece.plugins.ctv.bo.InfosSuperviseur.ROC;
67  import fr.paris.lutece.plugins.ctv.bo.Saisine;
68  import fr.paris.lutece.plugins.ctv.bo.Saisine.TypeSaisine;
69  import fr.paris.lutece.plugins.ctv.business.IConflitService;
70  import fr.paris.lutece.plugins.ctv.business.IEmpriseService;
71  import fr.paris.lutece.plugins.ctv.business.IInfosSuperviseurService;
72  import fr.paris.lutece.plugins.ctv.business.ISaisineService;
73  import fr.paris.lutece.plugins.ctv.constant.Document;
74  import fr.paris.lutece.plugins.ctv.constant.OuiNonEnum;
75  import fr.paris.lutece.plugins.ctv.constant.StatutDemande;
76  import fr.paris.lutece.plugins.ctv.constant.StatutEmprise;
77  import fr.paris.lutece.plugins.ctv.constant.TypeDemande;
78  import fr.paris.lutece.plugins.ctv.constant.TypeProfileCtv;
79  import fr.paris.lutece.plugins.ctv.constants.CtvConstants;
80  import fr.paris.lutece.plugins.ctv.converter.EnumConverter;
81  import fr.paris.lutece.plugins.ctv.handler.CtvUploadDemandeDocumentHandler;
82  import fr.paris.lutece.plugins.ctv.mailtask.EmailTask;
83  import fr.paris.lutece.plugins.ctv.service.IFormulaire;
84  import fr.paris.lutece.plugins.ctv.service.IFormulaireDemandeOccupationBoService;
85  import fr.paris.lutece.plugins.ctv.util.GestionPDFUtil;
86  import fr.paris.lutece.plugins.ctv.view.object.DemandeReading;
87  import fr.paris.lutece.plugins.unittree.service.unit.IUnitService;
88  import fr.paris.lutece.portal.service.spring.SpringContextService;
89  import fr.paris.lutece.portal.service.util.AppPathService;
90  
91  public abstract class AbstractSuperviseurJpsBean extends AbstractCtvJspBean
92  {
93  
94      private static final long                       serialVersionUID                    = 1L;
95  
96      // Title
97      protected static final String                   SUPERVISEUR_TITLE                   = "ctv.etape.superviseur.title";
98  
99      protected static final String                   VIEW_SUPERVISEUR                    = "superviseur";
100 
101     // Mark
102     private static final String                     MARK_AUTORISATION_LIST              = "autorisation_list";
103     private static final String                     MARK_AUTORISATION_INTERVENTION_LIST = "autorisation_intervention_list";
104     protected static final String                   MARK_INTERVENTION_LIST              = "intervention_list";
105     private static final String                     MARK_ROC_LIST                       = "roc_list";
106     private static final String                     MARK_STATUT_A_SIGNER                = "a_signer";
107     private static final String                     MARK_STATUT_A_COMPLETER             = "a_completer";
108     private static final String                     MARK_STATUT_SIGNE                   = "signe";
109     private static final String                     MARK_STATUT_VALIDER                 = "a_valider";
110     private static final String                     MARK_STATUT_TRAITER                 = "a_traiter";
111     private static final String                     MARK_IS_ADMIN_FONC                  = "isadminfonc";
112 
113     private static final String                     MARK_DISPLAY_SIGNER_BUTTON          = "display_signer_button";
114     // Parameter
115     protected static final String                   PARAM_STATUT                        = "statut";
116 
117     // template
118     private static final String                     TEMPLATE_SUPERVISEUR_OCCUPATION     = "admin/plugins/ctv/etapes/superviseur.html";
119 
120     protected static final EmailTaskEmailTask                emailTask                           = new EmailTask( );
121 
122     private IEmpriseService                         empriseService                      = SpringContextService.getBean( "empriseService" );
123 
124     protected static final IInfosSuperviseurService infosSuperviseurService             = SpringContextService.getBean( "infosSuperviseurService" );
125 
126     protected abstract IFormulaire getFormulaireService( );
127 
128     protected abstract IFormulaireDemandeOccupationBoService getFormulaireServiceBo( );
129 
130     private ISaisineService                   saisineService          = SpringContextService.getBean( "saisineService" );
131     private IConflitService                   conflitService          = SpringContextService.getBean( "conflitService" );
132     private static final IUnitService         unitService             = SpringContextService.getBean( IUnitService.BEAN_UNIT_SERVICE );
133 
134     protected CtvUploadDemandeDocumentHandler ctvDemandeUploadHandler = SpringContextService.getBean( CtvUploadDemandeDocumentHandler.CTV_DEMANDE_UPLOAD_HANDLER );
135 
136     private final static Log                  LOGGER                  = LogFactory.getLog( AbstractSuperviseurJpsBean.class );
137 
138     protected Map<String, Object> initModel( HttpServletRequest request )
139     {
140 
141         Map<String, Object> model = getModel( );
142 
143         fillModel( request, model );
144         // Stockage en session d'un indicateur d'erreurs (afin d'empêcher la
145         // validation)
146         if ( getFormulaireService( ).hasErrors( model ) )
147         {
148             request.getSession( ).setAttribute( HAS_ERRORS, true );
149         } else
150         {
151             request.getSession( ).removeAttribute( HAS_ERRORS );
152         }
153 
154         // Etape conflits
155         int numDemande = ( int ) model.get( SESSION_NUM_DEMANDE_ID );
156         Conflit conflit = conflitService.findConflitByNumDemande( numDemande );
157         model.put( "recap_conflit", conflit != null );
158 
159         boolean isAdminFonc = ctvProfileService.hasUserProfile( getUser( ), TypeProfileCtv.ADMIN_FONC, getPlugin( ), request );
160         model.put( MARK_IS_ADMIN_FONC, isAdminFonc );
161 
162         return model;
163     }
164 
165     protected String doSave( HttpServletRequest request )
166     {
167 
168         populateSaisines( request );
169         InfosSuperviseur infos = new InfosSuperviseur( );
170         ConvertUtils.register( new EnumConverter( ), InfosSuperviseur.Autorisation.class );
171         ConvertUtils.register( new EnumConverter( ), InfosSuperviseur.AutorisationIntervention.class );
172         ConvertUtils.register( new EnumConverter( ), InfosSuperviseur.Intervention.class );
173         ConvertUtils.register( new EnumConverter( ), InfosSuperviseur.ROC.class );
174         populate( infos, request );
175         int numDemande = getFormulaireService( ).getNumDemande( request );
176         DemandeReading demande = demandeService.findByNumDemande( numDemande );
177         fillLastUser( numDemande, request );
178         StatutDemande oldStatutDemande = demande.getDemandeStatut( );
179         // Vérification des infos à stocker
180         String statut = request.getParameter( PARAM_STATUT );
181         String statutEmprise = request.getParameter( "statut_emprise" );
182         StatutDemande statutDemande = StatutDemande.valueOf( statut );
183         StatutEmprise statutEmpriseEnum = null;
184         if ( statutEmprise != null )
185         {
186             statutEmpriseEnum = StatutEmprise.valueOf( statutEmprise );
187         }
188         int userId = getUser( ).getUserId( );
189         if ( ( statutDemande == StatutDemande.A_SIGNER ) || ( statutDemande == StatutDemande.A_VALIDER ) || ( statutDemande == StatutDemande.A_COMPLETER )
190                 || ( ( oldStatutDemande == StatutDemande.A_TRAITER ) && ( statutDemande == StatutDemande.SIGNE ) ) )
191         {
192             infos.setInfosSuperviseurInstructeurId( userId );
193         }
194 
195         if ( ( statutDemande == StatutDemande.A_TRAITER ) || ( statutDemande == StatutDemande.SIGNE ) )
196         {
197             infos.setInfosSuperviseurSuperviseurId( userId );
198         }
199 
200         boolean anyErrors = request.getSession( ).getAttribute( HAS_ERRORS ) != null;
201         if ( !anyErrors )
202         {
203 
204             storeQualificationFiles( request );
205             // Mise à jour en base
206             infosSuperviseurService.update( infos, numDemande );
207 
208             if ( statutDemande == StatutDemande.SIGNE )
209             {
210                 // Génération des PDFs
211                 String empriseId = request.getParameter( "empriseId" );
212                 String contextPath = request.getContextPath( );
213                 int errorNumber = GestionPDFUtil.gestionPDF( demande, GestionPDFUtil.MARK_TYPE_DEMANDE, empriseId, contextPath );
214                 if ( errorNumber > 0 )
215                 {
216                     return getBackToSuperviseurPage( request, infos, errorNumber );
217                 }
218 
219                 // mise à jour de la demande et activation des alertes signature
220                 demandeService.updateDemandeSignee( true, numDemande );
221                 alerteDemandeService.insertAlerte( TypeAlerteDemande.SIGNE_INSTRUCTEUR, numDemande );
222                 alerteDemandeService.insertAlerte( TypeAlerteDemande.SIGNE_CONCESSIONNAIRE, numDemande );
223             }
224 
225             demandeService.updateDemandeStatut( numDemande, statutDemande );
226 
227             updateDemandeJustifiee( request, numDemande );
228 
229             updateEmprisesDemandeOrigine( numDemande );
230 
231             if ( statutEmpriseEnum != null )
232             {
233                 empriseService.updateStatutAllEmprises( numDemande, statutEmpriseEnum, true );
234             }
235         }
236         if ( ( statutDemande == StatutDemande.SIGNE ) && ( TypeDemande.OCCUPATION.equals( demande.getDemandeType( ) ) || TypeDemande.INTERVENTION.equals( demande.getDemandeType( ) ) ) )
237         {
238             emailTask.sendEmail( CtvConstants.EMAIL_DEMANDE_SIGNE, numDemande, getLocale( ), request, -1 );
239         }
240         // Récupération de la redirection
241         String nextStepPath = request.getParameter( PARAMETER_NEXT_STEP );
242         if ( StringUtils.isBlank( nextStepPath ) )
243         {
244             return redirect( request, AppPathService.getBaseUrl( request ) + PATH_TABLEAU_DE_BORD );
245         }
246         return redirect( request, nextStepPath );
247     }
248 
249     protected String doQuickSigner( HttpServletRequest request )
250     {
251 
252         int numDemande = getFormulaireService( ).getNumDemande( request );
253         DemandeReading demande = demandeService.findByNumDemande( numDemande );
254         fillLastUser( numDemande, request );
255         // Vérification des infos à stocker
256         String statut = request.getParameter( PARAM_STATUT );
257         String statutEmprise = request.getParameter( "statut_emprise" );
258         StatutDemande statutDemande = StatutDemande.valueOf( statut );
259         StatutEmprise statutEmpriseEnum = null;
260         if ( statutEmprise != null )
261         {
262             statutEmpriseEnum = StatutEmprise.valueOf( statutEmprise );
263         }
264         int userId = getUser( ).getUserId( );
265         InfosSuperviseur infosSuperviseur = infosSuperviseurService.findByNumDemande( numDemande );
266         StatutDemande oldStatutDemande = demande.getDemandeStatut( );
267         if ( oldStatutDemande == StatutDemande.A_TRAITER )
268         {
269             infosSuperviseur.setInfosSuperviseurInstructeurId( userId );
270         }
271         infosSuperviseur.setInfosSuperviseurSuperviseurId( userId );
272 
273         boolean anyErrors = request.getSession( ).getAttribute( HAS_ERRORS ) != null;
274         if ( !anyErrors )
275         {
276 
277             storeQualificationFiles( request );
278             // Mise à jour en base
279             infosSuperviseurService.update( infosSuperviseur, numDemande );
280 
281             // Génération des PDFs
282             String empriseId = request.getParameter( "empriseId" );
283             String contextPath = request.getContextPath( );
284             int errorNumber = GestionPDFUtil.gestionPDF( demande, GestionPDFUtil.MARK_TYPE_DEMANDE, empriseId, contextPath );
285             if ( errorNumber > 0 )
286             {
287                 return getBackToSuperviseurPage( request, infosSuperviseur, errorNumber );
288             }
289 
290             // mise à jour de la demande et activation des alertes signature
291             demandeService.updateDemandeSignee( true, numDemande );
292             alerteDemandeService.insertAlerte( TypeAlerteDemande.SIGNE_INSTRUCTEUR, numDemande );
293             alerteDemandeService.insertAlerte( TypeAlerteDemande.SIGNE_CONCESSIONNAIRE, numDemande );
294 
295             demandeService.updateDemandeStatut( numDemande, statutDemande );
296 
297             updateDemandeJustifiee( request, numDemande );
298             updateEmprisesDemandeOrigine( numDemande );
299 
300             if ( statutEmpriseEnum != null )
301             {
302                 empriseService.updateStatutAllEmprises( numDemande, statutEmpriseEnum, true );
303             }
304         }
305         if ( TypeDemande.OCCUPATION.equals( demande.getDemandeType( ) ) || TypeDemande.INTERVENTION.equals( demande.getDemandeType( ) ) )
306         {
307             emailTask.sendEmail( CtvConstants.EMAIL_DEMANDE_SIGNE, numDemande, getLocale( ), request, -1 );
308         }
309         // Récupération de la redirection
310         String nextStepPath = request.getParameter( PARAMETER_NEXT_STEP );
311         if ( StringUtils.isBlank( nextStepPath ) )
312         {
313             return redirect( request, AppPathService.getBaseUrl( request ) + PATH_TABLEAU_DE_BORD );
314         }
315         return redirect( request, nextStepPath );
316     }
317 
318     private String getBackToSuperviseurPage( HttpServletRequest request, InfosSuperviseur infos, int errorNumber )
319     {
320         Map<String, Object> model = initModel( request );
321         model.put( "sectors", unitService.findAllSectors( ) );
322         model.put( "superviseur", infos );
323         model.put( GestionPDFUtil.MARK_ERROR_GEN_PDF, errorNumber );
324         return getPage( SUPERVISEUR_TITLE, TEMPLATE_SUPERVISEUR_OCCUPATION, model );
325     }
326 
327     protected void populateSaisines( HttpServletRequest request )
328     {
329         Map<String, Saisine> saisines = new HashMap<String, Saisine>( );
330 
331         Map<String, String[]> requestMap = request.getParameterMap( );
332         for ( String paramName : requestMap.keySet( ) )
333         {
334             if ( paramName.startsWith( "saisines" ) )
335             {
336                 String index = StringUtils.substringBetween( paramName, "[", "]" );
337                 String attribute = StringUtils.substringAfter( paramName, "." );
338                 Saisine saisine = saisines.get( index );
339                 if ( saisine != null )
340                 {
341                     populateSaisine( request, paramName, attribute, saisine );
342                 } else
343                 {
344                     saisine = new Saisine( );
345                     populateSaisine( request, paramName, attribute, saisine );
346                     saisines.put( index, saisine );
347                 }
348             }
349         }
350         int numDemande = getFormulaireService( ).getNumDemande( request );
351         saisineService.insertSaisines( saisines.values( ), numDemande );
352     }
353 
354     private void populateSaisine( HttpServletRequest request, String paramName, String attribute, Saisine saisine )
355     {
356         try
357         {
358             ConvertUtils.register( new EnumConverter( ), TypeSaisine.class );
359             String value = request.getParameter( paramName );
360             BeanUtils.copyProperty( saisine, attribute, value );
361         } catch ( IllegalAccessException | InvocationTargetException e )
362         {
363             LOGGER.error( "Can't populate this param: " + paramName );
364         }
365     }
366 
367     protected String validateTransfertSecteur( HttpServletRequest request, String url )
368     {
369         Map<String, Object> model = getModel( );
370         int numDemande = getFormulaireService( ).getNumDemande( request );
371         fillUserPossibleActions( request, model, numDemande );
372 
373         String secteurParam = request.getParameter( "secteur" );
374         if ( secteurParam != null )
375         {
376             int idSecteur = Integer.parseInt( secteurParam );
377             demandeService.updateSecteur( numDemande, idSecteur );
378             demandeService.setLastInstructeur( null, numDemande );
379             demandeService.updateDemandeTransfered( true, numDemande );
380             demandeService.updateUserOrigineTransfert( getUser( ).getUserId( ), numDemande );
381         }
382         return redirect( request, url );
383     }
384 
385     private void fillModel( HttpServletRequest request, Map<String, Object> model )
386     {
387         getFormulaireService( ).alimentationModel( request, model );
388 
389         if ( getFormulaireServiceBo( ) != null )
390         {
391             getFormulaireServiceBo( ).alimentationModelBO( request, model );
392         }
393 
394         getFormulaireService( ).sauvegardeEtape( request, model, CtvConstants.ETAPE_SUPERVISEUR );
395         int numDemande = getFormulaireService( ).getNumDemande( request );
396         fillUserPossibleActions( request, model, numDemande );
397 
398         model.put( CtvUploadDemandeDocumentHandler.CTV_DEMANDE_UPLOAD_HANDLER, ctvDemandeUploadHandler );
399         model.put( MAX_FILE_SIZE, ctvDemandeUploadHandler.getMaxFileSize( ) );
400         model.put( MARK_AUTORISATION_LIST, Autorisation.values( ) );
401         model.put( MARK_AUTORISATION_INTERVENTION_LIST, AutorisationIntervention.values( ) );
402         model.put( MARK_INTERVENTION_LIST, Intervention.values( ) );
403         model.put( MARK_ROC_LIST, ROC.values( ) );
404         model.put( MARK_PATH_TABLEAU_DE_BORD, PATH_TABLEAU_DE_BORD );
405         model.put( MARK_PAGE_TITLE, TABLEAU_BORD_PAGE_TITLE );
406         model.put( MARK_STATUT_A_SIGNER, StatutDemande.A_SIGNER );
407         model.put( MARK_STATUT_A_COMPLETER, StatutDemande.A_COMPLETER );
408         model.put( MARK_STATUT_SIGNE, StatutDemande.SIGNE );
409         model.put( MARK_STATUT_VALIDER, StatutDemande.A_VALIDER );
410         model.put( MARK_STATUT_TRAITER, StatutDemande.A_TRAITER );
411 
412         model.put( "controlForm", true );
413         Map<String, Saisine> saisines = new LinkedHashMap<>( );
414 
415         for ( TypeSaisine type : TypeSaisine.values( ) )
416         {
417             Saisine saisine = saisineService.findByType( type, numDemande );
418             if ( saisine == null )
419             {
420                 saisine = new Saisine( type );
421             }
422             saisines.put( type.name( ), saisine );
423             model.put( type.getFileId( ) + "_listUploadedFiles", ctvDemandeUploadHandler.getListUploadedFiles( type.getFileId( ), request.getSession( ) ) );
424         }
425 
426         model.put( "saisines", saisines );
427 
428         model.put( Document.ROC_PV + "_listUploadedFiles", ctvDemandeUploadHandler.getListUploadedFiles( Document.ROC_PV, request.getSession( ) ) );
429         model.put( Document.ROC_AUTRES + "_listUploadedFiles", ctvDemandeUploadHandler.getListUploadedFiles( Document.ROC_AUTRES, request.getSession( ) ) );
430     }
431 
432     @Override
433     protected void fillUserPossibleActions( HttpServletRequest request, Map<String, Object> model, int numDemande )
434     {
435         super.fillUserPossibleActions( request, model, numDemande );
436         if ( ctvProfileService.hasUserProfile( getUser( ), TypeProfileCtv.SUPERVISEUR_1, getPlugin( ), request )
437                 || ctvProfileService.hasUserProfile( getUser( ), TypeProfileCtv.SUPERVISEUR_2, getPlugin( ), request ) )
438         {
439             model.put( MARK_DISPLAY_SIGNER_BUTTON, true );
440         }
441     }
442 
443     protected void updateInfoSup( HttpServletRequest request )
444     {
445         populateSaisines( request );
446         InfosSuperviseur infos = new InfosSuperviseur( );
447         ConvertUtils.register( new EnumConverter( ), InfosSuperviseur.Autorisation.class );
448         ConvertUtils.register( new EnumConverter( ), InfosSuperviseur.AutorisationIntervention.class );
449         ConvertUtils.register( new EnumConverter( ), InfosSuperviseur.Intervention.class );
450         ConvertUtils.register( new EnumConverter( ), InfosSuperviseur.ROC.class );
451         populate( infos, request );
452         int numDemande = getFormulaireService( ).getNumDemande( request );
453         fillLastUser( numDemande, request );
454 
455         InfosSuperviseur oldInfosSuperviseur = infosSuperviseurService.findByNumDemande( numDemande );
456 
457         // Mise à jour en base
458         if ( oldInfosSuperviseur != null )
459         {
460             infos.setInfosSuperviseurId( oldInfosSuperviseur.getInfosSuperviseurId( ) );
461             if ( oldInfosSuperviseur.getInfosSuperviseurInstructeurId( ) != null )
462             {
463                 infos.setInfosSuperviseurInstructeurId( oldInfosSuperviseur.getInfosSuperviseurInstructeurId( ) );
464             }
465             if ( oldInfosSuperviseur.getInfosSuperviseurSuperviseurId( ) != null )
466             {
467                 infos.setInfosSuperviseurSuperviseurId( oldInfosSuperviseur.getInfosSuperviseurSuperviseurId( ) );
468             }
469 
470             infosSuperviseurService.update( infos, numDemande );
471         } else
472         {
473             infosSuperviseurService.update( infos, numDemande );
474         }
475         // Mise à jour de la demande justifiée
476         updateDemandeJustifiee( request, numDemande );
477     }
478 
479     protected void storeQualificationFiles( HttpServletRequest request )
480     {
481         ctvDemandeUploadHandler.storeFilesOnDisk( request, SAISINE_PREFECTURE_POLICE );
482         ctvDemandeUploadHandler.storeFilesOnDisk( request, SAISINE_COMMISSARIAT );
483         ctvDemandeUploadHandler.storeFilesOnDisk( request, SAISINE_AUTRE_SERVICE );
484         ctvDemandeUploadHandler.storeFilesOnDisk( request, ROC_PV );
485         ctvDemandeUploadHandler.storeFilesOnDisk( request, ROC_AUTRES );
486 
487     }
488 
489     protected void updateDemandeJustifiee( HttpServletRequest request, int numDemande )
490     {
491         String justificationDemande = request.getParameter( "demandeJustifiee" );
492         if ( justificationDemande != null )
493         {
494             // Update de la justification de la demande en base
495             OuiNonEnum justification;
496 
497             switch ( justificationDemande )
498             {
499                 case "OUI":
500                     justification = OuiNonEnum.OUI;
501                     break;
502                 case "NON":
503                     justification = OuiNonEnum.NON;
504                     break;
505                 default:
506                     justification = null;
507             }
508             demandeService.updateDemandeJustification( numDemande, justification );
509         }
510     }
511 
512     protected void updateEmprisesDemandeOrigine( int numDemande )
513     {
514         DemandeReading demande = demandeService.findByNumDemande( numDemande );
515         String numProjet = demande.getDemandeNumProjet( );
516         DemandeReading demandeOrigine = demandeService.findOrigineDemandeByNumProjet( numProjet );
517         if ( TypeDemande.BARRAGE_US == demandeOrigine.getDemandeType( ) )
518         {
519             List<Emprise> listEmprises = empriseService.findEmprisesByDemandeId( demandeOrigine.getDemandeNumero( ) );
520 
521             for ( Emprise emprise : listEmprises )
522             {
523                 if(( StatutDemande.A_SIGNER == StatutDemande.valueOf( demande.getDemandeStatut( ).name() ) )
524                         || ( StatutDemande.A_VALIDER == StatutDemande.valueOf( demande.getDemandeStatut( ).name()) ))
525                 {
526                     empriseService.updateStatut( emprise.getEmpriseId( ), StatutEmprise.A_COORDONNEE );
527                 }
528                 else
529                 {
530                     empriseService.updateStatut( emprise.getEmpriseId( ), StatutEmprise.COORDONNEE );
531                 }
532 
533             }
534         }
535     }
536 
537 }