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

(-)a/C4/Circulation.pm (-1 / +2 lines)
Lines 2674-2680 sub CanBookBeRenewed { Link Here
2674
        foreach my $b (@borrowernumbers) {
2674
        foreach my $b (@borrowernumbers) {
2675
            foreach my $i (@itemnumbers) {
2675
            foreach my $i (@itemnumbers) {
2676
                if (   IsAvailableForItemLevelRequest($i)
2676
                if (   IsAvailableForItemLevelRequest($i)
2677
                    && CanItemBeReserved( $b, $i ) )
2677
                    && CanItemBeReserved( $b, $i )
2678
                    && !IsItemOnHoldAndFound($i) )
2678
                {
2679
                {
2679
                    push( @reservable, $i );
2680
                    push( @reservable, $i );
2680
                }
2681
                }
(-)a/C4/Reserves.pm (-1 / +28 lines)
Lines 136-141 BEGIN { Link Here
136
        &SuspendAll
136
        &SuspendAll
137
137
138
        &GetReservesControlBranch
138
        &GetReservesControlBranch
139
140
        IsItemOnHoldAndFound
139
    );
141
    );
140
    @EXPORT_OK = qw( MergeHolds );
142
    @EXPORT_OK = qw( MergeHolds );
141
}    
143
}    
Lines 205-210 sub AddReserve { Link Here
205
        $const,          $priority,     $notes,   $checkitem,
207
        $const,          $priority,     $notes,   $checkitem,
206
        $found,          $waitingdate,	$expdate
208
        $found,          $waitingdate,	$expdate
207
    );
209
    );
210
    my $reserve_id = $sth->{mysql_insertid};
208
211
209
    # Send e-mail to librarian if syspref is active
212
    # Send e-mail to librarian if syspref is active
210
    if(C4::Context->preference("emailLibrarianWhenHoldIsPlaced")){
213
    if(C4::Context->preference("emailLibrarianWhenHoldIsPlaced")){
Lines 248-254 sub AddReserve { Link Here
248
        $sth->execute($borrowernumber, $biblionumber, $resdate, $_);
251
        $sth->execute($borrowernumber, $biblionumber, $resdate, $_);
249
    }
252
    }
250
        
253
        
251
    return;     # FIXME: why not have a useful return value?
254
    return $reserve_id;
252
}
255
}
253
256
254
=head2 GetReserve
257
=head2 GetReserve
Lines 2364-2369 sub CalculatePriority { Link Here
2364
    return @row ? $row[0]+1 : 1;
2367
    return @row ? $row[0]+1 : 1;
2365
}
2368
}
2366
2369
2370
=head2 IsItemOnHoldAndFound
2371
2372
    my $bool = IsItemFoundHold( $itemnumber );
2373
2374
    Returns true if the item is currently on hold
2375
    and that hold has a non-null found status ( W, T, etc. )
2376
2377
=cut
2378
2379
sub IsItemOnHoldAndFound {
2380
    my ($itemnumber) = @_;
2381
2382
    my $rs = Koha::Database->new()->schema()->resultset('Reserve');
2383
2384
    my $found = $rs->count(
2385
        {
2386
            itemnumber => $itemnumber,
2387
            found      => { '!=' => undef }
2388
        }
2389
    );
2390
2391
    return $found;
2392
}
2393
2367
=head1 AUTHOR
2394
=head1 AUTHOR
2368
2395
2369
Koha Development Team <http://koha-community.org/>
2396
Koha Development Team <http://koha-community.org/>
(-)a/t/db_dependent/Circulation.t (-3 / +27 lines)
Lines 26-32 use C4::Reserves; Link Here
26
use Koha::DateUtils;
26
use Koha::DateUtils;
27
use Koha::Database;
27
use Koha::Database;
28
28
29
use Test::More tests => 57;
29
use Test::More tests => 59;
30
30
31
BEGIN {
31
BEGIN {
32
    use_ok('C4::Circulation');
32
    use_ok('C4::Circulation');
Lines 233-239 C4::Context->dbh->do("DELETE FROM accountlines"); Link Here
233
        $biblionumber
233
        $biblionumber
234
    );
234
    );
235
235
236
    # Create 2 borrowers
236
    # Create borrowers
