]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/web/js/ui/default/staff/circ/curbside/directives/arrived_manager.js
LP#1879983: AngularJS staff interface for curbside pickup
[Evergreen.git] / Open-ILS / web / js / ui / default / staff / circ / curbside / directives / arrived_manager.js
1 angular.module('egCurbsideAppDep')
2
3 .directive('egCurbsideArrivedManager', function() {
4     return {
5         transclude: true,
6         restrict:   'E',
7         scope: { },
8         templateUrl: './circ/curbside/t_arrived_manager',
9         controller:
10        ['$scope','$q','egCurbsideCoreSvc','egCore','egGridDataProvider','egProgressDialog',
11         '$uibModal','$timeout','$location','egConfirmDialog','ngToast','$interval',
12 function($scope , $q , egCurbsideCoreSvc , egCore , egGridDataProvider , egProgressDialog ,
13          $uibModal , $timeout , $location , egConfirmDialog , ngToast , $interval) {
14
15     $scope.gridControls = {};
16
17     $scope.wasHandled = {};
18     $scope.refreshNeeded = false;
19
20     latestTime = undefined;
21     var checkRefresh = undefined;
22     function startRefreshCheck() {
23         if (!angular.isDefined(checkRefresh)) {
24             checkRefresh = $interval(function() {
25                 egCurbsideCoreSvc.get_latest_arrived().then(function(latest) {
26                     if (angular.isDefined(latest)) {
27                         if (angular.isDefined(latestTime) && latestTime != latest) {
28                             $scope.refreshNeeded = true;
29                             stopRefreshCheck();
30                         }
31                         latestTime = latest;
32                     }
33                 });
34             }, 15000);
35         }
36     }
37     function stopRefreshCheck() {
38         if (angular.isDefined(checkRefresh)) {
39             $interval.cancel(checkRefresh);
40             checkRefresh = undefined;
41         }
42     }
43     this.$onInit = function() {
44         startRefreshCheck();
45     }
46     this.$onDestroy = function() {
47         stopRefreshCheck();
48     }
49
50     $scope.gridDataProvider = egGridDataProvider.instance({
51         get : function(offset, count) {
52             $scope.wasHandled = {};
53             $scope.refreshNeeded = false;
54             startRefreshCheck();
55             return egCurbsideCoreSvc.get_arrived(offset, count);
56         }
57     });
58
59     $scope.refresh_arrived = function() {
60         $scope.gridControls.refresh();
61     }
62
63     $scope.gridCellHandlers = { };
64     $scope.gridCellHandlers.mark_delivered = function(id) {
65         var events_to_handle_later = [];
66         egProgressDialog.open();
67         egCurbsideCoreSvc.mark_delivered(id).then(function(resp) {
68             egProgressDialog.close();
69
70             events_to_handle_later.pop(); // last element is resp, our param
71             if (events_to_handle_later.length) { // this means we got at least one CO attempt
72
73                 var bad_event;
74                 angular.forEach(events_to_handle_later, function (evt) {
75                     if (bad_event) return; // already warned staff, leave
76                     if (angular.isArray(evt)) evt = evt[0]; // we only need to look at the first event from each CO response
77
78                     evt = egCore.evt.parse(evt);
79                     if (!bad_event && evt && evt.textcode != 'SUCCESS') { // at least one non-success event, show the first event.
80                         bad_event = evt;
81                         ngToast.danger(egCore.strings.$replace(
82                             egCore.strings.FAILED_CURBSIDE_CHECKOUT,
83                             { slot_id : id, evt_code : bad_event.code }
84                         ));
85                     }
86                 });
87             }
88
89             if (evt = egCore.evt.parse(resp)) {
90                 ngToast.danger(egCore.strings.$replace(
91                     egCore.strings.FAILED_CURBSIDE_MARK_DELIVERED,
92                     { slot_id : id, evt_code : evt.code }
93                 ));
94                 return;
95             } 
96
97             if (!angular.isDefined(resp)) {
98                 ngToast.warning(egCore.strings.$replace(
99                     egCore.strings.NOTFOUND_CURBSIDE_MARK_DELIVERED,
100                     { slot_id : id }
101                 ));
102                 return;
103             }
104
105             ngToast.success(egCore.strings.$replace(
106                 egCore.strings.SUCCESS_CURBSIDE_MARK_DELIVERED,
107                 { slot_id : id }
108             ));
109             $scope.wasHandled[id] = true;
110             $timeout(function() { $scope.refresh_arrived() }, 500);
111         },null, function (resp) {
112             events_to_handle_later.push(resp);
113         });
114     }
115     $scope.gridCellHandlers.wasHandled = function(id) {
116         return $scope.wasHandled[id];
117     }
118     $scope.gridCellHandlers.patronIsBlocked = function(usr) {
119         return egCurbsideCoreSvc.patron_blocked(usr);
120     }
121
122 }]}});