1 angular.module('egAcqRequestsApp',
2 ['ngRoute', 'ui.bootstrap', 'egCoreMod', 'egUserMod', 'egUiMod', 'egGridMod'])
4 .config(function($routeProvider, $locationProvider, $compileProvider) {
5 $locationProvider.html5Mode(true);
7 $compileProvider.aHrefSanitizationWhitelist(/^\s*(https?|mailto|blob):/);
9 var resolver = {delay :
10 ['egStartup', function(egStartup) {return egStartup.go()}]}
12 $routeProvider.when('/acq/requests/list', {
13 templateUrl: './acq/requests/t_list',
14 controller: 'AcqRequestsCtrl',
18 $routeProvider.when('/acq/requests/user/:user', {
19 templateUrl: './acq/requests/t_list',
20 controller: 'AcqRequestsCtrl',
24 $routeProvider.when('/acq/requests/lineitem/:lineitem', {
25 templateUrl: './acq/requests/t_list',
26 controller: 'AcqRequestsCtrl',
30 $routeProvider.otherwise({redirectTo : '/acq/requests/list'});
33 .controller('AcqRequestsCtrl',
34 ['$scope','$q','$routeParams','$window','egCore','egAcqRequests','egUser',
35 'egGridDataProvider','$uibModal','$timeout',
36 function($scope , $q , $routeParams , $window , egCore , egAcqRequests , egUser ,
37 egGridDataProvider , $uibModal , $timeout) {
41 $scope.context_user = $routeParams.user;
42 $scope.context_lineitem = $routeParams.lineitem;
44 egCore.startup.go().then(function() {
45 // org settings for constraining display of canceled requests
47 'circ.holds.canceled.display_age',
48 'circ.holds.canceled.display_count' // FIXME Don't know how to use this with egGrid
49 ]).then(function(set) {
50 cancel_age = set['circ.holds.canceled.display_age'];
51 cancel_count = set['circ.holds.canceled.display_count'];
52 if (!cancel_age && !cancel_count) {
53 cancel_count = 10; // default to last 10 canceled requests
58 $scope.need_one_selected = function() {
59 var requests = $scope.grid_controls.selectedItems();
60 if (requests.length == 1) return false;
64 $scope.need_one_uncanceled = function() {
65 var requests = $scope.grid_controls.selectedItems();
66 if (requests.length == 1) {
67 return requests[0]['cancel_reason.label'] ? true : false;
72 $scope.need_one_lineitem = function() {
73 var requests = $scope.grid_controls.selectedItems();
74 if (requests.length == 1) {
75 return ! requests[0]['lineitem.id'];
80 $scope.need_one_uncanceled_no_lineitem = function() {
81 var requests = $scope.grid_controls.selectedItems();
82 if (requests.length == 1) {
83 if (! requests[0]['lineitem.id']) {
84 return requests[0]['cancel_reason.label'] ? true : false;
90 $scope.need_one_and_all_uncanceled = function() {
91 var requests = $scope.grid_controls.selectedItems();
92 if (requests.length == 0) return true;
93 var found_canceled = false;
94 angular.forEach(requests,function(v,k) {
95 if (v['cancel_reason.label']) { found_canceled = true; }
97 return found_canceled;
100 $scope.need_one_and_all_new_or_pending = function() {
101 var requests = $scope.grid_controls.selectedItems();
102 if (requests.length == 0) return true;
103 var found_bad = false;
104 angular.forEach(requests,function(v,k) {
105 if (v['request_status.id'] != 2 // Pending
106 && v['request_status.id'] != 1) { // New
113 $scope.create_request = function(rows) {
115 if ($scope.context_user) {
116 row.usr = $scope.context_user;
118 egAcqRequests.handle_request(row,'create',$scope.context_ou,refresh_page);
121 $scope.edit_request = function(rows) {
123 if (!angular.isArray(rows)) rows = [rows];
124 if (rows.length == 0) return;
125 egAcqRequests.handle_request(rows[0],'edit',$scope.context_ou,refresh_page);
128 $scope.view_request = function(rows) {
130 if (!angular.isArray(rows)) rows = [rows];
131 if (rows.length == 0) return;
132 egAcqRequests.handle_request(rows[0],'view',$scope.context_ou,refresh_page);
135 $scope.add_request_to_picklist = function(rows) {
137 if (!angular.isArray(rows)) rows = [rows];
138 if (rows.length == 0) return;
139 egAcqRequests.add_request_to_picklist(rows[0]);
142 $scope.view_picklist = function(rows) {
144 if (!angular.isArray(rows)) rows = [rows];
145 if (rows.length == 0) return;
146 egAcqRequests.view_picklist(rows[0]);
149 $scope.retrieve_user = function(rows) {
151 if (!angular.isArray(rows)) rows = [rows];
152 if (rows.length == 0) return;
153 location.href = "/eg/staff/circ/patron/" + rows[0]['usr.id'] + "/checkout";
156 $scope.clear_requests = function(rows) {
157 rows = $scope.grid_controls.selectedItems(); // remove this if we move the grid action into the menu
159 if (!angular.isArray(rows)) rows = [rows];
160 if (rows.length == 0) return;
161 egAcqRequests.clear_requests( rows, refresh_page );
164 $scope.set_no_hold_requests = function(rows) {
166 if (!angular.isArray(rows)) rows = [rows];
167 if (rows.length == 0) return;
168 egAcqRequests.set_no_hold_requests( rows, refresh_page );
171 $scope.set_yes_hold_requests = function(rows) {
173 if (!angular.isArray(rows)) rows = [rows];
174 if (rows.length == 0) return;
175 egAcqRequests.set_yes_hold_requests( rows, refresh_page );
178 $scope.cancel_requests = function(rows) {
180 if (!angular.isArray(rows)) rows = [rows];
181 if (rows.length == 0) return;
182 egAcqRequests.cancel_requests( rows, refresh_page );
185 $scope.canceled_requests_checkbox_handler = function (item) {
186 $scope.canceled_requests_cb_changed(item.checkbox,item.checked);
189 $scope.canceled_requests_cb_changed = function(cb,newVal,norefresh) {
191 egCore.hatch.setItem('eg.acq.' + cb, newVal);
197 function current_query() {
199 if ($scope.context_user) {
200 filter.usr = $scope.context_user;
201 } else if ($scope.context_lineitem) {
202 filter.lineitem = $scope.context_lineitem;
204 filter.home_ou = egCore.org.descendants($scope.context_ou.id(), true)
206 if ($scope['requests_show_canceled']) {
207 filter.cancel_reason = { '!=' : null };
209 var seconds = egCore.date.intervalToSeconds(cancel_age);
210 var now_epoch = new Date().getTime();
211 var cancel_date = new Date(
212 now_epoch - (seconds * 1000 /* milliseconds */)
214 filter.cancel_time = { '>=' : cancel_date.toISOString() };
218 filter.cancel_reason = { '=' : null };
223 $scope.grid_controls = {
224 activateItem : $scope.view_request,
225 setQuery : current_query
228 function refresh_page() {
229 $scope.grid_controls.setQuery(current_query());
230 $scope.grid_controls.refresh();
233 $scope.context_ou = egCore.org.get(egCore.auth.user().ws_ou());
234 $scope.$watch('context_ou', function(newVal, oldVal) {
235 if (newVal && newVal != oldVal) refresh_page();