View | Details | Raw Unified | Return to bug 34972
Collapse All | Expand All

(-)a/C4/Reserves.pm (-53 / +13 lines)
Lines 106-112 BEGIN { Link Here
106
106
107
      GetReserveStatus
107
      GetReserveStatus
108
108
109
      GetOtherReserves
110
      ChargeReserveFee
109
      ChargeReserveFee
111
      GetReserveFee
110
      GetReserveFee
112
111
Lines 714-768 sub CanReserveBeCanceledFromOpac { Link Here
714
    return $reserve->is_cancelable_from_opac;
713
    return $reserve->is_cancelable_from_opac;
715
}
714
}
716
715
717
=head2 GetOtherReserves
718
719
  ($messages,$nextreservinfo)=$GetOtherReserves(itemnumber);
720
721
Check queued list of this document and check if this document must be transferred
722
723
=cut
724
725
sub GetOtherReserves {
726
    my ($itemnumber) = @_;
727
    my $messages;
728
    my $nextreservinfo;
729
    my $item = Koha::Items->find($itemnumber);
730
    my ( undef, $checkreserves, undef ) = CheckReserves($item);
731
    if ($checkreserves) {
732
        if ( $item->holdingbranch ne $checkreserves->{'branchcode'} ) {
733
            $messages->{'transfert'} = $checkreserves->{'branchcode'};
734
            #minus priorities of others reservs
735
            ModReserveMinusPriority(
736
                $itemnumber,
737
                $checkreserves->{'reserve_id'},
738
            );
739
740
            #launch the subroutine dotransfer
741
            C4::Items::ModItemTransfer(
742
                $itemnumber,
743
                $item->holdingbranch,
744
                $checkreserves->{'branchcode'},
745
                'Reserve'
746
              ),
747
              ;
748
        }
749
750
     #step 2b : case of a reservation on the same branch, set the waiting status
751
        else {
752
            $messages->{'waiting'} = 1;
753
            ModReserveMinusPriority(
754
                $itemnumber,
755
                $checkreserves->{'reserve_id'},
756
            );
757
            ModReserveStatus($itemnumber,'W');
758
        }
759
760
        $nextreservinfo = $checkreserves;
761
    }
762
763
    return ( $messages, $nextreservinfo );
764
}
765
766
=head2 ChargeReserveFee
716
=head2 ChargeReserveFee
767
717
768
    $fee = ChargeReserveFee( $borrowernumber, $fee, $title );
718
    $fee = ChargeReserveFee( $borrowernumber, $fee, $title );
