#
# 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 Modern::Perl;
use C4::Context;
-use C4::Circulation;
use C4::Reserves qw(CheckReserves);
use Koha::Database;
-use DBI;
+use Try::Tiny qw( catch try );
-use Data::Dumper;
+use vars qw(@ISA @EXPORT);
-use vars qw($VERSION @ISA @EXPORT);
-
-# set the version for version checking
-$VERSION = 3.07.00.049;
=head1 NAME
TransferCollection
GetCollectionItemBranches
+ isItemInAnyCollection
+ isItemInThisCollection
);
}
=head2 CreateCollection
( $success, $errorcode, $errormessage ) = CreateCollection( $title, $description );
- Creates a new collection
+
+Creates a new collection
Input:
$title: short description of the club or service
my $schema = Koha::Database->new()->schema();
my $duplicate_titles = $schema->resultset('Collection')->count({ colTitle => $title });
- ## Check for all neccessary parameters
+ ## Check for all necessary parameters
if ( !$title ) {
return ( 0, 1, "NO_TITLE" );
} elsif ( $duplicate_titles ) {
my $schema = Koha::Database->new()->schema();
my $duplicate_titles = $schema->resultset('Collection')->count({ colTitle => $title, -not => { colId => $colId } });
- ## Check for all neccessary parameters
+ ## Check for all necessary parameters
if ( !$colId ) {
return ( 0, 1, "NO_ID" );
}
=head2 DeleteCollection
( $success, $errorcode, $errormessage ) = DeleteCollection( $colId );
- Deletes a collection of the given id
+
+Deletes a collection of the given id
Input:
- $colId : id of the Archtype to be deleted
+ $colId : id of the Archetype to be deleted
Output:
$success: 1 if all database operations were successful, 0 otherwise
sub DeleteCollection {
my ($colId) = @_;
- ## Paramter check
+ ## Parameter check
if ( !$colId ) {
return ( 0, 1, "NO_ID" );
}
=head2 GetCollections
$collections = GetCollections();
- Returns data about all collections
+
+Returns data about all collections
Output:
On Success:
( $results, $success, $errorcode, $errormessage ) = GetItemsInCollection( $colId );
- Returns information about the items in the given collection
-
+Returns information about the items in the given collection
+
Input:
$colId: The id of the collection
sub GetItemsInCollection {
my ($colId) = @_;
- ## Paramter check
+ ## Parameter check
if ( !$colId ) {
return ( 0, 0, 1, "NO_ID" );
}
sub AddItemToCollection {
my ( $colId, $itemnumber ) = @_;
- ## Check for all neccessary parameters
+ ## Check for all necessary parameters
if ( !$colId ) {
return ( 0, 1, "NO_ID" );
}
sub RemoveItemFromCollection {
my ( $colId, $itemnumber ) = @_;
- ## Check for all neccessary parameters
+ ## Check for all necessary parameters
if ( !$itemnumber ) {
return ( 0, 2, "NO_ITEM" );
}
=head2 TransferCollection
- ( $success, $errorcode, $errormessage ) = TransferCollection( $colId, $colBranchcode );
+ ( $success, $messages ) = TransferCollection( $colId, $colBranchcode );
Transfers a collection to another branch
Output:
$success: 1 if all database operations were successful, 0 otherwise
- $errorCode: Code for reason of failure, good for translating errors in templates
- $errorMessage: English description of error
+ $messages: Arrayref of messages for user feedback
=cut
sub TransferCollection {
my ( $colId, $colBranchcode ) = @_;
- ## Check for all neccessary parameters
+ ## Check for all necessary parameters
if ( !$colId ) {
- return ( 0, 1, "NO_ID" );
+ return ( 0, [{ type => 'error', code => 'NO_ID' }] );
}
if ( !$colBranchcode ) {
- return ( 0, 2, "NO_BRANCHCODE" );
+ return ( 0, [{ type => 'error', code => 'NO_BRANCHCODE' }] );
}
my $dbh = C4::Context->dbh;
colBranchcode = ?
WHERE colId = ?"
);
- $sth->execute( $colBranchcode, $colId ) or return ( 0, 4, $sth->errstr() );
+ $sth->execute( $colBranchcode, $colId ) or return 0;
+ my $to_library = Koha::Libraries->find( $colBranchcode );
$sth = $dbh->prepare(q{
SELECT items.itemnumber, items.barcode FROM collections_tracking
WHERE issues.borrowernumber IS NULL
AND collections_tracking.colId = ?
});
- $sth->execute($colId) or return ( 0, 4, $sth->errstr );
- my @results;
+ $sth->execute($colId) or return 0;
+ my $messages;
while ( my $item = $sth->fetchrow_hashref ) {
- my ($status) = CheckReserves( $item->{itemnumber} );
- my @transfers = GetTransfers( $item->{itemnumber} );
- transferbook( $colBranchcode, $item->{barcode}, my $ignore_reserves = 1 ) unless ( $status eq 'Waiting' || @transfers );
+ my $item_object = Koha::Items->find( $item->{itemnumber} );
+ try {
+ $item_object->request_transfer(
+ {
+ to => $to_library,
+ reason => 'RotatingCollection',
+ ignore_limits => 0
+ }
+ ); # Request transfer
+ }
+ catch {
+ if ( $_->isa('Koha::Exceptions::Item::Transfer::InQueue') ) {
+ my $exception = $_;
+ my $found_transfer = $_->transfer;
+ if ( $found_transfer->in_transit
+ || $found_transfer->reason eq 'Reserve' )
+ {
+ my $transfer = $item_object->request_transfer(
+ {
+ to => $to_library,
+ reason => "RotatingCollection",
+ ignore_limits => 0,
+ enqueue => 1
+ }
+ ); # Queue transfer
+ push @{$messages},
+ {
+ type => 'alert',
+ code => 'enqueued',
+ item => $item_object,
+ found_transfer => $found_transfer
+ };
+ }
+ else {
+ my $transfer = $item_object->request_transfer(
+ {
+ to => $to_library,
+ reason => "RotatingCollection",
+ ignore_limits => 0,
+ replace => 1
+ }
+ ); # Replace transfer
+ # NOTE: If we just replaced a StockRotationAdvance,
+ # it will get enqueued afresh on the next cron run
+ }
+ }
+ elsif ( $_->isa('Koha::Exceptions::Item::Transfer::Limit') ) {
+ push @{$messages},
+ {
+ type => 'error',
+ code => 'limits',
+ item => $item_object
+ };
+ }
+ else {
+ $_->rethrow();
+ }
+ };
}
- return 1;
-
+ return (1, $messages);
}
=head2 GetCollectionItemBranches
=head2 isItemInAnyCollection
-$inCollection = isItemInAnyCollection( $itemnumber );
+ my $inCollection = isItemInAnyCollection( $itemnumber );
=cut
my $dbh = C4::Context->dbh;
my $sth = $dbh->prepare(
- "SELECT itemnumber FROM collections_tracking WHERE itemnumber = ?");
+ "SELECT itemnumber FROM collections_tracking JOIN collections USING (colId) WHERE itemnumber = ?");
$sth->execute($itemnumber) or return (0);
my $row = $sth->fetchrow_hashref;