3 changed files with 766 additions and 0 deletions
@ -0,0 +1,265 @@ |
|||
<!-- TMPL_INCLUDE NAME="reportswcal-top.inc" --> |
|||
<div id="mainbloc" > |
|||
|
|||
<!-- TMPL_IF NAME="do_it" --> |
|||
<!-- TMPL_LOOP NAME="mainloop" --> |
|||
<h1 class="reports">Koha : Acquisitions statistics </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"><!-- TMPL_VAR name="line" --> / <!-- TMPL_VAR name="column" --></th> |
|||
<!-- TMPL_LOOP NAME="loopcol" --> |
|||
<th class="reports"><!-- TMPL_VAR NAME="coltitle" --></th> |
|||
<!-- /TMPL_LOOP --> |
|||
<th class="reports">TOTAL</th> |
|||
</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="numberhilighted"><!-- TMPL_ELSE --><td class="number"><!-- /TMPL_IF --> |
|||
<!-- TMPL_VAR NAME="value" --> |
|||
</td> |
|||
<!-- /TMPL_LOOP --> |
|||
<!-- TMPL_IF NAME="hilighted" --><td class="numberhilighted"><!-- TMPL_ELSE --><td class="number"><!-- /TMPL_IF --> |
|||
<!-- TMPL_VAR NAME="totalrow" --> |
|||
</td> |
|||
</tr> |
|||
<!-- /TMPL_LOOP NAME="looprow" --> |
|||
<tr > |
|||
<th class="reports">TOTAL</th> |
|||
<!-- TMPL_LOOP NAME="loopfooter" --> |
|||
<th class="reports"> |
|||
<!-- TMPL_VAR NAME="totalcol" --> |
|||
</th> |
|||
<!-- /TMPL_LOOP --> |
|||
<th class="reports"><!-- TMPL_VAR NAME="total" --></th> |
|||
</tr> |
|||
</table> |
|||
<!-- /TMPL_LOOP --> |
|||
<!-- TMPL_ELSE --> |
|||
<h1 class = "reports">Koha : Acquisitions statistics </h1> |
|||
<form method="post"> |
|||
<table> |
|||
<thead> |
|||
<tr> |
|||
<th class="reports"><div class="label100">Title</div></th> |
|||
<th class="reports">Row</th> |
|||
<th class="reports">Column</th> |
|||
<th class="reports">Filter</th> |
|||
</tr> |
|||
</thead> |
|||
<tbody> |
|||
<tr class="hilighted"> |
|||
<td>Placed On</td> |
|||
<td align="center"><input type="radio" name="Line" value="aqbasket.closedate"></td> |
|||
<td align="center"><input type="radio" name="Column" value="aqbasket.closedate"></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 class="hilighted"> |
|||
<td> </td> |
|||
<td align="center" colspan="2">by <select name="PlacedOnDisplay"> |
|||
<option value=""> </option> |
|||
<option value ="1">Day</option> |
|||
<option value ="2">Month</option> |
|||
<option value ="3">Year</option> |
|||
</select> |
|||
|
|||
</td> |
|||
<td> </td> |
|||
</tr> |
|||
<tr> |
|||
<td>Received On</td> |
|||
<td align="center"><input type="radio" name="Line" value="aqorderdelivery.deliverydate"></td> |
|||
<td align="center"><input type="radio" name="Column" value="aqorderdelivery.deliverydate"></td> |
|||
<td > From <input type="text" readonly="readonly" size="10" id="fromRO" name="fromRO" > |
|||
<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="toRO" 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> |
|||
<td> </td> |
|||
<td align="center" colspan="2">by <select name="ReceivedOnDisplay"> |
|||
<option value=""> </option> |
|||
<option value ="1">Day</option> |
|||
<option value ="2">Month</option> |
|||
<option value ="3">Year</option> |
|||
</select> |
|||
|
|||
</td> |
|||
<td> </td> |
|||
</tr> |
|||
<tr class="hilighted"> |
|||
<td>Book Seller</td> |
|||
<td align="center"><input type="radio" name="Line" value="aqbooksellers.id"></td> |
|||
<td align="center"><input type="radio" name="Column" value="aqbooksellers.id"></td> |
|||
<td ><!-- TMPL_VAR NAME="CGIBookSeller" --></td> |
|||
</tr> |
|||
<tr> |
|||
<td>Budget</td> |
|||
<td align="center"><input type="radio" name="Line" value="aqorderbreakdown.bookfundid"></td> |
|||
<td align="center"><input type="radio" name="Column" value="aqorderbreakdown.bookfundid"></td> |
|||
<td ><!-- TMPL_VAR NAME="CGIBudget" --></td> |
|||
</tr> |
|||
<!-- TMPL_IF Name="hassort1" --> |
|||
<tr class="hilighted"> |
|||
<td>Sort1</td> |
|||
<td align="center"><input type="radio" name="Line" value="aqorders.sort1"></td> |
|||
<td align="center"><input type="radio" name="Column" value="aqorders.sort1"></td> |
|||
<td><!-- TMPL_VAR NAME="CGISort1" --> </td> |
|||
</tr> |
|||
<!-- /TMPL_IF --> |
|||
<!-- TMPL_IF Name="hassort2" --> |
|||
<!-- TMPL_IF Name="HglghtSort2"--><tr class="hilighted"> <!-- TMPL_ELSE --><tr><!--/TMPL_IF --> |
|||
<td>Sort2</td> |
|||
<td align="center"><input type="radio" name="Line" value="aqorders.sort2"></td> |
|||
<td align="center"><input type="radio" name="Column" value="aqorders.sort2"></td> |
|||
<td><!-- TMPL_VAR NAME="CGISort2" --> </td> |
|||
</tr> |
|||
<!-- /TMPL_IF --> |
|||
<tr></tr> |
|||
</tbody> |
|||
</table> |
|||
|
|||
<div id="bloc25"> |
|||
<h3 class="reports"> Cell value </h3> |
|||
<input type="radio" name="Cellvalue" value="1"> Count items |
|||
<input type="radio" name="Cellvalue" value="2"> Amount |
|||
</div> |
|||
<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,497 @@ |
|||
#!/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; |
|||
|
|||
=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/acquisitions_stats.tmpl"; |
|||
my $line = $input->param("Line"); |
|||
my $column = $input->param("Column"); |
|||
my @filters = $input->param("Filter"); |
|||
my $podsp = $input->param("PlacedOnDisplay"); |
|||
my $rodsp = $input->param("ReceivedOnDisplay"); |
|||
my $calc = $input->param("Cellvalue"); |
|||
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) { |
|||
my $results = calculate($line, $column, $podsp, $rodsp, $calc, \@filters); |
|||
if ($output eq "screen"){ |
|||
$template->param(mainloop => $results); |
|||
output_html_with_http_headers $input, $cookie, $template->output; |
|||
exit(1); |
|||
} else { |
|||
print $input->header(-type => 'application/vnd.sun.xml.calc', -name=>"$basename.csv" ); |
|||
my $cols = @$results[0]->{loopcol}; |
|||
my $lines = @$results[0]->{looprow}; |
|||
my $sep; |
|||
$sep =C4::Context->preference("delimiter"); |
|||
print @$results[0]->{line} ."/". @$results[0]->{column} .$sep; |
|||
foreach my $col ( @$cols ) { |
|||
print $col->{coltitle}.$sep; |
|||
} |
|||
print "\n"; |
|||
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"; |
|||
} |
|||
print "TOTAL"; |
|||
$cols = @$results[0]->{loopfooter}; |
|||
foreach my $col ( @$cols ) { |
|||
print $sep.$col->{totalcol}; |
|||
} |
|||
print $sep.@$results[0]->{total}; |
|||
exit(1); |
|||
} |
|||
} else { |
|||
my $dbh = C4::Context->dbh; |
|||
my @values; |
|||
my %labels; |
|||
my $req; |
|||
$req = $dbh->prepare("select distinctrow id,name from aqbooksellers order by name"); |
|||
$req->execute; |
|||
my @select; |
|||
my %select; |
|||
push @select,""; |
|||
$select{""}=""; |
|||
while (my ($value, $desc) =$req->fetchrow) { |
|||
push @select, $value; |
|||
$select{$value}=$desc; |
|||
} |
|||
my $CGIBookSellers=CGI::scrolling_list( -name => 'Filter', |
|||
-id => 'Filter', |
|||
-values => \@select, |
|||
-labels => \%select, |
|||
-size => 1, |
|||
-multiple => 0 ); |
|||
|
|||
$req = $dbh->prepare( "select distinctrow bookfundid,bookfundname from aqbookfund order by bookfundname"); |
|||
$req->execute; |
|||
undef @select; |
|||
undef %select; |
|||
push @select,""; |
|||
$select{""}=""; |
|||
while (my ($value,$desc) =$req->fetchrow) { |
|||
push @select, $value; |
|||
$select{$value}=$desc; |
|||
} |
|||
my $CGIBudget=CGI::scrolling_list( -name => 'Filter', |
|||
-id => 'Filter', |
|||
-values => \@select, |
|||
-labels => \%select, |
|||
-size => 1, |
|||
-multiple => 0 ); |
|||
|
|||
$req = $dbh->prepare("select distinctrow sort1 from aqorders where sort1 is not null order by sort1"); |
|||
$req->execute; |
|||
undef @select; |
|||
push @select,""; |
|||
my $hassort1; |
|||
while (my ($value) =$req->fetchrow) { |
|||
$hassort1 =1 if ($value); |
|||
push @select, $value; |
|||
} |
|||
my $CGISort1=CGI::scrolling_list( -name => 'Filter', |
|||
-id => 'Filter', |
|||
-values => \@select, |
|||
-size => 1, |
|||
-multiple => 0 ); |
|||
|
|||
$req = $dbh->prepare("select distinctrow sort2 from aqorders where sort2 is not null order by sort2"); |
|||
$req->execute; |
|||
undef @select; |
|||
push @select,""; |
|||
my $hassort2; |
|||
my $hglghtsort2; |
|||
while (my ($value) =$req->fetchrow) { |
|||
$hassort2 =1 if ($value); |
|||
$hglghtsort2= !($hassort1); |
|||
push @select, $value; |
|||
} |
|||
my $CGISort2=CGI::scrolling_list( -name => 'Filter', |
|||
-id => 'Filter', |
|||
-values => \@select, |
|||
-size => 1, |
|||
-multiple => 0 ); |
|||
|
|||
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( |
|||
CGIBookSeller => $CGIBookSellers, |
|||
CGIBudget => $CGIBudget, |
|||
hassort1=> $hassort1, |
|||
hassort2=> $hassort2, |
|||
HlghtSort2 => $hglghtsort2, |
|||
CGISort1 => $CGISort1, |
|||
CGISort2 => $CGISort2, |
|||
CGIextChoice => $CGIextChoice, |
|||
CGIsepChoice => $CGIsepChoice |
|||
); |
|||
|
|||
} |
|||
output_html_with_http_headers $input, $cookie, $template->output; |
|||
|
|||
|
|||
|
|||
sub calculate { |
|||
my ($line, $column, $podsp, $rodsp, ,$process, $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<=11;$i++) { |
|||
my %cell; |
|||
if ( @$filters[$i] ) { |
|||
if ((($i==1) or ($i==3)) and (@$filters[$i-1])) { |
|||
$cell{err} = 1 if (@$filters[$i]<@$filters[$i-1]) ; |
|||
} |
|||
$cell{filter} .= @$filters[$i]; |
|||
$cell{crit} .="Placed On From" if ($i==0); |
|||
$cell{crit} .="Placed On To" if ($i==1); |
|||
$cell{crit} .="Received On From" if ($i==2); |
|||
$cell{crit} .="Received On To" if ($i==3); |
|||
$cell{crit} .="BookSeller" if ($i==4); |
|||
$cell{crit} .="Budget" if ($i==5); |
|||
$cell{crit} .="Sort1" if ($i==6); |
|||
$cell{crit} .="Sort2" if ($i==7); |
|||
push @loopfilter, \%cell; |
|||
} |
|||
} |
|||
|
|||
my @linefilter; |
|||
# warn "filtres ".@filters[0]; |
|||
# warn "filtres ".@filters[1]; |
|||
# warn "filtres ".@filters[2]; |
|||
# warn "filtres ".@filters[3]; |
|||
|
|||
$linefilter[0] = @$filters[0] if ($line =~ /closedate/ ) ; |
|||
$linefilter[1] = @$filters[1] if ($line =~ /closedate/ ) ; |
|||
$linefilter[0] = @$filters[2] if ($line =~ /received/ ) ; |
|||
$linefilter[1] = @$filters[3] if ($line =~ /received/ ) ; |
|||
$linefilter[0] = @$filters[4] if ($line =~ /bookseller/ ) ; |
|||
$linefilter[0] = @$filters[5] if ($line =~ /bookfund/ ) ; |
|||
$linefilter[0] = @$filters[6] if ($line =~ /sort1/ ) ; |
|||
$linefilter[0] = @$filters[7] if ($line =~ /sort2/ ) ; |
|||
warn "filtre lignes".$linefilter[0]." ".$linefilter[1]; |
|||
# |
|||
my @colfilter ; |
|||
$colfilter[0] = @$filters[0] if ($column =~ /closedate/ ) ; |
|||
$colfilter[1] = @$filters[1] if ($column =~ /closedate/ ) ; |
|||
$colfilter[0] = @$filters[2] if ($column =~ /received/ ) ; |
|||
$colfilter[1] = @$filters[3] if ($column =~ /received/ ) ; |
|||
$colfilter[0] = @$filters[4] if ($column =~ /bookseller/ ); |
|||
$colfilter[0] = @$filters[5] if ($column =~ /bookfund/ ) ; |
|||
$colfilter[0] = @$filters[6] if ($column =~ /sort1/ ) ; |
|||
$colfilter[0] = @$filters[7] if ($column =~ /sort2/ ) ; |
|||
#warn "filtre col ".$colfilter[0]." ".$colfilter[1]; |
|||
|
|||
# 1st, loop rows. |
|||
my $linefield; |
|||
if (($line =~/closedate/) and ($podsp == 1)) { |
|||
#Display by day |
|||
$linefield .="dayname($line)"; |
|||
} elsif (($line=~/closedate/) and ($podsp == 2)) { |
|||
#Display by Month |
|||
$linefield .="monthname($line)"; |
|||
} elsif (($line=~/closedate/) and ($podsp == 3)) { |
|||
#Display by Year |
|||
$linefield .="Year($line)"; |
|||
} elsif (($line =~/received/) and ($rodsp == 1)) { |
|||
#Display by day |
|||
$linefield .="dayname($line)"; |
|||
} elsif (($line=~/received/) and ($rodsp == 2)) { |
|||
#Display by Month |
|||
$linefield .="monthname($line)"; |
|||
} elsif (($line=~/received/) and ($rodsp == 3)) { |
|||
#Display by Year |
|||
$linefield .="Year($line)"; |
|||
} else { |
|||
$linefield .= $line; |
|||
} |
|||
|
|||
my $strsth; |
|||
$strsth .= "select distinctrow $linefield from aqorders, aqbasket,aqorderbreakdown left join aqorderdelivery on (aqorders.ordernumber =aqorderdelivery.ordernumber ) left join aqbooksellers on (aqbasket.booksellerid=aqbooksellers.id) where (aqorders.basketno=aqbasket.basketno) and (aqorderbreakdown.ordernumber=aqorders.ordernumber) and $line is not null "; |
|||
|
|||
if ( @linefilter ) { |
|||
if ($linefilter[1]){ |
|||
if ($linefilter[0]){ |
|||
$strsth .= " and $line between ? and ? " ; |
|||
} else { |
|||
$strsth .= " and $line < ? " ; |
|||
} |
|||
} elsif (($linefilter[0]) and (($line=~/closedate/) or ($line=~/received/))){ |
|||
$strsth .= " and $line > ? " ; |
|||
} elsif ($linefilter[0]) { |
|||
$linefilter[0] =~ s/\*/%/g; |
|||
$strsth .= " and $line LIKE ? " ; |
|||
} |
|||
} |
|||
$strsth .=" group by $linefield"; |
|||
$strsth .=" order by $linefield"; |
|||
warn "". $strsth; |
|||
|
|||
my $sth = $dbh->prepare( $strsth ); |
|||
if (( @linefilter ) and ($linefilter[1])){ |
|||
$sth->execute($linefilter[0],$linefilter[1]); |
|||
} elsif ($linefilter[0]) { |
|||
$sth->execute($linefilter[0]); |
|||
} else { |
|||
$sth->execute; |
|||
} |
|||
|
|||
while ( my ($celvalue) = $sth->fetchrow) { |
|||
my %cell; |
|||
if ($celvalue) { |
|||
$cell{rowtitle} = $celvalue; |
|||
} else { |
|||
$cell{rowtitle} = ""; |
|||
} |
|||
$cell{totalrow} = 0; |
|||
push @loopline, \%cell; |
|||
} |
|||
|
|||
# 2nd, loop cols. |
|||
my $colfield; |
|||
if (($column =~/closedate/) and ($podsp == 1)) { |
|||
#Display by day |
|||
$colfield .="dayname($column)"; |
|||
} elsif (($column=~/closedate/) and ($podsp == 2)) { |
|||
#Display by Month |
|||
$colfield .="monthname($column)"; |
|||
} elsif (($column=~/closedate/) and ($podsp == 3)) { |
|||
#Display by Year |
|||
$colfield .="Year($column)"; |
|||
} elsif (($column =~/received/) and ($rodsp == 1)) { |
|||
#Display by day |
|||
$colfield .="dayname($column)"; |
|||
} elsif (($column=~/received/) and ($rodsp == 2)) { |
|||
#Display by Month |
|||
$colfield .="monthname($column)"; |
|||
} elsif (($column=~/received/) and ($rodsp == 3)) { |
|||
#Display by Year |
|||
$colfield .="Year($column)"; |
|||
} else { |
|||
$colfield .= $column; |
|||
} |
|||
|
|||
my $strsth2; |
|||
$strsth2 .= "select distinctrow $colfield from aqorders, aqbasket,aqorderbreakdown left join aqorderdelivery on (aqorders.ordernumber =aqorderdelivery.ordernumber ) left join aqbooksellers on (aqbasket.booksellerid=aqbooksellers.id) where (aqorders.basketno=aqbasket.basketno) and (aqorderbreakdown.ordernumber=aqorders.ordernumber) and $column is not null "; |
|||
|
|||
if ( @colfilter ) { |
|||
if ($colfilter[1]){ |
|||
if ($colfilter[0]){ |
|||
$strsth2 .= " and $column between ? and ? " ; |
|||
} else { |
|||
$strsth2 .= " and $column < ? " ; |
|||
} |
|||
} elsif (($colfilter[0]) and (($column=~/closedate/) or ($column=~/received/))){ |
|||
$strsth2 .= " and $column > ? " ; |
|||
} elsif ($colfilter[0]) { |
|||
$colfilter[0] =~ s/\*/%/g; |
|||
$strsth2 .= " and $column LIKE ? " ; |
|||
} |
|||
} |
|||
$strsth2 .=" group by $colfield"; |
|||
$strsth2 .=" order by $colfield"; |
|||
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; |
|||
$cell{coltitle} = $celvalue; |
|||
$ft{totalcol} = 0; |
|||
push @loopcol, \%cell; |
|||
} |
|||
|
|||
|
|||
my $i=0; |
|||
my @totalcol; |
|||
my $hilighted=-1; |
|||
|
|||
#Initialization of cell values..... |
|||
my %table; |
|||
# warn "init table"; |
|||
foreach my $row ( @loopline ) { |
|||
foreach my $col ( @loopcol ) { |
|||
# warn " init table : $row->{rowtitle} / $col->{coltitle} "; |
|||
$table{$row->{rowtitle}}->{$col->{coltitle}}=0; |
|||
} |
|||
$table{$row->{rowtitle}}->{totalrow}=0; |
|||
} |
|||
|
|||
# preparing calculation |
|||
my $strcalc ; |
|||
$strcalc .= "SELECT $linefield, $colfield, "; |
|||
$strcalc .= "COUNT( aqorders.ordernumber ) " if ($process ==1); |
|||
$strcalc .= "SUM( aqorders.quantity * aqorders.listprice ) " if ($process ==2); |
|||
$strcalc.="FROM aqorders, aqbasket,aqorderbreakdown left join aqorderdelivery on (aqorders.ordernumber =aqorderdelivery.ordernumber ) left join aqbooksellers on (aqbasket.booksellerid=aqbooksellers.id) where (aqorders.basketno=aqbasket.basketno) and (aqorderbreakdown.ordernumber=aqorders.ordernumber) and $column is not null and $line is not null "; |
|||
|
|||
# @$filters[0]=~ s/\*/%/g if (@$filters[0]); |
|||
# $strcalc .= " AND dewey >" . @$filters[0] ."" if ( @$filters[0] ); |
|||
# @$filters[1]=~ s/\*/%/g if (@$filters[1]); |
|||
# $strcalc .= " AND dewey <" . @$filters[1] ."" if ( @$filters[1] ); |
|||
# @$filters[2]=~ s/\*/%/g if (@$filters[2]); |
|||
# $strcalc .= " AND lccn >" . @$filters[2] ."" if ( @$filters[2] ); |
|||
# @$filters[3]=~ s/\*/%/g if (@$filters[3]); |
|||
# $strcalc .= " AND lccn <" . @$filters[3] ."" if ( @$filters[3] ); |
|||
# @$filters[4]=~ s/\*/%/g if (@$filters[4]); |
|||
# $strcalc .= " AND items.itemcallnumber >" . @$filters[4] ."" if ( @$filters[4] ); |
|||
# @$filters[5]=~ s/\*/%/g if (@$filters[5]); |
|||
# $strcalc .= " AND items.itemcallnumber <" . @$filters[5] ."" if ( @$filters[5] ); |
|||
# @$filters[6]=~ s/\*/%/g if (@$filters[6]); |
|||
# $strcalc .= " AND biblioitems.itemtype like '" . @$filters[6] ."'" if ( @$filters[6] ); |
|||
# @$filters[7]=~ s/\*/%/g if (@$filters[7]); |
|||
# $strcalc .= " AND biblioitems.publishercode like '" . @$filters[7] ."'" if ( @$filters[7] ); |
|||
# @$filters[8]=~ s/\*/%/g if (@$filters[8]); |
|||
# $strcalc .= " AND publicationyear >" . @$filters[8] ."" if ( @$filters[8] ); |
|||
# @$filters[9]=~ s/\*/%/g if (@$filters[9]); |
|||
# $strcalc .= " AND publicationyear <" . @$filters[9] ."" if ( @$filters[9] ); |
|||
# @$filters[10]=~ s/\*/%/g if (@$filters[10]); |
|||
# $strcalc .= " AND items.homebranch like '" . @$filters[10] ."'" if ( @$filters[10] ); |
|||
# @$filters[11]=~ s/\*/%/g if (@$filters[11]); |
|||
# $strcalc .= " AND items.location like '" . @$filters[11] ."'" if ( @$filters[11] ); |
|||
$strcalc .= " group by $linefield, $colfield order by $linefield,$colfield"; |
|||
warn "". $strcalc; |
|||
my $dbcalc = $dbh->prepare($strcalc); |
|||
$dbcalc->execute; |
|||
# warn "filling table"; |
|||
while (my ($row, $col, $value) = $dbcalc->fetchrow) { |
|||
# warn "filling table $row / $col / $value "; |
|||
$table{$row}->{$col}=$value; |
|||
$table{$row}->{totalrow}+=$value; |
|||
$grantotal += $value; |
|||
} |
|||
|
|||
foreach my $row ( sort keys %table ) { |
|||
my @loopcell; |
|||
#@loopcol ensures the order for columns is common with column titles |
|||
foreach my $col ( @loopcol ) { |
|||
push @loopcell, {value => $table{$row}->{$col->{coltitle}}} ; |
|||
} |
|||
push @looprow,{ 'rowtitle' => $row, |
|||
'loopcell' => \@loopcell, |
|||
'hilighted' => 1 , |
|||
'totalrow' => $table{$row}->{totalrow} |
|||
}; |
|||
$hilighted = -$hilighted; |
|||
} |
|||
|
|||
# warn "footer processing"; |
|||
foreach my $col ( @loopcol ) { |
|||
my $total=0; |
|||
foreach my $row ( @looprow ) { |
|||
$total += $table{$row->{rowtitle}}->{$col->{coltitle}}; |
|||
# warn "value added ".$table{$row->{rowtitle}}->{$col->{coltitle}}. "for line ".$row->{rowtitle}; |
|||
} |
|||
# warn "summ for column ".$col->{coltitle}." = ".$total; |
|||
push @loopfooter, {'totalcol' => $total}; |
|||
} |
|||
|
|||
|
|||
# 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