Lines 1298-1304 sub ModReserveAffect { Link Here
1298
1248
1299
  ($messages,$nextreservinfo) = &ModReserveCancelAll($itemnumber,$borrowernumber,$reason);
1249
  ($messages,$nextreservinfo) = &ModReserveCancelAll($itemnumber,$borrowernumber,$reason);
1300
1250
1301
function to cancel reserv,check other reserves, and transfer document if it's necessary
1251
function to cancel reserve and check other reserves
1302
1252
1303
=cut
1253
=cut
1304
1254
Lines 1306-1319 sub ModReserveCancelAll { Link Here
1306
    my $messages;
1256
    my $messages;
1307
    my $nextreservinfo;
1257
    my $nextreservinfo;
1308
    my ( $itemnumber, $borrowernumber, $cancellation_reason ) = @_;
1258
    my ( $itemnumber, $borrowernumber, $cancellation_reason ) = @_;
1259
    my $item = Koha::Items->find($itemnumber);
1309
1260
1310
    #step 1 : cancel the reservation
1261
    #step 1 : cancel the reservation
1311
    my $holds = Koha::Holds->search({ itemnumber => $itemnumber, borrowernumber => $borrowernumber });
1262
    my $holds = Koha::Holds->search({ itemnumber => $itemnumber, borrowernumber => $borrowernumber });
1312
    return unless $holds->count;
1263
    return unless $holds->count;
1313
    $holds->next->cancel({ cancellation_reason => $cancellation_reason });
1264
    $holds->next->cancel({ cancellation_reason => $cancellation_reason });
1314
1265
1315
    #step 2 launch the subroutine of the others reserves
1266
    #step 2 check for other reserves on this item
1316
    ( $messages, $nextreservinfo ) = GetOtherReserves($itemnumber);
1267
    ( undef, $nextreservinfo, undef ) = CheckReserves($item);
1268
1269
    if ($nextreservinfo) {
1270
        if( $item->holdingbranch ne $nextreservinfo->{'branchcode'} ) {
1271
            $messages->{'transfert'} = $nextreservinfo->{'branchcode'};
1272
        }
1273
        else {
1274
            $messages->{'waiting'} = 1;
1275
        }
1276
    }
1317
1277
1318
    return ( $messages, $nextreservinfo->{borrowernumber} );
1278
    return ( $messages, $nextreservinfo->{borrowernumber} );
1319
}
1279
}
(-)a/circ/returns.pl (-8 / +17 lines)
Lines 41-47 use C4::Items qw( ModItemTransfer ); Link Here
41
use C4::Members::Messaging;
41
use C4::Members::Messaging;
42
use C4::Members;
42
use C4::Members;
43
use C4::Output qw( output_html_with_http_headers );
43
use C4::Output qw( output_html_with_http_headers );
44
use C4::Reserves qw( ModReserve ModReserveAffect GetOtherReserves );
44
use C4::Reserves qw( ModReserve ModReserveAffect CheckReserves );
45
use C4::RotatingCollections;
45
use C4::RotatingCollections;
46
use Koha::AuthorisedValues;
46
use Koha::AuthorisedValues;
47
use Koha::BiblioFrameworks;
47
use Koha::BiblioFrameworks;
Lines 162-176 if ( $query->param('reserve_id') && $op eq 'cud-affect_reserve') { Link Here
162
        } # FIXME else?
162
        } # FIXME else?
163
    } else {
163
    } else {
164
        my $diffBranchSend = ($userenv_branch ne $diffBranchReturned) ? $diffBranchReturned : undef;
164
        my $diffBranchSend = ($userenv_branch ne $diffBranchReturned) ? $diffBranchReturned : undef;
165
165
        # diffBranchSend tells ModReserveAffect whether document is expected in this library or not,
166
        # diffBranchSend tells ModReserveAffect whether document is expected in this library or not,
166
        # i.e., whether to apply waiting status
167
        # i.e., whether to apply waiting status
167
        ModReserveAffect( $itemnumber, $borrowernumber, $diffBranchSend, $reserve_id, $desk_id );
168
        ModReserveAffect( $itemnumber, $borrowernumber, $diffBranchSend, $reserve_id, $desk_id );
169
170
        if ($diffBranchSend) {
171
            ModItemTransfer( $itemnumber, $userenv_branch, $diffBranchSend, 'Reserve' );
172
        }
168
    }
173
    }
169
#   check if we have other reserves for this document, if we have a return send the message of transfer
174
    # check if we have other reserves for this document, if we have a result send the message of transfer
170
    my ( $messages, $nextreservinfo ) = GetOtherReserves($itemnumber);
175
    # FIXME do we need to do this if we didn't take the cancel_reserve branch above?
176
    my ( undef, $nextreservinfo, undef ) = CheckReserves($item);
171
177
172
    my $patron = Koha::Patrons->find( $nextreservinfo );
178
    my $patron = Koha::Patrons->find( $nextreservinfo->{'borrowernumber'} );
