]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/web/js/ui/default/staff/admin/workstation/log.js
webstaff: egWorkLog service and Work Log UI
[Evergreen.git] / Open-ILS / web / js / ui / default / staff / admin / workstation / log.js
1 angular.module('egWorkLogApp', 
2     ['ngRoute', 'ui.bootstrap', 'egCoreMod', 'egUiMod', 'egGridMod'])
3
4 .config(function($routeProvider, $locationProvider, $compileProvider) {
5     $locationProvider.html5Mode(true);
6     $compileProvider.aHrefSanitizationWhitelist(/^\s*(https?|blob):/); // grid export
7
8     var resolver = {delay : 
9         ['egStartup', function(egStartup) {return egStartup.go()}]}
10
11     $routeProvider.when('/admin/workstation/log', {
12         templateUrl: './admin/workstation/t_log',
13         controller: 'WorkLogCtrl',
14         resolve : resolver
15     });
16
17     $routeProvider.otherwise({redirectTo : '/admin/workstation/log'});
18 })
19
20 .controller('WorkLogCtrl',
21        ['$scope','$q','$routeParams','$window','$location','$timeout','egCore','egGridDataProvider','egWorkLog',
22 function($scope , $q , $routeParams , $window , $location , $timeout , egCore , egGridDataProvider , egWorkLog ) {
23
24     var work_log_entries = [];
25     var patron_log_entries = [];
26
27     var work_log_provider = egGridDataProvider.instance({});
28     var patron_log_provider = egGridDataProvider.instance({});
29     $scope.grid_work_log_provider = work_log_provider;
30     $scope.grid_patron_log_provider = patron_log_provider;
31
32     function load_item(log_entries) {
33         if (!log_entries) return;
34         if (!angular.isArray(log_entries)) log_entries = [log_entries];
35         angular.forEach(log_entries, function(log_entry) {
36             $window.open(
37                 $location.path(
38                     '/cat/item/' + log_entry.item_id
39                 ).absUrl(),
40                 '_blank'
41             ).focus();
42         });
43     }
44
45     $scope.load_item = function(action, data, entries) {
46         load_item(entries);
47     }
48
49     function load_patron(log_entries) {
50         if (!log_entries) return;
51         if (!angular.isArray(log_entries)) log_entries = [log_entries];
52         angular.forEach(log_entries, function(log_entry) {
53             $window.open(
54                 $location.path(
55                     '/circ/patron/' + log_entry.patron_id + '/checkout'
56                 ).absUrl(),
57                 '_blank'
58             ).focus();
59         });
60     }
61
62     $scope.load_patron = function(action, data, entries) {
63         load_patron(entries);
64     }
65
66     $scope.grid_controls = {
67         activateItem : load_patron
68     }
69
70     function refresh_page() {
71         work_log_entries = [];
72         patron_log_entries = [];
73         provider.refresh();
74     }
75
76     function fetch_hold(deferred,entry) {
77         egCore.pcrud.search('ahr',
78             { 'id' : entry.data.hold_id }, {
79                 'flesh' : 2,
80                 'flesh_fields' : {
81                     'ahr' : ['usr','current_copy'],
82                 },
83             }
84         ).then(
85             deferred.resolve, null, 
86             function(hold) {
87                 entry.patron_id = hold.usr().id();
88                 entry.user = hold.usr().family_name();
89                 if (hold.current_copy()) {
90                     entry.item = hold.current_copy().barcode();
91                 }
92                 deferred.notify(entry);
93             }
94         );
95     }
96
97     function fetch_patron(deferred,entry) {
98         egCore.pcrud.search('au',
99             { 'id' : entry.data.patron_id }, {}
100         ).then(
101             deferred.resolve, null,
102             function(usr) {
103                 entry.user = usr.family_name();
104                 deferred.notify(entry);
105             }
106         );
107     }
108
109     work_log_provider.get = function(offset, count) {
110         var log_entries = egWorkLog.retrieve_all();
111         console.log(log_entries);
112         var deferred = $q.defer();
113
114         $timeout( function() {
115             log_entries.work_log.forEach(
116                 function(el,idx) {
117                     el.id = idx;
118                     if (el.action == 'requested_hold') {
119                         fetch_hold(deferred,el);
120                     } else if (el.action == 'registered_patron') {
121                         fetch_patron(deferred,el);
122                     } else if (el.action == 'edited_patron') {
123                         fetch_patron(deferred,el);
124                     } else if (el.action == 'paid_bill') {
125                         fetch_patron(deferred,el);
126                     } else {
127                         deferred.notify(el);
128                     }
129                 }
130             );
131         });
132         return deferred.promise;
133     }
134
135     patron_log_provider.get = function(offset, count) {
136         var log_entries = egWorkLog.retrieve_all();
137         console.log(log_entries);
138         var deferred = $q.defer();
139
140         $timeout( function() {
141             log_entries.patron_log.forEach(
142                 function(el,idx) {
143                     el.id = idx;
144                     if (el.action == 'requested_hold') {
145                         fetch_hold(deferred,el);
146                     } else if (el.action == 'registered_patron') {
147                         fetch_patron(deferred,el);
148                     } else if (el.action == 'edited_patron') {
149                         fetch_patron(deferred,el);
150                     } else if (el.action == 'paid_bill') {
151                         fetch_patron(deferred,el);
152                     } else {
153                         deferred.notify(el);
154                     }
155                 }
156             );
157         });
158         return deferred.promise;
159     }
160
161 }])
162