LP#1749992 Disable payment button during payment
authorDan Wells <dbw2@calvin.edu>
Tue, 20 Feb 2018 16:05:49 +0000 (11:05 -0500)
committerJason Stephenson <jason@sigio.com>
Tue, 20 Feb 2018 18:09:19 +0000 (13:09 -0500)
Since the display is not refreshed until the payment finishes, it
is possible to fire off a second payment by double-clicking.

This commit is a simple way to disable the button while a payment is
in process, then enable it again after the display refreshes.

Since the 'sendPayment()' function is wrapped, we may need to move
this logic up, but this being a single promise is simpler, and it
solved the problem in testing.

Signed-off-by: Dan Wells <dbw2@calvin.edu>
Signed-off-by: Jason Stephenson <jason@sigio.com>
Open-ILS/src/templates/staff/circ/patron/t_bills.tt2
Open-ILS/web/js/ui/default/staff/circ/patron/bills.js

index bbf6595..fe94996 100644 (file)
@@ -87,7 +87,7 @@
             <button
                 type="submit"
                 class="btn btn-default"
-                ng-disabled="invalid_check_number() || !gridControls.selectedItems().length"
+                ng-disabled="invalid_check_number() || !gridControls.selectedItems().length || applyingPayment"
             >[% l('Apply Payment') %]</button>
           </div>
         </div>
index 2c5f6e9..db1e3d9 100644 (file)
@@ -299,6 +299,7 @@ function($scope , $q , $routeParams , egCore , egConfirmDialog , $location,
     // generates payments, collects user note if needed, and sends payment
     // to server.
     function sendPayment(note) {
+        $scope.applyingPayment = true;
         var make_payments = generatePayments();
         billSvc.applyPayment(
             $scope.payment_type, make_payments, note, $scope.check_number)
@@ -311,6 +312,7 @@ function($scope , $q , $routeParams , egCore , egConfirmDialog , $location,
 
             refreshDisplay();
         })
+        .finally(function() { $scope.applyingPayment = false; })
     }
 
     function printReceipt(type, payment_ids, payments_made, note) {