Bug 42225: Improve SQL on spent.pl

To test:
1 - Have some received orders and some invoice adjustments
2 - View spent.pl for a fund
3 - Apply patch, restart_all
4 - Reload
5 - Confirm the display has not changed

Signed-off-by: David Nind <david@davidnind.com>
Signed-off-by: Paul Derscheid <paul.derscheid@lmscloud.de>
Signed-off-by: Pedro Amorim <pedro.amorim@openfifth.co.uk>
This commit is contained in:
Nick Clemens 2026-04-06 18:04:47 +00:00 committed by Pedro Amorim
parent 98ee165b82
commit 683142868f
No known key found for this signature in database
GPG Key ID: 06B75BA7F3894D55
1 changed files with 50 additions and 36 deletions

View File

@ -56,46 +56,60 @@ my ($unitprice_field) = C4::Budgets->FieldsForCalculatingFundValues();
my $query = <<EOQ;
SELECT
aqorders.biblionumber, aqorders.basketno, aqorders.ordernumber,
quantity-quantityreceived AS tleft,
budgetdate, entrydate,
aqbasket.booksellerid,
GROUP_CONCAT(DISTINCT itype SEPARATOR '|') as itypes,
biblionumber,
basketno,
ordernumber,
tleft,
budgetdate,
entrydate,
booksellerid,
itypes,
title,
aqorders.invoiceid,
aqinvoices.invoicenumber,
invoiceid,
invoicenumber,
quantityreceived,
$unitprice_field,
unitprice_tax_included,
datereceived,
aqbooksellers.name as vendorname
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
LEFT JOIN aqbooksellers ON
aqbasket.booksellerid = aqbooksellers.id
WHERE
aqorders.basketno=aqbasket.basketno AND
budget_id=? AND
datecancellationprinted IS NULL AND
datereceived IS NOT NULL
GROUP BY aqorders.biblionumber, aqorders.basketno, aqorders.ordernumber,
tleft,
budgetdate, entrydate,
aqbasket.booksellerid,
title,
aqorders.invoiceid,
aqinvoices.invoicenumber,
quantityreceived,
$unitprice_field,
datereceived,
aqbooksellers.name
FROM
(
SELECT
aqorders.biblionumber, aqorders.basketno, aqorders.ordernumber,
quantity-quantityreceived AS tleft,
budgetdate, entrydate,
aqbasket.booksellerid,
GROUP_CONCAT(DISTINCT itype SEPARATOR '|') as itypes,
title,
aqorders.invoiceid,
aqinvoices.invoicenumber,
quantityreceived,
$unitprice_field,
datereceived
FROM aqorders
JOIN aqbasket ON aqorders.basketno=aqbasket.basketno
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
budget_id=? AND
datecancellationprinted IS NULL AND
datereceived IS NOT NULL
GROUP BY aqorders.biblionumber, aqorders.basketno, aqorders.ordernumber,
tleft,
budgetdate, entrydate,
aqbasket.booksellerid,
title,
aqorders.invoiceid,
aqinvoices.invoicenumber,
quantityreceived,
$unitprice_field,
datereceived
) orders LEFT JOIN aqbooksellers ON orders.booksellerid = aqbooksellers.id
EOQ
my $sth = $dbh->prepare($query);
$sth->execute($bookfund);