From: Mike Rylander Date: Thu, 3 Sep 2015 16:42:33 +0000 (-0400) Subject: webstaff: Add modal "request items" to holding view X-Git-Tag: sprint4-merge-nov22~995 X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=44e8fc74d8d56fc0623129113a8dfd3acfb48e5b;p=working%2FEvergreen.git webstaff: Add modal "request items" to holding view Signed-off-by: Mike Rylander Signed-off-by: Galen Charlton Signed-off-by: Jason Stephenson --- diff --git a/Open-ILS/src/templates/staff/base_js.tt2 b/Open-ILS/src/templates/staff/base_js.tt2 index 5e60ee0df3..97a2ce0615 100644 --- a/Open-ILS/src/templates/staff/base_js.tt2 +++ b/Open-ILS/src/templates/staff/base_js.tt2 @@ -28,6 +28,7 @@ + diff --git a/Open-ILS/src/templates/staff/cat/catalog/t_holdings.tt2 b/Open-ILS/src/templates/staff/cat/catalog/t_holdings.tt2 index 5ef56d11bd..154bb4fe6c 100644 --- a/Open-ILS/src/templates/staff/cat/catalog/t_holdings.tt2 +++ b/Open-ILS/src/templates/staff/cat/catalog/t_holdings.tt2 @@ -33,6 +33,9 @@ checkbox="holdings_show_vols" checked="holdings_show_vols"/> + + + + + + diff --git a/Open-ILS/web/js/ui/default/staff/cat/catalog/app.js b/Open-ILS/web/js/ui/default/staff/cat/catalog/app.js index 2608418a1e..a709f04874 100644 --- a/Open-ILS/web/js/ui/default/staff/cat/catalog/app.js +++ b/Open-ILS/web/js/ui/default/staff/cat/catalog/app.js @@ -7,13 +7,13 @@ * */ -angular.module('egCatalogApp', ['ui.bootstrap','ngRoute','egCoreMod','egGridMod', 'egMarcMod']) +angular.module('egCatalogApp', ['ui.bootstrap','ngRoute','egCoreMod','egGridMod', 'egMarcMod', 'egUserMod']) .config(function($routeProvider, $locationProvider, $compileProvider) { $locationProvider.html5Mode(true); $compileProvider.aHrefSanitizationWhitelist(/^\s*(https?|blob):/); // grid export - var resolver = {delay : ['egCore','egStartup', function(egCore, egStartup) { + var resolver = {delay : ['egCore','egStartup','egUser', function(egCore, egStartup, egUser) { egCore.env.classLoaders.aous = function() { return egCore.org.settings([ 'cat.marc_control_number_identifier' @@ -227,9 +227,9 @@ function($scope , $routeParams , $location , $window , $q , egCore) { .controller('CatalogCtrl', ['$scope','$routeParams','$location','$window','$q','egCore','egHolds','egCirc', - 'egGridDataProvider','egHoldGridActions','$timeout','holdingsSvc', + 'egGridDataProvider','egHoldGridActions','$timeout','$modal','holdingsSvc','egUser', function($scope , $routeParams , $location , $window , $q , egCore , egHolds , egCirc, - egGridDataProvider , egHoldGridActions , $timeout , holdingsSvc) { + egGridDataProvider , egHoldGridActions , $timeout , $modal , holdingsSvc , egUser) { // set record ID on page load if available... $scope.record_id = $routeParams.record_id; @@ -316,6 +316,75 @@ function($scope , $routeParams , $location , $window , $q , egCore , egHolds , e } }); + $scope.requestItems = function() { + var copy_list = gatherSelectedHoldingsIds(); + if (copy_list.length == 0) return; + + return $modal.open({ + templateUrl: './cat/catalog/t_request_items', + animation: true, + controller: + ['$scope','$modalInstance', + function($scope , $modalInstance) { + $scope.user = null; + $scope.first_user_fetch = true; + + $scope.hold_data = { + hold_type : 'C', + copy_list : copy_list, + pickup_lib: egCore.org.get(egCore.auth.user().ws_ou()), + user : egCore.auth.user().id() + }; + + egUser.get( $scope.hold_data.user ).then(function(u) { + $scope.user = u; + $scope.barcode = u.card().barcode(); + $scope.user_name = egUser.format_name(u); + $scope.hold_data.user = u.id(); + }); + + $scope.user_name = ''; + $scope.barcode = ''; + $scope.$watch('barcode', function (n) { + if (!$scope.first_user_fetch) { + egUser.getByBarcode(n).then(function(u) { + $scope.user = u; + $scope.user_name = egUser.format_name(u); + $scope.hold_data.user = u.id(); + }, function() { + $scope.user = null; + $scope.user_name = ''; + delete $scope.hold_data.user; + }); + } + $scope.first_user_fetch = false; + }); + + $scope.ok = function(h) { + var args = { + patronid : h.user, + hold_type : h.hold_type, + pickup_lib: h.pickup_lib.id(), + depth : 0 + }; + + egCore.net.request( + 'open-ils.circ', + 'open-ils.circ.holds.test_and_create.batch.override', + egCore.auth.token(), args, h.copy_list + ); + + $modalInstance.close(); + } + + $scope.cancel = function($event) { + $modalInstance.dismiss(); + $event.preventDefault(); + } + }] + }); + } + // refresh the list of holdings when the record_id is changed. $scope.holdings_record_id_changed = function(id) { if ($scope.record_id != id) $scope.record_id = id; @@ -486,7 +555,6 @@ function($scope , $routeParams , $location , $window , $q , egCore , egHolds , e 'eg.cat.item_transfer_target', $scope.holdingsGridControls.selectedItems()[0].call_number.id ); - console.log('item_transfer_dest: '+$scope.holdingsGridControls.selectedItems()[0].call_number.id); } } @@ -495,7 +563,6 @@ function($scope , $routeParams , $location , $window , $q , egCore , egHolds , e 'eg.cat.volume_transfer_target', $scope.holdingsGridControls.selectedItems()[0].owner_id ); - console.log('vol_transfer_dest: '+$scope.holdingsGridControls.selectedItems()[0].owner_id); } $scope.selectedHoldingsItemStatusDetail = function (){ diff --git a/Open-ILS/web/js/ui/default/staff/services/coresvc.js b/Open-ILS/web/js/ui/default/staff/services/coresvc.js index de502cd325..57b836194b 100644 --- a/Open-ILS/web/js/ui/default/staff/services/coresvc.js +++ b/Open-ILS/web/js/ui/default/staff/services/coresvc.js @@ -10,7 +10,7 @@ angular.module('egCoreMod') .factory('egCore', ['egIDL','egNet','egEnv','egOrg','egPCRUD','egEvent','egAuth', 'egPerm','egHatch','egPrint','egStartup','egStrings','egDate', -function(egIDL , egNet , egEnv , egOrg , egPCRUD , egEvent , egAuth , +function(egIDL , egNet , egEnv , egOrg , egPCRUD , egEvent , egAuth , egPerm , egHatch , egPrint , egStartup , egStrings , egDate) { return { diff --git a/Open-ILS/web/js/ui/default/staff/services/user.js b/Open-ILS/web/js/ui/default/staff/services/user.js index 0ed5cac038..f2a70c17dd 100644 --- a/Open-ILS/web/js/ui/default/staff/services/user.js +++ b/Open-ILS/web/js/ui/default/staff/services/user.js @@ -20,9 +20,20 @@ function($q, $timeout, egNet, egAuth, egOrg) { ] }; + service.format_name = function(patron_obj) { + var patron_name = ( patron_obj.prefix() ? patron_obj.prefix() + ' ' : '') + + patron_obj.family_name() + ', ' + + patron_obj.first_given_name() + ' ' + + ( patron_obj.second_given_name() ? patron_obj.second_given_name() + ' ' : '' ) + + ( patron_obj.suffix() ? patron_obj.suffix() : ''); + return patron_name; + }; + service.get = function(userId, args) { var deferred = $q.defer(); + if (!userId) deferred.reject(); + var fields = service.defaultFleshFields; if (args) { if (args.useFields) { @@ -51,6 +62,19 @@ function($q, $timeout, egNet, egAuth, egOrg) { return deferred.promise; }; + service.getByBarcode = function(barcode, args) { + return egNet.request( + 'open-ils.pcrud', + 'open-ils.pcrud.search.ac.atomic', + egAuth.token(), {barcode:barcode} + ).then( function(card) { + if (card && angular.isArray(card) && card[0] && card[0].classname == 'ac') { + return service.get(card[0].usr(), args) + } + return service.get(null); + }) + }; + return service; }]);