View Javadoc
1   /*
2    * Copyright (c) 2002-2022, 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.dansmarue.modules.rest.service;
35  
36  import java.text.SimpleDateFormat;
37  import java.util.Calendar;
38  import java.util.HashMap;
39  import java.util.List;
40  import java.util.Map;
41  
42  import javax.inject.Inject;
43  import javax.inject.Named;
44  import javax.servlet.http.HttpServletRequest;
45  
46  import org.apache.commons.fileupload.FileItem;
47  import org.apache.commons.lang.StringUtils;
48  
49  import fr.paris.lutece.plugins.dansmarue.business.entities.ObservationRejet;
50  import fr.paris.lutece.plugins.dansmarue.business.entities.PhotoDMR;
51  import fr.paris.lutece.plugins.dansmarue.business.entities.Signalement;
52  import fr.paris.lutece.plugins.dansmarue.modules.rest.util.constants.SignalementRestConstants;
53  import fr.paris.lutece.plugins.dansmarue.service.IObservationRejetService;
54  import fr.paris.lutece.plugins.dansmarue.service.IObservationRejetSignalementService;
55  import fr.paris.lutece.plugins.dansmarue.service.IPhotoService;
56  import fr.paris.lutece.plugins.dansmarue.service.ISignalementService;
57  import fr.paris.lutece.plugins.dansmarue.service.IWorkflowService;
58  import fr.paris.lutece.plugins.dansmarue.util.constants.DateConstants;
59  import fr.paris.lutece.plugins.dansmarue.util.constants.SignalementConstants;
60  import fr.paris.lutece.plugins.dansmarue.utils.ImgUtils;
61  import fr.paris.lutece.plugins.workflowcore.business.resource.ResourceHistory;
62  import fr.paris.lutece.plugins.workflowcore.service.task.ITaskService;
63  import fr.paris.lutece.portal.service.fileupload.FileUploadService;
64  import fr.paris.lutece.portal.service.i18n.I18nService;
65  import fr.paris.lutece.portal.service.image.ImageResource;
66  import fr.paris.lutece.portal.service.util.AppLogService;
67  import fr.paris.lutece.portal.service.util.AppPropertiesService;
68  import fr.paris.lutece.portal.service.workflow.WorkflowService;
69  import fr.paris.lutece.util.image.ImageUtil;
70  import fr.paris.lutece.util.signrequest.RequestAuthenticator;
71  import net.sf.json.JSONObject;
72  
73  /**
74   * The Class ManageSignalementService.
75   */
76  public class ManageSignalementService
77  {
78  
79      /** The Constant ACTION_SERVICE_FAIT. */
80      public static final String ACTION_SERVICE_FAIT = "serviceFait";
81  
82      /** The Constant ACTION_REJETER. */
83      public static final String ACTION_REJETER = "rejeter";
84  
85      /** The Constant ACTION_PROGRAMMER. */
86      public static final String ACTION_PROGRAMMER = "programmer";
87  
88      /** The Constant ACTION_A_REQUALIFIER. */
89      public static final String ACTION_A_REQUALIFIER = "a requalifier";
90  
91      /** The Constant ACTION_REQUALIFIER. */
92      public static final String ACTION_REQUALIFIER = "requalifier";
93  
94      /** The Constant ACTION_VALIDER. */
95      public static final String ACTION_VALIDER = "Valider";
96  
97      /** The Constant PARAMETER_WEBSERVICE_COMMENT_VALUE. */
98      private static final String PARAMETER_WEBSERVICE_COMMENT_VALUE = "webservice_comment_value";
99  
100     /** The Constant PARAMETER_WEBSERVICE_SERVICE_FAIT_PRESTA. */
101     private static final String PARAMETER_WEBSERVICE_SERVICE_FAIT_PRESTA = "webservice_service_fait_presta";
102 
103     /** The Constant PARAMETER_WEBSERVICE_DATE_PREVUE_TRAITEMENT. */
104     private static final String PARAMETER_WEBSERVICE_DATE_PREVUE_TRAITEMENT = "DatePrevueTraitement";
105 
106     /** The Constant PARAMETER_WEBSERVICE_ID_TYPE_ANOMALIE. */
107     private static final String PARAMETER_WEBSERVICE_ID_TYPE_ANOMALIE = "idTypeAnomalie";
108 
109     /** The Constant PARAMETER_WEBSERVICE_EMAIL_ACTEUR. */
110     private static final String PARAMETER_WEBSERVICE_EMAIL_ACTEUR = "emailActeur";
111 
112     /** The Constant actionStatus. */
113     private static final Map<String, String> actionStatus = new HashMap<>( );
114     static
115     {
116         actionStatus.put( ACTION_REJETER, SignalementRestConstants.JSON_TAG_ANOMALY_REJECTED );
117         actionStatus.put( ACTION_PROGRAMMER, SignalementRestConstants.JSON_TAG_ANOMALY_PROGRAMMED );
118         actionStatus.put( ACTION_A_REQUALIFIER, SignalementRestConstants.JSON_TAG_ANOMALY_A_REQUALIFIED );
119         actionStatus.put( ACTION_REQUALIFIER, SignalementRestConstants.JSON_TAG_ANOMALY_REQUALIFIED );
120         actionStatus.put( ACTION_SERVICE_FAIT, SignalementRestConstants.JSON_TAG_ANOMALY_DONE );
121     }
122 
123     /** The Constant JSON_TAG_ANOMALIE. */
124     public static final String JSON_TAG_ANOMALIE = "anomalie";
125 
126     /** The Constant JSON_TAG_REQUEST. */
127     public static final String JSON_TAG_REQUEST = "request";
128 
129     /** The signalement workflow service. */
130     @Inject
131     private IWorkflowService _signalementWorkflowService;
132 
133     /** The observation rejet service. */
134     @Inject
135     private IObservationRejetService _observationRejetService;
136 
137     /** The photo service. */
138     @Inject
139     private IPhotoService _photoService;
140 
141     /** The task service. */
142     @Inject
143     private ITaskService _taskService;
144 
145     /** The authenticator. */
146     @Inject
147     @Named( "rest.requestAuthenticator" )
148     private RequestAuthenticator _authenticator;
149 
150     /** The observation rejet signalement service. */
151     // SERVICES
152     @Inject
153     private IObservationRejetSignalementService _observationRejetSignalementService;
154 
155     /** The signalement service. */
156     @Inject
157     private ISignalementService _signalementService;
158 
159     /**
160      * process the change status.
161      *
162      * @param request
163      *            the http request.
164      * @param action
165      *            the action.
166      * @param signalement
167      *            the report.
168      * @param commentaire
169      *            the comment.
170      * @param motifsRejetIds
171      *            reject reason.
172      * @param motifRejetAutre
173      *            reject reason other.
174      * @param strDateProgrammation
175      *            strDateProgrammation
176      * @param idTypeAnomalie
177      *            id type report.
178      * @param imageFile
179      *            the image file.
180      * @return empty if no errors, error message otherwise
181      */
182     public String processAction( HttpServletRequest request, String action, Signalement signalement, String commentaire, String [ ] motifsRejetIds,
183             String motifRejetAutre, String strDateProgrammation, long idTypeAnomalie, FileItem imageFile )
184     {
185         String error = StringUtils.EMPTY;
186 
187         if ( actionStatus.containsKey( action ) )
188         {
189             JSONObject jsonAnswer = new JSONObject( );
190             manageStatusWithWorkflow( request, new JSONObject( ), jsonAnswer, signalement.getId( ).intValue( ), signalement.getSignalementReference( ),
191                     actionStatus.get( action ), motifsRejetIds, motifRejetAutre, strDateProgrammation, idTypeAnomalie, commentaire, null );
192             if ( jsonAnswer.containsKey( SignalementRestConstants.JSON_TAG_ERROR_ERROR ) )
193             {
194                 error = jsonAnswer.getString( SignalementRestConstants.JSON_TAG_ERROR_ERROR );
195             }
196             else
197             {
198                 String strImageName = FileUploadService.getFileNameOnly( imageFile );
199                 if ( StringUtils.isNotBlank( strImageName ) )
200                 {
201                     ImageResource image = new ImageResource( );
202                     String width = AppPropertiesService.getProperty( SignalementConstants.IMAGE_THUMBNAIL_RESIZE_WIDTH );
203                     String height = AppPropertiesService.getProperty( SignalementConstants.IMAGE_THUMBNAIL_RESIZE_HEIGHT );
204                     byte [ ] resizeImage = ImageUtil.resizeImage( imageFile.get( ), width, height, 1 );
205                     PhotoDMR photoSignalement = new PhotoDMR( );
206                     image.setImage( imageFile.get( ) );
207                     String mimeType = imageFile.getContentType( ).replace( "pjpeg", "jpeg" );
208                     mimeType = mimeType.replace( "x-png", "png" );
209                     image.setMimeType( mimeType );
210                     photoSignalement.setImage( image );
211                     photoSignalement.setImageContent( ImgUtils.checkQuality( image.getImage( ) ) );
212                     photoSignalement.setImageThumbnailWithBytes( resizeImage );
213                     photoSignalement.setSignalement( signalement );
214                     photoSignalement.setVue( 2 );
215                     photoSignalement.setDate( new SimpleDateFormat( DateConstants.DATE_FR ).format( Calendar.getInstance( ).getTime( ) ) );
216 
217                     // creation of the image in the db linked to the signalement
218                     _photoService.insert( photoSignalement );
219                 }
220             }
221         }
222         else
223         {
224             AppLogService.error( "Error with action : " + action );
225         }
226         return error;
227     }
228 
229     /**
230      * Manage status with workflow.
231      *
232      * @param request
233      *            the http request
234      * @param jsonObject
235      *            the json object
236      * @param jsonAnswer
237      *            the json answer
238      * @param id
239      *            the signalment id
240      * @param reference
241      *            the reference
242      * @param status
243      *            the signalement status
244      * @param motifsRejetIds
245      *            the reject cause ids
246      * @param motifRejetAutre
247      *            the reject cause autre
248      * @param strDateProgramme
249      *            the str date programme
250      * @param idTypeAnomalie
251      *            the id type anomalie
252      * @param comment
253      *            the comment
254      * @param emailActeur
255      *            email de l'agent ayant effectue l'action
256      */
257     public void manageStatusWithWorkflow( HttpServletRequest request, JSONObject jsonObject, JSONObject jsonAnswer, int id, String reference, String status,
258             String [ ] motifsRejetIds, String motifRejetAutre, String strDateProgramme, long idTypeAnomalie, String comment, String emailActeur )
259     {
260         // récupération de l'identifiant du workflow
261         Integer workflowId = _signalementWorkflowService.getSignalementWorkflowId( );
262 
263         WorkflowService workflowService = WorkflowService.getInstance( );
264 
265         int stateid = workflowService.getState( id, Signalement.WORKFLOW_RESOURCE_TYPE, workflowId, null ).getId( );
266 
267         if ( status.equals( SignalementRestConstants.JSON_TAG_ANOMALY_DONE ) || status.equals( SignalementRestConstants.JSON_TAG_ANOMALY_REJECTED )
268                 || status.equals( SignalementRestConstants.JSON_TAG_ANOMALY_PROGRAMMED )
269                 || status.equals( SignalementRestConstants.JSON_TAG_ANOMALY_A_REQUALIFIED )
270                 || status.equals( SignalementRestConstants.JSON_TAG_ANOMALY_REQUALIFIED ) )
271         {
272 
273             jsonAnswer.accumulate( SignalementRestConstants.JSON_TAG_INCIDENT_ID, reference );
274             jsonObject.accumulate( SignalementRestConstants.JSON_TAG_ANSWER, jsonAnswer );
275 
276             request.getSession( ).setAttribute( PARAMETER_WEBSERVICE_COMMENT_VALUE, comment );
277 
278             // Status = 'service fait'
279             if ( status.equals( SignalementRestConstants.JSON_TAG_ANOMALY_DONE ) )
280             {
281                 // Check if signalement's state is "Transféré à un prestataire"
282                 if ( stateid == SignalementRestConstants.TRANFERED_PROVIDER_STATUS_ID )
283                 {
284 
285                     request.getSession( ).setAttribute( PARAMETER_WEBSERVICE_SERVICE_FAIT_PRESTA, true );
286 
287                     workflowService.doProcessAction( id, Signalement.WORKFLOW_RESOURCE_TYPE,
288                             SignalementRestConstants.ACTION_TRANSFERED_STATE_WEBSERVICE_ACCEPTED, null, request, request.getLocale( ), true );
289                 }
290                 else
291                 {
292                     // Check if signalement's state is "Service programmé par un prestataire"
293                     if ( stateid == SignalementRestConstants.PROGRAMMED_STATUS_ID )
294                     {
295 
296                         request.getSession( ).setAttribute( PARAMETER_WEBSERVICE_SERVICE_FAIT_PRESTA, true );
297 
298                         workflowService.doProcessAction( id, Signalement.WORKFLOW_RESOURCE_TYPE,
299                                 SignalementRestConstants.ACTION_PROGRAMMED_STATE_WEBSERVICE_ACCEPTED, null, request, request.getLocale( ), true );
300                     }
301                     else
302                         if ( stateid != SignalementRestConstants.SERVICE_FAIT_STATUS_ID )
303                         {
304                             jsonAnswer.accumulate( SignalementRestConstants.JSON_TAG_ERROR_ERROR,
305                                     I18nService.getLocalizedString( SignalementRestConstants.ERROR_MESSAGE_DONE_WRONG_STATUS, request.getLocale( ) ) );
306                             jsonObject.remove( SignalementRestConstants.JSON_TAG_ANSWER );
307                             jsonObject.accumulate( SignalementRestConstants.JSON_TAG_ANSWER, jsonAnswer );
308                         }
309                 }
310 
311                 String nomPrestataire = _signalementService.findPrestataireSignalement( id );
312                 if ( StringUtils.isNotBlank( nomPrestataire ) )
313                 {
314                     Integer nIdWorkflow = _signalementWorkflowService.getSignalementWorkflowId( );
315                     ResourceHistory resourceHistory = _signalementWorkflowService.getLastHistoryResource( id, Signalement.WORKFLOW_RESOURCE_TYPE, nIdWorkflow );
316                     _signalementWorkflowService.setUserAccessCodeHistoryResource( nomPrestataire, resourceHistory.getId( ) );
317                 }
318             }
319             // Status = 'rejet'
320             else
321                 if ( status.equals( SignalementRestConstants.JSON_TAG_ANOMALY_REJECTED ) )
322                 {
323                     // Check if signalement's state is "Transféré à un prestataire"
324                     if ( stateid == SignalementRestConstants.TRANFERED_PROVIDER_STATUS_ID )
325                     {
326                         request.getSession( ).setAttribute( SignalementRestConstants.JSON_TAG_INCIDENT_ID_REJET, motifRejetAutre );
327                         workflowService.doProcessAction( id, Signalement.WORKFLOW_RESOURCE_TYPE,
328                                 SignalementRestConstants.ACTION_TRANSFERED_STATE_WEBSERVICE_REJECTED, null, request, request.getLocale( ), true );
329                         request.getSession( ).removeAttribute( SignalementRestConstants.JSON_TAG_INCIDENT_ID_REJET );
330                     }
331                     else
332                     {
333                         // Check if signalement's state is "Service programmé par un prestataire"
334                         if ( stateid == SignalementRestConstants.PROGRAMMED_STATUS_ID )
335                         {
336                             request.getSession( ).setAttribute( SignalementRestConstants.JSON_TAG_INCIDENT_ID_REJET, motifRejetAutre );
337                             workflowService.doProcessAction( id, Signalement.WORKFLOW_RESOURCE_TYPE,
338                                     SignalementRestConstants.ACTION_PROGRAMMED_STATE_WEBSERVICE_REJECTED, null, request, request.getLocale( ), true );
339                             request.getSession( ).removeAttribute( SignalementRestConstants.JSON_TAG_INCIDENT_ID_REJET );
340                         }
341                         else
342                         {
343                             jsonAnswer.accumulate( SignalementRestConstants.JSON_TAG_ERROR_ERROR,
344                                     I18nService.getLocalizedString( SignalementRestConstants.ERROR_MESSAGE_REJECTED_WRONG_STATUS, request.getLocale( ) ) );
345                             jsonObject.remove( SignalementRestConstants.JSON_TAG_ANSWER );
346                             jsonObject.accumulate( SignalementRestConstants.JSON_TAG_ANSWER, jsonAnswer );
347                         }
348                     }
349                 }
350             // Status = 'service programme'
351                 else
352                     if ( status.equals( SignalementRestConstants.JSON_TAG_ANOMALY_PROGRAMMED ) )
353                     {
354 
355                         request.getSession( ).setAttribute( PARAMETER_WEBSERVICE_DATE_PREVUE_TRAITEMENT, strDateProgramme );
356                         // Check if signalement's state is "Transféré à un prestataire"
357                         if ( stateid == SignalementRestConstants.TRANFERED_PROVIDER_STATUS_ID )
358                         {
359 
360                             workflowService.doProcessAction( id, Signalement.WORKFLOW_RESOURCE_TYPE,
361                                     SignalementRestConstants.ACTION_TRANSFERED_STATE_WEBSERVICE_PROGRAMMED, null, request, request.getLocale( ), true );
362                         }
363                         else
364                         {
365                             // Check if signalement's state is "Service programmé par un prestataire"
366                             if ( stateid == SignalementRestConstants.PROGRAMMED_STATUS_ID )
367                             {
368 
369                                 workflowService.doProcessAction( id, Signalement.WORKFLOW_RESOURCE_TYPE,
370                                         SignalementRestConstants.ACTION_PROGRAMMED_STATE_WEBSERVICE_PROGRAMMED, null, request, request.getLocale( ), true );
371                             }
372                             else
373                             {
374                                 jsonAnswer.accumulate( SignalementRestConstants.JSON_TAG_ERROR_ERROR, I18nService
375                                         .getLocalizedString( SignalementRestConstants.ERROR_MESSAGE_PROGRAMMED_WRONG_STATUS, request.getLocale( ) ) );
376                                 jsonObject.remove( SignalementRestConstants.JSON_TAG_ANSWER );
377                                 jsonObject.accumulate( SignalementRestConstants.JSON_TAG_ANSWER, jsonAnswer );
378                             }
379                         }
380 
381                     }
382             // Status = 'requalification'
383                     else
384                         if ( status.equals( SignalementRestConstants.JSON_TAG_ANOMALY_REQUALIFIED ) )
385                         {
386                             request.getSession( ).setAttribute( PARAMETER_WEBSERVICE_ID_TYPE_ANOMALIE, idTypeAnomalie );
387                             request.getSession( ).setAttribute(PARAMETER_WEBSERVICE_EMAIL_ACTEUR, emailActeur);
388 
389                             Signalement signalement = _signalementService.getSignalement( id );
390 
391                             // Select idAction Workflow depends on state report
392                             int idActionRequalifier = -1;
393                             if ( stateid == SignalementRestConstants.TRANFERED_PROVIDER_STATUS_ID )
394                             {
395                                 idActionRequalifier = SignalementRestConstants.ACTION_TRANSFERED_STATE_WEBSERVICE_REQUALIFIED;
396                             }
397                             else
398                                 if ( stateid == SignalementRestConstants.PROGRAMMED_STATUS_ID )
399                                 {
400                                     idActionRequalifier = SignalementRestConstants.ACTION_PROGRAMMED_STATE_WEBSERVICE_REQUALIFIED;
401                                 }
402                                 else
403                                     if ( stateid == SignalementConstants.ID_STATE_A_TRAITER )
404                                     {
405                                         idActionRequalifier = SignalementRestConstants.ACTION_TODO_STATE_WEBSERVICE_A_REQUALIFIED;
406                                     }
407                                     else
408                                         if ( stateid == SignalementConstants.ID_STATE_NOUVEAU )
409                                         {
410                                             idActionRequalifier = SignalementRestConstants.ACTION_NEW_STATE_WEBSERVICE_A_REQUALIFIED;
411                                         }
412                                         else
413                                             if ( stateid == SignalementConstants.ID_STATE_PROGRAMME )
414                                             {
415                                                 idActionRequalifier = SignalementRestConstants.ACTION_PROGRAMME_STATE_WEBSERVICE_A_REQUALIFIED;
416                                             }
417                                             else
418                                                 if ( stateid == SignalementConstants.ID_STATE_A_REQUALIFIER )
419                                                 {
420                                                     idActionRequalifier = SignalementRestConstants.ACTION_TO_REQUALIFIE_STATE_WEBSERVICE_A_REQUALIFIED;
421                                                 }
422 
423                             if ( idActionRequalifier != -1 )
424                             {
425                                 // call workflow
426                                 workflowService.doProcessAction( id, Signalement.WORKFLOW_RESOURCE_TYPE, idActionRequalifier, null, request,
427                                         request.getLocale( ), true );
428                             }
429                             else
430                             {
431                                 jsonAnswer.accumulate( SignalementRestConstants.JSON_TAG_ERROR_ERROR, I18nService
432                                         .getLocalizedString( SignalementRestConstants.ERROR_MESSAGE_REQUALIFIED_WRONG_STATUS, request.getLocale( ) ) );
433                                 jsonObject.remove( SignalementRestConstants.JSON_TAG_ANSWER );
434                                 jsonObject.accumulate( SignalementRestConstants.JSON_TAG_ANSWER, jsonAnswer );
435                             }
436 
437 
438                         }
439             // Status = a rqualifier
440                         else
441                             if ( status.equals( SignalementRestConstants.JSON_TAG_ANOMALY_A_REQUALIFIED ) )
442                             {
443 
444                                 if ( stateid == SignalementRestConstants.TRANFERED_PROVIDER_STATUS_ID )
445                                 {
446 
447                                     workflowService.doProcessAction( id, Signalement.WORKFLOW_RESOURCE_TYPE,
448                                             SignalementRestConstants.ACTION_TRANSFERED_STATE_WEBSERVICE_A_REQUALIFIED, null, request, request.getLocale( ),
449                                             true );
450                                 }
451                                 else
452                                 {
453                                     // Check if signalement's state is "Service programmé par un prestataire"
454                                     if ( stateid == SignalementRestConstants.PROGRAMMED_STATUS_ID )
455                                     {
456 
457                                         workflowService.doProcessAction( id, Signalement.WORKFLOW_RESOURCE_TYPE,
458                                                 SignalementRestConstants.ACTION_PROGRAMMED_STATE_WEBSERVICE_A_REQUALIFIED, null, request, request.getLocale( ),
459                                                 true );
460                                     }
461                                     else
462                                     {
463                                         jsonAnswer.accumulate( SignalementRestConstants.JSON_TAG_ERROR_ERROR, I18nService
464                                                 .getLocalizedString( SignalementRestConstants.ERROR_MESSAGE_REQUALIFIED_WRONG_STATUS, request.getLocale( ) ) );
465                                         jsonObject.remove( SignalementRestConstants.JSON_TAG_ANSWER );
466                                         jsonObject.accumulate( SignalementRestConstants.JSON_TAG_ANSWER, jsonAnswer );
467                                     }
468                                 }
469                             }
470         }
471         else
472         {
473             jsonAnswer.accumulate( SignalementRestConstants.JSON_TAG_ERROR_ERROR,
474                     I18nService.getLocalizedString( SignalementRestConstants.ERROR_MESSAGE_DIFFERENT_STATUS, request.getLocale( ) ) );
475             jsonObject.remove( SignalementRestConstants.JSON_TAG_ANSWER );
476             jsonObject.accumulate( SignalementRestConstants.JSON_TAG_ANSWER, jsonAnswer );
477         }
478     }
479 
480     /**
481      * Check if the id of the reject cause id exists.
482      *
483      * @param rejectcauseid
484      *            the reject cause id given by WS
485      * @return true if it exists, false if it doesn't
486      */
487     public boolean checkRejectCauseIdExist( int rejectcauseid )
488     {
489         boolean result = false;
490         // The list of all the reject causes
491         List<ObservationRejet> listeNatureObjet = _observationRejetService.getAllObservationRejet( );
492 
493         for ( ObservationRejet rejet : listeNatureObjet )
494         {
495             if ( !result && rejet.getActif( ) && ( rejet.getId( ) == rejectcauseid ) )
496             {
497                 result = true;
498             }
499         }
500         return result;
501     }
502 
503 }