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.stock.modules.billetterie.web;
35
36 import fr.paris.lutece.plugins.stock.business.category.CategoryFilter;
37 import fr.paris.lutece.plugins.stock.commons.ResultList;
38 import fr.paris.lutece.plugins.stock.commons.dao.PaginationProperties;
39 import fr.paris.lutece.plugins.stock.commons.exception.FunctionnalException;
40 import fr.paris.lutece.plugins.stock.modules.billetterie.utils.constants.BilletterieConstants;
41 import fr.paris.lutece.plugins.stock.modules.tickets.business.ShowCategoryDTO;
42 import fr.paris.lutece.plugins.stock.modules.tickets.business.ShowDTO;
43 import fr.paris.lutece.plugins.stock.modules.tickets.business.ShowFilter;
44 import fr.paris.lutece.plugins.stock.modules.tickets.service.IShowCategoryService;
45 import fr.paris.lutece.plugins.stock.modules.tickets.service.IShowService;
46 import fr.paris.lutece.plugins.stock.modules.tickets.utils.constants.TicketsConstants;
47 import fr.paris.lutece.plugins.stock.utils.constants.StockConstants;
48 import fr.paris.lutece.portal.service.i18n.I18nService;
49 import fr.paris.lutece.portal.service.message.AdminMessage;
50 import fr.paris.lutece.portal.service.message.AdminMessageService;
51 import fr.paris.lutece.portal.service.spring.SpringContextService;
52 import fr.paris.lutece.portal.service.template.AppTemplateService;
53 import fr.paris.lutece.portal.service.util.AppLogService;
54 import fr.paris.lutece.portal.service.util.AppPathService;
55 import fr.paris.lutece.portal.web.constants.Parameters;
56 import fr.paris.lutece.util.datatable.DataTableManager;
57 import fr.paris.lutece.util.html.HtmlTemplate;
58
59 import org.apache.commons.lang.StringUtils;
60
61 import org.apache.log4j.Logger;
62
63 import java.lang.reflect.Method;
64
65 import java.util.ArrayList;
66 import java.util.HashMap;
67 import java.util.List;
68 import java.util.Locale;
69 import java.util.Map;
70
71 import javax.servlet.http.HttpServletRequest;
72
73
74
75
76 public class CategoryJspBean extends AbstractJspBean
77 {
78 public static final Logger LOGGER = Logger.getLogger( CategoryJspBean.class );
79
80
81 public static final String PARAMETER_CATEGORY_ID = "category_id";
82
83
84 public static final String RIGHT_MANAGE_CATEGORIES = "CATEGORIES_MANAGEMENT";
85
86
87 public static final String MARK_CATEGORY = "category";
88
89
90 public static final String MARK_DATA_TABLE_CATEGORY = "dataTableCategory";
91 public static final String MARK_FILTER_CATEGORY = "filterCategory";
92 public static final String MACRO_COLUMN_ACTIONS_CATEGORY = "columnActionsCategory";
93 public static final String MACRO_COLUMN_NAME_CATEGORY = "columnNameCategory";
94
95
96 public static final String MARK_TITLE = "title";
97
98
99 public static final String PARAMETER_CATEGORY_TYPE_LIST = "category_type_list";
100
101
102 public static final String PARAMETER_CATEGORY_TYPE_LIST_DEFAULT = "category_type_list_default";
103
104
105 private static final String PARAMETER_FILTER_NAME = "filter_name";
106
107
108 private static final String BEAN_STOCK_TICKETS_SHOW_SERVICE = "stock-tickets.showService";
109
110
111
112 private static final String PAGE_TITLE_MANAGE_CATEGORY = "module.stock.billetterie.manage_category.title";
113
114
115 private static final String PAGE_TITLE_CREATE_CATEGORY = "module.stock.billetterie.create_category.title";
116
117
118 private static final String PAGE_TITLE_MODIFY_CATEGORY = "module.stock.billetterie.save_category.title";
119
120
121
122 private static final String JSP_MANAGE_CATEGORYS = "jsp/admin/plugins/stock/modules/billetterie/ManageCategories.jsp";
123
124
125 private static final String CATEGORY_DO_DELETE_JSP = "jsp/admin/plugins/stock/modules/billetterie/DoDeleteCategory.jsp";
126
127
128 private static final String JSP_SAVE_CATEGORY = "SaveCategory.jsp";
129
130
131
132 private static final String TEMPLATE_MANAGE_CATEGORIES = "admin/plugins/stock/modules/billetterie/manage_categories.html";
133
134
135 private static final String TEMPLATE_SAVE_CATEGORY = "admin/plugins/stock/modules/billetterie/save_category.html";
136
137
138
139 private static final String MESSAGE_CONFIRMATION_DELETE_CATEGORY = "module.stock.billetterie.message.deleteCategory.confirmation";
140
141
142 private static final String MESSAGE_DELETE_CATEGORY_WITH_SHOW = "module.stock.billetterie.message.deleteCategory.with.show";
143
144
145
146
147 private IShowCategoryService _serviceCategory;
148
149
150 private CategoryFilter _categoryFilter;
151
152
153
154
155 private IShowService _serviceShow;
156
157
158
159
160 public CategoryJspBean( )
161 {
162
163 _categoryFilter = new CategoryFilter( );
164 _serviceCategory = SpringContextService.getContext( ).getBean( IShowCategoryService.class );
165 _serviceShow = (IShowService) SpringContextService.getBean( BEAN_STOCK_TICKETS_SHOW_SERVICE );
166 }
167
168
169
170
171
172
173
174
175
176 protected void buildFilter( CategoryFilter filter, HttpServletRequest request )
177 {
178 filter.setName( request.getParameter( PARAMETER_FILTER_NAME ) );
179 }
180
181
182
183
184
185
186
187
188 public String getManageCategories( HttpServletRequest request )
189 {
190 setPageTitleProperty( PAGE_TITLE_MANAGE_CATEGORY );
191
192 CategoryFilter filter = getCategoryFilter( request );
193 List<String> orderList = new ArrayList<String>( );
194 orderList.add( BilletterieConstants.NAME );
195 filter.setOrders( orderList );
196 filter.setOrderAsc( true );
197
198
199 Map<String, Object> model = new HashMap<String, Object>( );
200
201
202 DataTableManager<ShowCategoryDTO> dataTableToUse = getDataTable( request, filter );
203 model.put( MARK_DATA_TABLE_CATEGORY, dataTableToUse );
204
205 model.put( TicketsConstants.MARK_NB_ITEMS_PER_PAGE, String.valueOf( _nItemsPerPage ) );
206 model.put( TicketsConstants.MARK_FILTER, filter );
207
208 HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_MANAGE_CATEGORIES, getLocale( ), model );
209
210
211 dataTableToUse.clearItems( );
212
213 return getAdminPage( template.getHtml( ) );
214 }
215
216
217
218
219
220
221
222
223
224
225 private DataTableManager<ShowCategoryDTO> getDataTable( HttpServletRequest request, CategoryFilter filter )
226 {
227
228 Method findMethod = null;
229
230 try
231 {
232 findMethod = _serviceCategory.getClass( ).getMethod( PARAMETER_FIND_BY_FILTER_NAME_METHOD, CategoryFilter.class, PaginationProperties.class );
233 }
234 catch( Exception e )
235 {
236 LOGGER.error( "Erreur lors de l'obtention du data table : ", e );
237 }
238
239 DataTableManager<ShowCategoryDTO> dataTableToUse = getAbstractDataTableManager( request, filter, MARK_DATA_TABLE_CATEGORY, JSP_MANAGE_CATEGORYS,
240 _serviceCategory, findMethod );
241
242
243 dataTableToUse.getListColumn( ).clear( );
244
245 if ( dataTableToUse.getListColumn( ).isEmpty( ) )
246 {
247 dataTableToUse.addColumn( "module.stock.billetterie.manage_category.filter.name", "name", true );
248 dataTableToUse.addFreeColumn( "module.stock.billetterie.manage_category.actionsLabel", MACRO_COLUMN_ACTIONS_CATEGORY );
249 }
250
251 saveDataTableInSession( request, dataTableToUse, MARK_DATA_TABLE_CATEGORY );
252
253 return dataTableToUse;
254 }
255
256
257
258
259
260
261
262
263
264
265 public String getSaveCategory( HttpServletRequest request, String strCategoryClassName )
266 {
267 ShowCategoryDTO category = null;
268 Map<String, Object> model = new HashMap<String, Object>( );
269
270 FunctionnalException fe = getErrorOnce( request );
271
272 if ( fe != null )
273 {
274 category = (ShowCategoryDTO) fe.getBean( );
275 model.put( BilletterieConstants.ERROR, getHtmlError( fe ) );
276 }
277 else
278 {
279 String strCategoryId = request.getParameter( PARAMETER_CATEGORY_ID );
280
281 if ( strCategoryId != null )
282 {
283 setPageTitleProperty( PAGE_TITLE_MODIFY_CATEGORY );
284
285 int nIdCategory = Integer.parseInt( strCategoryId );
286 category = _serviceCategory.findById( nIdCategory );
287 }
288 else
289 {
290 setPageTitleProperty( PAGE_TITLE_CREATE_CATEGORY );
291 category = new ShowCategoryDTO( );
292 }
293 }
294
295 model.put( StockConstants.MARK_JSP_BACK, JSP_MANAGE_CATEGORYS );
296 model.put( MARK_CATEGORY, category );
297
298 if ( ( category.getId( ) != null ) && ( category.getId( ) != 0 ) )
299 {
300 model.put( MARK_TITLE, I18nService.getLocalizedString( PAGE_TITLE_MODIFY_CATEGORY, Locale.getDefault( ) ) );
301 }
302 else
303 {
304 model.put( MARK_TITLE, I18nService.getLocalizedString( PAGE_TITLE_CREATE_CATEGORY, Locale.getDefault( ) ) );
305 }
306
307 HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_SAVE_CATEGORY, getLocale( ), model );
308
309 return getAdminPage( template.getHtml( ) );
310 }
311
312
313
314
315
316
317
318
319 public String doSaveCategory( HttpServletRequest request )
320 {
321 if ( null != request.getParameter( StockConstants.PARAMETER_BUTTON_CANCEL ) )
322 {
323 return doGoBack( request );
324 }
325
326 ShowCategoryDTO category = new ShowCategoryDTO( );
327 populate( category, request );
328
329 try
330 {
331
332 validateBilletterie( category );
333 _serviceCategory.doSaveCategory( category );
334 }
335 catch( FunctionnalException e )
336 {
337 return manageFunctionnalException( request, e, JSP_SAVE_CATEGORY );
338 }
339
340 return doGoBack( request );
341 }
342
343
344
345
346
347
348
349
350 private String doGoBack( HttpServletRequest request )
351 {
352 String strJspBack = request.getParameter( StockConstants.MARK_JSP_BACK );
353
354 return StringUtils.isNotBlank( strJspBack ) ? ( AppPathService.getBaseUrl( request ) + strJspBack )
355 : ( AppPathService.getBaseUrl( request ) + JSP_MANAGE_CATEGORYS );
356 }
357
358
359
360
361
362
363
364
365 private CategoryFilter getCategoryFilter( HttpServletRequest request )
366 {
367
368 String strSortedAttributeName = request.getParameter( Parameters.SORTED_ATTRIBUTE_NAME );
369
370 CategoryFilter filter = new CategoryFilter( );
371 buildFilter( filter, request );
372 _categoryFilter = filter;
373
374 if ( strSortedAttributeName != null )
375 {
376 _categoryFilter.getOrders( ).add( strSortedAttributeName );
377
378 String strAscSort = request.getParameter( Parameters.SORTED_ASC );
379 boolean bIsAscSort = Boolean.parseBoolean( strAscSort );
380 _categoryFilter.setOrderAsc( bIsAscSort );
381 }
382
383 return _categoryFilter;
384 }
385
386
387
388
389
390
391
392
393 public String getDeleteCategory( HttpServletRequest request )
394 {
395 String strCategoryId = request.getParameter( PARAMETER_CATEGORY_ID );
396
397 int nIdCategory;
398
399 try
400 {
401 nIdCategory = Integer.parseInt( strCategoryId );
402 }
403 catch( NumberFormatException e )
404 {
405 AppLogService.debug( e );
406
407 return AdminMessageService.getMessageUrl( request, StockConstants.MESSAGE_ERROR_OCCUR, AdminMessage.TYPE_STOP );
408 }
409
410 Map<String, Object> urlParam = new HashMap<String, Object>( );
411 urlParam.put( PARAMETER_CATEGORY_ID, nIdCategory );
412
413 String strJspBack = request.getParameter( StockConstants.MARK_JSP_BACK );
414
415 if ( StringUtils.isNotBlank( strJspBack ) )
416 {
417 urlParam.put( StockConstants.MARK_JSP_BACK, strJspBack );
418 }
419
420
421
422 ShowFilter filter = new ShowFilter( );
423 filter.setIdCategory( nIdCategory );
424
425 ResultList<ShowDTO> bookingList = this._serviceShow.findByFilter( filter, null );
426
427 if ( ( bookingList != null ) && !bookingList.isEmpty( ) )
428 {
429 return AdminMessageService.getMessageUrl( request, MESSAGE_DELETE_CATEGORY_WITH_SHOW, AdminMessage.TYPE_STOP );
430 }
431
432 return AdminMessageService.getMessageUrl( request, MESSAGE_CONFIRMATION_DELETE_CATEGORY, CATEGORY_DO_DELETE_JSP, AdminMessage.TYPE_CONFIRMATION,
433 urlParam );
434 }
435
436
437
438
439
440
441
442
443 public String doDeleteCategory( HttpServletRequest request )
444 {
445 String strCategoryId = request.getParameter( PARAMETER_CATEGORY_ID );
446
447 int nIdCategory;
448
449 try
450 {
451 nIdCategory = Integer.parseInt( strCategoryId );
452 }
453 catch( NumberFormatException e )
454 {
455 AppLogService.debug( e );
456
457 return AdminMessageService.getMessageUrl( request, StockConstants.MESSAGE_ERROR_OCCUR, AdminMessage.TYPE_STOP );
458 }
459
460 _serviceCategory.doDeleteCategory( nIdCategory );
461
462 return doGoBack( request );
463 }
464 }