#
# 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 2 of the License, or (at your option) any later
-# version.
+# 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.
+# 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, write to the Free Software Foundation, Inc.,
-# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+# You should have received a copy of the GNU General Public License
+# along with Koha; if not, see <http://www.gnu.org/licenses>.
use strict;
use warnings;
use C4::Biblio;
use C4::Items;
use C4::Koha;
-use C4::Branch; # GetBranches
use C4::Circulation;
use C4::Reports::Guided; #_get_column_defs
use C4::Charset;
my $branch = $input->param('branch');
my $op = $input->param('op');
my $compareinv2barcd = $input->param('compareinv2barcd');
+my $dont_checkin = $input->param('dont_checkin');
my ( $template, $borrowernumber, $cookie ) = get_template_and_user(
{ template_name => "tools/inventory.tt",
}
);
-
-my $branches = GetBranches();
-my @branch_loop;
-for my $branch_hash (keys %$branches) {
- push @branch_loop, {value => "$branch_hash",
- branchname => $branches->{$branch_hash}->{'branchname'},
- selected => ($branch_hash eq $branchcode?1:0)};
-}
-
-@branch_loop = sort {$a->{branchname} cmp $b->{branchname}} @branch_loop;
my @authorised_value_list;
my $authorisedvalue_categories = '';
}
$statussth =~ s, and $,,g;
$template->param(
- branchloop => \@branch_loop,
authorised_values => \@authorised_value_list,
today => dt_from_string,
minlocation => $minlocation,
my @errorloop;
if ( $uploadbarcodes && length($uploadbarcodes) > 0 ) {
my $dbh = C4::Context->dbh;
- my $date = dt_from_string( $input->param('setdate') );
+ my $date = dt_from_string( scalar $input->param('setdate') );
$date = output_pref ( { dt => $date, dateformat => 'iso' } );
my $strsth = "select * from issues, items where items.itemnumber=issues.itemnumber and items.barcode =?";
my $count = 0;
my @barcodes;
+ my @uploadedbarcodes;
my $sth = $dbh->column_info(undef,undef,"items","barcode");
my $barcode_def = $sth->fetchall_hashref('COLUMN_NAME');
my $err_data=0;
my $lines_read=0;
binmode($uploadbarcodes, ":encoding(UTF-8)");
- while (my $barcode=<$uploadbarcodes>){
- $barcode =~ s/\r?\n$//;
+ while (my $barcode=<$uploadbarcodes>) {
+ $barcode =~ s/\r/\n/g;
+ $barcode =~ s/\n\n/\n/g;
+ my @data = split(/\n/,$barcode);
+ push @uploadedbarcodes, @data;
+ }
+ for my $barcode (@uploadedbarcodes) {
next unless $barcode;
++$lines_read;
if (length($barcode)>$barcode_size) {
ModItem( { datelastseen => $date }, undef, $item->{'itemnumber'} );
push @scanned_items, $item;
$count++;
- $qonloan->execute($barcode);
- if ($qonloan->rows){
- my $data = $qonloan->fetchrow_hashref;
- my ($doreturn, $messages, $iteminformation, $borrower) =AddReturn($barcode, $data->{homebranch});
- if ($doreturn){
- push @errorloop, {'barcode'=>$barcode,'ERR_ONLOAN_RET'=>1}
- } else {
- push @errorloop, {'barcode'=>$barcode,'ERR_ONLOAN_NOT_RET'=>1}
+ unless ( $dont_checkin ) {
+ $qonloan->execute($barcode);
+ if ($qonloan->rows){
+ my $data = $qonloan->fetchrow_hashref;
+ my ($doreturn, $messages, $iteminformation, $borrower) =AddReturn($barcode, $data->{homebranch});
+ if ($doreturn){
+ push @errorloop, {'barcode'=>$barcode,'ERR_ONLOAN_RET'=>1}
+ } else {
+ push @errorloop, {'barcode'=>$barcode,'ERR_ONLOAN_NOT_RET'=>1}
+ }
}
}
} else {
# now build the result list: inventoried items if requested, and mis-placed items -always-
my $inventorylist;
+my $wrongplacelist;
my @items_with_problems;
if ( $markseen or $op ) {
# retrieve all items in this range.
my $totalrecords;
- ($inventorylist, $totalrecords) = GetItemsForInventory($minlocation, $maxlocation, $location, $itemtype, $ignoreissued, '', $branchcode, $branch, 0, undef , $staton);
+
+ # 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',
+ } );
+
+ # 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',
+ } );
+
}
# If "compare barcodes list to results" has been checked, we want to alert for missing items
if ( $compareinv2barcd ) {
- # set "missing" flags for all items with a datelastseen (dls) before the choosen datelastseen (cdls)
+ # set "missing" flags for all items with a datelastseen (dls) before the chosen datelastseen (cdls)
my $dls = output_pref( { dt => dt_from_string( $datelastseen ),
dateformat => 'iso' } );
foreach my $item ( @$inventorylist ) {
- my $cdls = output_pref( { dt => dt_from_string( $_->{datelastseen} ),
+ my $cdls = output_pref( { dt => dt_from_string( $item->{datelastseen} ),
dateformat => 'iso' } );
if ( $cdls lt $dls ) {
$item->{problem} = 'missingitem';
# insert "wrongplace" to all scanned items that are not supposed to be in this range
-# note this list is always displayed, whatever the librarian has choosen for comparison
+# note this list is always displayed, whatever the librarian has chosen for comparison
my $moddatecount = 0;
foreach my $item ( @scanned_items ) {
$item->{problem} = 'changestatus';
push @items_with_problems, { %$item };
}
- if (none { $item->{barcode} eq $_->{barcode} && !$_->{'onloan'} } @$inventorylist) {
+ if (none { $item->{barcode} eq $_->{barcode} && !$_->{'onloan'} } @$wrongplacelist) {
$item->{problem} = 'wrongplace';
push @items_with_problems, { %$item };
}
# Modify date last seen for scanned items
- ModDateLastSeen($_->{'itemnumber'});
+ ModDateLastSeen($item->{'itemnumber'});
$moddatecount++;
}