From 736985f8f038bea940f20790c74f7dbba803b96c Mon Sep 17 00:00:00 2001 From: Martin Renvoize Date: Fri, 17 Jan 2020 13:58:12 +0000 Subject: [PATCH] Bug 24446: Catch daterequested in circ returns Update C4::Circulation::AddReturn to use Koha::Item->get_transfer to find requested transfers and use Koha::Item::Transfer->receipt to complete transfer requests if they have arrived at their destination or return the relevant 'WrongTransfer', 'WasTransfered' and 'TransferTrigger' messages to the end user. --- C4/Circulation.pm | 53 ++++++++++++------- circ/returns.pl | 3 +- .../prog/en/modules/circ/returns.tt | 23 +++++++- 3 files changed, 58 insertions(+), 21 deletions(-) diff --git a/C4/Circulation.pm b/C4/Circulation.pm index 34fe73583f..8c10fd8e02 100644 --- a/C4/Circulation.pm +++ b/C4/Circulation.pm @@ -365,7 +365,7 @@ sub transferbook { ModItemTransfer( $itemnumber, $fbr, $tbr, $trigger ); # don't need to update MARC anymore, we do it in batch now - $messages->{'WasTransfered'} = 1; + $messages->{'WasTransfered'} = $tbr; } ModDateLastSeen( $itemnumber ); @@ -1881,7 +1881,6 @@ sub AddReturn { my $messages; my $patron; my $doreturn = 1; - my $validTransfert = 0; my $stat_type = 'return'; # get information on item @@ -2030,23 +2029,32 @@ sub AddReturn { ModDateLastSeen( $item->itemnumber, $leave_item_lost ); # check if we have a transfer for this document - my ($datesent,$frombranch,$tobranch) = GetTransfers( $item->itemnumber ); + my $transfer = $item->get_transfer; # if we have a transfer to do, we update the line of transfers with the datearrived my $is_in_rotating_collection = C4::RotatingCollections::isItemInAnyCollection( $item->itemnumber ); - if ($datesent) { - if ( $tobranch eq $branch ) { - my $sth = C4::Context->dbh->prepare( - "UPDATE branchtransfers SET datearrived = now() WHERE itemnumber= ? AND datearrived IS NULL" - ); - $sth->execute( $item->itemnumber ); - # if we have a reservation with valid transfer, we can set it's status to 'W' - C4::Reserves::ModReserveStatus($item->itemnumber, 'W'); - } else { - $messages->{'WrongTransfer'} = $tobranch; - $messages->{'WrongTransferItem'} = $item->itemnumber; + if ($transfer) { + if ( $transfer->in_transit ) { + if ( $transfer->tobranch eq $branch ) { + $transfer->receipt(); + + # if we have a reservation with completed transfer, we can set it's status to 'W' + C4::Reserves::ModReserveStatus( $item->itemnumber, 'W' ); + } + else { + $messages->{'WrongTransfer'} = $transfer->tobranch; + $messages->{'WrongTransferItem'} = $item->itemnumber; + } + } + else { + if ( $transfer->tobranch eq $branch ) { + $transfer->receipt(); + } + else { + $messages->{'WasTransfered'} = $transfer->tobranch; + $messages->{'TransferTrigger'} = $transfer->reason; + } } - $validTransfert = 1; } # fix up the accounts..... @@ -2170,7 +2178,13 @@ sub AddReturn { } # Transfer to returnbranch if Automatic transfer set or append message NeedsTransfer - if (!$is_in_rotating_collection && ($doreturn or $messages->{'NotIssued'}) and !$resfound and ($branch ne $returnbranch) and not $messages->{'WrongTransfer'}){ + if ( !$is_in_rotating_collection + && ( $doreturn or $messages->{'NotIssued'} ) + and !$resfound + and ( $branch ne $returnbranch ) + and not $messages->{'WrongTransfer'} + and not $messages->{'WasTransfered'} ) + { my $BranchTransferLimitsType = C4::Context->preference("BranchTransferLimitsType") eq 'itemtype' ? 'effective_itemtype' : 'ccode'; if (C4::Context->preference("AutomaticItemReturn" ) or (C4::Context->preference("UseBranchTransferLimits") and @@ -2179,7 +2193,8 @@ sub AddReturn { $debug and warn sprintf "about to call ModItemTransfer(%s, %s, %s, %s)", $item->itemnumber,$branch, $returnbranch, $transfer_trigger; $debug and warn "item: " . Dumper($item->unblessed); ModItemTransfer($item->itemnumber, $branch, $returnbranch, $transfer_trigger); - $messages->{'WasTransfered'} = 1; + $messages->{'WasTransfered'} = $returnbranch; + $messages->{'TransferTrigger'} = $transfer_trigger; } else { $messages->{'NeedsTransfer'} = $returnbranch; $messages->{'TransferTrigger'} = $transfer_trigger; @@ -3430,7 +3445,9 @@ sub GetTransfers { SELECT datesent, frombranch, tobranch, - branchtransfer_id + branchtransfer_id, + daterequested, + reason FROM branchtransfers WHERE itemnumber = ? AND datearrived IS NULL diff --git a/circ/returns.pl b/circ/returns.pl index e1bce3c3f1..db4ba1a7c0 100755 --- a/circ/returns.pl +++ b/circ/returns.pl @@ -358,7 +358,8 @@ my $reserved = 0; if ( $messages->{'WasTransfered'} ) { $template->param( found => 1, - transfer => 1, + transfer => $messages->{'WasTransfered'}, + trigger => $messages->{'TransferTrigger'}, itemnumber => $itemnumber, ); } diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/returns.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/returns.tt index 84efebe53d..c918caefb4 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/returns.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/returns.tt @@ -106,6 +106,25 @@ [% END # /IF hold_auto_filled %] + [% IF ( trigger ) %] +
+

Reason for transfer

+

+ [%- SWITCH trigger -%] + [%- CASE 'Manual' -%]Manual + [%- CASE 'StockrotationAdvance' -%]Stock rotation advance + [%- CASE 'StockrotationRepatriation' -%]Stock rotation repatriation + [%- CASE 'ReturnToHome' -%]Return to home library + [%- CASE 'ReturnToHolding' -%]Return to holding library + [%- CASE 'RotatingCollection' -%]Rotating collection + [%- CASE 'Reserve' -%]Reserve + [%- CASE 'LostReserve' -%]Lost reserve + [%- CASE 'CancelReserve' -%]Cancelled reserve + [%- END -%] +

+
+ [% END %] + [% IF privacy == 2 AND NOT Koha.Preference('AnonymousPatron') %]
Error: @@ -494,7 +513,7 @@