LP#1548147 Quick Export Feature for Vandelay Queues user/dbwells/lp1548147_vandelay_quick_export
authorDan Wells <dbw2@calvin.edu>
Wed, 1 Jul 2015 19:18:16 +0000 (15:18 -0400)
committerDan Wells <dbw2@calvin.edu>
Mon, 22 Feb 2016 01:58:16 +0000 (20:58 -0500)
When we import records into Vandelay, sometimes some of the records
are not what we expected, so they get rejected.  These records often
need to be loaded using a different set of options, so this link makes
it convenient to get a new file of just the rejects.

Signed-off-by: Dan Wells <dbw2@calvin.edu>
Open-ILS/src/perlmods/lib/OpenILS/Application/Vandelay.pm
Open-ILS/src/templates/vandelay/inc/queue.tt2
Open-ILS/web/js/ui/default/vandelay/vandelay.js

index a93a51e..4dd3bed 100644 (file)
@@ -838,6 +838,68 @@ sub import_queue {
     return {complete => 1};
 }
 
+__PACKAGE__->register_method(
+    api_name    => "open-ils.vandelay.bib_queue.export",
+    method      => 'export_queue',
+    api_level   => 1,
+    argc        => 2,
+    stream      => 1,
+    max_chunk_size => 0,
+    record_type => 'bib',
+    signature => {
+        desc => q/
+            Attempts to export all non-imported records for the selected queue.
+        /
+    }
+);
+
+__PACKAGE__->register_method(
+    api_name    => "open-ils.vandelay.auth_queue.export",
+    method      => 'export_queue',
+    api_level   => 1,
+    argc        => 2,
+    stream      => 1,
+    max_chunk_size => 0,
+    record_type => 'auth',
+    signature => {
+        desc => q/
+            Attempts to export all non-imported records for the selected queue.
+        /
+    }
+);
+
+# TODO: Right now, this just simply exports unimported XML bibs.
+# Eventually, more options (bibs for unimported items, all bibs
+# in queue, selected records, different MARC formats) might make
+# sense.
+sub export_queue {
+    my($self, $conn, $auth, $q_id, $options) = @_;
+    my $e = new_editor(authtoken => $auth, xact => 1);
+    return $e->die_event unless $e->checkauth;
+    my $type = $self->{record_type};
+    my $class = ($type eq 'bib') ? 'vqbr' : 'vqar';
+
+    # Collect the not-yet-imported records
+    my $query = {queue => $q_id, import_time => undef};
+    my $search = ($type eq 'bib') ?
+        'search_vandelay_queued_bib_record' :
+        'search_vandelay_queued_authority_record';
+    my $recs = $e->$search($query);
+
+    my $xml = <<"    HEADER";
+<?xml version="1.0" encoding="UTF-8"?>
+<collection xmlns='http://www.loc.gov/MARC21/slim'>
+    HEADER
+
+    foreach my $rec (@$recs) {
+        $xml .= $rec->marc;
+    }
+
+    $xml .= "</collection>\n";
+
+    return $xml;
+}
+
 # returns a list of queued record IDs for a given queue that 
 # have at least one entry in the match table
 # XXX DEPRECATED?
index cce9a73..56c3965 100644 (file)
@@ -15,6 +15,7 @@
                                 <tr><td><a href='javascript:;' onclick='vlHandleQueueItemsAction("import")'>[% l('Import Selected Records') %]</a></td></tr>
                                 <tr><td><a href='javascript:;' onclick='vlHandleQueueItemsAction("import_all")'>[% l('Import All  Records') %]</a></td></tr>
                                 <tr><td><a href='javascript:;' onclick='vlLoadErrorUIAll();'>[% l('View Import Items') %]</a></td></tr>
+                                <tr><td><a href='javascript:;' onclick='vlExportRecordQueue()'>[% l('Export Non-Imported Records') %]</a></td></tr>
                                 <tr><td><a href='javascript:;' onclick='
                                     if(confirm("[% l('Are you sure you want to delete this queue?') %]")) {
                                         vlDeleteQueue(currentType, currentQueueId, 
index 682bade..8361b02 100644 (file)
@@ -74,6 +74,7 @@ var authAttrsFetched = false;
 var attrDefMap = {}; // maps attr def code names to attr def ids
 var currentType;
 var currentQueueId = null;
+var currentQueueName = null;
 var userCache = {};
 var currentMatchedRecords; // set of loaded matched bib records
 var currentOverlayRecordsMap; // map of import record to overlay record
@@ -561,6 +562,34 @@ function exportHandler(type, response) {
     }
 }
 
+/* export all (non-imported) queue records */
+function vlExportRecordQueue() {
+    /* determine which method we're calling */
+    var method = 'open-ils.vandelay.bib_queue.export';
+    if(currentType == 'auth')
+        method = method.replace('bib', 'auth');
+
+    var params = [authtoken, currentQueueId];
+    fieldmapper.standardRequest(
+        ['open-ils.vandelay', method],
+        {   async: true,
+            params: params,
+            oncomplete : function(r) {marcExportHandler(r)}
+        }
+    );
+}
+
+function marcExportHandler(response) {
+    var content = openils.Util.readResponse(response);
+    openils.XUL.contentToFileSaveDialog(content, null, {
+        defaultString : currentQueueName + '_nonimported.xml',
+        defaultExtension : '.xml',
+        filterName : 'XML',
+        filterExtension : '*.xml',
+        filterAll : true
+    } );
+}
+
 function retrieveQueuedRecords(type, queueId, onload, doExport) {
     displayGlobalDiv('vl-generic-progress');
     queuedRecords = [];
@@ -1178,7 +1207,8 @@ var handleRetrieveRecords = function() {
     }
     vlFetchQueueSummary(currentQueueId, currentType, 
         function(summary) {
-            dojo.byId('vl-queue-summary-name').innerHTML = summary.queue.name();
+            currentQueueName = summary.queue.name();
+            dojo.byId('vl-queue-summary-name').innerHTML = currentQueueName;
             dojo.byId('vl-queue-summary-total-count').innerHTML = summary.total +'';
             dojo.byId('vl-queue-summary-import-count').innerHTML = summary.imported + '';
             dojo.byId('vl-queue-summary-import-item-count').innerHTML = summary.total_items + '';