}
}
+ $scope.handle_barcode_completion = function(barcode) {
+ return egCore.net.request(
+ 'open-ils.actor',
+ 'open-ils.actor.get_barcodes',
+ egCore.auth.token(), egCore.auth.user().ws_ou(),
+ 'asset', barcode)
+
+ .then(function(resp) {
+ // TODO: handle event during barcode lookup
+ if (evt = egCore.evt.parse(resp)) {
+ console.error(evt.toString());
+ return $q.reject();
+ }
+
+ // no matching barcodes: return the barcode as entered
+ // by the user (so that, e.g., checkout can fall back to
+ // precat/noncat handling)
+ if (!resp || !resp[0]) {
+ return barcode;
+ }
+
+ // exactly one matching barcode: return it
+ if (resp.length == 1) {
+ return resp[0].barcode;
+ }
+
+ // multiple matching barcodes: let the user pick one
+ console.debug('multiple matching barcodes');
+ var matches = [];
+ var promises = [];
+ var final_barcode;
+ angular.forEach(resp, function(cp) {
+ promises.push(
+ egCore.net.request(
+ 'open-ils.circ',
+ 'open-ils.circ.copy_details.retrieve',
+ egCore.auth.token(), cp.id
+ ).then(function(r) {
+ matches.push({
+ barcode: r.copy.barcode(),
+ title: r.mvr.title(),
+ org_name: egCore.org.get(r.copy.circ_lib()).name(),
+ org_shortname: egCore.org.get(r.copy.circ_lib()).shortname()
+ });
+ })
+ );
+ });
+ return $q.all(promises)
+ .then(function() {
+ return $uibModal.open({
+ templateUrl: './circ/share/t_barcode_choice_dialog',
+ controller:
+ ['$scope', '$uibModalInstance',
+ function($scope, $uibModalInstance) {
+ $scope.matches = matches;
+ $scope.ok = function(barcode) {
+ $uibModalInstance.close();
+ final_barcode = barcode;
+ }
+ $scope.cancel = function() {$uibModalInstance.dismiss()}
+ }],
+ }).result.then(function() { return final_barcode });
+ })
+ });
+ }
+
$scope.search = function() {
bucketSvc.barcodeRecords = [];
$scope.context.itemNotFound = false;
// clear selection so re-selecting can have an effect
$scope.context.selectPendingBC = false;
- egCore.pcrud.search(
- 'acp',
- {barcode : bucketSvc.barcodeString, deleted : 'f'},
- {}
- ).then(function(copy) {
- if (copy) {
- bucketSvc.pendingList.push(copy.id());
- $scope.gridControls.setQuery({id : bucketSvc.pendingList});
- bucketSvc.barcodeString = ''; // clear form on valid copy
- } else {
- $scope.context.itemNotFound = true;
- $scope.context.selectPendingBC = true;
- }
+ return $scope.handle_barcode_completion(bucketSvc.barcodeString)
+ .then(function(actual_barcode) {
+ egCore.pcrud.search(
+ 'acp',
+ {barcode : actual_barcode, deleted : 'f'},
+ {}
+ ).then(function(copy) {
+ if (copy) {
+ bucketSvc.pendingList.push(copy.id());
+ $scope.gridControls.setQuery({id : bucketSvc.pendingList});
+ bucketSvc.barcodeString = ''; // clear form on valid copy
+ } else {
+ $scope.context.itemNotFound = true;
+ $scope.context.selectPendingBC = true;
+ }
+ });
});
}