237
    my %renewing_borrower_data = (
237
    my %renewing_borrower_data = (
238
        firstname =>  'John',
238
        firstname =>  'John',
239
        surname => 'Renewal',
239
        surname => 'Renewal',
Lines 248-255 C4::Context->dbh->do("DELETE FROM accountlines"); Link Here
248
        branchcode => $branch,
248
        branchcode => $branch,
249
    );
249
    );
250
250
251
    my %hold_waiting_borrower_data = (
252
        firstname =>  'Kyle',
253
        surname => 'Reservation',
254
        categorycode => 'S',
255
        branchcode => $branch,
256
    );
257
251
    my $renewing_borrowernumber = AddMember(%renewing_borrower_data);
258
    my $renewing_borrowernumber = AddMember(%renewing_borrower_data);
252
    my $reserving_borrowernumber = AddMember(%reserving_borrower_data);
259
    my $reserving_borrowernumber = AddMember(%reserving_borrower_data);
260
    my $hold_waiting_borrowernumber = AddMember(%hold_waiting_borrower_data);
253
261
254
    my $renewing_borrower = GetMember( borrowernumber => $renewing_borrowernumber );
262
    my $renewing_borrower = GetMember( borrowernumber => $renewing_borrowernumber );
255
263
Lines 282-292 C4::Context->dbh->do("DELETE FROM accountlines"); Link Here
282
        $title, $checkitem, $found
290
        $title, $checkitem, $found
283
    );
291
    );
284
292
293
    # Testing of feature to allow the renewal of reserved items if other items on the record can fill all needed holds
285
    C4::Context->set_preference('AllowRenewalIfOtherItemsAvailable', 1 );
294
    C4::Context->set_preference('AllowRenewalIfOtherItemsAvailable', 1 );
286
    ( $renewokay, $error ) = CanBookBeRenewed($renewing_borrowernumber, $itemnumber);
295
    ( $renewokay, $error ) = CanBookBeRenewed($renewing_borrowernumber, $itemnumber);
287
    is( $renewokay, 1, 'Bug 11634 - Allow renewal of item with unfilled holds if other available items can fill those holds');
296
    is( $renewokay, 1, 'Bug 11634 - Allow renewal of item with unfilled holds if other available items can fill those holds');
288
    ( $renewokay, $error ) = CanBookBeRenewed($renewing_borrowernumber, $itemnumber2);
297
    ( $renewokay, $error ) = CanBookBeRenewed($renewing_borrowernumber, $itemnumber2);
289
    is( $renewokay, 1, 'Bug 11634 - Allow renewal of item with unfilled holds if other available items can fill those holds');
298
    is( $renewokay, 1, 'Bug 11634 - Allow renewal of item with unfilled holds if other available items can fill those holds');
299
    # Now let's add a waiting hold on the 3rd item, it's no longer available tp check out by just anyone, so we should no longer
300
    # be able to renew these items 
301
    my $hold = Koha::Database->new()->schema()->resultset('Reserve')->create(
302
        {
303
            borrowernumber => $hold_waiting_borrowernumber,
304
            biblionumber   => $biblionumber,
305
            itemnumber     => $itemnumber3,
306
            branchcode     => $branch,
307
            priority       => 0,
308
            found          => 'W'
309
        }
310
    );
311
    ( $renewokay, $error ) = CanBookBeRenewed($renewing_borrowernumber, $itemnumber);
312
    is( $renewokay, 0, 'Bug 11634 - Allow renewal of item with unfilled holds if other available items can fill those holds');
313
    ( $renewokay, $error ) = CanBookBeRenewed($renewing_borrowernumber, $itemnumber2);
314
    is( $renewokay, 0, 'Bug 11634 - Allow renewal of item with unfilled holds if other available items can fill those holds');
290
    C4::Context->set_preference('AllowRenewalIfOtherItemsAvailable', 0 );
315
    C4::Context->set_preference('AllowRenewalIfOtherItemsAvailable', 0 );
291
316
292
    ( $renewokay, $error ) = CanBookBeRenewed($renewing_borrowernumber, $itemnumber);
317
    ( $renewokay, $error ) = CanBookBeRenewed($renewing_borrowernumber, $itemnumber);
293
- 

Return to bug 11634