From 23ea7a2b6e48bb6d8336e6d03726ca51e3171d5c Mon Sep 17 00:00:00 2001 From: Kyle M Hall Date: Mon, 16 Dec 2013 10:50:31 -0500 Subject: [PATCH] Bug 11405 [2] - Skip items with waiting holds This patch enables items to be skipped for inventory stocktaking if the item is currently a waiting hold. The intention is to skip items that should be on the holds waiting shelf in the library. Test Plan: 1) Apply this patch 2) Generate a list of barcodes ordered by callnumber 3) Select one of those items and place it on hold, then confirm the hold 4) Remove that barcode from the list of barcodes 5) Browse to the inventory tool, choose your barcodes file 6) Run the inventory tool with that barcode file. 7) Note the tool says that item should have been scanned 8) Click the browsers back button to return to the previous page 9) Check the checkbox for "Skip copies marked as waiting holds" 10) Run the tool again, not it does not flag that item as previously --- C4/Items.pm | 31 +++++++---- .../prog/en/modules/tools/inventory.tt | 5 ++ tools/inventory.pl | 65 ++++++++++++---------- 3 files changed, 60 insertions(+), 41 deletions(-) diff --git a/C4/Items.pm b/C4/Items.pm index 26e9342..9c2bb8a 100644 --- a/C4/Items.pm +++ b/C4/Items.pm @@ -1037,6 +1037,7 @@ sub GetLostItems { size => $size, statushash => $statushash, interface => $interface, + ignore_holds_waiting => $ignore_holds_waiting, } ); Retrieve a list of title/authors/barcode/callnumber, for biblio inventory. @@ -1056,18 +1057,19 @@ $iTotalRecords is the number of rows that would have been returned without the $ sub GetItemsForInventory { my ( $parameters ) = @_; - my $minlocation = $parameters->{'minlocation'} // ''; - my $maxlocation = $parameters->{'maxlocation'} // ''; - my $location = $parameters->{'location'} // ''; - my $itemtype = $parameters->{'itemtype'} // ''; - my $ignoreissued = $parameters->{'ignoreissued'} // ''; - my $datelastseen = $parameters->{'datelastseen'} // ''; - my $branchcode = $parameters->{'branchcode'} // ''; - my $branch = $parameters->{'branch'} // ''; - my $offset = $parameters->{'offset'} // ''; - my $size = $parameters->{'size'} // ''; - my $statushash = $parameters->{'statushash'} // ''; - my $interface = $parameters->{'interface'} // ''; + my $minlocation = $parameters->{minlocation} // ''; + my $maxlocation = $parameters->{maxlocation} // ''; + my $location = $parameters->{location} // ''; + my $itemtype = $parameters->{itemtype} // ''; + my $ignoreissued = $parameters->{ignoreissued} // ''; + my $datelastseen = $parameters->{datelastseen} // ''; + my $branchcode = $parameters->{branchcode} // ''; + my $branch = $parameters->{branch} // ''; + my $offset = $parameters->{offset} // ''; + my $size = $parameters->{size} // ''; + my $statushash = $parameters->{statushash} // ''; + my $interface = $parameters->{interface} // ''; + my $ignore_holds_waiting = $parameters->{ignore_holds_waiting} // ''; my $dbh = C4::Context->dbh; my ( @bind_params, @where_strings ); @@ -1130,6 +1132,11 @@ sub GetItemsForInventory { push @where_strings, 'issues.date_due IS NULL'; } + if ( $ignore_holds_waiting ) { + $query .= "LEFT JOIN reserves ON items.itemnumber = reserves.itemnumber "; + push( @where_strings, q{reserves.found != 'W' OR reserves.found IS NULL} ); + } + if ( @where_strings ) { $query .= 'WHERE '; $query .= join ' AND ', @where_strings; diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/tools/inventory.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/tools/inventory.tt index f08d694..9b9ce7b 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/tools/inventory.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/tools/inventory.tt @@ -207,6 +207,11 @@ $(document).ready(function(){ [% END %]
  • +
  • + + +
  • +
  • diff --git a/tools/inventory.pl b/tools/inventory.pl index 681ba05..16574f5 100755 --- a/tools/inventory.pl +++ b/tools/inventory.pl @@ -46,6 +46,7 @@ $maxlocation=$minlocation.'Z' unless ( $maxlocation || ! $minlocation ); my $location=$input->param('location') || ''; my $itemtype=$input->param('itemtype'); # FIXME note, template does not currently supply this my $ignoreissued=$input->param('ignoreissued'); +my $ignore_holds_waiting = $input->param('ignore_holds_waiting'); my $datelastseen = $input->param('datelastseen'); my $markseen = $input->param('markseen'); my $branchcode = $input->param('branchcode') || ''; @@ -136,6 +137,7 @@ $template->param( maxlocation => $maxlocation, location => $location, ignoreissued => $ignoreissued, + ignore_holds_waiting => $ignore_holds_waiting, branchcode => $branchcode, branch => $branch, datelastseen => $datelastseen, @@ -244,37 +246,42 @@ if ( $markseen or $op ) { # We use datelastseen only when comparing the results to the barcode file. my $paramdatelastseen = ($compareinv2barcd) ? $datelastseen : ''; - ($inventorylist, $totalrecords) = GetItemsForInventory( { - minlocation => $minlocation, - maxlocation => $maxlocation, - location => $location, - itemtype => $itemtype, - ignoreissued => $ignoreissued, - datelastseen => $paramdatelastseen, - branchcode => $branchcode, - branch => $branch, - offset => 0, - size => undef, - statushash => $staton, - interface => 'staff', - } ); + ( $inventorylist, $totalrecords ) = GetItemsForInventory( + { + minlocation => $minlocation, + maxlocation => $maxlocation, + location => $location, + itemtype => $itemtype, + ignoreissued => $ignoreissued, + datelastseen => $paramdatelastseen, + branchcode => $branchcode, + branch => $branch, + offset => 0, + size => undef, + statushash => $staton, + interface => 'staff', + ignore_holds_waiting => $ignore_holds_waiting, + } + ); # For the items that may be marked as "wrong place", we only check the location (callnumbers, location and branch) - ($wrongplacelist, $totalrecords) = GetItemsForInventory( { - minlocation => $minlocation, - maxlocation => $maxlocation, - location => $location, - itemtype => undef, - ignoreissued => undef, - datelastseen => undef, - branchcode => $branchcode, - branch => $branch, - offset => 0, - size => undef, - statushash => undef, - interface => 'staff', - } ); - + ( $wrongplacelist, $totalrecords ) = GetItemsForInventory( + { + minlocation => $minlocation, + maxlocation => $maxlocation, + location => $location, + itemtype => undef, + ignoreissued => undef, + datelastseen => undef, + branchcode => $branchcode, + branch => $branch, + offset => 0, + size => undef, + statushash => undef, + interface => 'staff', + ignore_holds_waiting => $ignore_holds_waiting, + } + ); } # If "compare barcodes list to results" has been checked, we want to alert for missing items -- 2.1.4