Owen Leonard
5844622665
This patch removes the "size" attribute from <select> tags where the value of the attribute is 1. The attribute is unnecessary because the default value when the attribute is undefined is 1. This will allow for more careful sizing of <select> tags without a size attribute while preserving the desired behavior of <select> tags which have a size greater than 1. The patch modifies 83 files but makes the same minor corrections to each. I think examining the diff is sufficent, or testing a representative set of pages: - Administration -> MARC frameworks -> MARC structure -> Edit tag: The "Authorized value" select. - Patrons -> New patron: The "Library" select. - Reports -> Patrons with no checkouts: The "Into an application" selects. If anyone would like help testing any particular template I can follow-up. Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com> Signed-off-by: Katrin Fischer <katrin.fischer.83@web.de> Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
398 lines
19 KiB
Text
398 lines
19 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>
|
|
.sql {display:none;}
|
|
</style>
|
|
</head>
|
|
|
|
<body id="rep_reserve_stats" class="rep">
|
|
[% INCLUDE 'header.inc' %]
|
|
[% INCLUDE 'cat-search.inc' %]
|
|
|
|
<nav id="breadcrumbs" aria-label="Breadcrumb" class="breadcrumb">
|
|
<ol>
|
|
<li>
|
|
<a href="/cgi-bin/koha/mainpage.pl">Home</a>
|
|
</li>
|
|
<li>
|
|
<a href="/cgi-bin/koha/reports/reports-home.pl">Reports</a>
|
|
</li>
|
|
[% IF ( do_it ) %]
|
|
<li>
|
|
<a href="/cgi-bin/koha/reports/reserves_stats.pl">Holds statistics</a>
|
|
</li>
|
|
<li>
|
|
<a href="#" aria-current="page">
|
|
Results
|
|
</a>
|
|
</li>
|
|
[% ELSE %]
|
|
<li>
|
|
<a href="#" aria-current="page">
|
|
Holds statistics
|
|
</a>
|
|
</li>
|
|
[% END %]
|
|
</ol>
|
|
</nav>
|
|
|
|
<div class="main container-fluid">
|
|
<div class="row">
|
|
<div class="col-sm-10 col-sm-push-2">
|
|
<main>
|
|
|
|
|
|
[% 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 | html %] [% loopfilte.filter | html %]
|
|
</li>
|
|
[% END %]
|
|
</ul>
|
|
[% END %]
|
|
|
|
[% FOREACH mainloo IN mainloop %]
|
|
|
|
<table>
|
|
<tr>
|
|
<th>[% mainloo.line | html %] / [% mainloo.column | html %]</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 | uri %]&[% loopcel.url_complement | uri %]">[% loopcel.value | html %]</a>[% ELSE %][% loopcel.value | html %][% END %]
|
|
</td>
|
|
[% END %]
|
|
<td align="center">[% loopro.totalrow | html %]</td>
|
|
</tr>
|
|
[% END %]
|
|
<tr>
|
|
<th>TOTAL</th>
|
|
[% FOREACH loopfoote IN mainloo.loopfooter %]
|
|
<th>[% loopfoote.totalcol | html %]</th>
|
|
[% END %]
|
|
<th>[% mainloo.total | html %]</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 | html %]">[% categoryloo.description | html %]</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 | html %]">[% itemtype.translated_description | html %]</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 | html %]" selected="selected">[% ccodeloo.description | html %]</option>[% ELSE %]<option value="[% ccodeloo.code | html %]">[% ccodeloo.description | html %]</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 | html %]" selected="selected">[% locationloo.description | html %]</option>[% ELSE %]<option value="[% locationloo.code | html %]">[% locationloo.description | html %]</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 | html %]" selected="selected">[% Bsort.lib | html %]</option>[% ELSE %]<option value="[% Bsort.authorised_value | html %]" >[% Bsort.lib | html %]</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 | html %]" selected="selected">[% Bsort.lib | html %]</option>[% ELSE %]<option value="[% Bsort.authorised_value | html %]" >[% Bsort.lib | html %]</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 bibliographic records:</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">
|
|
[% FOREACH value IN CGIextChoice %]
|
|
<option value="[% value | html %]">[% value | html %]</option>
|
|
[% END %]
|
|
</select>
|
|
<select name="sep" id="sep">
|
|
[% FOREACH value IN CGIsepChoice.values.sort() %]
|
|
[% IF ( value == CGIsepChoice.default ) %]
|
|
<option value="[% value | html %]" selected="selected">[% value | html %]</option>
|
|
[% ELSE %]
|
|
<option value="[% value | html %]">[% value | html %]</option>
|
|
[% END %]
|
|
[% END %]
|
|
</select>
|
|
</li>
|
|
</ol>
|
|
</fieldset>
|
|
|
|
<fieldset class="action">
|
|
<input type="submit" value="Submit" />
|
|
<input type="hidden" name="report_name" value="[% report_name | html %]" />
|
|
<input type="hidden" name="do_it" value="1" />
|
|
</fieldset>
|
|
</form>
|
|
[% END %]
|
|
|
|
</main>
|
|
</div> <!-- /.col-sm-10.col-sm-push-2 -->
|
|
|
|
<div class="col-sm-2 col-sm-pull-10">
|
|
<aside>
|
|
[% INCLUDE 'reports-menu.inc' %]
|
|
</aside>
|
|
</div> <!-- /.col-sm-2.col-sm-pull-10 -->
|
|
</div> <!-- /.row -->
|
|
|
|
[% MACRO jsinclude BLOCK %]
|
|
[% INCLUDE 'calendar.inc' %]
|
|
<script>
|
|
$(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' %]
|