Koha/acqui/ordered.pl
Alex Buckley 3ca1ab63ac
Bug 31631: Optionally use tax-exclusive values for calculating fund values
Test plan:
1. Apply patches
2. sudo koha-upgrade-schema <instance>
3. Restart services
4. Set TaxRates syspref = 0.15
5. Create a new fund with amount = 1000
6. Add an order to a basket with the following values:
- Fund = Choose the fund from step #5
- Quantity = 1
- Vendor price = 10
- Tax rate = 15%
- Discount = 20%
- Retail price = 10.00
- Replacement cost = 10.00
- Actual cost = 10.00
- Ensure the basket belongs to a vendor with ("List prices" = "Don't include tax" and "Invoice prices" = "Don't include tax")
7. Go to the Acquisitions home page
8. Confirm the 'Ordered' column for the step #5 fund contains 9.20
9. Click on the 9.20 link and confirm the ordered.pl page that loads
also contains 9.20 as the 'Subtotal'

10. Change 'CalculateFundValuesIncludingTax' = 'Exclude'
11. On the Acquisitions home page confirm the 'Ordered' column now
contains 8.00
12. Click on the 8.00 link and confirm the ordered.pl page also contains
8.00 as the 'Subtotal'

13. Close your basket and receive your order - change the 'Actual costs'
= 8.00 (the $10 retail price less the 20% discount, tax exclusive)
14. Go to the Acquisitions home page and confirm the 'Spent' column now
contains 8.00
15. Click on the 8.00 link and confirm the spent.pl page also contains
8.00 as the 'Subtotal'

16. Change 'CalculateFundValuesIncludingTax' = 'Include'
17. Confirm the 'Spent' column on the Acquisitions home page now shows
9.20
18. Click on the 9.20 link and confirm the spent.pl page also contains
9.20 as the 'Subtotal'

Sponsored-by: Waikato Institute of Technology, New Zealand

Signed-off-by: David Nind <david@davidnind.com>

Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
2023-10-18 15:41:35 -03:00

125 lines
3.7 KiB
Perl
Executable file

#!/usr/bin/perl
# Copyright 2008 - 2009 BibLibre SARL
# 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
ordered.pl
=head1 DESCRIPTION
this script is to show orders ordered but not yet received
=cut
use C4::Context;
use Modern::Perl;
use CGI qw ( -utf8 );
use C4::Auth qw( get_template_and_user );
use C4::Output qw( output_html_with_http_headers );
use Koha::Acquisition::Invoice::Adjustments;
use C4::Acquisition qw( get_rounded_price );
my $dbh = C4::Context->dbh;
my $input = CGI->new;
my $fund_id = $input->param('fund');
my $fund_code = $input->param('fund_code');
my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
{
template_name => "acqui/ordered.tt",
query => $input,
type => "intranet",
flagsrequired => { acquisition => '*' },
}
);
# Choose correct ecost field
my ( $unitprice_field, $ecost_field ) = C4::Budgets->FieldsForCalculatingFundValues();
my $query = <<EOQ;
SELECT
aqorders.biblionumber, aqorders.basketno, aqorders.ordernumber,
quantity-quantityreceived AS tleft,
$ecost_field, budgetdate, entrydate,
aqbasket.booksellerid,
aqbooksellers.name as vendorname,
GROUP_CONCAT(DISTINCT itype SEPARATOR '|') AS itypes,
title
FROM aqorders
JOIN aqbasket USING (basketno)
LEFT JOIN biblio ON
biblio.biblionumber=aqorders.biblionumber
LEFT JOIN aqorders_items ON
aqorders.ordernumber=aqorders_items.ordernumber
LEFT JOIN items ON
items.itemnumber=aqorders_items.itemnumber
LEFT JOIN aqbooksellers ON
aqbasket.booksellerid = aqbooksellers.id
WHERE
budget_id=? AND
datecancellationprinted IS NULL AND
(quantity > quantityreceived OR quantityreceived IS NULL)
GROUP BY aqorders.biblionumber, aqorders.basketno, aqorders.ordernumber,
tleft,
$ecost_field, budgetdate, entrydate,
aqbasket.booksellerid,
aqbooksellers.name,
title
EOQ
my $sth = $dbh->prepare($query);
$sth->execute($fund_id);
if ( $sth->err ) {
die "Error occurred fetching records: " . $sth->errstr;
}
my @ordered;
my $total = 0;
while ( my $data = $sth->fetchrow_hashref ) {
$data->{'itemtypes'} = [split('\|', $data->{itypes})];
my $left = $data->{'tleft'};
if ( !$left || $left eq '' ) {
$left = $data->{'quantity'};
}
if ( $left && $left > 0 ) {
my $subtotal = $left * get_rounded_price( $data->{$ecost_field} );
$data->{subtotal} = sprintf( "%.2f", $subtotal );
$data->{'left'} = $left;
push @ordered, $data;
$total += $subtotal;
}
}
my $adjustments = Koha::Acquisition::Invoice::Adjustments->search({budget_id => $fund_id, closedate => undef, encumber_open => 1 }, { prefetch => 'invoiceid' } );
while ( my $adj = $adjustments->next ){
$total += $adj->adjustment;
}
$total = sprintf( "%.2f", $total );
$template->{VARS}->{'fund'} = $fund_id;
$template->{VARS}->{'ordered'} = \@ordered;
$template->{VARS}->{'total'} = $total;
$template->{VARS}->{'fund_code'} = $fund_code;
$template->{VARS}->{'adjustments'} = $adjustments;
$sth->finish;
output_html_with_http_headers $input, $cookie, $template->output;