From f9af902390674cf4d35d1ddc0e3f56830b8ffd36 Mon Sep 17 00:00:00 2001 From: Nassim Bounouas Date: Sat, 24 Nov 2018 23:48:38 +0100 Subject: [PATCH] #549 - Waiting queue download button and modal Get available fields from backend and populate a modal dedicated to waiting queue download --- .../admin/AdminWaitingQueueApiController.java | 18 +++++++++++---- .../waiting-queue-select-field-modal.html | 23 +++++++++++++++++++ .../admin/partials/main/sidebar.html | 1 + .../js/admin/directive/admin-directive.js | 5 ++++ .../resources/js/admin/service/service.js | 3 +++ 5 files changed, 46 insertions(+), 4 deletions(-) create mode 100644 src/main/webapp/resources/angular-templates/admin/partials/event/fragment/waiting-queue-select-field-modal.html diff --git a/src/main/java/alfio/controller/api/admin/AdminWaitingQueueApiController.java b/src/main/java/alfio/controller/api/admin/AdminWaitingQueueApiController.java index 2ecf9c48ea..8fe2dd25da 100644 --- a/src/main/java/alfio/controller/api/admin/AdminWaitingQueueApiController.java +++ b/src/main/java/alfio/controller/api/admin/AdminWaitingQueueApiController.java @@ -44,13 +44,14 @@ import static alfio.model.system.ConfigurationKeys.STOP_WAITING_QUEUE_SUBSCRIPTIONS; import static alfio.util.OptionalWrapper.optionally; import static java.util.Collections.singletonList; +import static java.util.stream.Collectors.toList; @RestController @RequestMapping("/admin/api/event/{eventName}/waiting-queue") @AllArgsConstructor public class AdminWaitingQueueApiController { - private final WaitingQueueManager waitingQueueManager; +private final WaitingQueueManager waitingQueueManager; private final EventManager eventManager; private final TicketReservationManager ticketReservationManager; private final ConfigurationManager configurationManager; @@ -69,7 +70,7 @@ private Map loadStatus(Event event) { .stream() .filter(tc -> !tc.isAccessRestricted()) .map(tc -> new SaleableTicketCategory(tc, "", now, event, ticketReservationManager.countAvailableTickets(event, tc), tc.getMaxTickets(), null)) - .collect(Collectors.toList()); + .collect(toList()); boolean active = EventUtil.checkWaitingQueuePreconditions(event, stcList, configurationManager, eventStatisticsManager.noSeatsAvailable()); boolean paused = active && configurationManager.getBooleanConfigValue(Configuration.from(event.getOrganizationId(), event.getId(), STOP_WAITING_QUEUE_SUBSCRIPTIONS), false); Map result = new HashMap<>(); @@ -118,11 +119,20 @@ public ResponseEntity> removeSubscriber(@PathVariable("event @RequestMapping(value = "/subscriber/{subscriberId}/restore", method = RequestMethod.PUT) public ResponseEntity> restoreSubscriber(@PathVariable("eventName") String eventName, - @PathVariable("subscriberId") int subscriberId, - Principal principal) { + @PathVariable("subscriberId") int subscriberId, + Principal principal) { return performStatusModification(eventName, subscriberId, principal, WaitingQueueSubscription.Status.WAITING, WaitingQueueSubscription.Status.CANCELLED); } + private static final List FIXED_FIELDS = Arrays.asList("ID", "Creation", "Event", "Status", "Full Name", "First Name", "Last Name", "E-Mail", "Ticket Reservation Id", "Language", "Selected category", "Subscription type"); + + @RequestMapping("/fields") + public List> getAllFields(@PathVariable("eventName") String eventName) { + List> fields = new ArrayList<>(); + fields.addAll(FIXED_FIELDS.stream().map(f -> SerializablePair.of(f, f)).collect(toList())); + return fields; + } + private ResponseEntity> performStatusModification(String eventName, int subscriberId, Principal principal, WaitingQueueSubscription.Status newStatus, WaitingQueueSubscription.Status currentStatus) { diff --git a/src/main/webapp/resources/angular-templates/admin/partials/event/fragment/waiting-queue-select-field-modal.html b/src/main/webapp/resources/angular-templates/admin/partials/event/fragment/waiting-queue-select-field-modal.html new file mode 100644 index 0000000000..e79c9162cd --- /dev/null +++ b/src/main/webapp/resources/angular-templates/admin/partials/event/fragment/waiting-queue-select-field-modal.html @@ -0,0 +1,23 @@ + + + diff --git a/src/main/webapp/resources/angular-templates/admin/partials/main/sidebar.html b/src/main/webapp/resources/angular-templates/admin/partials/main/sidebar.html index fc0bc38edf..e60b4f02b1 100644 --- a/src/main/webapp/resources/angular-templates/admin/partials/main/sidebar.html +++ b/src/main/webapp/resources/angular-templates/admin/partials/main/sidebar.html @@ -18,6 +18,7 @@ Download diff --git a/src/main/webapp/resources/js/admin/directive/admin-directive.js b/src/main/webapp/resources/js/admin/directive/admin-directive.js index e84accebcd..4a4587d823 100644 --- a/src/main/webapp/resources/js/admin/directive/admin-directive.js +++ b/src/main/webapp/resources/js/admin/directive/admin-directive.js @@ -904,6 +904,11 @@ ctrl.openFieldSelectionModal = function() { EventService.exportAttendees(ctrl.event); }; + + ctrl.waitingQueueDownloadFieldsSelectionModal = function() { + EventService.waitingQueueDownloadFieldsSelection(ctrl.event); + }; + ctrl.downloadSponsorsScan = function() { var pathName = $window.location.pathname; if(!pathName.endsWith("/")) { diff --git a/src/main/webapp/resources/js/admin/service/service.js b/src/main/webapp/resources/js/admin/service/service.js index c9e73a052a..49e53005c2 100644 --- a/src/main/webapp/resources/js/admin/service/service.js +++ b/src/main/webapp/resources/js/admin/service/service.js @@ -167,6 +167,9 @@ getFields : function(eventName) { return $http['get']('/admin/api/events/'+eventName+'/fields'); }, + getWaitingQueueFields : function(eventName) { + return $http['get']('/admin/api/event/'+eventName+'/waiting-queue/fields'); + }, getAdditionalFields: function(eventName) { return $http.get('/admin/api/events/'+eventName+'/additional-field').error(HttpErrorHandler.handle); },