From 3910d5e8b4f982b53f7aebd484a8d12fb42b1a52 Mon Sep 17 00:00:00 2001 From: Kyle M Hall Date: Wed, 28 Mar 2012 13:33:36 -0400 Subject: [PATCH] Bug 8037: Display holds & fund on the already received table on order receipt summary Adds a column to indicate holds on received items, as well as adding a new column for fund and showing the subtotals per fund above the total subtotal. To test: [1] Create an order basket containing at least one title and ensure that an item is created for that title. Close the basket. [2] Place a hold on the title. [3] Receive the order. After receiving it, but before finishing the invoice, the table of already received orders should now have columns for the order budget and number of holds on the title as well as lines with the subtotal per fund. Signed-off-by: Pierre Angot Signed-off-by: Jonathan Druart Signed-off-by: Galen Charlton --- C4/Acquisition.pm | 3 +- C4/Budgets.pm | 25 ++++++++++ C4/Reserves.pm | 12 ++++- acqui/parcel.pl | 7 ++- .../prog/en/modules/acqui/parcel.tt | 50 ++++++++++++++----- 5 files changed, 81 insertions(+), 16 deletions(-) diff --git a/C4/Acquisition.pm b/C4/Acquisition.pm index 8c40dcd97e..88783e73f8 100644 --- a/C4/Acquisition.pm +++ b/C4/Acquisition.pm @@ -2460,11 +2460,12 @@ sub GetInvoiceDetails { my $invoice = $sth->fetchrow_hashref; $query = qq{ - SELECT aqorders.*, biblio.*, + SELECT aqorders.*, biblio.*, aqorders_items.itemnumber, aqbasket.basketname FROM aqorders LEFT JOIN aqbasket ON aqorders.basketno = aqbasket.basketno LEFT JOIN biblio ON aqorders.biblionumber = biblio.biblionumber + LEFT JOIN aqorders_items ON aqorders.ordernumber = aqorders_items.ordernumber WHERE invoiceid = ? }; $sth = $dbh->prepare($query); diff --git a/C4/Budgets.pm b/C4/Budgets.pm index a648773851..334e6108cf 100644 --- a/C4/Budgets.pm +++ b/C4/Budgets.pm @@ -34,6 +34,7 @@ BEGIN { @EXPORT = qw( &GetBudget + &GetBudgetByOrderNumber &GetBudgets &GetBudgetHierarchy &AddBudget @@ -672,6 +673,30 @@ sub GetBudget { return $result; } +=head2 GetBudgetByOrderNumber + + &GetBudgetByOrderNumber($ordernumber); + +get a specific budget by order number + +=cut + +# ------------------------------------------------------------------- +sub GetBudgetByOrderNumber { + my ( $ordernumber ) = @_; + my $dbh = C4::Context->dbh; + my $query = " + SELECT aqbudgets.* + FROM aqbudgets, aqorders + WHERE ordernumber=? + AND aqorders.budget_id = aqbudgets.budget_id + "; + my $sth = $dbh->prepare($query); + $sth->execute( $ordernumber ); + my $result = $sth->fetchrow_hashref; + return $result; +} + =head2 GetChildBudgetsSpent &GetChildBudgetsSpent($budget-id); diff --git a/C4/Reserves.pm b/C4/Reserves.pm index f8666a3f5d..9826f2c0f5 100644 --- a/C4/Reserves.pm +++ b/C4/Reserves.pm @@ -277,9 +277,12 @@ of the reserves and an arrayref pointing to the reserves for C<$biblionumber>. sub GetReservesFromBiblionumber { my ($biblionumber) = shift or return (0, []); my ($all_dates) = shift; + my ($itemnumber) = shift; + warn "ITEMNUMBER: $itemnumber"; my $dbh = C4::Context->dbh; # Find the desired items in the reserves + my @params; my $query = " SELECT reserve_id, branchcode, @@ -298,12 +301,17 @@ sub GetReservesFromBiblionumber { suspend_until FROM reserves WHERE biblionumber = ? "; + push( @params, $biblionumber ); unless ( $all_dates ) { - $query .= "AND reservedate <= CURRENT_DATE()"; + $query .= " AND reservedate <= CURRENT_DATE() "; + } + if ( $itemnumber ) { + $query .= " AND ( itemnumber IS NULL OR itemnumber = ? )"; + push( @params, $itemnumber ); } $query .= "ORDER BY priority"; my $sth = $dbh->prepare($query); - $sth->execute($biblionumber); + $sth->execute( @params ); my @results; my $i = 0; while ( my $data = $sth->fetchrow_hashref ) { diff --git a/acqui/parcel.pl b/acqui/parcel.pl index 839c2a9944..7ad184d69e 100755 --- a/acqui/parcel.pl +++ b/acqui/parcel.pl @@ -67,6 +67,7 @@ use CGI; use C4::Output; use C4::Dates qw/format_date format_date_in_iso/; use C4::Suggestions; +use C4::Reserves qw/GetReservesFromBiblionumber/; use JSON; my $input=new CGI; @@ -170,6 +171,9 @@ for my $item ( @parcelitems ) { $line{invoice} = $invoice->{invoicenumber}; $line{total} = sprintf($cfstr, $total); $line{booksellerid} = $invoice->{booksellerid}; + my ($count) = &GetReservesFromBiblionumber($line{biblionumber},undef,$item->{itemnumber}); + $line{holds} = $count; + $line{budget} = GetBudgetByOrderNumber( $line{ordernumber} ); $totalprice += $item->{'unitprice'}; $line{unitprice} = sprintf( $cfstr, $item->{'unitprice'} ); my $gste = get_gste( $line{total}, $line{gstrate}, $bookseller ); @@ -187,7 +191,8 @@ for my $item ( @parcelitems ) { if ( $line{parent_ordernumber} != $line{ordernumber} ) { if ( grep { $_->{ordernumber} == $line{parent_ordernumber} } - @parcelitems ) + @parcelitems + ) { $line{cannot_cancel} = 1; } diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/parcel.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/parcel.tt index fef72dc82d..d208802202 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/parcel.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/parcel.tt @@ -1,3 +1,4 @@ +[% USE currency = format('%.2f') -%] [% INCLUDE 'doc-head-open.inc' %] Koha › Acquisitions › [% IF ( date ) %] Receipt summary for [% name %] [% IF ( invoice ) %]invoice [% invoice %][% END %] on [% formatteddatereceived %][% ELSE %]Receive orders from [% name %][% END %] @@ -58,12 +59,14 @@ "iCookieDuration": 60*60*24*1000, // 1000 days "aLengthMenu": [[10, 20, 50, 100, -1], [10, 20, 50, 100, "All"]], "aoColumnDefs": [ - { "aTargets": [ 3, -1 ], "bSortable": false, "bSearchable": false }, + { "aTargets": [ 4, -1 ], "bSortable": false, "bSearchable": false }, ], "aoColumns": [ { "sType": "num-html" }, { "sType": "num-html" }, { "sType": "html" }, + { "sType": "html" }, + null, null, null, null, @@ -298,36 +301,57 @@ [% IF ( loop_received ) %] + [% SET funds = {} %] + [% SET estimated_total = 0 %] + + [% FOREACH loop_receive IN loop_received %] + [% SET estimated_total = estimated_total + ( loop_receive.ecost * loop_receive.quantityreceived ) %] + [% SET funds.${ loop_receive.budget.budget_name }.estimated = funds.${ loop_receive.budget.budget_name }.estimated + ( loop_receive.ecost * loop_receive.quantityreceived )%] + [% SET funds.${ loop_receive.budget.budget_name }.actual = funds.${ loop_receive.budget.budget_name }.actual + loop_receive.total %] + [% END %] +
- - - - - - - - + + + + + + + + + + + [% FOREACH key IN funds.keys.sort %] + + + + + + + + + [% END %] - + [% FOREACH book_foot IN book_foot_loop %] - + [% END %] - + @@ -337,6 +361,7 @@ + + -- 2.39.2
BasketOrder lineSummaryView recordQuantityEst costActual costTOTALBasketOrder LineHoldsSummaryView recordQuantityFundEst costActual costTOTAL
  Subtotal for [% key %][% currency( funds.$key.estimated ) %][% currency( funds.$key.actual ) %]  
Total tax exc.Total tax exc. [% total_gste %]
Total (GST [% book_foot.gstrate * 100 | format ("%.1f") %]%)Total (GST [% book_foot.gstrate * 100 | format ("%.1f") %]%) [% book_foot.value %]
Total tax inc.Total tax inc. [% total_gsti %]
[% loop_receive.basketname %] ([% loop_receive.basketno %]) [% loop_receive.ordernumber %][% IF loop_receive.holds %][% loop_receive.holds %][% END %] [% loop_receive.title |html %] [% IF ( loop_receive.author ) %] / [% loop_receive.author %][% END %] [% IF ( loop_receive.isbn ) %] - [% loop_receive.isbn %][% END %] @@ -349,6 +374,7 @@ MARC | Card [% loop_receive.quantityreceived %][% loop_receive.budget.budget_name %] [% loop_receive.ecost %] [% loop_receive.unitprice %] [% loop_receive.total %]