From a2f32eef085b57b349cb2431255fed6ad34b2cb2 Mon Sep 17 00:00:00 2001 From: Bill Erickson Date: Wed, 27 Nov 2013 11:04:20 -0500 Subject: [PATCH] web staff: checkin transit dialog Signed-off-by: Bill Erickson --- .../staff/circ/checkin/t_transit_dialog.tt2 | 63 ++++++++++++++++++++ .../web/js/ui/default/staff/circ/checkin/app.js | 67 +++++++++++++++++++++- 2 files changed, 128 insertions(+), 2 deletions(-) create mode 100644 Open-ILS/src/templates/staff/circ/checkin/t_transit_dialog.tt2 diff --git a/Open-ILS/src/templates/staff/circ/checkin/t_transit_dialog.tt2 b/Open-ILS/src/templates/staff/circ/checkin/t_transit_dialog.tt2 new file mode 100644 index 0000000000..ced65a39e7 --- /dev/null +++ b/Open-ILS/src/templates/staff/circ/checkin/t_transit_dialog.tt2 @@ -0,0 +1,63 @@ + diff --git a/Open-ILS/web/js/ui/default/staff/circ/checkin/app.js b/Open-ILS/web/js/ui/default/staff/circ/checkin/app.js index dd57d367ea..ef496c5eca 100644 --- a/Open-ILS/web/js/ui/default/staff/circ/checkin/app.js +++ b/Open-ILS/web/js/ui/default/staff/circ/checkin/app.js @@ -19,11 +19,39 @@ function($q, egList, egNet, egAuth, egUser, egEnv, egOrg, egList) { }]) /** + * locally cached org unit addresses -- needed for route slips, etc. + */ +.factory('orgAddrSvc', + ['$q','egOrg','egPCRUD', +function($q, egOrg, egPCRUD) { + var service = {cache : {}}; + service.getAddr = function(org_id, addr_type) { + if (service.cache[org_id]) { + if (service.cache[org_id][addr_type]) { + return $q.when(service.cache[org_id][addr_type]); + } + } else { + service.cache[org_id] = {}; + } + + var deferred = $q.defer(); + egPCRUD.retrieve('aoa', egOrg.get(org_id).holds_address()) + .then(function(addr) { + service.cache[org_id][addr_type] = addr; + deferred.resolve(addr); + }); + return deferred.promise; + } + return service; +}]) + + +/** * Manages checkin */ .controller('CheckinCtrl', - ['$scope','$modal','egStartup','checkinSvc','egNet','egAuth', -function($scope, $modal, egStartup, checkinSvc, egNet, egAuth) { + ['$scope','$q','$modal','egStartup','checkinSvc','egNet','egAuth','orgAddrSvc','egOrg','egPCRUD', +function($scope, $q, $modal, egStartup, checkinSvc, egNet, egAuth, orgAddrSvc, egOrg, egPCRUD) { // run egStartup here since it's not handled via resolver egStartup.go().then( @@ -68,6 +96,7 @@ function($scope, $modal, egStartup, checkinSvc, egNet, egAuth) { case 'SUCCESS': case 'ROUTE_ITEM': checkinSvc.checkins.items.push(evt); + openRouteDialog(evt, args); break; case 'ASSET_COPY_NOT_FOUND': openAlertDialog('uncat_alert_dialog', evt, args); @@ -95,5 +124,39 @@ function($scope, $modal, egStartup, checkinSvc, egNet, egAuth) { }).result.then(function() {$scope.focusMe = true}); } + function openRouteDialog(evt, args) { + // avoid unintended checkins while the dialog is open + $scope.blurMe = true; + $modal.open({ + templateUrl: './circ/checkin/t_transit_dialog', + controller: + ['$scope', '$modalInstance', 'destAddr', 'holdUser', + function($scope, $modalInstance, destAddr, holdUser) { + $scope.destAddr = destAddr; + $scope.holdUser = holdUser; + $scope.dest = egOrg.get(evt.org); + $scope.evt = evt; + $scope.now = new Date(); + $scope.ok = function() {$modalInstance.close()} + }], + resolve : { + destAddr : function() { + // TODO: response payload should flesh dest addr + return orgAddrSvc.getAddr(evt.org, 'holds_address'); + }, + holdUser : function() { + // TODO: response payload should flesh hold recipient + if (!evt.payload.hold) return $q.when(); + return egPCRUD.retrieve('au', + evt.payload.hold.usr(), { + flesh : 1, + flesh_fields : {'au' : ['card']} + } + ); + } + } + }).result.then(function() {$scope.focusMe = true}); + } + }]) -- 2.11.0