LP#1948886 No indicator while checkout receipt is being emailed user/dbriem/lp_1948886_sending_email_receipt_indicator
authorDan Briem <dbriem@wlsmail.org>
Wed, 27 Oct 2021 14:06:33 +0000 (10:06 -0400)
committerDan Briem <dbriem@wlsmail.org>
Wed, 27 Oct 2021 14:06:33 +0000 (10:06 -0400)
Adds a message underneath the receipt buttons in the check out
interface when a receipt is emailing. Disables the Email Receipt
buttons when sending. Disables Quick Receipt and Done button
when sending if circ.send_email_checkout_receipts is true.

Signed-off-by: Dan Briem <dbriem@wlsmail.org>
Open-ILS/src/templates/staff/circ/patron/t_checkout.tt2
Open-ILS/web/js/ui/default/staff/circ/patron/checkout.js

index 2fab3c2..1b61dfe 100644 (file)
     <span ng-show="may_email_receipt()" class="glyphicon glyphicon-envelope" aria-label="[% l('Send Email Receipt') %]"></span>
     <span ng-show="!may_email_receipt()" class="glyphicon glyphicon-print" aria-label="[% l('Print Receipt') %]"></span>
     <div class="btn-group" uib-dropdown>
-      <button ng-click="print_or_email_receipt()" id="quick-button" type="button" ng-disabled="checkouts.length == 0" class="btn btn-default">[% l('Quick Receipt') %]</button>
+      <button ng-click="print_or_email_receipt()" id="quick-button" type="button"
+        ng-disabled="checkouts.length == 0 || (is_emailing_receipt && may_email_receipt())"
+        class="btn btn-default">[% l('Quick Receipt') %]</button>
       <button type="button" ng-disabled="checkouts.length == 0" class="btn btn-default" uib-dropdown-toggle>
         <span class="caret"></span>
         <span class="sr-only">[% l('receipt option') %]</span>
       </button>
       <ul class="dropdown-menu" uib-dropdown-menu role="menu" aria-labelledby="quick-button">
-        <li role="menuitem" ng-class="{disabled : !has_email_address()}"><a ng-click="email_receipt()" a-disabled="!has_email_address()" href="#">[% l('Email Receipt') %]</a></li>
+        <li role="menuitem" ng-class="{disabled : !has_email_address() || is_emailing_receipt}"><a ng-click="email_receipt()" a-disabled="!has_email_address()" href="#">[% l('Email Receipt') %]</a></li>
         <li role="menuitem"><a ng-click="print_receipt()" href="#">[% l('Print Receipt') %]</a></li>
       </ul>
     </div>
   <div class="btn-group" uib-dropdown>
     <button class="btn btn-default" 
       id="done-button" type="button"
+      ng-disabled="is_emailing_receipt && may_email_receipt()"
       ng-click="done_auto_receipt()">[% l('Done') %]</button>
       <button type="button" class="btn btn-default" uib-dropdown-toggle>
         <span class="caret"></span>
       </button>
       <ul class="dropdown-menu" uib-dropdown-menu role="menu" aria-labelledby="done-button">
         <li role="menuitem"><a ng-click="done_no_receipt()" href="#">[% l('No Receipt') %]</a></li>
-        <li role="menuitem" ng-class="{disabled : !has_email_address()}"><a ng-click="done_email_receipt()" a-disabled="!has_email_address()" href="#">[% l('Email Receipt') %]</a></li>
+        <li role="menuitem" ng-class="{disabled : !has_email_address() || is_emailing_receipt}"><a ng-click="done_email_receipt()" a-disabled="!has_email_address()" href="#">[% l('Email Receipt') %]</a></li>
         <li role="menuitem"><a ng-click="done_print_receipt()" href="#">[% l('Print Receipt') %]</a></li>
       </ul>
   </div>
 </div>
 
+<div class="flex-row" ng-show="is_emailing_receipt">
+  <div class="flex-cell"></div>
+  <span *ngIf="is_emailing_receipt">
+    [% l('Emailing checkout receipt') %]...
+  </span>
+</div>
index 6715dd6..3233028 100644 (file)
@@ -359,8 +359,11 @@ function($scope , $q , $routeParams , egCore , egUser , patronSvc ,
         });
     }
 
+    $scope.is_emailing_receipt = false;
     $scope.email_receipt = function() {
-        if ($scope.has_email_address() && $scope.checkouts.length) {
+        if ($scope.has_email_address() && $scope.checkouts.length
+            && !$scope.is_emailing_receipt) {
+            $scope.is_emailing_receipt = true;
             return egCore.net.request(
                 'open-ils.circ',
                 'open-ils.circ.checkout.batch_notify.session.atomic',
@@ -370,6 +373,8 @@ function($scope , $q , $routeParams , egCore , egUser , patronSvc ,
             ).then(function() {
                 ngToast.create(egCore.strings.EMAILED_CHECKOUT_RECEIPT);
                 return $q.when();
+            }).finally(function() {
+                $scope.is_emailing_receipt = false;
             });
         }
         return $q.when();