)
} @$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",
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}}') %]";
$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,
));
return;
}
+
if (!angular.isDefined(resp)) {
ngToast.warning(egCore.strings.$replace(
egCore.strings.NOTFOUND_CURBSIDE_MARK_DELIVERED,
));
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) {