1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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
75
76 public class ManageSignalementService
77 {
78
79
80 public static final String ACTION_SERVICE_FAIT = "serviceFait";
81
82
83 public static final String ACTION_REJETER = "rejeter";
84
85
86 public static final String ACTION_PROGRAMMER = "programmer";
87
88
89 public static final String ACTION_A_REQUALIFIER = "a requalifier";
90
91
92 public static final String ACTION_REQUALIFIER = "requalifier";
93
94
95 public static final String ACTION_VALIDER = "Valider";
96
97
98 private static final String PARAMETER_WEBSERVICE_COMMENT_VALUE = "webservice_comment_value";
99
100
101 private static final String PARAMETER_WEBSERVICE_SERVICE_FAIT_PRESTA = "webservice_service_fait_presta";
102
103
104 private static final String PARAMETER_WEBSERVICE_DATE_PREVUE_TRAITEMENT = "DatePrevueTraitement";
105
106
107 private static final String PARAMETER_WEBSERVICE_ID_TYPE_ANOMALIE = "idTypeAnomalie";
108
109
110 private static final String PARAMETER_WEBSERVICE_EMAIL_ACTEUR = "emailActeur";
111
112
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
124 public static final String JSON_TAG_ANOMALIE = "anomalie";
125
126
127 public static final String JSON_TAG_REQUEST = "request";
128
129
130 @Inject
131 private IWorkflowService _signalementWorkflowService;
132
133
134 @Inject
135 private IObservationRejetService _observationRejetService;
136
137
138 @Inject
139 private IPhotoService _photoService;
140
141
142 @Inject
143 private ITaskService _taskService;
144
145
146 @Inject
147 @Named( "rest.requestAuthenticator" )
148 private RequestAuthenticator _authenticator;
149
150
151
152 @Inject
153 private IObservationRejetSignalementService _observationRejetSignalementService;
154
155
156 @Inject
157 private ISignalementService _signalementService;
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
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
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
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
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
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
279 if ( status.equals( SignalementRestConstants.JSON_TAG_ANOMALY_DONE ) )
280 {
281
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
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
320 else
321 if ( status.equals( SignalementRestConstants.JSON_TAG_ANOMALY_REJECTED ) )
322 {
323
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
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
351 else
352 if ( status.equals( SignalementRestConstants.JSON_TAG_ANOMALY_PROGRAMMED ) )
353 {
354
355 request.getSession( ).setAttribute( PARAMETER_WEBSERVICE_DATE_PREVUE_TRAITEMENT, strDateProgramme );
356
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
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
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
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
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
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
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
482
483
484
485
486
487 public boolean checkRejectCauseIdExist( int rejectcauseid )
488 {
489 boolean result = false;
490
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 }