Skip to content

Commit

Permalink
implement #195
Browse files Browse the repository at this point in the history
  • Loading branch information
syjer committed Sep 20, 2016
1 parent 5563336 commit 5aa2ae8
Show file tree
Hide file tree
Showing 5 changed files with 34 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,12 @@ public boolean manualCheckIn(@PathVariable("eventId") int eventId, @PathVariable
return checkInManager.manualCheckIn(ticketIdentifier);
}

@RequestMapping(value = "/check-in/{eventId}/ticket/{ticketIdentifier}/revert-check-in", method = POST)
public boolean revertCheckIn(@PathVariable("eventId") int eventId, @PathVariable("ticketIdentifier") String ticketIdentifier) {
log.warn("for event id : {} and ticket : {}, a revert of the check in has been done", eventId, ticketIdentifier);
return checkInManager.revertCheckIn(ticketIdentifier);
}

@RequestMapping(value = "/check-in/event/{eventName}/ticket/{ticketIdentifier}/confirm-on-site-payment", method = POST)
public TicketAndCheckInResult confirmOnSitePayment(@PathVariable("eventName") String eventName,
@PathVariable("ticketIdentifier") String ticketIdentifier,
Expand Down
20 changes: 18 additions & 2 deletions src/main/java/alfio/manager/CheckInManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,11 @@
import alfio.model.FullTicketInfo;
import alfio.model.Ticket;
import alfio.model.Ticket.TicketStatus;
import alfio.model.TicketReservation;
import alfio.model.transaction.PaymentProxy;
import alfio.repository.EventRepository;
import alfio.repository.TicketRepository;
import alfio.repository.TicketReservationRepository;
import alfio.util.MonetaryUtil;
import lombok.extern.log4j.Log4j2;
import org.apache.commons.lang3.StringUtils;
Expand All @@ -48,11 +51,13 @@ public class CheckInManager {

private final TicketRepository ticketRepository;
private final EventRepository eventRepository;
private final TicketReservationRepository ticketReservationRepository;

@Autowired
public CheckInManager(TicketRepository ticketRepository, EventRepository eventRepository) {
public CheckInManager(TicketRepository ticketRepository, EventRepository eventRepository, TicketReservationRepository ticketReservationRepository) {
this.ticketRepository = ticketRepository;
this.eventRepository = eventRepository;
this.ticketReservationRepository = ticketReservationRepository;
}


Expand Down Expand Up @@ -108,6 +113,18 @@ public boolean manualCheckIn(String ticketIdentifier) {
}).orElse(false);
}

public boolean revertCheckIn(String ticketIdentifier) {
return findAndLockTicket(ticketIdentifier).map((t) -> {
if(t.getStatus() == TicketStatus.CHECKED_IN) {
TicketReservation reservation = ticketReservationRepository.findReservationById(t.getTicketsReservationId());
TicketStatus revertedStatus = reservation.getPaymentMethod() == PaymentProxy.ON_SITE ? TicketStatus.TO_BE_PAID : TicketStatus.ACQUIRED;
ticketRepository.updateTicketStatusWithUUID(ticketIdentifier, revertedStatus.toString());
return true;
}
return false;
}).orElse(false);
}

private Optional<Ticket> findAndLockTicket(String uuid) {
return ticketRepository.findByUUIDForUpdate(uuid);
}
Expand Down Expand Up @@ -169,5 +186,4 @@ private TicketAndCheckInResult extractStatus(Optional<Event> maybeEvent, Optiona

return new TicketAndCheckInResult(ticket, new DefaultCheckInResult(OK_READY_TO_BE_CHECKED_IN, "Ready to be checked in"));
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,7 @@ <h1>Check-In: {{event.displayName}}</h1>
<th>Payment Type</th>
<th>Transaction id</th>
<th>Transaction timestamp</th>
<th>Actions</th>
</thead>
<tbody>
<tr data-ng-repeat="ticket in tickets | filter: {status: 'CHECKED_IN'} | filter: checkedInSelection.freeText | orderBy: ['timestamp', 'ticketReservationId' , 'uuid']">
Expand All @@ -148,6 +149,7 @@ <h1>Check-In: {{event.displayName}}</h1>
<td data-ng-class-even="'active'" data-label="Payment Type">{{::ticket.ticketReservation.paymentMethod}}</td>
<td data-ng-class-even="'active'" data-label="Transaction id"><span data-ng-if="ticket.paid">{{::ticket.transaction.id}}</span></td>
<td data-ng-class-even="'active'" data-label="Transaction timestamp"><span data-ng-if="ticket.paid">{{::ticket.transactionTimestamp | formatDate:'DD.MM.YYYY HH:mm:ss'}}</span></td>
<td><button type="button" class="btn btn-primary btn-xs" data-ng-click="revertCheckIn(ticket)">Revert check-in</button></td>
</tr>
</tbody>
</table>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1125,6 +1125,10 @@
$scope.selection = {};
});
};

$scope.revertCheckIn = function(ticket) {
CheckInService.revertCheckIn(ticket).then($scope.reloadTickets);
};
});

admin.controller('EventCheckInScanController', function($scope, $stateParams, $timeout, $log, $state, EventService, CheckInService) {
Expand Down
4 changes: 4 additions & 0 deletions src/main/webapp/resources/js/admin/service/service.js
Original file line number Diff line number Diff line change
Expand Up @@ -346,6 +346,10 @@
manualCheckIn: function(ticket) {
return $http['post']('/admin/api/check-in/' + ticket.eventId + '/ticket/' + ticket.uuid + '/manual-check-in', ticket);
},

revertCheckIn: function(ticket) {
return $http['post']('/admin/api/check-in/' + ticket.eventId + '/ticket/' + ticket.uuid + '/revert-check-in', ticket);
},

confirmPayment: function(eventId, ticket) {
var ticketIdentifier = ticket.code.split('/')[0];
Expand Down

0 comments on commit 5aa2ae8

Please sign in to comment.