Koha/acqui/spent.pl
Katrin Fischer ecc9eb33b7 Bug 14172: Acq: Orders without items missing from 'spent' list
If the item for an order had been deleted since or there was never
an item created for the order (subscription orders) those records
where missing from the "Spent" page in acquisitions.

Patch corrects the SQL to list the correct records.

To test:
- Create different orders for one fund and receive them
  - normal order with a few items
  - subscription order (no item)
  - normal order with an item, delete the item after receiving
  - include some freight cost in one of the invoices
- Compare the amount spent shown on the acq start page
  with the amount shown at the end of the 'spent' page
- Without the patch, the amounts don't match and not all
  received titles are listed
- With the patch, amounts should match and list shoudl be complete

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>

Signed-off-by: Jonathan Druart <jonathan.druart@biblibre.com>
Signed-off-by: Tomas Cohen Arazi <tomascohen@gmail.com>
2015-05-18 10:28:17 -03:00

135 lines
3.5 KiB
Perl
Executable file

#!/usr/bin/perl
# script to show a breakdown of committed and spent budgets
# Copyright 2002-2009 Katipo Communications Limited
# Copyright 2010,2011 Catalyst IT Limited
# 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 3 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, see <http://www.gnu.org/licenses>.
=head1 NAME
spent.pl
=head1 DESCRIPTION
this script is designed to show the spent amount in budgets
=cut
use C4::Context;
use C4::Auth;
use C4::Output;
use strict;
use warnings;
use CGI qw ( -utf8 );
my $dbh = C4::Context->dbh;
my $input = new CGI;
my $bookfund = $input->param('fund');
my $fund_code = $input->param('fund_code');
my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
{
template_name => "acqui/spent.tt",
query => $input,
type => "intranet",
authnotrequired => 0,
flagsrequired => { acquisition => '*' },
debug => 1,
}
);
my $query = <<EOQ;
SELECT
aqorders.basketno, aqorders.ordernumber,
quantity-quantityreceived AS tleft,
ecost, budgetdate, entrydate,
aqbasket.booksellerid,
itype,
title,
aqorders.invoiceid,
aqinvoices.invoicenumber,
quantityreceived,
unitprice,
datereceived,
aqorders.biblionumber
FROM (aqorders, aqbasket)
LEFT JOIN biblio ON
biblio.biblionumber=aqorders.biblionumber
LEFT JOIN aqorders_items ON
aqorders.ordernumber = aqorders_items.ordernumber
LEFT JOIN items ON
aqorders_items.itemnumber = items.itemnumber
LEFT JOIN aqinvoices ON
aqorders.invoiceid = aqinvoices.invoiceid
WHERE
aqorders.basketno=aqbasket.basketno AND
budget_id=? AND
(datecancellationprinted IS NULL OR
datecancellationprinted='0000-00-00') AND
datereceived IS NOT NULL
GROUP BY aqorders.ordernumber
EOQ
my $sth = $dbh->prepare($query);
$sth->execute($bookfund);
if ( $sth->err ) {
die "An error occurred fetching records: " . $sth->errstr;
}
my $subtotal = 0;
my $toggle;
my @spent;
while ( my $data = $sth->fetchrow_hashref ) {
my $recv = $data->{'quantityreceived'};
if ( $recv > 0 ) {
my $rowtotal = $recv * $data->{'unitprice'};
$data->{'rowtotal'} = sprintf( "%.2f", $rowtotal );
$data->{'unitprice'} = sprintf( "%.2f", $data->{'unitprice'} );
$subtotal += $rowtotal;
push @spent, $data;
}
}
my $total = $subtotal;
$query = qq{
SELECT invoicenumber, shipmentcost
FROM aqinvoices
WHERE shipmentcost_budgetid = ?
};
$sth = $dbh->prepare($query);
$sth->execute($bookfund);
my @shipmentcosts;
while (my $data = $sth->fetchrow_hashref) {
push @shipmentcosts, {
shipmentcost => sprintf("%.2f", $data->{shipmentcost}),
invoicenumber => $data->{invoicenumber}
};
$total += $data->{shipmentcost};
}
$sth->finish;
$total = sprintf( "%.2f", $total );
$template->param(
fund => $bookfund,
spent => \@spent,
subtotal => $subtotal,
shipmentcosts => \@shipmentcosts,
total => $total,
fund_code => $fund_code
);
output_html_with_http_headers $input, $cookie, $template->output;