From 7f61814cbac609a6a82425675aba86c2f460405b Mon Sep 17 00:00:00 2001 From: Mike Rylander Date: Fri, 12 Jun 2020 12:40:32 -0400 Subject: [PATCH] LP#1879983: Trigger email receipts when appropriate Gather the checkout responses, warn when some failed via toast, and have the server side trigger email/sms notification for successful checkouts unconditionally. Signed-off-by: Mike Rylander Signed-off-by: Galen Charlton --- .../perlmods/lib/OpenILS/Application/Curbside.pm | 26 +++++++++++++++++++--- .../src/templates/staff/circ/curbside/index.tt2 | 1 + .../circ/curbside/directives/arrived_manager.js | 25 +++++++++++++++++++++ 3 files changed, 49 insertions(+), 3 deletions(-) diff --git a/Open-ILS/src/perlmods/lib/OpenILS/Application/Curbside.pm b/Open-ILS/src/perlmods/lib/OpenILS/Application/Curbside.pm index 80d6f0f681..62ddc2e1df 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/Application/Curbside.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/Application/Curbside.pm @@ -954,10 +954,30 @@ sub mark_delivered { ) } @$holds; - $conn->respond($_->gather(1)) for @requests; - $circ_sess->disconnect; + my @successful_checkouts; + my $successful_patron; + for my $r (@requests) { + my $co_res = $r->gather(1); + $conn->respond($co_res); + next if (ref($co_res) eq 'ARRAY'); # success is always singular + + if ($co_res->{textcode} eq 'SUCCESS') { # that's great news... + push @successful_checkouts, $co_res->{payload}->{circ}->id; + $successful_patron = $co_res->{payload}->{circ}->usr; + } + } - return $e->retrieve_action_curbside($slot->id); + $conn->respond_complete($e->retrieve_action_curbside($slot->id)); + + $circ_sess->request( + 'open-ils.circ.checkout.batch_notify.session.atomic', + $authtoken, + $successful_patron, + \@successful_checkouts + ) if (@successful_checkouts); + + $circ_sess->disconnect; + return undef; } __PACKAGE__->register_method( method => "mark_delivered", diff --git a/Open-ILS/src/templates/staff/circ/curbside/index.tt2 b/Open-ILS/src/templates/staff/circ/curbside/index.tt2 index f42d3327a1..5aee3bc470 100644 --- a/Open-ILS/src/templates/staff/circ/curbside/index.tt2 +++ b/Open-ILS/src/templates/staff/circ/curbside/index.tt2 @@ -38,6 +38,7 @@ angular.module('egCoreMod').run(['egStrings', function(s) { s.SUCCESS_CURBSIDE_MARK_DELIVERED = "[% l('Marked curbside appointment {{slot_id}} as delivered') %]"; s.NOTFOUND_CURBSIDE_MARK_DELIVERED = "[% l('Could not find curbside appointment {{slot_id}} to mark as delivered') %]"; s.FAILED_CURBSIDE_MARK_DELIVERED = "[% l('Failed to mark curbside appointment {{slot_id}} as delivered: {{evt_code}}') %]"; + s.FAILED_CURBSIDE_CHECKOUT = "[% l('Failed to check out an item as part of curbside appointment {{slot_id}}: {{evt_code}}') %]"; s.CONFIRM_CANCEL_TITLE = "[% l('Cancel Curbside Pickup Appointment') %]"; s.CONFIRM_CANCEL_BODY = "[% l('Cancel curbside pickup appointment [_1]?', '{{slot_id}}') %]"; s.SUCCESS_CANCEL_APPOINTMENT = "[% l('Canceled curbside appointment {{slot_id}}') %]"; diff --git a/Open-ILS/web/js/ui/default/staff/circ/curbside/directives/arrived_manager.js b/Open-ILS/web/js/ui/default/staff/circ/curbside/directives/arrived_manager.js index 16132791aa..6205aeaf52 100644 --- a/Open-ILS/web/js/ui/default/staff/circ/curbside/directives/arrived_manager.js +++ b/Open-ILS/web/js/ui/default/staff/circ/curbside/directives/arrived_manager.js @@ -62,9 +62,30 @@ function($scope , $q , egCurbsideCoreSvc , egCore , egGridDataProvider , egProgr $scope.gridCellHandlers = { }; $scope.gridCellHandlers.mark_delivered = function(id) { + var events_to_handle_later = []; egProgressDialog.open(); egCurbsideCoreSvc.mark_delivered(id).then(function(resp) { egProgressDialog.close(); + + events_to_handle_later.pop(); // last element is resp, our param + if (events_to_handle_later.length) { // this means we got at least one CO attempt + + var bad_event; + angular.forEach(events_to_handle_later, function (evt) { + if (bad_event) return; // already warned staff, leave + if (angular.isArray(evt)) evt = evt[0]; // we only need to look at the first event from each CO response + + evt = egCore.evt.parse(evt); + if (!bad_event && evt && evt.textcode != 'SUCCESS') { // at least one non-success event, show the first event. + bad_event = evt; + ngToast.danger(egCore.strings.$replace( + egCore.strings.FAILED_CURBSIDE_CHECKOUT, + { slot_id : id, evt_code : bad_event.code } + )); + } + }); + } + if (evt = egCore.evt.parse(resp)) { ngToast.danger(egCore.strings.$replace( egCore.strings.FAILED_CURBSIDE_MARK_DELIVERED, @@ -72,6 +93,7 @@ function($scope , $q , egCurbsideCoreSvc , egCore , egGridDataProvider , egProgr )); return; } + if (!angular.isDefined(resp)) { ngToast.warning(egCore.strings.$replace( egCore.strings.NOTFOUND_CURBSIDE_MARK_DELIVERED, @@ -79,12 +101,15 @@ function($scope , $q , egCurbsideCoreSvc , egCore , egGridDataProvider , egProgr )); return; } + ngToast.success(egCore.strings.$replace( egCore.strings.SUCCESS_CURBSIDE_MARK_DELIVERED, { slot_id : id } )); $scope.wasHandled[id] = true; $timeout(function() { $scope.refresh_arrived() }, 500); + },null, function (resp) { + events_to_handle_later.push(resp); }); } $scope.gridCellHandlers.wasHandled = function(id) { -- 2.11.0