173
    if ( $messages->{'transfert'} ) {
179
    if ( $userenv_branch ne $nextreservinfo->{'branchcode'} ) {
174
        $template->param(
180
        $template->param(
175
            itemtitle      => $biblio->title,
181
            itemtitle      => $biblio->title,
176
            itembiblionumber => $biblio->biblionumber,
182
            itembiblionumber => $biblio->biblionumber,
Lines 595-609 if ( $messages->{'ResFound'} ) { Link Here
595
601
596
        my $diffBranchSend = !$branchCheck ? $reserve->{branchcode} : undef;
602
        my $diffBranchSend = !$branchCheck ? $reserve->{branchcode} : undef;
597
        ModReserveAffect( $itemnumber, $reserve->{borrowernumber}, $diffBranchSend, $reserve->{reserve_id}, $desk_id );
603
        ModReserveAffect( $itemnumber, $reserve->{borrowernumber}, $diffBranchSend, $reserve->{reserve_id}, $desk_id );
598
        my ( $messages, $nextreservinfo ) = GetOtherReserves($reserve->{itemnumber});
604
605
        if ($diffBranchSend) {
606
            ModItemTransfer( $itemnumber, $item->holdingbranch, $reserve->{branchcode}, 'Reserve' );
607
        }
599
608
600
        $template->param(
609
        $template->param(
601
            hold_auto_filled => 1,
610
            hold_auto_filled => 1,
602
            print_slip       => C4::Context->preference('HoldsAutoFillPrintSlip'),
611
            print_slip       => C4::Context->preference('HoldsAutoFillPrintSlip'),
603
            reserve_id       => $nextreservinfo->{reserve_id},
612
            reserve_id       => $reserve->{reserve_id},
604
        );
613
        );
605
614
606
        if ( $messages->{'transfert'} ) {
615
        if ($diffBranchSend) {
607
            $template->param(
616
            $template->param(
608
                itemtitle        => $biblio->title,
617
                itemtitle        => $biblio->title,
609
                itembiblionumber => $biblio->biblionumber,
618
                itembiblionumber => $biblio->biblionumber,
(-)a/t/db_dependent/Circulation.t (-4 / +5 lines)
Lines 37-43 use C4::Circulation qw( AddIssue AddReturn CanBookBeRenewed GetIssuingCharges Ad Link Here
37
use C4::Biblio;
37
use C4::Biblio;
38
use C4::Items qw( ModItemTransfer );
38
use C4::Items qw( ModItemTransfer );
39
use C4::Log;
39
use C4::Log;
40
use C4::Reserves qw( AddReserve ModReserve ModReserveCancelAll ModReserveAffect CheckReserves GetOtherReserves );
40
use C4::Reserves qw( AddReserve ModReserve ModReserveCancelAll ModReserveAffect CheckReserves );
41
use C4::Overdues qw( CalcFine UpdateFine get_chargeable_units );
41
use C4::Overdues qw( CalcFine UpdateFine get_chargeable_units );
42
use C4::Members::Messaging qw( SetMessagingPreference );
42
use C4::Members::Messaging qw( SetMessagingPreference );
43
use Koha::DateUtils qw( dt_from_string output_pref );
43
use Koha::DateUtils qw( dt_from_string output_pref );
Lines 5976-5983 subtest 'Checkout should correctly terminate a transfer' => sub { Link Here
5976
    ModItemTransfer( $item->itemnumber, $library_1->branchcode,
5976
    ModItemTransfer( $item->itemnumber, $library_1->branchcode,
5977
        $library_2->branchcode, 'Manual' );
5977
        $library_2->branchcode, 'Manual' );
5978
    ModReserveAffect( $item->itemnumber, undef, $do_transfer, $reserve_id );
5978
    ModReserveAffect( $item->itemnumber, undef, $do_transfer, $reserve_id );
5979
    GetOtherReserves( $item->itemnumber )
5979
    ModItemTransfer(
5980
      ;    # To put the Reason, it's what does returns.pl...
5980
        $item->itemnumber,      $library_1->branchcode,
5981
        $library_2->branchcode, 'Reserve'
5982
    );    # To put the Reason, it's what does returns.pl...
5981
    my $hold = Koha::Holds->find($reserve_id);
5983
    my $hold = Koha::Holds->find($reserve_id);
5982
    is( $hold->found, 'T', 'Hold is in transit' );
5984
    is( $hold->found, 'T', 'Hold is in transit' );
5983
    my $transfer = $item->get_transfer;
5985
    my $transfer = $item->get_transfer;
5984
- 

Return to bug 34972