LP#1772680: Fixed multiple issues and add the ability to return an e-item
authorJaswinder Singh <Jaswinder.Singh0011@gmail.com>
Mon, 23 Jul 2018 16:06:19 +0000 (12:06 -0400)
committerChris Sharp <csharp@georgialibraries.org>
Wed, 19 Dec 2018 19:03:45 +0000 (14:03 -0500)
Signed-off-by: Jaswinder Singh <jaswinder.singh0011@gmail.com>
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
Open-ILS/src/perlmods/lib/OpenILS/Application/EbookAPI/RBDigital.pm
Open-ILS/src/templates/opac/ebook_api/rbdigital/parts/record/summary.tt2
Open-ILS/src/templates/opac/ebook_api/rbdigital/parts/result/table.tt2
Open-ILS/src/templates/opac/parts/ebook_api/base_js.tt2
Open-ILS/web/js/ui/default/opac/ebook_api/ebook.js
Open-ILS/web/js/ui/default/opac/ebook_api/loggedin.js [changed mode: 0644->0755]
Open-ILS/web/js/ui/default/opac/ebook_api/rbdigital.js

index 5f40946..789db8c 100755 (executable)
@@ -733,10 +733,10 @@ sub checkin {
     my $res = $self->request($req, $session_id);
     if (defined ($res)) {
         if ($res->{is_success}) {
-            return $res;
+            return $res->{content};
         } else {
             $logger->error("EbookAPI: checkin failed for RBDigital title $isbn");
-            return { error_msg => $res->{content} };
+            return { message => 'failed', error_msg => $res->{content} };
         }
     } else {
         $logger->error("EbookAPI: no response received from RBDigital server");
index 584419b..6e82f7f 100755 (executable)
@@ -56,7 +56,7 @@
                         rel="nofollow" vocab="" 
                         data-isbn="[% ebook_item.isbn %]">
                     <img src="[% ctx.media_prefix %]/images/minus_sign.png[% ctx.cache_key %]" alt="" />&nbsp;[% l("Download") %]</a>
-
+                    <a data-isbn="[% ebook_item.isbn %]" class="lnk_ebook_checkin" href="#" ><span class="glyphicon glyphicon-circle-arrow-up"></span> [% l("Return") %]</a>
                 [% ELSE; %]
                     <a id="[%- ebook_item.isbn -%]_ebook_checkout" 
                         href=""
index 2a6fd47..19aa9e9 100755 (executable)
@@ -379,8 +379,8 @@ END;
                                                                         class="no-dec ebook_checkout_download_link" 
                                                                         rel="nofollow" vocab="" 
                                                                         data-isbn="[% ebook_item.isbn %]">
-                                                                    <img src="[% ctx.media_prefix %]/images/minus_sign.png[% ctx.cache_key %]" alt="" />&nbsp;[% l("Download") %]</a>
-
+                                                                        <img src="[% ctx.media_prefix %]/images/minus_sign.png[% ctx.cache_key %]" alt="" />&nbsp;[% l("Download") %]</a>
+                                                                    &nbsp;<a data-isbn="[% ebook_item.isbn %]" class="lnk_ebook_checkin" href="#" ><span class="glyphicon glyphicon-circle-arrow-up"></span> [% l("Return") %]</a>
                                                                 [% ELSE; %]
                                                                     <a href="[% mkurl(ctx.opac_root _ '/myopac/ebook_checkout',
                                                                         {title => args.ebook.ebook_id, vendor => args.ebook.vendor, action => 'checkout'},
index caf083e..6247bc0 100755 (executable)
@@ -10,6 +10,7 @@ progress_icon = '<img id="ebook_avail_spinner" src="/opac/images/progressbar_gre
 // translatable strings as JS variables
 var l_strings = {};
 l_strings.download = '[% l('Download') %]';
+l_strings.return = '[% l('Return') %]';
 l_strings.ready_for_checkout = '[% l('Ready for Checkout') %]';
 l_strings.suspended = '[% l('Suspended') %]';
 l_strings.checkout = '[% l('Checkout') %]';
@@ -89,7 +90,7 @@ dojo.addOnLoad(function() {
 
 [%- IF ctx.user %]
 <script type="text/javascript" src="[% ctx.media_prefix %]/js/ui/default/opac/ebook_api/relation.js[% ctx.cache_key %]"></script>
-<script type="text/javascript" src="[% ctx.media_prefix %]/js/ui/default/opac/ebook_api/loggedin.js[% ctx.cache_key %]"></script>
+<script type="text/javascript" src="[% ctx.media_prefix %]/js/ui/default/opac/ebook_api/loggedin.js?v=[% date.format; %]"></script>
 <script type="text/javascript" src="[% ctx.media_prefix %]/js/ui/default/common/build/js/jquery.min.js[% ctx.cache_key %]"></script>
 <script type="text/javascript" src="[% ctx.media_prefix %]/js/ui/default/staff/build/js/bootstrap.min.js[% ctx.cache_key %]"></script>
 <script type="text/javascript" src="[% ctx.media_prefix %]/js/ui/default/staff/build/js/pnotify.custom.min.js?v=[% date.format; %]"></script>
index 1bcec2d..f13a173 100755 (executable)
@@ -70,6 +70,7 @@ Ebook.prototype.getHoldings = function(callback) {
     }).send();
 }
 
+//Checkout and E-item
 Ebook.prototype.checkout = function(authtoken, patron_id, callback) {
     var ebook = this;
     //Reload new session (if any)
@@ -98,6 +99,32 @@ Ebook.prototype.checkout = function(authtoken, patron_id, callback) {
     });
 }
 
+//Checkin / Return an E-item
+Ebook.prototype.checkin = function(authtoken, patron_id, callback) {
+    var ebook = this;
+    //Reload new session (if any)
+    checkSession(this.vendor, function(vendor_cookie_name) {
+        var ses = ebook.ses || dojo.cookie(vendor_cookie_name);
+
+        var checkout_format = "";
+
+        // perform checkout
+        new OpenSRF.ClientSession('open-ils.ebook_api').request({
+            method: 'open-ils.ebook_api.checkin',
+            params: [ authtoken, ses, ebook.id, patron_id, checkout_format ],
+            async: true,
+            oncomplete: function(r) {
+                var resp = r.recv();
+                if (resp) {
+                    console.log('checkout response: ' + resp.content());
+                    return callback(resp.content());
+                }
+            }
+        }).send();
+    });
+}
+
+//Place hold on an ebook
 Ebook.prototype.placeHold = function(authtoken, patron_id, callback) {
     var ebook = this;
 
old mode 100644 (file)
new mode 100755 (executable)
index abc46e5..216f0b3
@@ -125,9 +125,14 @@ function updateCheckoutView() {
             dojo.create("td", { innerHTML: x.author }, tr);
             dojo.create("td", { innerHTML: x.due_date }, tr);
             var dl_td = dojo.create("td", null, tr);
+            var actions_html = "";
             if (x.download_url) {
-                dl_td.innerHTML = '<a href="' + x.download_url + '">' + l_strings.download + '</a>';
+                actions_html = '<a class="btn btn-default " href="' + x.download_url + '">' + l_strings.download + '</a>';
             }
+            actions_html += ' <a data-isbn="'+x.title_id + '" class="btn btn-default lnk_ebook_checkin" href="#" >'+l_strings.return+'</a>';
+
+            dl_td.innerHTML = actions_html;
+
             if (x.formats) {
                 var select = dojo.create("select", { id: "download-format" }, dl_td);
                 for (f in x.formats) {
index 71a66f9..0364bb9 100755 (executable)
@@ -199,6 +199,15 @@ function setupEventHandlers() {
         ebook_rbdigital.cancelHold(authtoken, rbdigitalPatronId, cancelHoldCallback);
     });
 
+    //Return an e-item
+    $(document).on('click','.lnk_ebook_checkin', function () {
+        var isbn = $(this).data('isbn');
+        ebook_rbdigital.id = isbn;
+        showEbookSpinner($(this), true);
+        ebook_rbdigital.checkin(authtoken, rbdigitalPatronId, checkinCallback);
+    });
+
+    //Download an ebook/eaudio
     $(document).on('click','#ebook_circs_main_table_body a', function () {
         var that = $(this);
         var api_url = that.attr('href');
@@ -294,6 +303,7 @@ function cancelHoldCallback(responseContents, isbn) {
     hideEbookSpinner();
 }
 
+//Checkout
 function checkoutAddCallback(responseContents) {
     if (responseContents.message == "success") {
         showNotification('Success','Succesfully checked out item!','success');
@@ -304,6 +314,19 @@ function checkoutAddCallback(responseContents) {
     } else {
         showNotification('Unknown Error','Unable to checkout the item. Please try it again!','error');
         console.log(responseContents.message);
+        hideEbookSpinner();
+    }
+}
+
+//Checkin/Return
+function checkinCallback(responseContents) {
+    if (responseContents.message == "success") {
+        showNotification('Success','Succesfully returned the item!','success');
+        location.reload();
+    } else {
+        showNotification('Unknown Error','Unable to return the item. Please try it again!','error');
+        console.log(responseContents.message);
+        hideEbookSpinner();
     }
 }