From: Bill Erickson Date: Tue, 8 Apr 2014 19:06:21 +0000 (-0400) Subject: browser staff : initial print/store service X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=8249028fd7a1df61c0ed806ce2fbd646d94bddce;p=working%2FEvergreen.git browser staff : initial print/store service Signed-off-by: Bill Erickson --- diff --git a/Open-ILS/src/templates/staff/parts/t_autogrid.tt2 b/Open-ILS/src/templates/staff/parts/t_autogrid.tt2 index d343921cf0..959d79a75c 100644 --- a/Open-ILS/src/templates/staff/parts/t_autogrid.tt2 +++ b/Open-ILS/src/templates/staff/parts/t_autogrid.tt2 @@ -102,6 +102,10 @@ [% l('Download CSV') %] +
  • + + [% l('Print CSV') %] +
  • + diff --git a/Open-ILS/web/js/ui/default/staff/services/grid.js b/Open-ILS/web/js/ui/default/staff/services/grid.js index 1d1dbb00e1..1f4b118482 100644 --- a/Open-ILS/web/js/ui/default/staff/services/grid.js +++ b/Open-ILS/web/js/ui/default/staff/services/grid.js @@ -56,9 +56,9 @@ angular.module('egGridMod', controller : [ '$scope','egIDL','egAuth','egNet', 'egGridFlatDataProvider', - 'egGridColumnsProvider', '$filter','$window', + 'egGridColumnsProvider','$filter','$window','egPrintStore', function($scope, egIDL, egAuth, egNet, egGridFlatDataProvider, - egGridColumnsProvider, $filter, $window) { + egGridColumnsProvider , $filter , $window , egPrintStore) { var grid = this; @@ -428,6 +428,11 @@ angular.module('egGridMod', ($window.URL || $window.webkitURL).createObjectURL(blob); } + grid.printCSV = function() { + egPrintStore.print('text/csv', grid.generateCSV()) + .then(function() { console.debug('print complete') }); + } + // generates CSV for the currently visible grid contents grid.generateCSV = function() { var csvStr = ''; diff --git a/Open-ILS/web/js/ui/default/staff/services/printstore.js b/Open-ILS/web/js/ui/default/staff/services/printstore.js new file mode 100644 index 0000000000..a2166a7cba --- /dev/null +++ b/Open-ILS/web/js/ui/default/staff/services/printstore.js @@ -0,0 +1,109 @@ +/** + * Core Service - egPrint + * + */ + +angular.module('egCoreMod') + + +.factory('egPrintStore', ['$q', '$window', function($q, $window) { + + var service = {}; + service.msgId = 0; + service.messages = {}; + service.pending = []; + service.socket = null; + service.hatchAvailable = null; + service.hatchURL = 'ws://localhost:8080/hatch/'; // TODO: configuration/ssl + + service.hatchSend = function(msg) { + + msg.msgid = '' + (service.msgId++); + msg.deferred = $q.defer(); + + service.messages[msg.msgid] = msg; + + if (service.hatchAvailable === true) { + service.socket.send(JSON.stringify(msg)); + } else { + service.pending.push(msg); + service.hatchConnect(); + } + + return msg.deferred.promise; + } + + service.hatchConnect = function() { + service.socket = new WebSocket(service.hatchURL); + + service.socket.onopen = function() { + console.debug('connected to Hatch'); + service.hatchAvailable = true; + angular.forEach(service.pending, function(msg) { + service.socket.send(JSON.stringify(msg)); + }); + } + + service.socket.onclose = function() { + console.debug("disconnected from Hatch"); + service.socket = null; + } + + service.socket.onerror = function() { + console.log( + "unable to connect to Hatch server at " + service.hatchURL); + service.hatchAvailable = false; + service.socket = null; + } + + service.socket.onmessage = function(evt) { + var msgStr = evt.data; + + if (!msgStr) { + console.error("Hatch returned empty message"); + return; + } + + console.debug('Hatch says ' + msgStr); + var msgObj = JSON.parse(msgStr); + + if (msgObj.success) { + console.debug("hatch command succeeded : " + msgObj.success); + } else { + console.error("hatch command failed : " + msgObj.error); + } + + var srcMsg = service.messages[msgObj.msgid]; + delete service.messages[msgObj.msgid]; + srcMsg.deferred.resolve(msgObj); + } + } + + service.browserPrinter = function(mime, data) { + switch (mime) { + case 'text/csv': + case 'text/plain': + $window.print(data); + break; + case 'text/html': + // TODO: generate the document and print it + } + } + + service.print = function(mime, data) { + if (service.hatchAvailable === false) { + service.browserPrint(mime, data); + return $q.when(); + } + + return service.hatchSend({ + key : 'no-op', + action : 'print', + mime : mime, + value : data, + //printer : printer // TODO: prefs, etc. + }); + } + + return service; +}]);