Owen Leonard
cfb372c308
This patch modifies the staff client's reports templates so that JavaScript is included in the footer instead of the header. To test, apply the patch and test the JavaScript-driven features of reports pages: All button controls, DataTables functionality, form validation, etc. Signed-off-by: Claire Gravely <claire.gravely@bsz-bw.de> Fix for QA: Remove unused Dopop function. Signed-off-by: Josef Moravec <josef.moravec@gmail.com> Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
370 lines
18 KiB
Text
370 lines
18 KiB
Text
[% USE Branches %]
|
|
[% SET footerjs = 1 %]
|
|
[% INCLUDE 'doc-head-open.inc' %]
|
|
<title>Koha › Reports › Holds statistics [% IF ( do_it ) %]› Results[% END %]</title>
|
|
[% INCLUDE 'doc-head-close.inc' %]
|
|
<style type="text/css">
|
|
.sql {display:none;}
|
|
</style>
|
|
</head>
|
|
|
|
<body id="rep_reserve_stats" class="rep">
|
|
[% INCLUDE 'header.inc' %]
|
|
[% INCLUDE 'cat-search.inc' %]
|
|
|
|
<div id="breadcrumbs"><a href="/cgi-bin/koha/mainpage.pl">Home</a> › <a href="/cgi-bin/koha/reports/reports-home.pl">Reports</a> [% IF ( do_it ) %]› <a href="/cgi-bin/koha/reports/reserves_stats.pl">Holds statistics</a> › Results [% ELSE %]› Holds statistics[% END %]</div>
|
|
|
|
<div id="doc3" class="yui-t2">
|
|
|
|
<div id="bd">
|
|
<div id="yui-main">
|
|
<div class="yui-b">
|
|
|
|
[% IF ( do_it ) %]
|
|
[% IF ( mainloop ) %]
|
|
<h1>Holds statistics</h1>
|
|
[% IF ( loopfilter ) %]
|
|
<p>Filtered on:</p>
|
|
<ul>
|
|
[% FOREACH loopfilte IN loopfilter %]
|
|
[% IF ( loopfilte.err ) %]<li class="error">Error:
|
|
[% ELSIF ( loopfilte.sql ) %]<li class="sql">
|
|
[% ELSE %]<li>
|
|
[% END %]
|
|
[% loopfilte.crit %] [% loopfilte.filter %]
|
|
</li>
|
|
[% END %]
|
|
</ul>
|
|
[% END %]
|
|
|
|
[% FOREACH mainloo IN mainloop %]
|
|
|
|
<table>
|
|
<tr>
|
|
<th>[% mainloo.line %] / [% mainloo.column %]</th>
|
|
[% FOREACH loopco IN mainloo.loopcol %]
|
|
<th>[% loopco.coltitle_display |html %]</th>
|
|
[% END %]
|
|
<th>TOTAL</th>
|
|
</tr>
|
|
[% FOREACH loopro IN mainloo.looprow %]
|
|
<tr>
|
|
<td>[% loopro.rowtitle_display or "UNKNOWN VALUE" |html %]</td>
|
|
[% FOREACH loopcel IN loopro.loopcell %]
|
|
<td align="center">
|
|
[% IF ( loopcel.url_complement ) %]<a href="reserves_stats.pl?output=[% loopcel.output %]&[% loopcel.url_complement %]">[% loopcel.value %]</a>[% ELSE %][% loopcel.value %][% END %]
|
|
</td>
|
|
[% END %]
|
|
<td align="center">[% loopro.totalrow %]</td>
|
|
</tr>
|
|
[% END %]
|
|
<tr>
|
|
<th>TOTAL</th>
|
|
[% FOREACH loopfoote IN mainloo.loopfooter %]
|
|
<th>[% loopfoote.totalcol %]</th>
|
|
[% END %]
|
|
<th>[% mainloo.total %]</th>
|
|
</tr>
|
|
</table>
|
|
[% END %]
|
|
[% END %]
|
|
[% ELSE %]
|
|
|
|
<form method="post" action="/cgi-bin/koha/reports/reserves_stats.pl">
|
|
<fieldset class="rows">
|
|
<legend>Holds statistics</legend><table>
|
|
<thead>
|
|
<tr>
|
|
<th>Title</th>
|
|
<th>Row</th>
|
|
<th>Column</th>
|
|
<th>Filter</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr >
|
|
<td>Hold status </td>
|
|
<td><input type="radio" name="Line" value="reservestatus" /></td>
|
|
<td><input type="radio" name="Column" value="reservestatus" checked="checked" /></td>
|
|
<td>
|
|
<input type="checkbox" name="filter_reservestatus_or_1" value="1" /> Asked
|
|
<input type="checkbox" name="filter_reservestatus_or_2" value="2" /> Processing
|
|
<input type="checkbox" name="filter_reservestatus_or_3" value="3" /> Waiting
|
|
<input type="checkbox" name="filter_reservestatus_or_4" value="4" /> Satisfied
|
|
<input type="checkbox" name="filter_reservestatus_or_5" value="5" /> Cancelled
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Hold date</td>
|
|
<td><input type="radio" name="Line" value="reservedate" /></td>
|
|
<td><input type="radio" name="Column" value="reservedate" /></td>
|
|
<td><label for="filter_reservedate_begin">From</label> <input type="text" size="10" id="filter_reservedate_begin" name="filter_reservedate_begin" />
|
|
<label for="filter_reservedate_end">To</label> <input size="10" id="filter_reservedate_end" name="filter_reservedate_end" value="" type="text" />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Notification date</td>
|
|
<td><input type="radio" name="Line" value="notificationdate" /></td>
|
|
<td><input type="radio" name="Column" value="notificationdate" /></td>
|
|
<td><label for="filter_notificationdate_begin">From</label> <input type="text" size="10" id="filter_notificationdate_begin" name="filter_notificationdate_begin" />
|
|
<label for="filter_notificationdate_end">To</label> <input size="10" id="filter_notificationdate_end" name="filter_notificationdate_end" value="" type="text" />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Reminder date</td>
|
|
<td><input type="radio" name="Line" value="reminderdate" /></td>
|
|
<td><input type="radio" name="Column" value="reminderdate" /></td>
|
|
<td><label for="filter_reminderdate_begin">From</label> <input type="text" size="10" id="filter_reminderdate_begin" name="Filter" />
|
|
<label for="filter_reminderdate_end">To</label> <input size="10" id="filter_reminderdate_end" name="filter_reminderdate_end" value="" type="text" />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Waiting date</td>
|
|
<td><input type="radio" name="Line" value="waitingdate" /></td>
|
|
<td><input type="radio" name="Column" value="waitingdate" /></td>
|
|
<td><label for="filter_waitingdate_begin">From</label> <input type="text" size="10" id="filter_waitingdate_begin" name="filter_waitingdate_begin" />
|
|
<label for="filter_waitingdate_end">To</label> <input size="10" id="filter_waitingdate_end" name="filter_waitingdate_end" value="" type="text" />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Cancellation date</td>
|
|
<td><input type="radio" name="Line" value="cancellationdate" /></td>
|
|
<td><input type="radio" name="Column" value="cancellationdate" /></td>
|
|
<td><label for="filter_cancellationdate_begin">From</label> <input type="text" size="10" id="filter_cancellationdate_begin" name="filter_cancellationdate_begin" />
|
|
<label for="filter_cancellationdate_end">To</label> <input size="10" id="filter_cancellationdate_end" name="filter_cancellationdate_end" value="" type="text" />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Patron category</td>
|
|
<td><input type="radio" name="Line" value="borrowers.categorycode" /></td>
|
|
<td><input type="radio" name="Column" value="borrowers.categorycode" /></td>
|
|
<td><select name="filter_categorycode" id="borcat">
|
|
<option value=""> </option>
|
|
[% FOREACH categoryloo IN categoryloop %]
|
|
<option value="[% categoryloo.categorycode %]">[% categoryloo.description %]</option>
|
|
[% END %]
|
|
</select>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Item type</td>
|
|
<td><input type="radio" name="Line" value="items.itype" /></td>
|
|
<td><input type="radio" name="Column" value="items.itype" /></td>
|
|
<td><select name="filter_items.itype" id="itype">
|
|
<option value=""> </option>
|
|
[% FOREACH itemtype IN itemtypes %]
|
|
<option value="[% itemtype.itemtype %]">[% itemtype.translated_description %]</option>
|
|
[% END %]
|
|
</select>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Pickup library</td>
|
|
<td><input type="radio" name="Line" value="reserves.branchcode" checked="checked" /></td>
|
|
<td><input type="radio" name="Column" value="reserves.branchcode" /></td>
|
|
<td><select name="filter_reserves.branchcode" id="resbranchcode">
|
|
<option value=""> </option>
|
|
[% PROCESS options_for_libraries libraries => Branches.all() %]
|
|
</select>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Holding library</td>
|
|
<td><input type="radio" name="Line" value="items.holdingbranch" /></td>
|
|
<td><input type="radio" name="Column" value="items.holdingbranch" /></td>
|
|
<td><select name="filter_items.holdingbranch" id="holdingbranch">
|
|
<option value=""> </option>
|
|
[% PROCESS options_for_libraries libraries => Branches.all() %]
|
|
</select>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Home library</td>
|
|
<td><input type="radio" name="Line" value="items.homebranch" /></td>
|
|
<td><input type="radio" name="Column" value="items.homebranch" /></td>
|
|
<td><select name="filter_items.homebranch" id="homebranch">
|
|
<option value=""> </option>
|
|
[% PROCESS options_for_libraries libraries => Branches.all() %]
|
|
</select>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Collection</td>
|
|
<td><input type="radio" name="Line" value="items.ccode" /></td>
|
|
<td><input type="radio" name="Column" value="items.ccode" /></td>
|
|
<td><select name="filter_items.ccode" id="ccode">
|
|
<option value=""> </option>
|
|
[% FOREACH ccodeloo IN ccodeloop %]
|
|
[% IF ( ccodeloo.selected ) %] <option value="[% ccodeloo.code %]" selected="selected">[% ccodeloo.description %]</option>[% ELSE %]<option value="[% ccodeloo.code %]">[% ccodeloo.description %]</option>[% END %]
|
|
[% END %]
|
|
</select>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Shelving location</td>
|
|
<td><input type="radio" name="Line" value="items.location" /></td>
|
|
<td><input type="radio" name="Column" value="items.location" /></td>
|
|
<td><select name="filter_items.location" id="location">
|
|
<option value=""> </option>
|
|
[% FOREACH locationloo IN locationloop %]
|
|
[% IF ( locationloo.selected ) %]<option value="[% locationloo.code %]" selected="selected">[% locationloo.description %]</option>[% ELSE %]<option value="[% locationloo.code %]">[% locationloo.description %]</option>[% END %]
|
|
[% END %]
|
|
</select>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Item call number</td>
|
|
<td></td>
|
|
<td></td>
|
|
<td>From <input type="text" name="filter_items.itemcallnumber_begin" size="10" /> (inclusive) to <input type="text" name="filter_items.itemcallnumber_endex" size="10" /> (exclusive) </td>
|
|
</tr>
|
|
[% IF ( hassort1 ) %]
|
|
<tr><td>Patron sort 1</td>
|
|
<td><input type="radio" name="Line" value="borrowers.sort1" /></td>
|
|
<td><input type="radio" name="Column" value="borrowers.sort1" /></td>
|
|
<td><select name="filter_borrowers.sort1" id="sort1">
|
|
<option value=""> </option>
|
|
[% FOREACH Bsort IN Bsort1 %]
|
|
[% IF ( Bsort.selected ) %]<option value="[% Bsort.authorised_value %]" selected="selected">[% Bsort.lib %]</option>[% ELSE %]<option value="[% Bsort.authorised_value %]" >[% Bsort.lib %]</option>[% END %]
|
|
[% END %]
|
|
</select>
|
|
</td>
|
|
</tr>
|
|
[% END %]
|
|
[% IF ( hassort2 ) %]
|
|
<tr><td>Patron sort 2</td>
|
|
<td><input type="radio" name="Line" value="borrowers.sort2" /></td>
|
|
<td><input type="radio" name="Column" value="borrowers.sort2" /></td>
|
|
<td><select name="filter_borrowers.sort2" id="sort2">
|
|
<option value=""> </option>
|
|
[% FOREACH Bsort IN Bsort2 %]
|
|
[% IF ( Bsort.selected ) %]<option value="[% Bsort.authorised_value %]" selected="selected">[% Bsort.lib %]</option>[% ELSE %]<option value="[% Bsort.authorised_value %]" >[% Bsort.lib %]</option>[% END %]
|
|
[% END %]
|
|
</select>
|
|
</td>
|
|
</tr>
|
|
[% END %]
|
|
</tbody>
|
|
</table><br /></fieldset>
|
|
|
|
<fieldset class="rows"><legend>Cell value </legend><ol><li><label for="cellvalue1">Count holds:</label> <input type="radio" name="Cellvalue" value="1" id="cellvalue1" checked="checked" /> </li>
|
|
<li><label for="cellvalue2">Count unique borrowers:</label> <input type="radio" name="Cellvalue" value="2" id="cellvalue2" /> </li><li><label for="cellvalue3">Count unique items:</label> <input type="radio" name="Cellvalue" id="cellvalue3" value="3" /> </li><li><label for="cellvalue4">Count unique biblios:</label> <input type="radio" name="Cellvalue" id="cellvalue4" value="4" /> </li></ol></fieldset>
|
|
|
|
<fieldset class="rows">
|
|
<legend>Output</legend>
|
|
<ol>
|
|
<li>
|
|
<label for="outputscreen">To screen into the browser: </label><input type="radio" checked="checked" name="output" id="outputscreen" value="screen" />
|
|
</li>
|
|
<li>
|
|
<label for="outputfile">To a file:</label> <input type="radio" name="output" value="file" id="outputfile" />
|
|
<label class="inline" for="basename">Named: </label><input type="text" name="basename" id="basename" value="Export" />
|
|
<label class="inline" for="MIME">Into an application:</label>
|
|
<select name="MIME" id="MIME" size="1">
|
|
[% FOREACH value IN CGIextChoice %]
|
|
<option value="[% value %]">[% value %]</option>
|
|
[% END %]
|
|
</select>
|
|
<select name="sep" id="sep" size="1">
|
|
[% FOREACH value IN CGIsepChoice.values.sort() %]
|
|
[% IF ( value == CGIsepChoice.default ) %]
|
|
<option value="[% value %]" selected="selected">[% value %]</option>
|
|
[% ELSE %]
|
|
<option value="[% value %]">[% value %]</option>
|
|
[% END %]
|
|
[% END %]
|
|
</select>
|
|
</li>
|
|
</ol>
|
|
</fieldset>
|
|
|
|
<fieldset class="action">
|
|
<input type="submit" value="Submit" />
|
|
<input type="hidden" name="report_name" value="[% report_name %]" />
|
|
<input type="hidden" name="do_it" value="1" />
|
|
</fieldset>
|
|
</form>
|
|
[% END %]
|
|
|
|
</div>
|
|
</div>
|
|
<div class="yui-b">
|
|
[% INCLUDE 'reports-menu.inc' %]
|
|
</div>
|
|
</div>
|
|
|
|
[% MACRO jsinclude BLOCK %]
|
|
[% INCLUDE 'calendar.inc' %]
|
|
<script type="text/javascript">
|
|
$(document).ready(function() {
|
|
// http://jqueryui.com/demos/datepicker/#date-range
|
|
var dates = $( "#filter_reservedate_begin, #filter_reservedate_end" ).datepicker({
|
|
changeMonth: true,
|
|
numberOfMonths: 1,
|
|
onSelect: function( selectedDate ) {
|
|
var option = this.id == "filter_reservedate_begin" ? "minDate" : "maxDate",
|
|
instance = $( this ).data( "datepicker" );
|
|
date = $.datepicker.parseDate(
|
|
instance.settings.dateFormat ||
|
|
$.datepicker._defaults.dateFormat,
|
|
selectedDate, instance.settings );
|
|
dates.not( this ).datepicker( "option", option, date );
|
|
}
|
|
});
|
|
var datesND = $( "#filter_notificationdate_begin, #filter_notificationdate_end" ).datepicker({
|
|
changeMonth: true,
|
|
numberOfMonths: 1,
|
|
onSelect: function( selectedDate ) {
|
|
var option = this.id == "filter_notificationdate_begin" ? "minDate" : "maxDate",
|
|
instance = $( this ).data( "datepicker" );
|
|
date = $.datepicker.parseDate(
|
|
instance.settings.dateFormat ||
|
|
$.datepicker._defaults.dateFormat,
|
|
selectedDate, instance.settings );
|
|
datesND.not( this ).datepicker( "option", option, date );
|
|
}
|
|
});
|
|
var datesRD = $( "#filter_reminderdate_begin, #filter_reminderdate_end" ).datepicker({
|
|
changeMonth: true,
|
|
numberOfMonths: 1,
|
|
onSelect: function( selectedDate ) {
|
|
var option = this.id == "filter_reminderdate_begin" ? "minDate" : "maxDate",
|
|
instance = $( this ).data( "datepicker" );
|
|
date = $.datepicker.parseDate(
|
|
instance.settings.dateFormat ||
|
|
$.datepicker._defaults.dateFormat,
|
|
selectedDate, instance.settings );
|
|
datesRD.not( this ).datepicker( "option", option, date );
|
|
}
|
|
});
|
|
var datesWD = $( "#filter_waitingdate_begin, #filter_waitingdate_end" ).datepicker({
|
|
changeMonth: true,
|
|
numberOfMonths: 1,
|
|
onSelect: function( selectedDate ) {
|
|
var option = this.id == "filter_waitingdate_begin" ? "minDate" : "maxDate",
|
|
instance = $( this ).data( "datepicker" );
|
|
date = $.datepicker.parseDate(
|
|
instance.settings.dateFormat ||
|
|
$.datepicker._defaults.dateFormat,
|
|
selectedDate, instance.settings );
|
|
datesWD.not( this ).datepicker( "option", option, date );
|
|
}
|
|
});
|
|
var datesCD = $( "#filter_cancellationdate_begin, #filter_cancellationdate_end" ).datepicker({
|
|
changeMonth: true,
|
|
numberOfMonths: 1,
|
|
onSelect: function( selectedDate ) {
|
|
var option = this.id == "filter_cancellationdate_begin" ? "minDate" : "maxDate",
|
|
instance = $( this ).data( "datepicker" );
|
|
date = $.datepicker.parseDate(
|
|
instance.settings.dateFormat ||
|
|
$.datepicker._defaults.dateFormat,
|
|
selectedDate, instance.settings );
|
|
datesCD.not( this ).datepicker( "option", option, date );
|
|
}
|
|
});
|
|
});
|
|
</script>
|
|
[% END %]
|
|
|
|
[% INCLUDE 'intranet-bottom.inc' %]
|