Koha/koha-tmpl/intranet-tmpl/prog/en/js/checkouts.js
Kyle M Hall 8848e72d78 Bug 13020 - Checkouts table default ordering is incorrect
The checkouts table is no longer keeping "today's checkouts" in the
order they were scanned.

Test Plan:
1) Create 3 records "Test 1", "Test 2" and "Test 3" each with one item
2) Check out the items to a patron in the order "Test 2", "Test 1", "Test 3".
3) Note the order is incorrect.
4) Apply this patch
5) Refresh the page
6) Note the order is now correct

Signed-off-by: Owen Leonard <oleonard@myacpl.org>
Signed-off-by: Jonathan Druart <jonathan.druart@biblibre.com>
Note that the bug already exists before bug 12550. I checked on a 3.14.x
branch (without the ajax circ stuff), and the order is the same as with
this patch.

Signed-off-by: Tomas Cohen Arazi <tomascohen@gmail.com>
2014-10-19 11:30:58 -03:00

510 lines
21 KiB
JavaScript

$(document).ready(function() {
$.ajaxSetup ({ cache: false });
// Handle the select all/none links for checkouts table columns
$("#CheckAllRenewals").on("click",function(){
$("#UncheckAllCheckins").click();
$(".renew:visible").attr("checked", "checked" );
return false;
});
$("#UncheckAllRenewals").on("click",function(){
$(".renew:visible").removeAttr("checked");
return false;
});
$("#CheckAllCheckins").on("click",function(){
$("#UncheckAllRenewals").click();
$(".checkin:visible").attr("checked", "checked" );
return false;
});
$("#UncheckAllCheckins").on("click",function(){
$(".checkin:visible").removeAttr("checked");
return false;
});
// Don't allow both return and renew checkboxes to be checked
$(document).on("change", '.renew', function(){
if ( $(this).is(":checked") ) {
$( "#checkin_" + $(this).val() ).removeAttr("checked");
}
});
$(document).on("change", '.checkin', function(){
if ( $(this).is(":checked") ) {
$( "#renew_" + $(this).val() ).removeAttr("checked");
}
});
// Clicking the table cell checks the checkbox inside it
$(document).on("click", 'td', function(e){
if(e.target.tagName.toLowerCase() == 'td'){
$(this).find("input:checkbox:visible").each( function() {
$(this).click();
});
}
});
// Handle renewals and returns
$("#RenewCheckinChecked").on("click",function(){
$(".checkin:checked:visible").each(function() {
itemnumber = $(this).val();
$(this).replaceWith("<img id='checkin_" + itemnumber + "' src='" + interface + "/" + theme + "/img/loading-small.gif' />");
params = {
itemnumber: itemnumber,
borrowernumber: borrowernumber,
branchcode: branchcode,
exempt_fine: $("#exemptfine").is(':checked')
};
$.post( "/cgi-bin/koha/svc/checkin", params, function( data ) {
id = "#checkin_" + data.itemnumber;
content = "";
if ( data.returned ) {
content = CIRCULATION_RETURNED;
} else {
content = CIRCULATION_NOT_RETURNED;
}
$(id).replaceWith( content );
}, "json")
});
$(".renew:checked:visible").each(function() {
var override_limit = $("#override_limit").is(':checked') ? 1 : 0;
var itemnumber = $(this).val();
$(this).parent().parent().replaceWith("<img id='renew_" + itemnumber + "' src='" + interface + "/" + theme + "/img/loading-small.gif' />");
var params = {
itemnumber: itemnumber,
borrowernumber: borrowernumber,
branchcode: branchcode,
override_limit: override_limit,
date_due: $("#newduedate").val()
};
$.post( "/cgi-bin/koha/svc/renew", params, function( data ) {
var id = "#renew_" + data.itemnumber;
var content = "";
if ( data.renew_okay ) {
content = CIRCULATION_RENEWED_DUE + " " + data.date_due;
} else {
content = CIRCULATION_RENEW_FAILED + " ";
if ( data.error == "no_checkout" ) {
content += NOT_CHECKED_OUT;
} else if ( data.error == "too_many" ) {
content += TOO_MANY_RENEWALS;
} else if ( data.error == "on_reserve" ) {
content += ON_RESERVE;
} else if ( data.error ) {
content += data.error;
} else {
content += REASON_UNKNOWN;
}
}
$(id).replaceWith( content );
}, "json")
});
// Prevent form submit
return false;
});
$("#RenewAll").on("click",function(){
$("#CheckAllRenewals").click();
$("#UncheckAllCheckins").click();
$("#RenewCheckinChecked").click();
// Prevent form submit
return false;
});
var ymd = $.datepicker.formatDate('yy-mm-dd', new Date());
$('#issues-table').hide();
$('#issues-table-actions').hide();
$('#issues-table-load-immediately').change(function(){
if ( this.checked && typeof issuesTable === 'undefined') {
$('#issues-table-load-now-button').click();
}
});
$('#issues-table-load-now-button').click(function(){
LoadIssuesTable();
return false;
});
if ( $.cookie("issues-table-load-immediately-" + script) == "true" ) {
LoadIssuesTable();
$('#issues-table-load-immediately').prop('checked', true);
}
$('#issues-table-load-immediately').on( "change", function(){
$.cookie("issues-table-load-immediately-" + script, $(this).is(':checked'));
});
function LoadIssuesTable() {
$('#issues-table-loading-message').hide();
$('#issues-table').show();
$('#issues-table-actions').show();
issuesTable = $("#issues-table").dataTable({
"oLanguage": {
"sEmptyTable" : MSG_DT_LOADING_RECORDS,
},
"bAutoWidth": false,
"sDom": "<'row-fluid'<'span6'><'span6'>r>t<'row-fluid'>t",
"aoColumns": [
{
"mDataProp": function( oObj ) {
if ( oObj.issued_today ) {
return "1" + oObj.timestamp;
} else {
return "0" + oObj.date_due;
}
}
},
{
"mDataProp": function( oObj ) {
if ( oObj.issued_today ) {
return "<strong>" + TODAYS_CHECKOUTS + "</strong>";
} else {
return "<strong>" + PREVIOUS_CHECKOUTS + "</strong>";
}
}
},
{
"mDataProp": "date_due",
"bVisible": false,
},
{
"iDataSort": 1, // Sort on hidden unformatted date due column
"mDataProp": function( oObj ) {
if ( oObj.date_due_overdue ) {
return "<span class='overdue'>" + oObj.date_due_formatted + "</span>";
} else {
return oObj.date_due_formatted;
}
}
},
{
"mDataProp": function ( oObj ) {
title = "<span class='strong'><a href='/cgi-bin/koha/catalogue/detail.pl?biblionumber="
+ oObj.biblionumber
+ "'>"
+ oObj.title;
$.each(oObj.subtitle, function( index, value ) {
title += " " + value.subfield;
});
title += "</a></span>";
if ( oObj.author ) {
title += " " + BY.replace( "_AUTHOR_", " " + oObj.author );
}
if ( oObj.itemnotes ) {
var span_class = "";
if ( $.datepicker.formatDate('yy-mm-dd', new Date(oObj.issuedate) ) == ymd ) {
span_class = "circ-hlt";
}
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;
}
},
{ "mDataProp": "itemtype" },
{ "mDataProp": "issuedate_formatted" },
{ "mDataProp": "branchname" },
{ "mDataProp": "itemcallnumber" },
{
"mDataProp": function ( oObj ) {
if ( ! oObj.charge ) oObj.charge = 0;
return parseFloat(oObj.charge).toFixed(2);
}
},
{
"mDataProp": function ( oObj ) {
if ( ! oObj.price ) oObj.price = 0;
return parseFloat(oObj.price).toFixed(2);
}
},
{
"bSortable": false,
"mDataProp": function ( oObj ) {
var content = "";
var span_style = "";
var span_class = "";
content += "<span>";
content += "<span style='padding: 0 1em;'>" + oObj.renewals_count + "</span>";
if ( oObj.can_renew ) {
// Do nothing
} else if ( oObj.can_renew_error == "on_reserve" ) {
content += "<span class='renewals-disabled'>"
+ "<a href='/cgi-bin/koha/reserve/request.pl?biblionumber=" + oObj.biblionumber + "'>" + ON_HOLD + "</a>"
+ "</span>";
span_style = "display: none";
span_class = "renewals-allowed";
} else if ( oObj.can_renew_error == "too_many" ) {
content += "<span class='renewals-disabled'>"
+ NOT_RENEWABLE
+ "</span>";
span_style = "display: none";
span_class = "renewals-allowed";
} else if ( oObj.can_renew_error == "too_soon" ) {
content += "<span class='renewals-disabled'>"
+ NOT_RENEWABLE_TOO_SOON.format( oObj.can_renew_date )
+ "</span>";
span_style = "display: none";
span_class = "renewals-allowed";
} else if ( oObj.can_renew_error == "auto_too_soon" ) {
content += "<span class='renewals-disabled'>"
+ NOT_RENEWABLE_AUTO_TOO_SOON
+ "</span>";
span_style = "display: none";
span_class = "renewals-allowed";
} else if ( oObj.can_renew_error == "auto_renew" ) {
content += "<span class='renewals-disabled'>"
+ NOT_RENEWABLE_AUTO_RENEW
+ "</span>";
span_style = "display: none";
span_class = "renewals-allowed";
} else {
content += "<span class='renewals-disabled'>"
+ oObj.can_renew_error
+ "</span>";
span_style = "display: none";
span_class = "renewals-allowed";
}
content += "<span class='" + span_class + "' style='" + span_style + "'>"
+ "<input type='checkbox' class='renew' id='renew_" + oObj.itemnumber + "' name='renew' value='" + oObj.itemnumber +"'/>"
+ "</span>";
if ( oObj.renewals_remaining ) {
content += "<span class='renewals'>("
+ RENEWALS_REMAINING.format( oObj.renewals_remaining, oObj.renewals_allowed )
+ ")</span>";
}
content += "</span>";
return content;
}
},
{
"bSortable": false,
"mDataProp": function ( oObj ) {
if ( oObj.can_renew_error == "on_reserve" ) {
return "<a href='/cgi-bin/koha/reserve/request.pl?biblionumber=" + oObj.biblionumber + "'>" + ON_HOLD + "</a>";
} else {
return "<input type='checkbox' class='checkin' id='checkin_" + oObj.itemnumber + "' name='checkin' value='" + oObj.itemnumber +"'></input>";
}
}
},
{
"bVisible": exports_enabled ? true : false,
"bSortable": false,
"mDataProp": function ( oObj ) {
return "<input type='checkbox' class='export' id='export_" + oObj.biblionumber + "' name='biblionumbers' value='" + oObj.biblionumber + "' />";
}
}
],
"fnFooterCallback": function ( nRow, aaData, iStart, iEnd, aiDisplay ) {
var total_charge = 0;
var total_price = 0;
for ( var i=0; i < aaData.length; i++ ) {
total_charge += aaData[i]['charge'] * 1;
total_price += aaData[i]['price'] * 1;
}
var nCells = nRow.getElementsByTagName('td');
nCells[1].innerHTML = total_charge.toFixed(2);
nCells[2].innerHTML = total_price.toFixed(2);
},
"bPaginate": false,
"bProcessing": true,
"bServerSide": false,
"sAjaxSource": '/cgi-bin/koha/svc/checkouts',
"fnServerData": function ( sSource, aoData, fnCallback ) {
aoData.push( { "name": "borrowernumber", "value": borrowernumber } );
$.getJSON( sSource, aoData, function (json) {
fnCallback(json)
} );
},
"fnInitComplete": function(oSettings) {
// Disable rowGrouping plugin after first use
// so any sorting on the table doesn't use it
var oSettings = issuesTable.fnSettings();
for (f = 0; f < oSettings.aoDrawCallback.length; f++) {
if (oSettings.aoDrawCallback[f].sName == 'fnRowGrouping') {
oSettings.aoDrawCallback.splice(f, 1);
break;
}
}
oSettings.aaSortingFixed = null;
},
}).rowGrouping(
{
iGroupingColumnIndex: 1,
iGroupingOrderByColumnIndex: 0,
sGroupingColumnSortDirection: "desc"
}
);
if ( $("#issues-table").length ) {
$("#issues-table_processing").position({
of: $( "#issues-table" ),
collision: "none"
});
}
}
// Don't load relatives' issues table unless it is clicked on
var relativesIssuesTable;
$("#relatives-issues-tab").click( function() {
if ( ! relativesIssuesTable ) {
relativesIssuesTable = $("#relatives-issues-table").dataTable({
"bAutoWidth": false,
"sDom": "<'row-fluid'<'span6'><'span6'>r>t<'row-fluid'>t",
"aaSorting": [],
"aoColumns": [
{
"mDataProp": "date_due",
"bVisible": false,
},
{
"iDataSort": 1, // Sort on hidden unformatted date due column
"mDataProp": function( oObj ) {
var today = new Date();
var due = new Date( oObj.date_due );
if ( today > due ) {
return "<span class='overdue'>" + oObj.date_due_formatted + "</span>";
} else {
return oObj.date_due_formatted;
}
}
},
{
"mDataProp": function ( oObj ) {
title = "<span class='strong'><a href='/cgi-bin/koha/catalogue/detail.pl?biblionumber="
+ oObj.biblionumber
+ "'>"
+ oObj.title;
$.each(oObj.subtitle, function( index, value ) {
title += " " + value.subfield;
});
title += "</a></span>";
if ( oObj.author ) {
title += " " + BY + " " + oObj.author;
}
if ( oObj.itemnotes ) {
var span_class = "";
if ( $.datepicker.formatDate('yy-mm-dd', new Date(oObj.issuedate) ) == ymd ) {
span_class = "circ-hlt";
}
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;
}
},
{ "mDataProp": "itemtype" },
{ "mDataProp": "issuedate_formatted" },
{ "mDataProp": "branchname" },
{ "mDataProp": "itemcallnumber" },
{
"mDataProp": function ( oObj ) {
if ( ! oObj.charge ) oObj.charge = 0;
return parseFloat(oObj.charge).toFixed(2);
}
},
{
"mDataProp": function ( oObj ) {
if ( ! oObj.price ) oObj.price = 0;
return parseFloat(oObj.price).toFixed(2);
}
},
{
"mDataProp": function( oObj ) {
return "<a href='/cgi-bin/koha/members/moremember.pl?borrowernumber=" + oObj.borrowernumber + "'>"
+ oObj.borrower.firstname + " " + oObj.borrower.surname + " (" + oObj.borrower.cardnumber + ")</a>"
}
},
],
"bPaginate": false,
"bProcessing": true,
"bServerSide": false,
"sAjaxSource": '/cgi-bin/koha/svc/checkouts',
"fnServerData": function ( sSource, aoData, fnCallback ) {
$.each(relatives_borrowernumbers, function( index, value ) {
aoData.push( { "name": "borrowernumber", "value": value } );
});
$.getJSON( sSource, aoData, function (json) {
fnCallback(json)
} );
},
});
}
});
if ( $("#relatives-issues-table").length ) {
$("#relatives-issues-table_processing").position({
of: $( "#relatives-issues-table" ),
collision: "none"
});
}
if ( AllowRenewalLimitOverride ) {
$( '#override_limit' ).click( function () {
if ( this.checked ) {
$( '.renewals-allowed' ).show(); $( '.renewals-disabled' ).hide();
} else {
$( '.renewals-allowed' ).hide(); $( '.renewals-disabled' ).show();
}
} ).attr( 'checked', false );
}
});