--- /dev/null
+<form ng-submit="ok(hold_data)" role="form">
+ <div class="modal-header">
+ <button type="button" class="close" ng-click="cancel()"
+ aria-hidden="true">×</button>
+ <h4 class="modal-title">[% l('Request Items') %]</h4>
+ </div>
+ <div class="modal-body">
+ <div class="row">
+ <div class="col-md-6">
+ <div class="input-group">
+ <span class="input-group-addon">[% l('User Barcode') %]</span>
+ <input class="form-control" type="text" focus-me="true"
+ ng-model="barcode" required placeholder="[% l('User Barcode') %]"/>
+ </div>
+ </div>
+ <div class="col-md-6"> {{user_name}} </div>
+ </div>
+ <div class="row pad-vert">
+ <div class="col-md-6">
+ <div class="input-group">
+ <span class="input-group-addon">[% l('Hold Type') %]</span>
+ <select class="form-control" required ng-model="hold_data.hold_type">
+ <option value="C">[% l('Copy Hold') %]</option>
+ <option value="R" selected>[% l('Recall Hold') %]</option>
+ <option value="F">[% l('Force Hold') %]</option>
+ </select>
+ </div>
+ </div>
+ <div class="col-md-6">
+ <div class="input-group">
+ <span class="input-group-addon">[% l('Pickup Lib') %]</span>
+ <eg-org-selector selected="hold_data.pickup_lib" disableTest="cant_have_vols"></eg-org-selector>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="modal-footer">
+ <div class="row">
+ <div class="col-md-6">
+ [% l('Number of items: ') %] {{hold_data.copy_list.length}}
+ </div>
+ <div class="col-md-6 pull-right">
+ <input type="submit" class="btn btn-primary" value="[% l('OK') %]" ng-disabled="!hold_data.user"/>
+ <button class="btn btn-warning" ng-click="cancel($event)">[% l('Cancel') %]</button>
+ </div>
+ </div>
+ </div>
+</form>
*
*/
-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'
.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;
}
});
+ $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;
'eg.cat.item_transfer_target',
$scope.holdingsGridControls.selectedItems()[0].call_number.id
);
- console.log('item_transfer_dest: '+$scope.holdingsGridControls.selectedItems()[0].call_number.id);
}
}
'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 (){
]
};
+ 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) {
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;
}]);