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 (-2 / +29 lines)
Lines 119-125 BEGIN { Link Here
119
        
119
        
120
        &CheckReserves
120
        &CheckReserves
121
        &CanBookBeReserved
121
        &CanBookBeReserved
122
	&CanItemBeReserved
122
        &CanItemBeReserved
123
        &CancelReserve
123
        &CancelReserve
124
        &CancelExpiredReserves
124
        &CancelExpiredReserves
125
125
Lines 135-140 BEGIN { Link Here
135
        &SuspendAll
135
        &SuspendAll
136
136
137
        &GetReservesControlBranch
137
        &GetReservesControlBranch
138
139
        IsItemOnHoldAndFound
138
    );
140
    );
139
    @EXPORT_OK = qw( MergeHolds );
141
    @EXPORT_OK = qw( MergeHolds );
140
}    
142
}    
Lines 204-209 sub AddReserve { Link Here
204
        $const,          $priority,     $notes,   $checkitem,
206
        $const,          $priority,     $notes,   $checkitem,
205
        $found,          $waitingdate,	$expdate
207
        $found,          $waitingdate,	$expdate
206
    );
208
    );
209
    my $reserve_id = $sth->{mysql_insertid};
207
210
208
    # Send e-mail to librarian if syspref is active
211
    # Send e-mail to librarian if syspref is active
209
    if(C4::Context->preference("emailLibrarianWhenHoldIsPlaced")){
212
    if(C4::Context->preference("emailLibrarianWhenHoldIsPlaced")){
Lines 247-253 sub AddReserve { Link Here
247
        $sth->execute($borrowernumber, $biblionumber, $resdate, $_);
250
        $sth->execute($borrowernumber, $biblionumber, $resdate, $_);
248
    }
251
    }
249
        
252
        
250
    return;     # FIXME: why not have a useful return value?
253
    return $reserve_id;
251
}
254
}
252
255
253
=head2 GetReserve
256
=head2 GetReserve
Lines 2336-2341 sub CalculatePriority { Link Here
2336
    return @row ? $row[0]+1 : 1;
2339
    return @row ? $row[0]+1 : 1;
2337
}
2340
}
2338
2341
2342
=head2 IsItemOnHoldAndFound
2343
2344
    my $bool = IsItemFoundHold( $itemnumber );
2345
2346
    Returns true if the item is currently on hold
2347
    and that hold has a non-null found status ( W, T, etc. )
2348
2349
=cut
2350
2351
sub IsItemOnHoldAndFound {
2352
    my ($itemnumber) = @_;
2353
2354
    my $rs = Koha::Database->new()->schema()->resultset('Reserve');
2355
2356
    my $found = $rs->count(
2357
        {
2358
            itemnumber => $itemnumber,
2359
            found      => { '!=' => undef }
2360
        }
2361
    );
2362
2363
    return $found;
2364
}
2365
2339
=head1 AUTHOR
2366
=head1 AUTHOR
2340
2367
2341
Koha Development Team <http://koha-community.org/>
2368
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