hdl
19 years ago
7 changed files with 1322 additions and 12 deletions
@ -0,0 +1,257 @@ |
|||
<!-- TMPL_INCLUDE NAME="reportswcal-top.inc" --> |
|||
<div id="mainbloc" > |
|||
|
|||
<!-- TMPL_IF NAME="do_it" --> |
|||
<!-- TMPL_LOOP NAME="mainloop" --> |
|||
<h1 class="reports">Koha : Top <!-- TMPL_VAR NAME="limit"--> List On borrowers' Issues </h1> |
|||
<!-- TMPL_IF NAME="loopfilter"--> |
|||
<p>Filtered on</p> |
|||
<!-- TMPL_LOOP NAME="loopfilter" --> |
|||
<p><!-- TMPL_IF NAME="err" --> <font color="red"> <b><!--/TMPL_IF --><label class="label100"> <!-- TMPL_VAR NAME="crit"--> =</label><!-- TMPL_VAR NAME="filter"--><!-- TMPL_IF NAME="err" --> </font> </b><!--/TMPL_IF --></p> |
|||
<!-- /TMPL_LOOP --> |
|||
<!-- /TMPL_IF NAME="loopfilter"--> |
|||
<br> |
|||
<table> |
|||
<tr > |
|||
<th class="reports">Rank/Borrowers</th> |
|||
<!-- TMPL_LOOP NAME="loopcol" --> |
|||
<th class="reports"><!-- TMPL_VAR NAME="coltitle" --></th> |
|||
<!-- /TMPL_LOOP --> |
|||
</tr> |
|||
<!-- TMPL_LOOP NAME="looprow" --> |
|||
<tr> |
|||
<!-- TMPL_IF NAME="hilighted" --><td class="hilighted"><!-- TMPL_ELSE --><td><!-- /TMPL_IF --> |
|||
<!-- TMPL_VAR NAME="rowtitle" --></td> |
|||
<!-- TMPL_LOOP NAME="loopcell" --> |
|||
<!-- TMPL_IF NAME="hilighted" --><td class="hilighted"><!-- TMPL_ELSE --><td ><!-- /TMPL_IF --> |
|||
<!-- TMPL_IF NAME="value" --><!-- TMPL_VAR NAME="value" --><!-- /TMPL_IF --> |
|||
</td> |
|||
<!-- /TMPL_LOOP --> |
|||
</tr> |
|||
<!-- /TMPL_LOOP NAME="looprow" --> |
|||
</table> |
|||
<!-- /TMPL_LOOP --> |
|||
<!-- TMPL_ELSE --> |
|||
<h1 class = "reports">Koha : Top List On borrowers' Issues </h1> |
|||
<form method="post"> |
|||
|
|||
<table> |
|||
<thead> |
|||
<tr> |
|||
<th class="reports">Limit to </th> |
|||
<th class="reports">By </th> |
|||
<th class="reports" colspan="2">Filters</th> |
|||
</tr> |
|||
</thead> |
|||
<tbody> |
|||
<tr> |
|||
<td> |
|||
<select name="Limit"> |
|||
<option value ="5" checked> 5</option> |
|||
<option value ="10">10</option> |
|||
<option value ="15">15</option> |
|||
<option value ="20">20</option> |
|||
<!-- <option value ="25">25</option> |
|||
<option value ="40">40</option> |
|||
<option value ="50">50</option> |
|||
<option value ="100">100</option>--> |
|||
</select> |
|||
</td> |
|||
<td> |
|||
<select name="Criteria"> |
|||
<option value ="" checked>None</option> |
|||
<option value ="issuingbranch">Branch</option> |
|||
<option value ="categorycode">Categorycode</option> |
|||
<option value ="itemtype">Itemtype</option> |
|||
<option value ="Day">Day</option> |
|||
<option value ="Week">Week</option> |
|||
<option value ="Month">Month</option> |
|||
<option value ="Year">Year</option> |
|||
</select> |
|||
</td> |
|||
</tr> |
|||
|
|||
<tr class="hilighted"> |
|||
<td> </td> |
|||
<td> </td> |
|||
<td>Issue date</td> |
|||
<td> From <input type="text" readonly="readonly" size="10" id="from" name="Filter" > |
|||
<img src="<!-- TMPL_VAR Name="themelang" -->/includes/calendar/cal.gif" border="0" hspace="0" vspace="0" id="openCalendarFrom" style="cursor: pointer;" valign="top"> |
|||
<script language="JavaScript" type="text/javascript"> |
|||
function validate1(date) { |
|||
var day = date.getDate(); |
|||
var month = date.getMonth() + 1; |
|||
var year = date.getFullYear(); |
|||
var weekDay = date.getDay(); |
|||
var dayMonth = month + '-' + day; |
|||
var dateString = year + '-' + month + '-' + day; |
|||
var dateTo = document.getElementById('to').value.split("-"); |
|||
var limitDate = new Date(dateTo[0], (dateTo[1] - 1), dateTo[2]); |
|||
if (date > limitDate) { |
|||
return true; |
|||
} else { |
|||
return false; |
|||
} |
|||
} |
|||
|
|||
Calendar.setup( |
|||
{ |
|||
inputField : "from", |
|||
ifFormat : "%Y-%m-%d", |
|||
button : "openCalendarFrom", |
|||
disableFunc : validate1, |
|||
dateStatusFunc : validate1 |
|||
} |
|||
); |
|||
</script> |
|||
To <input readonly="readonly" size="10" id="to" name="Filter" value="" type="text"> |
|||
<img src="<!-- TMPL_VAR Name="themelang" -->/includes/calendar/cal.gif" id="openCalendarTo" style="cursor: pointer;" valign="top" border="0" hspace="0" vspace="0"> |
|||
<script type="text/javascript"> |
|||
function validate2(date) { |
|||
var day = date.getDate(); |
|||
var month = date.getMonth() + 1; |
|||
var year = date.getFullYear(); |
|||
var weekDay = date.getDay(); |
|||
var dayMonth = month + '-' + day; |
|||
var dateString = year + '-' + month + '-' + day; |
|||
var dateFrom = document.getElementById('from').value.split("-"); |
|||
var limitDate = new Date(dateFrom[0], (dateFrom[1] - 1), dateFrom[2]); |
|||
if (limitDate > date) { |
|||
return true; |
|||
} else { |
|||
return false; |
|||
} |
|||
} |
|||
|
|||
Calendar.setup( |
|||
{ |
|||
inputField : "to", |
|||
ifFormat : "%Y-%m-%d", |
|||
button : "openCalendarTo", |
|||
disableFunc : validate2, |
|||
dateStatusFunc : validate2 |
|||
} |
|||
); |
|||
</script> |
|||
</td> |
|||
</tr> |
|||
<tr> |
|||
<td> </td> |
|||
<td> </td> |
|||
<td>Returns</td> |
|||
<td > From <input type="text" readonly="readonly" size="10" id="fromRO" name="Filter" > |
|||
<img src="<!-- TMPL_VAR Name="themelang" -->/includes/calendar/cal.gif" border="0" hspace="0" vspace="0" id="openCalendarFromRO" style="cursor: pointer;" valign="top"> |
|||
<script language="JavaScript" type="text/javascript"> |
|||
function validate1(date) { |
|||
var day = date.getDate(); |
|||
var month = date.getMonth() + 1; |
|||
var year = date.getFullYear(); |
|||
var weekDay = date.getDay(); |
|||
var dayMonth = month + '-' + day; |
|||
var dateString = year + '-' + month + '-' + day; |
|||
var dateTo = document.getElementById('toRO').value.split("-"); |
|||
var limitDate = new Date(dateTo[0], (dateTo[1] - 1), dateTo[2]); |
|||
if (date > limitDate) { |
|||
return true; |
|||
} else { |
|||
return false; |
|||
} |
|||
} |
|||
|
|||
Calendar.setup( |
|||
{ |
|||
inputField : "fromRO", |
|||
ifFormat : "%Y-%m-%d", |
|||
button : "openCalendarFromRO", |
|||
disableFunc : validate1, |
|||
dateStatusFunc : validate1 |
|||
} |
|||
); |
|||
</script> |
|||
To <input type="text" readonly="readonly" size="10" id="toRO" name="Filter" value="" > |
|||
<img src="<!-- TMPL_VAR Name="themelang" -->/includes/calendar/cal.gif" id="openCalendarToRO" style="cursor: pointer;" valign="top" border="0" hspace="0" vspace="0"> |
|||
<script type="text/javascript"> |
|||
function validate2(date) { |
|||
var day = date.getDate(); |
|||
var month = date.getMonth() + 1; |
|||
var year = date.getFullYear(); |
|||
var weekDay = date.getDay(); |
|||
var dayMonth = month + '-' + day; |
|||
var dateString = year + '-' + month + '-' + day; |
|||
var dateFrom = document.getElementById('fromRO').value.split("-"); |
|||
var limitDate = new Date(dateFrom[0], (dateFrom[1] - 1), dateFrom[2]); |
|||
if (limitDate > date) { |
|||
return true; |
|||
} else { |
|||
return false; |
|||
} |
|||
} |
|||
|
|||
Calendar.setup( |
|||
{ |
|||
inputField : "toRO", |
|||
ifFormat : "%Y-%m-%d", |
|||
button : "openCalendarToRO", |
|||
disableFunc : validate2, |
|||
dateStatusFunc : validate2 |
|||
} |
|||
); |
|||
</script> |
|||
</td> |
|||
</tr> |
|||
<tr class="hilighted"> |
|||
<td> </td> |
|||
<td> </td> |
|||
<td>Branch</td> |
|||
<td><input type="text" name="Filter" value=""></td> |
|||
</tr> |
|||
<tr> |
|||
<td> </td> |
|||
<td> </td> |
|||
<td>Document Type</td> |
|||
<td><input type="text" name="Filter" value=""></td> |
|||
</tr> |
|||
<tr class="hilighted"> |
|||
<td> </td> |
|||
<td> </td> |
|||
<td>Borrower Category</td> |
|||
<td><input type="text" name="Filter" value=""></td> |
|||
</tr> |
|||
<tr> |
|||
<td> </td> |
|||
<td> </td> |
|||
<td>Day</td> |
|||
<td><input type="text" name="Filter" value=""></td> |
|||
</tr> |
|||
<tr class="hilighted"> |
|||
<td> </td> |
|||
<td> </td> |
|||
<td>Month</td> |
|||
<td><input type="text" name="Filter" value=""></td> |
|||
</tr> |
|||
<tr> |
|||
<td> </td> |
|||
<td> </td> |
|||
<td>Year</td> |
|||
<td><input type="text" name="Filter" value=""></td> |
|||
</tr> |
|||
</tbody> |
|||
</table> |
|||
|
|||
<div id="bloc25"> |
|||
<h3 class="reports"> Output </h3> |
|||
<input type="radio" checked name="output" value="screen" > To screen into the browser |
|||
<br> |
|||
<input type="radio" name="output" value="file"> To file <input type="text" name="basename" value="Export"> into an application |
|||
<!-- TMPL_VAR NAME="CGIextChoice" --> |
|||
<!-- TMPL_VAR NAME="CGIsepChoice" --> |
|||
</p> |
|||
</div> |
|||
<p> |
|||
<input TYPE="submit" value="OK" class="button reports"> |
|||
<input type="hidden" name="report_name" value="<!--TMPL_VAR NAME="report_name" -->"> |
|||
<input type="hidden" name="do_it" value="1"> |
|||
</form> |
|||
<!-- /TMPL_IF --> |
|||
</div> |
|||
<!-- TMPL_INCLUDE NAME="reports-bottom.inc" --> |
@ -0,0 +1,257 @@ |
|||
<!-- TMPL_INCLUDE NAME="reportswcal-top.inc" --> |
|||
<div id="mainbloc" > |
|||
|
|||
<!-- TMPL_IF NAME="do_it" --> |
|||
<!-- TMPL_LOOP NAME="mainloop" --> |
|||
<h1 class="reports">Koha : Top <!-- TMPL_VAR NAME="limit"--> List On Catalogue Issues </h1> |
|||
<!-- TMPL_IF NAME="loopfilter"--> |
|||
<p>Filtered on</p> |
|||
<!-- TMPL_LOOP NAME="loopfilter" --> |
|||
<p><!-- TMPL_IF NAME="err" --> <font color="red"> <b><!--/TMPL_IF --><label class="label100"> <!-- TMPL_VAR NAME="crit"--> =</label><!-- TMPL_VAR NAME="filter"--><!-- TMPL_IF NAME="err" --> </font> </b><!--/TMPL_IF --></p> |
|||
<!-- /TMPL_LOOP --> |
|||
<!-- /TMPL_IF NAME="loopfilter"--> |
|||
<br> |
|||
<table> |
|||
<tr > |
|||
<th class="reports">Rank/Titles</th> |
|||
<!-- TMPL_LOOP NAME="loopcol" --> |
|||
<th class="reports"><!-- TMPL_VAR NAME="coltitle" --></th> |
|||
<!-- /TMPL_LOOP --> |
|||
</tr> |
|||
<!-- TMPL_LOOP NAME="looprow" --> |
|||
<tr> |
|||
<!-- TMPL_IF NAME="hilighted" --><td class="hilighted"><!-- TMPL_ELSE --><td><!-- /TMPL_IF --> |
|||
<!-- TMPL_VAR NAME="rowtitle" --></td> |
|||
<!-- TMPL_LOOP NAME="loopcell" --> |
|||
<!-- TMPL_IF NAME="hilighted" --><td class="hilighted"><!-- TMPL_ELSE --><td ><!-- /TMPL_IF --> |
|||
<!-- TMPL_IF NAME="value" --><!-- TMPL_VAR NAME="value" --><!-- /TMPL_IF --> |
|||
</td> |
|||
<!-- /TMPL_LOOP --> |
|||
</tr> |
|||
<!-- /TMPL_LOOP NAME="looprow" --> |
|||
</table> |
|||
<!-- /TMPL_LOOP --> |
|||
<!-- TMPL_ELSE --> |
|||
<h1 class = "reports">Koha : Top List On Catalogue Issues </h1> |
|||
<form method="post"> |
|||
|
|||
<table> |
|||
<thead> |
|||
<tr> |
|||
<th class="reports">Limit to </th> |
|||
<th class="reports">By </th> |
|||
<th class="reports" colspan="2">Filters</th> |
|||
</tr> |
|||
</thead> |
|||
<tbody> |
|||
<tr> |
|||
<td> |
|||
<select name="Limit"> |
|||
<option value ="5" checked> 5</option> |
|||
<option value ="10">10</option> |
|||
<option value ="15">15</option> |
|||
<option value ="20">20</option> |
|||
<!-- <option value ="25">25</option> |
|||
<option value ="40">40</option> |
|||
<option value ="50">50</option> |
|||
<option value ="100">100</option>--> |
|||
</select> |
|||
</td> |
|||
<td> |
|||
<select name="Criteria"> |
|||
<option value ="" checked>None</option> |
|||
<option value ="issuingbranch">Branch</option> |
|||
<option value ="categorycode">Categorycode</option> |
|||
<option value ="itemtype">Itemtype</option> |
|||
<option value ="Day">Day</option> |
|||
<option value ="Week">Week</option> |
|||
<option value ="Month">Month</option> |
|||
<option value ="Year">Year</option> |
|||
</select> |
|||
</td> |
|||
</tr> |
|||
|
|||
<tr class="hilighted"> |
|||
<td> </td> |
|||
<td> </td> |
|||
<td>Issue date</td> |
|||
<td> From <input type="text" readonly="readonly" size="10" id="from" name="Filter" > |
|||
<img src="<!-- TMPL_VAR Name="themelang" -->/includes/calendar/cal.gif" border="0" hspace="0" vspace="0" id="openCalendarFrom" style="cursor: pointer;" valign="top"> |
|||
<script language="JavaScript" type="text/javascript"> |
|||
function validate1(date) { |
|||
var day = date.getDate(); |
|||
var month = date.getMonth() + 1; |
|||
var year = date.getFullYear(); |
|||
var weekDay = date.getDay(); |
|||
var dayMonth = month + '-' + day; |
|||
var dateString = year + '-' + month + '-' + day; |
|||
var dateTo = document.getElementById('to').value.split("-"); |
|||
var limitDate = new Date(dateTo[0], (dateTo[1] - 1), dateTo[2]); |
|||
if (date > limitDate) { |
|||
return true; |
|||
} else { |
|||
return false; |
|||
} |
|||
} |
|||
|
|||
Calendar.setup( |
|||
{ |
|||
inputField : "from", |
|||
ifFormat : "%Y-%m-%d", |
|||
button : "openCalendarFrom", |
|||
disableFunc : validate1, |
|||
dateStatusFunc : validate1 |
|||
} |
|||
); |
|||
</script> |
|||
To <input readonly="readonly" size="10" id="to" name="Filter" value="" type="text"> |
|||
<img src="<!-- TMPL_VAR Name="themelang" -->/includes/calendar/cal.gif" id="openCalendarTo" style="cursor: pointer;" valign="top" border="0" hspace="0" vspace="0"> |
|||
<script type="text/javascript"> |
|||
function validate2(date) { |
|||
var day = date.getDate(); |
|||
var month = date.getMonth() + 1; |
|||
var year = date.getFullYear(); |
|||
var weekDay = date.getDay(); |
|||
var dayMonth = month + '-' + day; |
|||
var dateString = year + '-' + month + '-' + day; |
|||
var dateFrom = document.getElementById('from').value.split("-"); |
|||
var limitDate = new Date(dateFrom[0], (dateFrom[1] - 1), dateFrom[2]); |
|||
if (limitDate > date) { |
|||
return true; |
|||
} else { |
|||
return false; |
|||
} |
|||
} |
|||
|
|||
Calendar.setup( |
|||
{ |
|||
inputField : "to", |
|||
ifFormat : "%Y-%m-%d", |
|||
button : "openCalendarTo", |
|||
disableFunc : validate2, |
|||
dateStatusFunc : validate2 |
|||
} |
|||
); |
|||
</script> |
|||
</td> |
|||
</tr> |
|||
<tr> |
|||
<td> </td> |
|||
<td> </td> |
|||
<td>Returns</td> |
|||
<td > From <input type="text" readonly="readonly" size="10" id="fromRO" name="Filter" > |
|||
<img src="<!-- TMPL_VAR Name="themelang" -->/includes/calendar/cal.gif" border="0" hspace="0" vspace="0" id="openCalendarFromRO" style="cursor: pointer;" valign="top"> |
|||
<script language="JavaScript" type="text/javascript"> |
|||
function validate1(date) { |
|||
var day = date.getDate(); |
|||
var month = date.getMonth() + 1; |
|||
var year = date.getFullYear(); |
|||
var weekDay = date.getDay(); |
|||
var dayMonth = month + '-' + day; |
|||
var dateString = year + '-' + month + '-' + day; |
|||
var dateTo = document.getElementById('toRO').value.split("-"); |
|||
var limitDate = new Date(dateTo[0], (dateTo[1] - 1), dateTo[2]); |
|||
if (date > limitDate) { |
|||
return true; |
|||
} else { |
|||
return false; |
|||
} |
|||
} |
|||
|
|||
Calendar.setup( |
|||
{ |
|||
inputField : "fromRO", |
|||
ifFormat : "%Y-%m-%d", |
|||
button : "openCalendarFromRO", |
|||
disableFunc : validate1, |
|||
dateStatusFunc : validate1 |
|||
} |
|||
); |
|||
</script> |
|||
To <input type="text" readonly="readonly" size="10" id="toRO" name="Filter" value="" > |
|||
<img src="<!-- TMPL_VAR Name="themelang" -->/includes/calendar/cal.gif" id="openCalendarToRO" style="cursor: pointer;" valign="top" border="0" hspace="0" vspace="0"> |
|||
<script type="text/javascript"> |
|||
function validate2(date) { |
|||
var day = date.getDate(); |
|||
var month = date.getMonth() + 1; |
|||
var year = date.getFullYear(); |
|||
var weekDay = date.getDay(); |
|||
var dayMonth = month + '-' + day; |
|||
var dateString = year + '-' + month + '-' + day; |
|||
var dateFrom = document.getElementById('fromRO').value.split("-"); |
|||
var limitDate = new Date(dateFrom[0], (dateFrom[1] - 1), dateFrom[2]); |
|||
if (limitDate > date) { |
|||
return true; |
|||
} else { |
|||
return false; |
|||
} |
|||
} |
|||
|
|||
Calendar.setup( |
|||
{ |
|||
inputField : "toRO", |
|||
ifFormat : "%Y-%m-%d", |
|||
button : "openCalendarToRO", |
|||
disableFunc : validate2, |
|||
dateStatusFunc : validate2 |
|||
} |
|||
); |
|||
</script> |
|||
</td> |
|||
</tr> |
|||
<tr class="hilighted"> |
|||
<td> </td> |
|||
<td> </td> |
|||
<td>Branch</td> |
|||
<td><input type="text" name="Filter" value=""></td> |
|||
</tr> |
|||
<tr> |
|||
<td> </td> |
|||
<td> </td> |
|||
<td>Document Type</td> |
|||
<td><input type="text" name="Filter" value=""></td> |
|||
</tr> |
|||
<tr class="hilighted"> |
|||
<td> </td> |
|||
<td> </td> |
|||
<td>Borrower Category</td> |
|||
<td><input type="text" name="Filter" value=""></td> |
|||
</tr> |
|||
<tr> |
|||
<td> </td> |
|||
<td> </td> |
|||
<td>Day</td> |
|||
<td><input type="text" name="Filter" value=""></td> |
|||
</tr> |
|||
<tr class="hilighted"> |
|||
<td> </td> |
|||
<td> </td> |
|||
<td>Month</td> |
|||
<td><input type="text" name="Filter" value=""></td> |
|||
</tr> |
|||
<tr> |
|||
<td> </td> |
|||
<td> </td> |
|||
<td>Year</td> |
|||
<td><input type="text" name="Filter" value=""></td> |
|||
</tr> |
|||
</tbody> |
|||
</table> |
|||
|
|||
<div id="bloc25"> |
|||
<h3 class="reports"> Output </h3> |
|||
<input type="radio" checked name="output" value="screen" > To screen into the browser |
|||
<br> |
|||
<input type="radio" name="output" value="file"> To file <input type="text" name="basename" value="Export"> into an application |
|||
<!-- TMPL_VAR NAME="CGIextChoice" --> |
|||
<!-- TMPL_VAR NAME="CGIsepChoice" --> |
|||
</p> |
|||
</div> |
|||
<p> |
|||
<input TYPE="submit" value="OK" class="button reports"> |
|||
<input type="hidden" name="report_name" value="<!--TMPL_VAR NAME="report_name" -->"> |
|||
<input type="hidden" name="do_it" value="1"> |
|||
</form> |
|||
<!-- /TMPL_IF --> |
|||
</div> |
|||
<!-- TMPL_INCLUDE NAME="reports-bottom.inc" --> |
@ -0,0 +1,384 @@ |
|||
#!/usr/bin/perl |
|||
|
|||
# $Id$ |
|||
|
|||
# Copyright 2000-2002 Katipo Communications |
|||
# |
|||
# This file is part of Koha. |
|||
# |
|||
# Koha is free software; you can redistribute it and/or modify it under the |
|||
# terms of the GNU General Public License as published by the Free Software |
|||
# Foundation; either version 2 of the License, or (at your option) any later |
|||
# version. |
|||
# |
|||
# Koha is distributed in the hope that it will be useful, but WITHOUT ANY |
|||
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR |
|||
# A PARTICULAR PURPOSE. See the GNU General Public License for more details. |
|||
# |
|||
# You should have received a copy of the GNU General Public License along with |
|||
# Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place, |
|||
# Suite 330, Boston, MA 02111-1307 USA |
|||
|
|||
use strict; |
|||
use C4::Auth; |
|||
use CGI; |
|||
use C4::Context; |
|||
use HTML::Template; |
|||
use C4::Search; |
|||
use C4::Output; |
|||
use C4::Koha; |
|||
use C4::Interface::CGI::Output; |
|||
use C4::Circulation::Circ2; |
|||
use Date::Manip; |
|||
|
|||
=head1 NAME |
|||
|
|||
plugin that shows a stats on borrowers |
|||
|
|||
=head1 DESCRIPTION |
|||
|
|||
|
|||
=over2 |
|||
|
|||
=cut |
|||
|
|||
my $input = new CGI; |
|||
my $do_it=$input->param('do_it'); |
|||
my $fullreportname = "reports/bor_issues_top.tmpl"; |
|||
my $limit = $input->param("Limit"); |
|||
my $column = $input->param("Criteria"); |
|||
my @filters = $input->param("Filter"); |
|||
my $output = $input->param("output"); |
|||
my $basename = $input->param("basename"); |
|||
my $mime = $input->param("MIME"); |
|||
my $del = $input->param("sep"); |
|||
#warn "calcul : ".$calc; |
|||
my ($template, $borrowernumber, $cookie) |
|||
= get_template_and_user({template_name => $fullreportname, |
|||
query => $input, |
|||
type => "intranet", |
|||
authnotrequired => 0, |
|||
flagsrequired => {editcatalogue => 1}, |
|||
debug => 1, |
|||
}); |
|||
$template->param(do_it => $do_it); |
|||
if ($do_it) { |
|||
# Displaying results |
|||
my $results = calculate($limit, $column, \@filters); |
|||
if ($output eq "screen"){ |
|||
# Printing results to screen |
|||
$template->param(mainloop => $results); |
|||
output_html_with_http_headers $input, $cookie, $template->output; |
|||
exit(1); |
|||
} else { |
|||
# Printing to a csv file |
|||
print $input->header(-type => 'application/vnd.sun.xml.calc', |
|||
-attachment=>"$basename.csv", |
|||
-filename=>"$basename.csv" ); |
|||
my $cols = @$results[0]->{loopcol}; |
|||
my $lines = @$results[0]->{looprow}; |
|||
my $sep; |
|||
$sep =C4::Context->preference("delimiter"); |
|||
# header top-right |
|||
print @$results[0]->{line} ."/". @$results[0]->{column} .$sep; |
|||
# Other header |
|||
foreach my $col ( @$cols ) { |
|||
print $col->{coltitle}.$sep; |
|||
} |
|||
print "Total\n"; |
|||
# Table |
|||
foreach my $line ( @$lines ) { |
|||
my $x = $line->{loopcell}; |
|||
print $line->{rowtitle}.$sep; |
|||
foreach my $cell (@$x) { |
|||
print $cell->{value}.$sep; |
|||
} |
|||
print $line->{totalrow}; |
|||
print "\n"; |
|||
} |
|||
# footer |
|||
print "TOTAL"; |
|||
$cols = @$results[0]->{loopfooter}; |
|||
foreach my $col ( @$cols ) { |
|||
print $sep.$col->{totalcol}; |
|||
} |
|||
print $sep.@$results[0]->{total}; |
|||
exit(1); |
|||
} |
|||
# Displaying choices |
|||
} else { |
|||
my $dbh = C4::Context->dbh; |
|||
my @values; |
|||
my %labels; |
|||
my %select; |
|||
my $req; |
|||
|
|||
my @mime = ( C4::Context->preference("MIME") ); |
|||
# foreach my $mime (@mime){ |
|||
# warn "".$mime; |
|||
# } |
|||
|
|||
my $CGIextChoice=CGI::scrolling_list( |
|||
-name => 'MIME', |
|||
-id => 'MIME', |
|||
-values => \@mime, |
|||
-size => 1, |
|||
-multiple => 0 ); |
|||
|
|||
my @dels = ( C4::Context->preference("delimiter") ); |
|||
my $CGIsepChoice=CGI::scrolling_list( |
|||
-name => 'sep', |
|||
-id => 'sep', |
|||
-values => \@dels, |
|||
-size => 1, |
|||
-multiple => 0 ); |
|||
|
|||
$template->param( |
|||
CGIextChoice => $CGIextChoice, |
|||
CGIsepChoice => $CGIsepChoice |
|||
); |
|||
output_html_with_http_headers $input, $cookie, $template->output; |
|||
} |
|||
|
|||
|
|||
|
|||
|
|||
sub calculate { |
|||
my ($line, $column, $filters) = @_; |
|||
my @mainloop; |
|||
my @loopfooter; |
|||
my @loopcol; |
|||
my @loopline; |
|||
my @looprow; |
|||
my %globalline; |
|||
my $grantotal =0; |
|||
# extract parameters |
|||
my $dbh = C4::Context->dbh; |
|||
|
|||
# Filters |
|||
# Checking filters |
|||
# |
|||
my @loopfilter; |
|||
for (my $i=0;$i<=6;$i++) { |
|||
my %cell; |
|||
if ( @$filters[$i] ) { |
|||
if (($i==1) and (@$filters[$i-1])) { |
|||
$cell{err} = 1 if (@$filters[$i]<@$filters[$i-1]) ; |
|||
} |
|||
$cell{filter} .= @$filters[$i]; |
|||
$cell{crit} .="Issue From" if ($i==0); |
|||
$cell{crit} .="Issue To" if ($i==1); |
|||
$cell{crit} .="Return From" if ($i==2); |
|||
$cell{crit} .="Return To" if ($i==3); |
|||
$cell{crit} .="Branch" if ($i==4); |
|||
$cell{crit} .="Doc Type" if ($i==5); |
|||
$cell{crit} .="Bor Cat" if ($i==6); |
|||
$cell{crit} .="Day" if ($i==7); |
|||
$cell{crit} .="Month" if ($i==8); |
|||
$cell{crit} .="Year" if ($i==9); |
|||
push @loopfilter, \%cell; |
|||
} |
|||
} |
|||
my $colfield; |
|||
my $colorder; |
|||
if ($column){ |
|||
$column = "issues.".$column if (($column=~/branchcode/) or ($column=~/timestamp/)); |
|||
$column = "biblioitems.".$column if $column=~/itemtype/; |
|||
$column = "borrowers.".$column if $column=~/categorycode/; |
|||
my @colfilter ; |
|||
$colfilter[0] = @$filters[0] if ($column =~ /timestamp/ ) ; |
|||
$colfilter[1] = @$filters[1] if ($column =~ /timestamp/ ) ; |
|||
$colfilter[0] = @$filters[2] if ($column =~ /returndate/ ) ; |
|||
$colfilter[1] = @$filters[3] if ($column =~ /returndate/ ) ; |
|||
$colfilter[0] = @$filters[4] if ($column =~ /branch/ ) ; |
|||
$colfilter[0] = @$filters[5] if ($column =~ /itemtype/ ) ; |
|||
$colfilter[0] = @$filters[6] if ($column =~ /category/ ) ; |
|||
# $colfilter[0] = @$filters[11] if ($column =~ /sort2/ ) ; |
|||
$colfilter[0] = @$filters[7] if ($column =~ /timestamp/ ) ; |
|||
$colfilter[0] = @$filters[8] if ($column =~ /timestamp/ ) ; |
|||
$colfilter[0] = @$filters[9] if ($column =~ /timestamp/ ) ; |
|||
#warn "filtre col ".$colfilter[0]." ".$colfilter[1]; |
|||
|
|||
# loop cols. |
|||
if ($column eq "Day") { |
|||
#Display by day |
|||
$column = "issues.timestamp"; |
|||
$colfield .="dayname($column)"; |
|||
$colorder .="weekday($column)"; |
|||
} elsif ($column eq "Month") { |
|||
#Display by Month |
|||
$column = "issues.timestamp"; |
|||
$colfield .="monthname($column)"; |
|||
$colorder .="month($column)"; |
|||
} elsif ($column eq "Year") { |
|||
#Display by Year |
|||
$column = "issues.timestamp"; |
|||
$colfield .="Year($column)"; |
|||
$colorder .= $column; |
|||
} else { |
|||
$colfield .= $column; |
|||
$colorder .= $column; |
|||
} |
|||
|
|||
my $strsth2; |
|||
$strsth2 .= "select distinctrow $colfield FROM `issues`,borrowers,biblioitems LEFT JOIN items ON (biblioitems.biblioitemnumber=items.biblioitemnumber) WHERE issues.itemnumber=items.itemnumber AND issues.borrowernumber=borrowers.borrowernumber and returndate is not null"; |
|||
if (($column=~/timestamp/) or ($column=~/returndate/)){ |
|||
if ($colfilter[1] and ($colfilter[0])){ |
|||
$strsth2 .= " and $column between '$colfilter[0]' and '$colfilter[1]' " ; |
|||
} elsif ($colfilter[1]) { |
|||
$strsth2 .= " and $column < '$colfilter[1]' " ; |
|||
} elsif ($colfilter[0]) { |
|||
$strsth2 .= " and $column > '$colfilter[0]' " ; |
|||
} |
|||
} elsif ($colfilter[0]) { |
|||
$colfilter[0] =~ s/\*/%/g; |
|||
$strsth2 .= " and $column LIKE '$colfilter[0]' " ; |
|||
} |
|||
$strsth2 .=" group by $colfield"; |
|||
$strsth2 .=" order by $colorder"; |
|||
warn "". $strsth2; |
|||
|
|||
my $sth2 = $dbh->prepare( $strsth2 ); |
|||
if (( @colfilter ) and ($colfilter[1])){ |
|||
$sth2->execute("'".$colfilter[0]."'","'".$colfilter[1]."'"); |
|||
} elsif ($colfilter[0]) { |
|||
$sth2->execute($colfilter[0]); |
|||
} else { |
|||
$sth2->execute; |
|||
} |
|||
|
|||
|
|||
while (my ($celvalue) = $sth2->fetchrow) { |
|||
my %cell; |
|||
# my %ft; |
|||
# warn "coltitle :".$celvalue; |
|||
$cell{coltitle} = $celvalue; |
|||
# $ft{totalcol} = 0; |
|||
push @loopcol, \%cell; |
|||
} |
|||
# warn "fin des titres colonnes"; |
|||
} |
|||
|
|||
my $i=0; |
|||
# my @totalcol; |
|||
my $hilighted=-1; |
|||
|
|||
#Initialization of cell values..... |
|||
my @table; |
|||
|
|||
# warn "init table"; |
|||
for (my $i=1;$i<=$line;$i++) { |
|||
foreach my $col ( @loopcol ) { |
|||
# warn " init table : $row->{rowtitle} / $col->{coltitle} "; |
|||
$table[$i]->{($col->{coltitle})?$col->{coltitle}:"total"}=0; |
|||
} |
|||
} |
|||
|
|||
|
|||
# preparing calculation |
|||
my $strcalc ; |
|||
|
|||
# Processing average loanperiods |
|||
$strcalc .= "SELECT CONCAT( borrowers.surname , \"\\t\",borrowers.firstname, \"\\t\", borrowers.cardnumber) , COUNT(*) AS RANK"; |
|||
$strcalc .= " , $colfield " if ($colfield); |
|||
$strcalc .= " FROM `issues`,borrowers,biblioitems LEFT JOIN items ON (biblioitems.biblioitemnumber=items.biblioitemnumber) LEFT JOIN issuingrules ON (issuingrules.branchcode=issues.branchcode AND issuingrules.itemtype=biblioitems.itemtype AND issuingrules.categorycode=borrowers.categorycode) WHERE issues.itemnumber=items.itemnumber AND issues.borrowernumber=borrowers.borrowernumber and returndate is not null"; |
|||
|
|||
@$filters[0]=~ s/\*/%/g if (@$filters[0]); |
|||
$strcalc .= " AND issues.timestamp > '" . @$filters[0] ."'" if ( @$filters[0] ); |
|||
@$filters[1]=~ s/\*/%/g if (@$filters[1]); |
|||
$strcalc .= " AND issues.timestamp < '" . @$filters[1] ."'" if ( @$filters[1] ); |
|||
@$filters[2]=~ s/\*/%/g if (@$filters[2]); |
|||
$strcalc .= " AND issues.returndate > '" . @$filters[2] ."'" if ( @$filters[2] ); |
|||
@$filters[3]=~ s/\*/%/g if (@$filters[3]); |
|||
$strcalc .= " AND issues.returndate < '" . @$filters[3] ."'" if ( @$filters[3] ); |
|||
@$filters[4]=~ s/\*/%/g if (@$filters[4]); |
|||
$strcalc .= " AND issues.branchcode like '" . @$filters[4] ."'" if ( @$filters[4] ); |
|||
@$filters[5]=~ s/\*/%/g if (@$filters[5]); |
|||
$strcalc .= " AND biblioitems.itemtype like '" . @$filters[5] ."'" if ( @$filters[5] ); |
|||
@$filters[6]=~ s/\*/%/g if (@$filters[6]); |
|||
$strcalc .= " AND borrowers.categorycode like '" . @$filters[6] ."'" if ( @$filters[6] ); |
|||
@$filters[7]=~ s/\*/%/g if (@$filters[7]); |
|||
$strcalc .= " AND dayname(issues.timestamp) like '" . @$filters[7]."'" if (@$filters[7]); |
|||
@$filters[8]=~ s/\*/%/g if (@$filters[8]); |
|||
$strcalc .= " AND monthname(issues.timestamp) like '" . @$filters[8]."'" if (@$filters[8]); |
|||
@$filters[9]=~ s/\*/%/g if (@$filters[9]); |
|||
$strcalc .= " AND year(issues.timestamp) like '" . @$filters[9] ."'" if ( @$filters[9] ); |
|||
|
|||
$strcalc .= " group by borrowers.borrowernumber"; |
|||
$strcalc .= ", $colfield" if ($column); |
|||
$strcalc .= " order by "; |
|||
$strcalc .= "$colfield, " if ($colfield); |
|||
$strcalc .= "RANK DESC "; |
|||
my $max; |
|||
if (@loopcol) { |
|||
$max = $line*@loopcol; |
|||
} else { $max=$line;} |
|||
$strcalc .= " LIMIT 0,$max"; |
|||
warn "SQL :". $strcalc; |
|||
|
|||
my $dbcalc = $dbh->prepare($strcalc); |
|||
$dbcalc->execute; |
|||
# warn "filling table"; |
|||
my $previous_col; |
|||
my $i=1; |
|||
while (my @data = $dbcalc->fetchrow) { |
|||
my ($row, $rank, $col )=@data; |
|||
# warn "filling table $row / $col / $issuedate / $returndate /$weight"; |
|||
$col = "zzEMPTY" if ($col eq undef); |
|||
$table[$i]->{$col}=$row; |
|||
warn " ".$i." ".$col. " ".$row; |
|||
$i++; |
|||
$i=1 if (($previous_col) and not($col eq $previous_col)); |
|||
$previous_col=$col; |
|||
# $table{$row}->{totalrow}+=$weight*$loanlength; |
|||
} |
|||
|
|||
push @loopcol,{coltitle => "Global"}; |
|||
|
|||
for ($i=1; $i<=$line;$i++) { |
|||
warn " ".$i; |
|||
my @loopcell; |
|||
#@loopcol ensures the order for columns is common with column titles |
|||
# and the number matches the number of columns |
|||
my $colcount=0; |
|||
foreach my $col ( @loopcol ) { |
|||
my $value; |
|||
if (@loopcol){ |
|||
#warn " test ".(($col->{coltitle} eq "NULL") or ($col->{coltitle} eq "Global"))?"zzEMPTY":$col->{coltitle}; |
|||
$value =$table[$i]->{(($col->{coltitle} eq "NULL") or ($col->{coltitle} eq "Global"))?"zzEMPTY":$col->{coltitle}}; |
|||
} else { |
|||
$value =$table[$i]->{"zzEMPTY"}; |
|||
} |
|||
# $table{$row}->{(($col->{coltitle} eq "NULL")or ($col->{coltitle} eq ""))?"zzEMPTY":$col->{coltitle}} = $value; |
|||
#$table{$row}->{totalrow}+=$value; |
|||
#warn "row : $row col:$col $cnttable{$row}->{(($col->{coltitle} eq \"NULL\")or ($col->{coltitle} eq \"\"))?\"zzEMPTY\":$col->{coltitle}}"; |
|||
# $colcount+=$cnttable{$row}->{(($col->{coltitle} eq "NULL")or ($col->{coltitle} eq ""))?"zzEMPTY":$col->{coltitle}}; |
|||
push @loopcell, {value => $value} ; |
|||
} |
|||
#warn "row : $row colcount:$colcount"; |
|||
#my $total = $table[$i]->{totalrow}/$colcount if ($colcount>0); |
|||
push @looprow,{ 'rowtitle' => $i , |
|||
'loopcell' => \@loopcell, |
|||
'hilighted' => ($hilighted >0), |
|||
#'totalrow' => ($total)?sprintf("%.2f",$total):0 |
|||
}; |
|||
$hilighted = -$hilighted; |
|||
} |
|||
# |
|||
|
|||
|
|||
# the header of the table |
|||
$globalline{loopfilter}=\@loopfilter; |
|||
# the core of the table |
|||
$globalline{looprow} = \@looprow; |
|||
$globalline{loopcol} = \@loopcol; |
|||
# # the foot (totals by borrower type) |
|||
$globalline{loopfooter} = \@loopfooter; |
|||
$globalline{total}= $grantotal; |
|||
$globalline{line} = $line; |
|||
$globalline{column} = $column; |
|||
push @mainloop,\%globalline; |
|||
return \@mainloop; |
|||
} |
|||
|
|||
1; |
@ -0,0 +1,384 @@ |
|||
#!/usr/bin/perl |
|||
|
|||
# $Id$ |
|||
|
|||
# Copyright 2000-2002 Katipo Communications |
|||
# |
|||
# This file is part of Koha. |
|||
# |
|||
# Koha is free software; you can redistribute it and/or modify it under the |
|||
# terms of the GNU General Public License as published by the Free Software |
|||
# Foundation; either version 2 of the License, or (at your option) any later |
|||
# version. |
|||
# |
|||
# Koha is distributed in the hope that it will be useful, but WITHOUT ANY |
|||
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR |
|||
# A PARTICULAR PURPOSE. See the GNU General Public License for more details. |
|||
# |
|||
# You should have received a copy of the GNU General Public License along with |
|||
# Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place, |
|||
# Suite 330, Boston, MA 02111-1307 USA |
|||
|
|||
use strict; |
|||
use C4::Auth; |
|||
use CGI; |
|||
use C4::Context; |
|||
use HTML::Template; |
|||
use C4::Search; |
|||
use C4::Output; |
|||
use C4::Koha; |
|||
use C4::Interface::CGI::Output; |
|||
use C4::Circulation::Circ2; |
|||
use Date::Manip; |
|||
|
|||
=head1 NAME |
|||
|
|||
plugin that shows a stats on borrowers |
|||
|
|||
=head1 DESCRIPTION |
|||
|
|||
|
|||
=over2 |
|||
|
|||
=cut |
|||
|
|||
my $input = new CGI; |
|||
my $do_it=$input->param('do_it'); |
|||
my $fullreportname = "reports/cat_issues_top.tmpl"; |
|||
my $limit = $input->param("Limit"); |
|||
my $column = $input->param("Criteria"); |
|||
my @filters = $input->param("Filter"); |
|||
my $output = $input->param("output"); |
|||
my $basename = $input->param("basename"); |
|||
my $mime = $input->param("MIME"); |
|||
my $del = $input->param("sep"); |
|||
#warn "calcul : ".$calc; |
|||
my ($template, $borrowernumber, $cookie) |
|||
= get_template_and_user({template_name => $fullreportname, |
|||
query => $input, |
|||
type => "intranet", |
|||
authnotrequired => 0, |
|||
flagsrequired => {editcatalogue => 1}, |
|||
debug => 1, |
|||
}); |
|||
$template->param(do_it => $do_it); |
|||
if ($do_it) { |
|||
# Displaying results |
|||
my $results = calculate($limit, $column, \@filters); |
|||
if ($output eq "screen"){ |
|||
# Printing results to screen |
|||
$template->param(mainloop => $results); |
|||
output_html_with_http_headers $input, $cookie, $template->output; |
|||
exit(1); |
|||
} else { |
|||
# Printing to a csv file |
|||
print $input->header(-type => 'application/vnd.sun.xml.calc', |
|||
-attachment=>"$basename.csv", |
|||
-filename=>"$basename.csv" ); |
|||
my $cols = @$results[0]->{loopcol}; |
|||
my $lines = @$results[0]->{looprow}; |
|||
my $sep; |
|||
$sep =C4::Context->preference("delimiter"); |
|||
# header top-right |
|||
print @$results[0]->{line} ."/". @$results[0]->{column} .$sep; |
|||
# Other header |
|||
foreach my $col ( @$cols ) { |
|||
print $col->{coltitle}.$sep; |
|||
} |
|||
print "Total\n"; |
|||
# Table |
|||
foreach my $line ( @$lines ) { |
|||
my $x = $line->{loopcell}; |
|||
print $line->{rowtitle}.$sep; |
|||
foreach my $cell (@$x) { |
|||
print $cell->{value}.$sep; |
|||
} |
|||
print $line->{totalrow}; |
|||
print "\n"; |
|||
} |
|||
# footer |
|||
print "TOTAL"; |
|||
$cols = @$results[0]->{loopfooter}; |
|||
foreach my $col ( @$cols ) { |
|||
print $sep.$col->{totalcol}; |
|||
} |
|||
print $sep.@$results[0]->{total}; |
|||
exit(1); |
|||
} |
|||
# Displaying choices |
|||
} else { |
|||
my $dbh = C4::Context->dbh; |
|||
my @values; |
|||
my %labels; |
|||
my %select; |
|||
my $req; |
|||
|
|||
my @mime = ( C4::Context->preference("MIME") ); |
|||
# foreach my $mime (@mime){ |
|||
# warn "".$mime; |
|||
# } |
|||
|
|||
my $CGIextChoice=CGI::scrolling_list( |
|||
-name => 'MIME', |
|||
-id => 'MIME', |
|||
-values => \@mime, |
|||
-size => 1, |
|||
-multiple => 0 ); |
|||
|
|||
my @dels = ( C4::Context->preference("delimiter") ); |
|||
my $CGIsepChoice=CGI::scrolling_list( |
|||
-name => 'sep', |
|||
-id => 'sep', |
|||
-values => \@dels, |
|||
-size => 1, |
|||
-multiple => 0 ); |
|||
|
|||
$template->param( |
|||
CGIextChoice => $CGIextChoice, |
|||
CGIsepChoice => $CGIsepChoice |
|||
); |
|||
output_html_with_http_headers $input, $cookie, $template->output; |
|||
} |
|||
|
|||
|
|||
|
|||
|
|||
sub calculate { |
|||
my ($line, $column, $filters) = @_; |
|||
my @mainloop; |
|||
my @loopfooter; |
|||
my @loopcol; |
|||
my @loopline; |
|||
my @looprow; |
|||
my %globalline; |
|||
my $grantotal =0; |
|||
# extract parameters |
|||
my $dbh = C4::Context->dbh; |
|||
|
|||
# Filters |
|||
# Checking filters |
|||
# |
|||
my @loopfilter; |
|||
for (my $i=0;$i<=6;$i++) { |
|||
my %cell; |
|||
if ( @$filters[$i] ) { |
|||
if (($i==1) and (@$filters[$i-1])) { |
|||
$cell{err} = 1 if (@$filters[$i]<@$filters[$i-1]) ; |
|||
} |
|||
$cell{filter} .= @$filters[$i]; |
|||
$cell{crit} .="Issue From" if ($i==0); |
|||
$cell{crit} .="Issue To" if ($i==1); |
|||
$cell{crit} .="Return From" if ($i==2); |
|||
$cell{crit} .="Return To" if ($i==3); |
|||
$cell{crit} .="Branch" if ($i==4); |
|||
$cell{crit} .="Doc Type" if ($i==5); |
|||
$cell{crit} .="Bor Cat" if ($i==6); |
|||
$cell{crit} .="Day" if ($i==7); |
|||
$cell{crit} .="Month" if ($i==8); |
|||
$cell{crit} .="Year" if ($i==9); |
|||
push @loopfilter, \%cell; |
|||
} |
|||
} |
|||
my $colfield; |
|||
my $colorder; |
|||
if ($column){ |
|||
$column = "issues.".$column if (($column=~/branchcode/) or ($column=~/timestamp/)); |
|||
$column = "biblioitems.".$column if $column=~/itemtype/; |
|||
$column = "borrowers.".$column if $column=~/categorycode/; |
|||
my @colfilter ; |
|||
$colfilter[0] = @$filters[0] if ($column =~ /timestamp/ ) ; |
|||
$colfilter[1] = @$filters[1] if ($column =~ /timestamp/ ) ; |
|||
$colfilter[0] = @$filters[2] if ($column =~ /returndate/ ) ; |
|||
$colfilter[1] = @$filters[3] if ($column =~ /returndate/ ) ; |
|||
$colfilter[0] = @$filters[4] if ($column =~ /branch/ ) ; |
|||
$colfilter[0] = @$filters[5] if ($column =~ /itemtype/ ) ; |
|||
$colfilter[0] = @$filters[6] if ($column =~ /category/ ) ; |
|||
# $colfilter[0] = @$filters[11] if ($column =~ /sort2/ ) ; |
|||
$colfilter[0] = @$filters[7] if ($column =~ /timestamp/ ) ; |
|||
$colfilter[0] = @$filters[8] if ($column =~ /timestamp/ ) ; |
|||
$colfilter[0] = @$filters[9] if ($column =~ /timestamp/ ) ; |
|||
#warn "filtre col ".$colfilter[0]." ".$colfilter[1]; |
|||
|
|||
# loop cols. |
|||
if ($column eq "Day") { |
|||
#Display by day |
|||
$column = "issues.timestamp"; |
|||
$colfield .="dayname($column)"; |
|||
$colorder .="weekday($column)"; |
|||
} elsif ($column eq "Month") { |
|||
#Display by Month |
|||
$column = "issues.timestamp"; |
|||
$colfield .="monthname($column)"; |
|||
$colorder .="month($column)"; |
|||
} elsif ($column eq "Year") { |
|||
#Display by Year |
|||
$column = "issues.timestamp"; |
|||
$colfield .="Year($column)"; |
|||
$colorder .= $column; |
|||
} else { |
|||
$colfield .= $column; |
|||
$colorder .= $column; |
|||
} |
|||
|
|||
my $strsth2; |
|||
$strsth2 .= "select distinctrow $colfield FROM `issues`,borrowers,biblioitems LEFT JOIN items ON (biblioitems.biblioitemnumber=items.biblioitemnumber) WHERE issues.itemnumber=items.itemnumber AND issues.borrowernumber=borrowers.borrowernumber and returndate is not null"; |
|||
if (($column=~/timestamp/) or ($column=~/returndate/)){ |
|||
if ($colfilter[1] and ($colfilter[0])){ |
|||
$strsth2 .= " and $column between '$colfilter[0]' and '$colfilter[1]' " ; |
|||
} elsif ($colfilter[1]) { |
|||
$strsth2 .= " and $column < '$colfilter[1]' " ; |
|||
} elsif ($colfilter[0]) { |
|||
$strsth2 .= " and $column > '$colfilter[0]' " ; |
|||
} |
|||
} elsif ($colfilter[0]) { |
|||
$colfilter[0] =~ s/\*/%/g; |
|||
$strsth2 .= " and $column LIKE '$colfilter[0]' " ; |
|||
} |
|||
$strsth2 .=" group by $colfield"; |
|||
$strsth2 .=" order by $colorder"; |
|||
warn "". $strsth2; |
|||
|
|||
my $sth2 = $dbh->prepare( $strsth2 ); |
|||
if (( @colfilter ) and ($colfilter[1])){ |
|||
$sth2->execute("'".$colfilter[0]."'","'".$colfilter[1]."'"); |
|||
} elsif ($colfilter[0]) { |
|||
$sth2->execute($colfilter[0]); |
|||
} else { |
|||
$sth2->execute; |
|||
} |
|||
|
|||
|
|||
while (my ($celvalue) = $sth2->fetchrow) { |
|||
my %cell; |
|||
# my %ft; |
|||
# warn "coltitle :".$celvalue; |
|||
$cell{coltitle} = $celvalue; |
|||
# $ft{totalcol} = 0; |
|||
push @loopcol, \%cell; |
|||
} |
|||
# warn "fin des titres colonnes"; |
|||
} |
|||
|
|||
my $i=0; |
|||
# my @totalcol; |
|||
my $hilighted=-1; |
|||
|
|||
#Initialization of cell values..... |
|||
my @table; |
|||
|
|||
# warn "init table"; |
|||
for (my $i=1;$i<=$line;$i++) { |
|||
foreach my $col ( @loopcol ) { |
|||
# warn " init table : $row->{rowtitle} / $col->{coltitle} "; |
|||
$table[$i]->{($col->{coltitle})?$col->{coltitle}:"total"}=0; |
|||
} |
|||
} |
|||
|
|||
|
|||
# preparing calculation |
|||
my $strcalc ; |
|||
|
|||
# Processing average loanperiods |
|||
$strcalc .= "SELECT CONCAT( biblioitems.biblioitemnumber) , COUNT(*) AS RANK"; |
|||
$strcalc .= " , $colfield " if ($colfield); |
|||
$strcalc .= " FROM `issues`,borrowers,biblioitems LEFT JOIN items ON (biblioitems.biblioitemnumber=items.biblioitemnumber) LEFT JOIN issuingrules ON (issuingrules.branchcode=issues.branchcode AND issuingrules.itemtype=biblioitems.itemtype AND issuingrules.categorycode=borrowers.categorycode) WHERE issues.itemnumber=items.itemnumber AND issues.borrowernumber=borrowers.borrowernumber and returndate is not null"; |
|||
|
|||
@$filters[0]=~ s/\*/%/g if (@$filters[0]); |
|||
$strcalc .= " AND issues.timestamp > '" . @$filters[0] ."'" if ( @$filters[0] ); |
|||
@$filters[1]=~ s/\*/%/g if (@$filters[1]); |
|||
$strcalc .= " AND issues.timestamp < '" . @$filters[1] ."'" if ( @$filters[1] ); |
|||
@$filters[2]=~ s/\*/%/g if (@$filters[2]); |
|||
$strcalc .= " AND issues.returndate > '" . @$filters[2] ."'" if ( @$filters[2] ); |
|||
@$filters[3]=~ s/\*/%/g if (@$filters[3]); |
|||
$strcalc .= " AND issues.returndate < '" . @$filters[3] ."'" if ( @$filters[3] ); |
|||
@$filters[4]=~ s/\*/%/g if (@$filters[4]); |
|||
$strcalc .= " AND issues.branchcode like '" . @$filters[4] ."'" if ( @$filters[4] ); |
|||
@$filters[5]=~ s/\*/%/g if (@$filters[5]); |
|||
$strcalc .= " AND biblioitems.itemtype like '" . @$filters[5] ."'" if ( @$filters[5] ); |
|||
@$filters[6]=~ s/\*/%/g if (@$filters[6]); |
|||
$strcalc .= " AND borrowers.categorycode like '" . @$filters[6] ."'" if ( @$filters[6] ); |
|||
@$filters[7]=~ s/\*/%/g if (@$filters[7]); |
|||
$strcalc .= " AND dayname(issues.timestamp) like '" . @$filters[7]."'" if (@$filters[7]); |
|||
@$filters[8]=~ s/\*/%/g if (@$filters[8]); |
|||
$strcalc .= " AND monthname(issues.timestamp) like '" . @$filters[8]."'" if (@$filters[8]); |
|||
@$filters[9]=~ s/\*/%/g if (@$filters[9]); |
|||
$strcalc .= " AND year(issues.timestamp) like '" . @$filters[9] ."'" if ( @$filters[9] ); |
|||
|
|||
$strcalc .= " group by borrowers.borrowernumber"; |
|||
$strcalc .= ", $colfield" if ($column); |
|||
$strcalc .= " order by "; |
|||
$strcalc .= "$colfield, " if ($colfield); |
|||
$strcalc .= "RANK DESC "; |
|||
my $max; |
|||
if (@loopcol) { |
|||
$max = $line*@loopcol; |
|||
} else { $max=$line;} |
|||
$strcalc .= " LIMIT 0,$max"; |
|||
warn "SQL :". $strcalc; |
|||
|
|||
my $dbcalc = $dbh->prepare($strcalc); |
|||
$dbcalc->execute; |
|||
# warn "filling table"; |
|||
my $previous_col; |
|||
my $i=1; |
|||
while (my @data = $dbcalc->fetchrow) { |
|||
my ($row, $rank, $col )=@data; |
|||
# warn "filling table $row / $col / $issuedate / $returndate /$weight"; |
|||
$col = "zzEMPTY" if ($col eq undef); |
|||
$table[$i]->{$col}=$row; |
|||
warn " ".$i." ".$col. " ".$row; |
|||
$i++; |
|||
$i=1 if (($previous_col) and not($col eq $previous_col)); |
|||
$previous_col=$col; |
|||
# $table{$row}->{totalrow}+=$weight*$loanlength; |
|||
} |
|||
|
|||
push @loopcol,{coltitle => "Global"}; |
|||
|
|||
for ($i=1; $i<=$line;$i++) { |
|||
warn " ".$i; |
|||
my @loopcell; |
|||
#@loopcol ensures the order for columns is common with column titles |
|||
# and the number matches the number of columns |
|||
my $colcount=0; |
|||
foreach my $col ( @loopcol ) { |
|||
my $value; |
|||
if (@loopcol){ |
|||
#warn " test ".(($col->{coltitle} eq "NULL") or ($col->{coltitle} eq "Global"))?"zzEMPTY":$col->{coltitle}; |
|||
$value =$table[$i]->{(($col->{coltitle} eq "NULL") or ($col->{coltitle} eq "Global"))?"zzEMPTY":$col->{coltitle}}; |
|||
} else { |
|||
$value =$table[$i]->{"zzEMPTY"}; |
|||
} |
|||
# $table{$row}->{(($col->{coltitle} eq "NULL")or ($col->{coltitle} eq ""))?"zzEMPTY":$col->{coltitle}} = $value; |
|||
#$table{$row}->{totalrow}+=$value; |
|||
#warn "row : $row col:$col $cnttable{$row}->{(($col->{coltitle} eq \"NULL\")or ($col->{coltitle} eq \"\"))?\"zzEMPTY\":$col->{coltitle}}"; |
|||
# $colcount+=$cnttable{$row}->{(($col->{coltitle} eq "NULL")or ($col->{coltitle} eq ""))?"zzEMPTY":$col->{coltitle}}; |
|||
push @loopcell, {value => $value} ; |
|||
} |
|||
#warn "row : $row colcount:$colcount"; |
|||
#my $total = $table[$i]->{totalrow}/$colcount if ($colcount>0); |
|||
push @looprow,{ 'rowtitle' => $i , |
|||
'loopcell' => \@loopcell, |
|||
'hilighted' => ($hilighted >0), |
|||
#'totalrow' => ($total)?sprintf("%.2f",$total):0 |
|||
}; |
|||
$hilighted = -$hilighted; |
|||
} |
|||
# |
|||
|
|||
|
|||
# the header of the table |
|||
$globalline{loopfilter}=\@loopfilter; |
|||
# the core of the table |
|||
$globalline{looprow} = \@looprow; |
|||
$globalline{loopcol} = \@loopcol; |
|||
# # the foot (totals by borrower type) |
|||
$globalline{loopfooter} = \@loopfooter; |
|||
$globalline{total}= $grantotal; |
|||
$globalline{line} = $line; |
|||
$globalline{column} = $column; |
|||
push @mainloop,\%globalline; |
|||
return \@mainloop; |
|||
} |
|||
|
|||
1; |
Loading…
Reference in new issue