1 $(document).ready(function() {
2 $.ajaxSetup ({ cache: false });
4 var barcodefield = $("#barcode");
6 // Handle the select all/none links for checkouts table columns
7 $("#CheckAllRenewals").on("click",function(){
8 $("#UncheckAllCheckins").click();
9 $(".renew:visible").attr("checked", "checked" );
12 $("#UncheckAllRenewals").on("click",function(){
13 $(".renew:visible").removeAttr("checked");
17 $("#CheckAllCheckins").on("click",function(){
18 $("#UncheckAllRenewals").click();
19 $(".checkin:visible").attr("checked", "checked" );
22 $("#UncheckAllCheckins").on("click",function(){
23 $(".checkin:visible").removeAttr("checked");
27 // Don't allow both return and renew checkboxes to be checked
28 $(document).on("change", '.renew', function(){
29 if ( $(this).is(":checked") ) {
30 $( "#checkin_" + $(this).val() ).removeAttr("checked");
33 $(document).on("change", '.checkin', function(){
34 if ( $(this).is(":checked") ) {
35 $( "#renew_" + $(this).val() ).removeAttr("checked");
39 // Clicking the table cell checks the checkbox inside it
40 $(document).on("click", 'td', function(e){
41 if(e.target.tagName.toLowerCase() == 'td'){
42 $(this).find("input:checkbox:visible").each( function() {
48 // Handle renewals and returns
49 $("#RenewCheckinChecked").on("click",function(){
50 $(".checkin:checked:visible").each(function() {
51 itemnumber = $(this).val();
53 $(this).replaceWith("<img id='checkin_" + itemnumber + "' src='" + interface + "/" + theme + "/img/loading-small.gif' />");
56 itemnumber: itemnumber,
57 borrowernumber: borrowernumber,
58 branchcode: branchcode,
59 exempt_fine: $("#exemptfine").is(':checked')
62 $.post( "/cgi-bin/koha/svc/checkin", params, function( data ) {
63 id = "#checkin_" + data.itemnumber;
66 if ( data.returned ) {
67 content = CIRCULATION_RETURNED;
69 content = CIRCULATION_NOT_RETURNED;
72 $(id).replaceWith( content );
76 $(".renew:checked:visible").each(function() {
77 var override_limit = $("#override_limit").is(':checked') ? 1 : 0;
79 var itemnumber = $(this).val();
81 $(this).parent().parent().replaceWith("<img id='renew_" + itemnumber + "' src='" + interface + "/" + theme + "/img/loading-small.gif' />");
84 itemnumber: itemnumber,
85 borrowernumber: borrowernumber,
86 branchcode: branchcode,
87 override_limit: override_limit,
88 date_due: $("#newduedate").val()
91 $.post( "/cgi-bin/koha/svc/renew", params, function( data ) {
92 var id = "#renew_" + data.itemnumber;
95 if ( data.renew_okay ) {
96 content = CIRCULATION_RENEWED_DUE + " " + data.date_due;
98 content = CIRCULATION_RENEW_FAILED + " ";
99 if ( data.error == "no_checkout" ) {
100 content += NOT_CHECKED_OUT;
101 } else if ( data.error == "too_many" ) {
102 content += TOO_MANY_RENEWALS;
103 } else if ( data.error == "on_reserve" ) {
104 content += ON_RESERVE;
105 } else if ( data.error ) {
106 content += data.error;
108 content += REASON_UNKNOWN;
112 $(id).replaceWith( content );
116 // Prevent form submit
120 $("#RenewAll").on("click",function(){
121 $("#CheckAllRenewals").click();
122 $("#UncheckAllCheckins").click();
123 $("#RenewCheckinChecked").click();
125 // Prevent form submit
129 var ymd = $.datepicker.formatDate('yy-mm-dd', new Date());
131 $('#issues-table').hide();
132 $('#issues-table-actions').hide();
133 $('#issues-table-load-immediately').change(function(){
134 if ( this.checked && typeof issuesTable === 'undefined') {
135 $('#issues-table-load-now-button').click();
137 barcodefield.focus();
139 $('#issues-table-load-now-button').click(function(){
141 barcodefield.focus();
145 if ( $.cookie("issues-table-load-immediately-" + script) == "true" ) {
147 $('#issues-table-load-immediately').prop('checked', true);
149 $('#issues-table-load-immediately').on( "change", function(){
150 $.cookie("issues-table-load-immediately-" + script, $(this).is(':checked'), { expires: 365 });
153 function LoadIssuesTable() {
154 $('#issues-table-loading-message').hide();
155 $('#issues-table').show();
156 $('#issues-table-actions').show();
158 issuesTable = $("#issues-table").dataTable({
160 "sEmptyTable" : MSG_DT_LOADING_RECORDS,
166 "mDataProp": function( oObj ) {
167 if ( oObj.issued_today ) {
168 return "1" + oObj.timestamp;
170 return "0" + oObj.date_due;
175 "mDataProp": function( oObj ) {
176 if ( oObj.issued_today ) {
177 return "<strong>" + TODAYS_CHECKOUTS + "</strong>";
179 return "<strong>" + PREVIOUS_CHECKOUTS + "</strong>";
184 "mDataProp": "date_due",
188 "iDataSort": 1, // Sort on hidden unformatted date due column
189 "mDataProp": function( oObj ) {
190 var due = oObj.date_due_formatted;
192 if ( oObj.date_due_overdue ) {
193 due = "<span class='overdue'>" + due + "</span>";
197 due += "<span class='lost'>" + oObj.lost + "</span>";
200 if ( oObj.damaged ) {
201 due += "<span class='dmg'>" + oObj.damaged + "</span>";
208 "mDataProp": function ( oObj ) {
209 title = "<span class='strong'><a href='/cgi-bin/koha/catalogue/detail.pl?biblionumber="
214 $.each(oObj.subtitle, function( index, value ) {
215 title += " " + value.subfield;
218 title += "</a></span>";
221 title += " " + BY.replace( "_AUTHOR_", " " + oObj.author );
224 if ( oObj.itemnotes ) {
226 if ( $.datepicker.formatDate('yy-mm-dd', new Date(oObj.issuedate) ) == ymd ) {
227 span_class = "circ-hlt";
229 title += " - <span class='" + span_class + "'>" + oObj.itemnotes + "</span>"
232 var onsite_checkout = '';
233 if ( oObj.onsite_checkout == 1 ) {
234 onsite_checkout += " <span class='onsite_checkout'>(" + INHOUSE_USE + ")</span>";
238 + "<a href='/cgi-bin/koha/catalogue/moredetail.pl?biblionumber="
252 { "mDataProp": "itemtype_description" },
253 { "mDataProp": "issuedate_formatted" },
254 { "mDataProp": "branchname" },
255 { "mDataProp": "itemcallnumber" },
257 "mDataProp": function ( oObj ) {
258 if ( ! oObj.charge ) oObj.charge = 0;
259 return parseFloat(oObj.charge).toFixed(2);
263 "mDataProp": function ( oObj ) {
264 if ( ! oObj.price ) oObj.price = 0;
265 return parseFloat(oObj.price).toFixed(2);
270 "mDataProp": function ( oObj ) {
276 content += "<span style='padding: 0 1em;'>" + oObj.renewals_count + "</span>";
278 if ( oObj.can_renew ) {
280 } else if ( oObj.can_renew_error == "on_reserve" ) {
281 content += "<span class='renewals-disabled'>"
282 + "<a href='/cgi-bin/koha/reserve/request.pl?biblionumber=" + oObj.biblionumber + "'>" + ON_HOLD + "</a>"
285 span_style = "display: none";
286 span_class = "renewals-allowed";
287 } else if ( oObj.can_renew_error == "too_many" ) {
288 content += "<span class='renewals-disabled'>"
292 span_style = "display: none";
293 span_class = "renewals-allowed";
294 } else if ( oObj.can_renew_error == "too_soon" ) {
295 content += "<span class='renewals-disabled'>"
296 + NOT_RENEWABLE_TOO_SOON.format( oObj.can_renew_date )
299 span_style = "display: none";
300 span_class = "renewals-allowed";
301 } else if ( oObj.can_renew_error == "auto_too_soon" ) {
302 content += "<span class='renewals-disabled'>"
303 + NOT_RENEWABLE_AUTO_TOO_SOON
306 span_style = "display: none";
307 span_class = "renewals-allowed";
308 } else if ( oObj.can_renew_error == "auto_renew" ) {
309 content += "<span class='renewals-disabled'>"
310 + NOT_RENEWABLE_AUTO_RENEW
313 span_style = "display: none";
314 span_class = "renewals-allowed";
316 content += "<span class='renewals-disabled'>"
317 + oObj.can_renew_error
320 span_style = "display: none";
321 span_class = "renewals-allowed";
324 if ( oObj.renewals_remaining && oObj.onsite_checkout == 0 ) {
325 content += "<span class='" + span_class + "' style='" + span_style + "'>"
326 + "<input type='checkbox' ";
327 if ( oObj.date_due_overdue ) {
328 content += "checked='checked' ";
330 content += "class='renew' id='renew_" + oObj.itemnumber + "' name='renew' value='" + oObj.itemnumber +"'/>"
333 content += "<span class='renewals'>("
334 + RENEWALS_REMAINING.format( oObj.renewals_remaining, oObj.renewals_allowed )
338 content += "</span>";
345 "mDataProp": function ( oObj ) {
346 if ( oObj.can_renew_error == "on_reserve" ) {
347 return "<a href='/cgi-bin/koha/reserve/request.pl?biblionumber=" + oObj.biblionumber + "'>" + ON_HOLD + "</a>";
349 return "<input type='checkbox' class='checkin' id='checkin_" + oObj.itemnumber + "' name='checkin' value='" + oObj.itemnumber +"'></input>";
354 "bVisible": exports_enabled ? true : false,
356 "mDataProp": function ( oObj ) {
357 return "<input type='checkbox' class='export' id='export_" + oObj.biblionumber + "' name='biblionumbers' value='" + oObj.biblionumber + "' />";
361 "fnFooterCallback": function ( nRow, aaData, iStart, iEnd, aiDisplay ) {
362 var total_charge = 0;
364 for ( var i=0; i < aaData.length; i++ ) {
365 total_charge += aaData[i]['charge'] * 1;
366 total_price += aaData[i]['price'] * 1;
368 var nCells = nRow.getElementsByTagName('td');
369 nCells[1].innerHTML = total_charge.toFixed(2);
370 nCells[2].innerHTML = total_price.toFixed(2);
374 "bServerSide": false,
375 "sAjaxSource": '/cgi-bin/koha/svc/checkouts',
376 "fnServerData": function ( sSource, aoData, fnCallback ) {
377 aoData.push( { "name": "borrowernumber", "value": borrowernumber } );
379 $.getJSON( sSource, aoData, function (json) {
383 "fnInitComplete": function(oSettings) {
384 // Disable rowGrouping plugin after first use
385 // so any sorting on the table doesn't use it
386 var oSettings = issuesTable.fnSettings();
388 for (f = 0; f < oSettings.aoDrawCallback.length; f++) {
389 if (oSettings.aoDrawCallback[f].sName == 'fnRowGrouping') {
390 oSettings.aoDrawCallback.splice(f, 1);
395 oSettings.aaSortingFixed = null;
399 iGroupingColumnIndex: 1,
400 iGroupingOrderByColumnIndex: 0,
401 sGroupingColumnSortDirection: "desc"
405 if ( $("#issues-table").length ) {
406 $("#issues-table_processing").position({
407 of: $( "#issues-table" ),
413 // Don't load relatives' issues table unless it is clicked on
414 var relativesIssuesTable;
415 $("#relatives-issues-tab").click( function() {
416 if ( ! relativesIssuesTable ) {
417 relativesIssuesTable = $("#relatives-issues-table").dataTable({
423 "mDataProp": "date_due",
427 "iDataSort": 1, // Sort on hidden unformatted date due column
428 "mDataProp": function( oObj ) {
429 var today = new Date();
430 var due = new Date( oObj.date_due );
432 return "<span class='overdue'>" + oObj.date_due_formatted + "</span>";
434 return oObj.date_due_formatted;
439 "mDataProp": function ( oObj ) {
440 title = "<span class='strong'><a href='/cgi-bin/koha/catalogue/detail.pl?biblionumber="
445 $.each(oObj.subtitle, function( index, value ) {
446 title += " " + value.subfield;
449 title += "</a></span>";
452 title += " " + BY + " " + oObj.author;
455 if ( oObj.itemnotes ) {
457 if ( $.datepicker.formatDate('yy-mm-dd', new Date(oObj.issuedate) ) == ymd ) {
458 span_class = "circ-hlt";
460 title += " - <span class='" + span_class + "'>" + oObj.itemnotes + "</span>"
463 var onsite_checkout = '';
464 if ( oObj.onsite_checkout == 1 ) {
465 onsite_checkout += " <span class='onsite_checkout'>(" + INHOUSE_USE + ")</span>";
469 + "<a href='/cgi-bin/koha/catalogue/moredetail.pl?biblionumber="
483 { "mDataProp": "itemtype" },
484 { "mDataProp": "issuedate_formatted" },
485 { "mDataProp": "branchname" },
486 { "mDataProp": "itemcallnumber" },
488 "mDataProp": function ( oObj ) {
489 if ( ! oObj.charge ) oObj.charge = 0;
490 return parseFloat(oObj.charge).toFixed(2);
494 "mDataProp": function ( oObj ) {
495 if ( ! oObj.price ) oObj.price = 0;
496 return parseFloat(oObj.price).toFixed(2);
500 "mDataProp": function( oObj ) {
501 return "<a href='/cgi-bin/koha/members/moremember.pl?borrowernumber=" + oObj.borrowernumber + "'>"
502 + oObj.borrower.firstname + " " + oObj.borrower.surname + " (" + oObj.borrower.cardnumber + ")</a>"
508 "bServerSide": false,
509 "sAjaxSource": '/cgi-bin/koha/svc/checkouts',
510 "fnServerData": function ( sSource, aoData, fnCallback ) {
511 $.each(relatives_borrowernumbers, function( index, value ) {
512 aoData.push( { "name": "borrowernumber", "value": value } );
515 $.getJSON( sSource, aoData, function (json) {
523 if ( $("#relatives-issues-table").length ) {
524 $("#relatives-issues-table_processing").position({
525 of: $( "#relatives-issues-table" ),
530 if ( AllowRenewalLimitOverride ) {
531 $( '#override_limit' ).click( function () {
532 if ( this.checked ) {
533 $( '.renewals-allowed' ).show(); $( '.renewals-disabled' ).hide();
535 $( '.renewals-allowed' ).hide(); $( '.renewals-disabled' ).show();
537 } ).attr( 'checked', false );