diff --git a/app/frontend/src/javascript/controllers/admin/events.js b/app/frontend/src/javascript/controllers/admin/events.js
index 5e696df77..cf938866a 100644
--- a/app/frontend/src/javascript/controllers/admin/events.js
+++ b/app/frontend/src/javascript/controllers/admin/events.js
@@ -436,7 +436,7 @@ Application.Controllers.controller('AdminEventsController', ['$scope', '$state',
/**
* Controller used in the reservations listing page for a specific event
*/
-Application.Controllers.controller('ShowEventReservationsController', ['$scope', 'eventPromise', 'reservationsPromise', 'dialogs', 'SlotsReservation', 'growl', '_t', function ($scope, eventPromise, reservationsPromise, dialogs, SlotsReservation, growl, _t) {
+Application.Controllers.controller('ShowEventReservationsController', ['$scope', 'eventPromise', 'reservationsPromise', 'dialogs', 'SlotsReservation', 'growl', '_t', 'Price', 'Wallet', '$uibModal', function ($scope, eventPromise, reservationsPromise, dialogs, SlotsReservation, growl, _t, Price, Wallet, $uibModal) {
// retrieve the event from the ID provided in the current URL
$scope.event = eventPromise;
@@ -487,6 +487,71 @@ Application.Controllers.controller('ShowEventReservationsController', ['$scope',
});
});
};
+
+ const mkCartItems = function (reservation, coupon) {
+ return {
+ customer_id: reservation.user_id,
+ items: [{
+ reservation: {
+ ...reservation,
+ slots_reservations_attributes: reservation.slots_reservations_attributes.map(sr => ({ slot_id: sr.slot_id }))
+ }
+ }],
+ coupon_code: ((coupon ? coupon.code : undefined)),
+ payment_method: ''
+ };
+ };
+
+ $scope.payReservation = function (reservation) {
+ $uibModal.open({
+ templateUrl: '/admin/events/pay_reservation_modal.html',
+ size: 'sm',
+ resolve: {
+ reservation () {
+ return reservation;
+ },
+ price () {
+ return Price.compute(mkCartItems(reservation)).$promise;
+ },
+ wallet () {
+ return Wallet.getWalletByUser({ user_id: reservation.user_id }).$promise;
+ },
+ cartItems () {
+ return mkCartItems(reservation);
+ }
+ },
+ controller: ['$scope', '$uibModalInstance', 'reservation', 'price', 'wallet', 'cartItems', 'helpers', '$filter', '_t',
+ function ($scope, $uibModalInstance, reservation, price, wallet, cartItems, helpers, $filter, _t) {
+ // User's wallet amount
+ $scope.wallet = wallet;
+
+ // Price
+ $scope.price = price.price;
+
+ // Cart items
+ $scope.cartItems = cartItems;
+
+ // price to pay
+ $scope.amount = helpers.getAmountToPay(price.price, wallet.amount);
+
+ // Reservation
+ $scope.reservation = reservation;
+
+ $scope.coupon = { applied: null };
+
+ // Button label
+ if ($scope.amount > 0) {
+ $scope.validButtonName = _t('app.admin.event_reservations.confirm_payment_of_html', { ROLE: $scope.currentUser.role, AMOUNT: $filter('currency')($scope.amount) });
+ } else {
+ if ((price.price > 0) && ($scope.walletAmount === 0)) {
+ $scope.validButtonName = _t('app.admin.event_reservations.confirm_payment_of_html', { ROLE: $scope.currentUser.role, AMOUNT: $filter('currency')(price.price) });
+ } else {
+ $scope.validButtonName = _t('app.shared.buttons.confirm');
+ }
+ }
+ }]
+ });
+ };
}]);
/**
diff --git a/app/frontend/templates/admin/events/pay_reservation_modal.html b/app/frontend/templates/admin/events/pay_reservation_modal.html
new file mode 100644
index 000000000..3b92cae4e
--- /dev/null
+++ b/app/frontend/templates/admin/events/pay_reservation_modal.html
@@ -0,0 +1,18 @@
+
+
+
{{alert.msg}}
+
+
+
+
+
+
diff --git a/app/frontend/templates/admin/events/reservations.html b/app/frontend/templates/admin/events/reservations.html
index 53e25a458..c44167264 100644
--- a/app/frontend/templates/admin/events/reservations.html
+++ b/app/frontend/templates/admin/events/reservations.html
@@ -55,7 +55,7 @@
-