Lines 126-344
$(document).ready(function() {
Link Here
|
126 |
|
126 |
|
127 |
var ymd = $.datepicker.formatDate('yy-mm-dd', new Date()); |
127 |
var ymd = $.datepicker.formatDate('yy-mm-dd', new Date()); |
128 |
|
128 |
|
129 |
var issuesTable; |
129 |
// Don't bother loading table if there are no checkouts to show |
130 |
var drawn = 0; |
130 |
if ( issues_count ) { |
131 |
issuesTable = $("#issues-table").dataTable({ |
131 |
var issuesTable; |
132 |
"oLanguage": { |
132 |
|
133 |
"sEmptyTable" : MSG_DT_LOADING_RECORDS, |
133 |
if ( checkouts_table_seconds_to_load ) { |
134 |
}, |
134 |
$('#issues-table').hide(); |
135 |
"bAutoWidth": false, |
135 |
$('#issues-table-actions').hide(); |
136 |
"sDom": "<'row-fluid'<'span6'><'span6'>r>t<'row-fluid'>t", |
136 |
$('#issues-table-load-now-button').click(function(){ |
137 |
"aoColumns": [ |
137 |
LoadIssuesTableNow(); |
138 |
{ |
138 |
return false; |
139 |
"mDataProp": function( oObj ) { |
139 |
}); |
140 |
if ( oObj.issued_today ) { |
140 |
var loadIssuesTableInterval = setInterval(function(){ CountdownIssuesTableLoading(); }, 1000); |
141 |
return "<strong>" + TODAYS_CHECKOUTS + "</strong>"; |
141 |
} else { |
142 |
} else { |
142 |
$('#issues-table-loading-message').hide(); |
143 |
return "<strong>" + PREVIOUS_CHECKOUTS + "</strong>"; |
143 |
LoadIssuesTable(); |
144 |
} |
144 |
} |
145 |
} |
145 |
} |
146 |
}, |
146 |
|
147 |
{ |
147 |
function CountdownIssuesTableLoading(){ |
148 |
"mDataProp": "date_due", |
148 |
if ( checkouts_table_seconds_to_load ) { |
149 |
"bVisible": false, |
149 |
$('#issues-table-loading-count').text( checkouts_table_seconds_to_load ); |
|
|
150 |
checkouts_table_seconds_to_load--; |
151 |
} else { |
152 |
LoadIssuesTableNow(); |
153 |
} |
154 |
} |
155 |
|
156 |
function LoadIssuesTableNow() { |
157 |
clearInterval(loadIssuesTableInterval); |
158 |
$('#issues-table-loading-message').hide(); |
159 |
$('#issues-table').show(); |
160 |
$('#issues-table-actions').show(); |
161 |
LoadIssuesTable(); |
162 |
} |
163 |
|
164 |
function LoadIssuesTable() { |
165 |
issuesTable = $("#issues-table").dataTable({ |
166 |
"oLanguage": { |
167 |
"sEmptyTable" : MSG_DT_LOADING_RECORDS, |
150 |
}, |
168 |
}, |
151 |
{ |
169 |
"bAutoWidth": false, |
152 |
"iDataSort": 1, // Sort on hidden unformatted date due column |
170 |
"sDom": "<'row-fluid'<'span6'><'span6'>r>t<'row-fluid'>t", |
153 |
"mDataProp": function( oObj ) { |
171 |
"aoColumns": [ |
154 |
var today = new Date(); |
172 |
{ |
155 |
var due = new Date( oObj.date_due ); |
173 |
"mDataProp": function( oObj ) { |
156 |
if ( today > due ) { |
174 |
if ( oObj.issued_today ) { |
157 |
return "<span class='overdue'>" + oObj.date_due_formatted + "</span>"; |
175 |
return "<strong>" + TODAYS_CHECKOUTS + "</strong>"; |
158 |
} else { |
176 |
} else { |
159 |
return oObj.date_due_formatted; |
177 |
return "<strong>" + PREVIOUS_CHECKOUTS + "</strong>"; |
|
|
178 |
} |
160 |
} |
179 |
} |
161 |
} |
180 |
}, |
162 |
}, |
181 |
{ |
163 |
{ |
182 |
"mDataProp": "date_due", |
164 |
"mDataProp": function ( oObj ) { |
183 |
"bVisible": false, |
165 |
title = "<span class='strong'><a href='/cgi-bin/koha/catalogue/detail.pl?biblionumber=" |
184 |
}, |
166 |
+ oObj.biblionumber |
185 |
{ |
167 |
+ "'>" |
186 |
"iDataSort": 1, // Sort on hidden unformatted date due column |
168 |
+ oObj.title; |
187 |
"mDataProp": function( oObj ) { |
169 |
|
188 |
var today = new Date(); |
170 |
$.each(oObj.subtitle, function( index, value ) { |
189 |
var due = new Date( oObj.date_due ); |
171 |
title += " " + value.subfield; |
190 |
if ( today > due ) { |
172 |
}); |
191 |
return "<span class='overdue'>" + oObj.date_due_formatted + "</span>"; |
|
|
192 |
} else { |
193 |
return oObj.date_due_formatted; |
194 |
} |
195 |
} |
196 |
}, |
197 |
{ |
198 |
"mDataProp": function ( oObj ) { |
199 |
title = "<span class='strong'><a href='/cgi-bin/koha/catalogue/detail.pl?biblionumber=" |
200 |
+ oObj.biblionumber |
201 |
+ "'>" |
202 |
+ oObj.title; |
173 |
|
203 |
|
174 |
title += "</a></span>"; |
204 |
$.each(oObj.subtitle, function( index, value ) { |
|
|
205 |
title += " " + value.subfield; |
206 |
}); |
175 |
|
207 |
|
176 |
if ( oObj.author ) { |
208 |
title += "</a></span>"; |
177 |
title += " " + BY.replace( "_AUTHOR_", " " + oObj.author ); |
|
|
178 |
} |
179 |
|
209 |
|
180 |
if ( oObj.itemnotes ) { |
210 |
if ( oObj.author ) { |
181 |
var span_class = ""; |
211 |
title += " " + BY.replace( "_AUTHOR_", " " + oObj.author ); |
182 |
if ( $.datepicker.formatDate('yy-mm-dd', new Date(oObj.issuedate) ) == ymd ) { |
|
|
183 |
span_class = "circ-hlt"; |
184 |
} |
212 |
} |
185 |
title += " - <span class='" + span_class + "'>" + oObj.itemnotes + "</span>" |
|
|
186 |
} |
187 |
|
213 |
|
188 |
title += " " |
214 |
if ( oObj.itemnotes ) { |
189 |
+ "<a href='/cgi-bin/koha/catalogue/moredetail.pl?biblionumber=" |
215 |
var span_class = ""; |
190 |
+ oObj.biblionumber |
216 |
if ( $.datepicker.formatDate('yy-mm-dd', new Date(oObj.issuedate) ) == ymd ) { |
191 |
+ "&itemnumber=" |
217 |
span_class = "circ-hlt"; |
192 |
+ oObj.itemnumber |
218 |
} |
193 |
+ "#" |
219 |
title += " - <span class='" + span_class + "'>" + oObj.itemnotes + "</span>" |
194 |
+ oObj.itemnumber |
220 |
} |
195 |
+ "'>" |
|
|
196 |
+ oObj.barcode |
197 |
+ "</a>"; |
198 |
|
199 |
return title; |
200 |
} |
201 |
}, |
202 |
{ "mDataProp": "itemtype" }, |
203 |
{ "mDataProp": "issuedate_formatted" }, |
204 |
{ "mDataProp": "branchname" }, |
205 |
{ "mDataProp": "itemcallnumber" }, |
206 |
{ |
207 |
"mDataProp": function ( oObj ) { |
208 |
if ( ! oObj.charge ) oObj.charge = 0; |
209 |
return parseFloat(oObj.charge).toFixed(2); |
210 |
} |
211 |
}, |
212 |
{ |
213 |
"mDataProp": function ( oObj ) { |
214 |
if ( ! oObj.price ) oObj.price = 0; |
215 |
return parseFloat(oObj.price).toFixed(2); |
216 |
} |
217 |
}, |
218 |
{ |
219 |
"bSortable": false, |
220 |
"mDataProp": function ( oObj ) { |
221 |
var content = ""; |
222 |
var span_style = ""; |
223 |
var span_class = ""; |
224 |
|
225 |
content += "<span>"; |
226 |
content += "<span style='padding: 0 1em;'>" + oObj.renewals_count + "</span>"; |
227 |
|
228 |
if ( oObj.can_renew ) { |
229 |
// Do nothing |
230 |
} else if ( oObj.can_renew_error == "on_reserve" ) { |
231 |
content += "<span class='renewals-disabled'>" |
232 |
+ "<a href='/cgi-bin/koha/reserve/request.pl?biblionumber=" + oObj.biblionumber + "'>" + ON_HOLD + "</a>" |
233 |
+ "</span>"; |
234 |
|
235 |
span_style = "display: none"; |
236 |
span_class = "renewals-allowed"; |
237 |
} else if ( oObj.can_renew_error == "too_many" ) { |
238 |
content += "<span class='renewals-disabled'>" |
239 |
+ NOT_RENEWABLE |
240 |
+ "</span>"; |
241 |
|
242 |
span_style = "display: none"; |
243 |
span_class = "renewals-allowed"; |
244 |
} else if ( oObj.can_renew_error == "too_soon" ) { |
245 |
content += "<span class='renewals-disabled'>" |
246 |
+ NOT_RENEWABLE_TOO_SOON.format( oObj.can_renew_date ) |
247 |
+ "</span>"; |
248 |
|
249 |
span_style = "display: none"; |
250 |
span_class = "renewals-allowed"; |
251 |
} else { |
252 |
content += "<span class='renewals-disabled'>" |
253 |
+ oObj.can_renew_error |
254 |
+ "</span>"; |
255 |
|
221 |
|
256 |
span_style = "display: none"; |
222 |
title += " " |
257 |
span_class = "renewals-allowed"; |
223 |
+ "<a href='/cgi-bin/koha/catalogue/moredetail.pl?biblionumber=" |
|
|
224 |
+ oObj.biblionumber |
225 |
+ "&itemnumber=" |
226 |
+ oObj.itemnumber |
227 |
+ "#" |
228 |
+ oObj.itemnumber |
229 |
+ "'>" |
230 |
+ oObj.barcode |
231 |
+ "</a>"; |
232 |
|
233 |
return title; |
234 |
} |
235 |
}, |
236 |
{ "mDataProp": "itemtype" }, |
237 |
{ "mDataProp": "issuedate_formatted" }, |
238 |
{ "mDataProp": "branchname" }, |
239 |
{ "mDataProp": "itemcallnumber" }, |
240 |
{ |
241 |
"mDataProp": function ( oObj ) { |
242 |
if ( ! oObj.charge ) oObj.charge = 0; |
243 |
return parseFloat(oObj.charge).toFixed(2); |
244 |
} |
245 |
}, |
246 |
{ |
247 |
"mDataProp": function ( oObj ) { |
248 |
if ( ! oObj.price ) oObj.price = 0; |
249 |
return parseFloat(oObj.price).toFixed(2); |
258 |
} |
250 |
} |
|
|
251 |
}, |
252 |
{ |
253 |
"bSortable": false, |
254 |
"mDataProp": function ( oObj ) { |
255 |
var content = ""; |
256 |
var span_style = ""; |
257 |
var span_class = ""; |
259 |
|
258 |
|
260 |
content += "<span class='" + span_class + "' style='" + span_style + "'>" |
259 |
content += "<span>"; |
261 |
+ "<input type='checkbox' class='renew' id='renew_" + oObj.itemnumber + "' name='renew' value='" + oObj.itemnumber +"'/>" |
260 |
content += "<span style='padding: 0 1em;'>" + oObj.renewals_count + "</span>"; |
262 |
+ "</span>"; |
261 |
|
|
|
262 |
if ( oObj.can_renew ) { |
263 |
// Do nothing |
264 |
} else if ( oObj.can_renew_error == "on_reserve" ) { |
265 |
content += "<span class='renewals-disabled'>" |
266 |
+ "<a href='/cgi-bin/koha/reserve/request.pl?biblionumber=" + oObj.biblionumber + "'>" + ON_HOLD + "</a>" |
267 |
+ "</span>"; |
268 |
|
269 |
span_style = "display: none"; |
270 |
span_class = "renewals-allowed"; |
271 |
} else if ( oObj.can_renew_error == "too_many" ) { |
272 |
content += "<span class='renewals-disabled'>" |
273 |
+ NOT_RENEWABLE |
274 |
+ "</span>"; |
275 |
|
276 |
span_style = "display: none"; |
277 |
span_class = "renewals-allowed"; |
278 |
} else if ( oObj.can_renew_error == "too_soon" ) { |
279 |
content += "<span class='renewals-disabled'>" |
280 |
+ NOT_RENEWABLE_TOO_SOON.format( oObj.can_renew_date ) |
281 |
+ "</span>"; |
282 |
|
283 |
span_style = "display: none"; |
284 |
span_class = "renewals-allowed"; |
285 |
} else { |
286 |
content += "<span class='renewals-disabled'>" |
287 |
+ oObj.can_renew_error |
288 |
+ "</span>"; |
289 |
|
290 |
span_style = "display: none"; |
291 |
span_class = "renewals-allowed"; |
292 |
} |
263 |
|
293 |
|
264 |
if ( oObj.renewals_remaining ) { |
294 |
content += "<span class='" + span_class + "' style='" + span_style + "'>" |
265 |
content += "<span class='renewals'>(" |
295 |
+ "<input type='checkbox' class='renew' id='renew_" + oObj.itemnumber + "' name='renew' value='" + oObj.itemnumber +"'/>" |
266 |
+ RENEWALS_REMAINING.format( oObj.renewals_remaining, oObj.renewals_allowed ) |
296 |
+ "</span>"; |
267 |
+ ")</span>"; |
|
|
268 |
} |
269 |
|
297 |
|
270 |
content += "</span>"; |
298 |
if ( oObj.renewals_remaining ) { |
|
|
299 |
content += "<span class='renewals'>(" |
300 |
+ RENEWALS_REMAINING.format( oObj.renewals_remaining, oObj.renewals_allowed ) |
301 |
+ ")</span>"; |
302 |
} |
303 |
|
304 |
content += "</span>"; |
271 |
|
305 |
|
272 |
|
306 |
|
273 |
return content; |
307 |
return content; |
|
|
308 |
} |
309 |
}, |
310 |
{ |
311 |
"bSortable": false, |
312 |
"mDataProp": function ( oObj ) { |
313 |
if ( oObj.can_renew_error == "on_reserve" ) { |
314 |
return "<a href='/cgi-bin/koha/reserve/request.pl?biblionumber=" + oObj.biblionumber + "'>" + ON_HOLD + "</a>"; |
315 |
} else { |
316 |
return "<input type='checkbox' class='checkin' id='checkin_" + oObj.itemnumber + "' name='checkin' value='" + oObj.itemnumber +"'></input>"; |
317 |
} |
318 |
} |
319 |
}, |
320 |
{ |
321 |
"bVisible": exports_enabled ? true : false, |
322 |
"bSortable": false, |
323 |
"mDataProp": function ( oObj ) { |
324 |
return "<input type='checkbox' class='export' id='export_" + oObj.biblionumber + "' name='biblionumbers' value='" + oObj.biblionumber + "' />"; |
325 |
} |
326 |
} |
327 |
], |
328 |
"fnFooterCallback": function ( nRow, aaData, iStart, iEnd, aiDisplay ) { |
329 |
var total_charge = 0; |
330 |
var total_price = 0; |
331 |
for ( var i=0; i < aaData.length; i++ ) { |
332 |
total_charge += aaData[i]['charge'] * 1; |
333 |
total_price += aaData[i]['price'] * 1; |
274 |
} |
334 |
} |
|
|
335 |
var nCells = nRow.getElementsByTagName('td'); |
336 |
nCells[1].innerHTML = total_charge.toFixed(2); |
337 |
nCells[2].innerHTML = total_price.toFixed(2); |
275 |
}, |
338 |
}, |
276 |
{ |
339 |
"bPaginate": false, |
277 |
"bSortable": false, |
340 |
"bProcessing": true, |
278 |
"mDataProp": function ( oObj ) { |
341 |
"bServerSide": false, |
279 |
if ( oObj.can_renew_error == "on_reserve" ) { |
342 |
"sAjaxSource": '/cgi-bin/koha/svc/checkouts', |
280 |
return "<a href='/cgi-bin/koha/reserve/request.pl?biblionumber=" + oObj.biblionumber + "'>" + ON_HOLD + "</a>"; |
343 |
"fnServerData": function ( sSource, aoData, fnCallback ) { |
281 |
} else { |
344 |
aoData.push( { "name": "borrowernumber", "value": borrowernumber } ); |
282 |
return "<input type='checkbox' class='checkin' id='checkin_" + oObj.itemnumber + "' name='checkin' value='" + oObj.itemnumber +"'></input>"; |
345 |
|
|
|
346 |
$.getJSON( sSource, aoData, function (json) { |
347 |
fnCallback(json) |
348 |
} ); |
349 |
}, |
350 |
"fnInitComplete": function(oSettings) { |
351 |
// Disable rowGrouping plugin after first use |
352 |
// so any sorting on the table doesn't use it |
353 |
var oSettings = issuesTable.fnSettings(); |
354 |
|
355 |
for (f = 0; f < oSettings.aoDrawCallback.length; f++) { |
356 |
if (oSettings.aoDrawCallback[f].sName == 'fnRowGrouping') { |
357 |
oSettings.aoDrawCallback.splice(f, 1); |
358 |
break; |
283 |
} |
359 |
} |
284 |
} |
360 |
} |
|
|
361 |
|
362 |
oSettings.aaSortingFixed = null; |
285 |
}, |
363 |
}, |
|
|
364 |
}).rowGrouping( |
286 |
{ |
365 |
{ |
287 |
"bVisible": exports_enabled ? true : false, |
366 |
iGroupingOrderByColumnIndex: 0, |
288 |
"bSortable": false, |
367 |
sGroupingColumnSortDirection: "desc" |
289 |
"mDataProp": function ( oObj ) { |
|
|
290 |
return "<input type='checkbox' class='export' id='export_" + oObj.biblionumber + "' name='biblionumbers' value='" + oObj.biblionumber + "' />"; |
291 |
} |
292 |
} |
293 |
], |
294 |
"fnFooterCallback": function ( nRow, aaData, iStart, iEnd, aiDisplay ) { |
295 |
var total_charge = 0; |
296 |
var total_price = 0; |
297 |
for ( var i=0; i < aaData.length; i++ ) { |
298 |
total_charge += aaData[i]['charge'] * 1; |
299 |
total_price += aaData[i]['price'] * 1; |
300 |
} |
301 |
var nCells = nRow.getElementsByTagName('td'); |
302 |
nCells[1].innerHTML = total_charge.toFixed(2); |
303 |
nCells[2].innerHTML = total_price.toFixed(2); |
304 |
}, |
305 |
"bPaginate": false, |
306 |
"bProcessing": true, |
307 |
"bServerSide": false, |
308 |
"sAjaxSource": '/cgi-bin/koha/svc/checkouts', |
309 |
"fnServerData": function ( sSource, aoData, fnCallback ) { |
310 |
aoData.push( { "name": "borrowernumber", "value": borrowernumber } ); |
311 |
|
312 |
$.getJSON( sSource, aoData, function (json) { |
313 |
fnCallback(json) |
314 |
} ); |
315 |
}, |
316 |
"fnInitComplete": function(oSettings) { |
317 |
// Disable rowGrouping plugin after first use |
318 |
// so any sorting on the table doesn't use it |
319 |
var oSettings = issuesTable.fnSettings(); |
320 |
|
321 |
for (f = 0; f < oSettings.aoDrawCallback.length; f++) { |
322 |
if (oSettings.aoDrawCallback[f].sName == 'fnRowGrouping') { |
323 |
oSettings.aoDrawCallback.splice(f, 1); |
324 |
break; |
325 |
} |
326 |
} |
368 |
} |
|
|
369 |
); |
327 |
|
370 |
|
328 |
oSettings.aaSortingFixed = null; |
371 |
if ( $("#issues-table").length ) { |
329 |
}, |
372 |
$("#issues-table_processing").position({ |
330 |
}).rowGrouping( |
373 |
of: $( "#issues-table" ), |
331 |
{ |
374 |
collision: "none" |
332 |
iGroupingOrderByColumnIndex: 0, |
375 |
}); |
333 |
sGroupingColumnSortDirection: "desc" |
|
|
334 |
} |
376 |
} |
335 |
); |
|
|
336 |
|
337 |
if ( $("#issues-table").length ) { |
338 |
$("#issues-table_processing").position({ |
339 |
of: $( "#issues-table" ), |
340 |
collision: "none" |
341 |
}); |
342 |
} |
377 |
} |
343 |
|
378 |
|
344 |
// Don't load relatives' issues table unless it is clicked on |
379 |
// Don't load relatives' issues table unless it is clicked on |