X-Git-Url: http://koha-dev.rot13.org:8081/gitweb/?a=blobdiff_plain;f=C4%2FRotatingCollections.pm;h=a1f8df740d6f779a11b3d083c81f017e92d023f3;hb=2a1d85fc32a8b0df446bc32e92cbc38c3190ce7e;hp=c41d5780e966af42153bcb11af1ee5a190d43c32;hpb=3b1640e0ef16c694f8ac58d17ee736f8fe87ed6a;p=koha-ffzg.git diff --git a/C4/RotatingCollections.pm b/C4/RotatingCollections.pm index c41d5780e9..a1f8df740d 100644 --- a/C4/RotatingCollections.pm +++ b/C4/RotatingCollections.pm @@ -25,13 +25,10 @@ package C4::RotatingCollections; use Modern::Perl; use C4::Context; -use C4::Circulation; use C4::Reserves qw(CheckReserves); use Koha::Database; -use DBI; - -use Data::Dumper; +use Try::Tiny qw( catch try ); use vars qw(@ISA @EXPORT); @@ -62,12 +59,15 @@ BEGIN { 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 @@ -166,7 +166,8 @@ sub UpdateCollection { =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 Archetype to be deleted @@ -199,7 +200,8 @@ sub DeleteCollection { =head2 GetCollections $collections = GetCollections(); - Returns data about all collections + +Returns data about all collections Output: On Success: @@ -229,8 +231,8 @@ sub GetCollections { ( $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 @@ -397,7 +399,7 @@ sub RemoveItemFromCollection { =head2 TransferCollection - ( $success, $errorcode, $errormessage ) = TransferCollection( $colId, $colBranchcode ); + ( $success, $messages ) = TransferCollection( $colId, $colBranchcode ); Transfers a collection to another branch @@ -407,8 +409,7 @@ 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 @@ -417,10 +418,10 @@ sub TransferCollection { ## 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; @@ -432,7 +433,8 @@ sub TransferCollection { 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 @@ -441,21 +443,70 @@ sub TransferCollection { 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 = C4::Circulation::GetTransfers( $item->{itemnumber} ); - C4::Circulation::transferbook({ - from_branch => $item->holdingbranch, - to_branch => $colBranchcode, - barcode => $item->{barcode}, - ignore_reserves => 1, - trigger => 'RotatingCollection' - }) 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 @@ -510,7 +561,7 @@ sub isItemInThisCollection { =head2 isItemInAnyCollection -$inCollection = isItemInAnyCollection( $itemnumber ); + my $inCollection = isItemInAnyCollection( $itemnumber ); =cut @@ -520,7 +571,7 @@ sub isItemInAnyCollection { 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;