Add "Move to storage" quick UI for bulk location moves
authorDan Scott <dan@coffeecode.net>
Mon, 30 May 2011 19:23:09 +0000 (15:23 -0400)
committerDan Scott <dscott@laurentian.ca>
Mon, 1 Oct 2012 17:54:00 +0000 (13:54 -0400)
This simplistic interface accepts a barcode and immediately returns
some bibliographic information if the barcode was found - and the
item is moved immediately to the specified location. Goal was to
minimize clicking, this pretty much requires just scan scan scan.

Signed-off-by: Dan Scott <dscott@laurentian.ca>
Open-ILS/web/js/ui/default/cat/storage/move.js [new file with mode: 0644]
Open-ILS/web/templates/default/cat/storage/move.tt2 [new file with mode: 0644]

diff --git a/Open-ILS/web/js/ui/default/cat/storage/move.js b/Open-ILS/web/js/ui/default/cat/storage/move.js
new file mode 100644 (file)
index 0000000..0b0681c
--- /dev/null
@@ -0,0 +1,87 @@
+dojo.require('fieldmapper.IDL');
+dojo.require('openils.PermaCrud');
+dojo.require('dojo.date');
+dojo.require('openils.CGI');
+dojo.require('openils.XUL');
+
+var pcrud;
+var pcrudRead;
+var staff;
+var copy;
+var volume;
+var record;
+var rmsr;
+var tbody;
+var cgi;
+
+if(!window.xulG) var xulG = null;
+
+function load() {
+    staff = new openils.User().user;
+    pcrud = new openils.PermaCrud();
+    pcrudRead = new openils.PermaCrud();
+    cgi = new openils.CGI();
+    var barcode = cgi.param('barcode');
+
+    if(xulG) {
+        if(xulG.ses) openils.User.authtoken = xulG.ses;
+        if(xulG.usr !== null) userId = xulG.usr
+        if(xulG.params) {
+            var parms = xulG.params;
+            if(parms.ses)
+                openils.User.authtoken = parms.ses;
+            if(parms.usr !== null)
+                userId = parms.usr
+        }
+    }
+
+    dojo.byId("barcode").focus();
+    moveCopy(barcode);
+}
+
+function moveCopy(barcode) {
+    if (!barcode) {
+        // Just display the barcode entry form
+        return;
+    }
+
+    copy = pcrud.search('acp', {"barcode":barcode});
+    // There can be only one copy
+    copy = copy[0];
+    if (!copy.location) {
+       dojo.place('<div class="alert">Barcode [' + barcode + '] was not found!</div>', 'resultsDiv', 'only');
+       return;
+    }
+
+    copy.location(152);
+    copy.ischanged(1);
+    pcrud.update(copy);
+
+    volume = pcrudRead.retrieve("acn", copy.call_number());
+    record = pcrudRead.retrieve("bre", volume.record());
+
+    dojo.place("<div class='barcode'>" + copy.barcode() + "</div>", 'resultsDiv', 'only');
+    dojo.place("<div class='call_number'>" + volume.label() + "</div>", 'resultsDiv', 'last');
+    dojo.place("<div style='display:none'>" + record.marc() + "</div>", dojo.body(), 'last');
+
+    // Totally dumb title display. Oh well!
+    dojo.place("<div class='title' id='titleDiv'></div>", 'resultsDiv', 'last');
+    dojo.query("datafield[tag='245'] subfield").forEach(function(node, index, arr) {
+        dojo.place("<span class='title'>" + node.innerHTML + " </span>", 'titleDiv', 'last');
+    });
+}
+
+function moveCopyRefresh() {
+    var usr = cgi.param('barcode');
+    var href = location.href.replace(/\?.*/, '');
+    href += ((usr) ? '?barcode=' + barcode : '');
+    location.href = href;
+}
+
+function moveCopyRefreshXUL(newuser) {
+    if (window.xulG && typeof window.xulG.on_save == 'function')
+        window.xulG.on_save(newuser);
+}
+
+openils.Util.addOnLoad(load);
+                                                                                                                                                               1,1           Top
diff --git a/Open-ILS/web/templates/default/cat/storage/move.tt2 b/Open-ILS/web/templates/default/cat/storage/move.tt2
new file mode 100644 (file)
index 0000000..cfd17d2
--- /dev/null
@@ -0,0 +1,27 @@
+[% ctx.page_title = 'Move item to storage' %]
+[% WRAPPER base.tt2 %]
+<script src='[% ctx.media_prefix %]/js/ui/default/cat/storage/move.js'> </script>
+
+<style>
+    label { margin-left: 2em; }
+    .dijitTextBoxFocused, .dijitFocused { border:1px dashed #3e3e3e; color: #303030; font-weight:bold;}
+    .alert { color: red; font-weight: bold; }
+    #resultsDiv { font-size: larger; margin-top: 3em; margin-left: 2em; }
+    h1 { margin-left: 1em; font-weight: bold; }
+    #barcodeForm { margin-top: 2em; }
+
+</style>
+
+<h1>Move item to storage</h1>
+<form method="get" action="/eg/cat/storage/move" id="barcodeForm">
+     <table style="margin-top: 2em;">
+      <tr>
+        <td><label for="barcode" style="font-size: larger;">Barcode</label></td>
+        <td><input type="text" id="barcode" name="barcode" dojoType="dijit.form.TextBox" style="margin-left: 1em;"/></td>
+      </tr>
+     </table>
+</form>
+
+<div id="resultsDiv"></div>
+
+[% END %]