Bug 15119: Hide search header text boxes on render
[koha.git] / koha-tmpl / intranet-tmpl / prog / en / js / holds.js
index 76dfee5..c009ba7 100644 (file)
@@ -1,17 +1,25 @@
 $(document).ready(function() {
-    // Don't load holds table unless it is clicked on
     var holdsTable;
-    $("#holds-tab").click( function() {
+
+    // Don't load holds table unless it is clicked on
+    $("#holds-tab").on( "click", function(){ load_holds_table() } );
+
+    // If the holds tab is preselected on load, we need to load the table
+    if ( $("#holds-tab").parent().hasClass('ui-state-active') ) { load_holds_table() }
+
+    function load_holds_table() {
+        var holds = new Array();
         if ( ! holdsTable ) {
             holdsTable = $("#holds-table").dataTable({
-                "sDom": "<'row-fluid'<'span6'><'span6'>r>t<'row-fluid'>t",
-                "aoColumns": [
+                "bAutoWidth": false,
+                "sDom": "rt",
+                "columns": [
                     {
                         "mDataProp": "reservedate_formatted"
                     },
                     {
                         "mDataProp": function ( oObj ) {
-                            title = "<a href='/cgi-bin/koha/catalogue/detail.pl?biblionumber="
+                            title = "<a href='/cgi-bin/koha/reserve/request.pl?biblionumber="
                                   + oObj.biblionumber
                                   + "'>"
                                   + oObj.title;
@@ -23,7 +31,7 @@ $(document).ready(function() {
                             title += "</a>";
 
                             if ( oObj.author ) {
-                                title += " " + BY + " " + oObj.author;
+                                title += " " + BY.replace( "_AUTHOR_",  oObj.author );
                             }
 
                             if ( oObj.itemnotes ) {
@@ -34,17 +42,6 @@ $(document).ready(function() {
                                 title += " - <span class='" + span_class + "'>" + oObj.itemnotes + "</span>"
                             }
 
-                            title += " "
-                                  + "<a href='/cgi-bin/koha/catalogue/moredetail.pl?biblionumber="
-                                  + oObj.biblionumber
-                                  + "&itemnumber="
-                                  + oObj.itemnumber
-                                  + "#"
-                                  + oObj.itemnumber
-                                  + "'>"
-                                  + oObj.barcode
-                                  + "</a>";
-
                             return title;
                         }
                     },
@@ -58,9 +55,9 @@ $(document).ready(function() {
                             var data = "";
 
                             if ( oObj.suspend == 1 ) {
-                                data += "<p>" + HOLD_IS + " <strong> " + SUSPENDED + " </strong>";
+                                data += "<p>" + HOLD_IS_SUSPENDED;
                                 if ( oObj.suspend_until ) {
-                                    data += " " + UNTIL + " " + oObj.suspend_until_formatted;
+                                    data += " " + UNTIL.format( oObj.suspend_until_formatted );
                                 }
                                 data += "</p>";
                             }
@@ -68,24 +65,40 @@ $(document).ready(function() {
                             if ( oObj.barcode ) {
                                 data += "<em>";
                                 if ( oObj.found == "W" ) {
-                                    data += ITEM_IS + " <strong> " + WAITING + " </strong>";
 
-                                    if ( ! oObj.waiting_here ) {
-                                        data += " " + AT + " " + oObj.waiting_at;
+                                    if ( oObj.waiting_here ) {
+                                        data += ITEM_IS_WAITING_HERE;
+                                    } else {
+                                        data += ITEM_IS_WAITING;
+                                        data += " " + AT.format( oObj.waiting_at );
                                     }
+
                                 } else if ( oObj.transferred ) {
-                                    data += ITEM_IS + " <strong> " + IN_TRANSIT + " </strong> " + FROM + oObj.from_branch;
+                                    data += ITEM_IS_IN_TRANSIT.format( oObj.from_branch, oObj.date_sent );
                                 } else if ( oObj.not_transferred ) {
-                                    data += NOT_TRANSFERRED_YET + " " + oObj.not_transferred_by;
-                                }                                 data += "</em>";
+                                    data += NOT_TRANSFERRED_YET.format( oObj.not_transferred_by );
+                                }
+                                data += "</em>";
 
                                 data += " <a href='/cgi-bin/koha/catalogue/detail.pl?biblionumber="
-                                     + oObj.biblionumber + "'>" + oObj.barcode + "</a>";
+                                  + oObj.biblionumber
+                                  + "&itemnumber="
+                                  + oObj.itemnumber
+                                  + "#"
+                                  + oObj.itemnumber
+                                  + "'>"
+                                  + oObj.barcode
+                                  + "</a>";
                             }
 
                             return data;
                         }
                     },
+                    {
+                        "mDataProp": function( oObj ) {
+                            return oObj.branchcode || "";
+                        }
+                    },
                     { "mDataProp": "expirationdate_formatted" },
                     {
                         "mDataProp": function( oObj ) {
@@ -97,6 +110,7 @@ $(document).ready(function() {
                         }
                     },
                     {
+                        "bSortable": false,
                         "mDataProp": function( oObj ) {
                             return "<select name='rank-request'>"
                                  + "<option value='n'>" + NO + "</option>"
@@ -106,21 +120,60 @@ $(document).ready(function() {
                                  + "<input type='hidden' name='borrowernumber' value='" + borrowernumber + "'>"
                                  + "<input type='hidden' name='reserve_id' value='" + oObj.reserve_id + "'>";
                         }
+                    },
+                    {
+                        "bSortable": false,
+                        "mDataProp": function( oObj ) {
+                            holds[oObj.reserve_id] = oObj; //Store holds for later use
+
+                            if ( oObj.found ) {
+                                return "";
+                            } else if ( oObj.suspend == 1 ) {
+                                return "<a class='hold-resume btn btn-link' id='resume" + oObj.reserve_id + "' style='display: inline; white-space: nowrap;'>"
+                                     + "<i class='icon-play'></i> " + RESUME + "</a>";
+                            } else {
+                                return "<a class='hold-suspend btn btn-link' id='suspend" + oObj.reserve_id + "' style='display: inline; white-space: nowrap;'>"
+                                     + "<i class='icon-pause'></i> " + SUSPEND + "</a>";
+                            }
+                        }
                     }
                 ],
                 "bPaginate": false,
                 "bProcessing": true,
-                "bServerSide": true,
-                "sAjaxSource": '/cgi-bin/koha/svc/holds.pl',
-                "fnServerData": function ( sSource, aoData, fnCallback ) {
-                    aoData.push( { "name": "borrowernumber", "value": borrowernumber } );
-
-                    $.getJSON( sSource, aoData, function (json) {
-                        fnCallback(json)
-                    } );
+                "bServerSide": false,
+                "ajax": {
+                    "url": '/cgi-bin/koha/svc/holds',
+                    "data": function ( d ) {
+                        d.borrowernumber = borrowernumber;
+                    }
                 },
             });
 
+            $('#holds-table').on( 'draw.dt', function () {
+                $(".hold-suspend").on( "click", function() {
+                    var id = $(this).attr("id").replace("suspend", "");
+                    var hold = holds[id];
+                    $("#suspend-modal-title").html( hold.title );
+                    $("#suspend-modal-reserve_id").val( hold.reserve_id );
+                    $('#suspend-modal').modal('show');
+                });
+
+                $(".hold-resume").on( "click", function() {
+                    var id = $(this).attr("id").replace("resume", "");
+                    var hold = holds[id];
+                    $.post('/cgi-bin/koha/svc/hold/resume', { "reserve_id": hold.reserve_id }, function( data ){
+                      if ( data.success ) {
+                          holdsTable.api().ajax.reload();
+                      } else {
+                        if ( data.error == "HOLD_NOT_FOUND" ) {
+                            alert ( RESUME_HOLD_ERROR_NOT_FOUND );
+                            holdsTable.api().ajax.reload();
+                        }
+                      }
+                    });
+                });
+            });
+
             if ( $("#holds-table").length ) {
                 $("#holds-table_processing").position({
                     of: $( "#holds-table" ),
@@ -128,6 +181,53 @@ $(document).ready(function() {
                 });
             }
         }
+    }
+
+    $("body").append("\
+        <div id='suspend-modal' class='modal hide fade' tabindex='-1' role='dialog' aria-hidden='true'>\
+            <form id='suspend-modal-form' class='form-inline'>\
+                <div class='modal-header'>\
+                    <button type='button' class='closebtn' data-dismiss='modal' aria-hidden='true'>×</button>\
+                    <h3 id='suspend-modal-label'>" + SUSPEND_HOLD_ON + " <i><span id='suspend-modal-title'></span></i></h3>\
+                </div>\
+\
+                <div class='modal-body'>\
+                    <input type='hidden' id='suspend-modal-reserve_id' name='reserve_id' />\
+\
+                    <label for='suspend-modal-until'>Suspend until:</label>\
+                    <input name='suspend_until' id='suspend-modal-until' class='suspend-until' size='10' />\
+\
+                    <p/><a class='btn btn-link' id='suspend-modal-clear-date' >" + CLEAR_DATE_TO_SUSPEND_INDEFINITELY + "</a></p>\
+\
+                </div>\
+\
+                <div class='modal-footer'>\
+                    <button id='suspend-modal-submit' class='btn btn-primary' type='submit' name='submit'>" + SUSPEND + "</button>\
+                    <a href='#' data-dismiss='modal' aria-hidden='true' class='cancel'>" + CANCEL + "</a>\
+                </div>\
+            </form>\
+        </div>\
+    ");
+
+    $("#suspend-modal-until").datepicker({ minDate: 1 }); // Require that "until date" be in the future
+    $("#suspend-modal-clear-date").on( "click", function() { $("#suspend-modal-until").val(""); } );
+
+    $("#suspend-modal-submit").on( "click", function( e ) {
+        e.preventDefault();
+        $.post('/cgi-bin/koha/svc/hold/suspend', $('#suspend-modal-form').serialize(), function( data ){
+          $('#suspend-modal').modal('hide');
+          if ( data.success ) {
+              holdsTable.api().ajax.reload();
+          } else {
+            if ( data.error == "INVALID_DATE" ) {
+                alert( SUSPEND_HOLD_ERROR_DATE );
+            }
+            else if ( data.error == "HOLD_NOT_FOUND" ) {
+                alert ( SUSPEND_HOLD_ERROR_NOT_FOUND );
+                holdsTable.api().ajax.reload();
+            }
+          }
+        });
     });
 
 });