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

(-)a/C4/Reserves.pm (-55 / +59 lines)
Lines 415-433 This function return 1 if an item can be issued by this borrower. Link Here
415
415
416
=cut
416
=cut
417
417
418
sub CanItemBeReserved{
418
sub CanItemBeReserved {
419
    my ($borrowernumber, $itemnumber) = @_;
419
    my ( $borrowernumber, $itemnumber ) = @_;
420
    
420
421
    my $dbh             = C4::Context->dbh;
421
    my $dbh             = C4::Context->dbh;
422
    my $allowedreserves = 0;
422
    my $allowedreserves = 0;
423
            
423
424
    my $controlbranch = C4::Context->preference('ReservesControlBranch');
424
    my $controlbranch = C4::Context->preference('ReservesControlBranch');
425
    my $itype         = C4::Context->preference('item-level_itypes') ? "itype" : "itemtype";
425
    my $itype =
426
      C4::Context->preference('item-level_itypes') ? "itype" : "itemtype";
426
427
427
    # we retrieve borrowers and items informations #
428
    # we retrieve borrowers and items informations #
428
    my $item     = GetItem($itemnumber);
429
    my $item = GetItem($itemnumber);
429
    my $borrower = C4::Members::GetMember('borrowernumber'=>$borrowernumber);     
430
    my $borrower =
430
431
      C4::Members::GetMember( 'borrowernumber' => $borrowernumber );
431
432
432
    # Before we check too see if the borrower has exceed the
433
    # Before we check too see if the borrower has exceed the
433
    # maximum number of holds allowed for this itemtype,
434
    # maximum number of holds allowed for this itemtype,
Lines 455-525 sub CanItemBeReserved{ Link Here
455
    # If we've gotten this far, the holds policy does not prevent the patron
456
    # If we've gotten this far, the holds policy does not prevent the patron
456
    # from placing this hold. We now need to see if the patron has exceeded
457
    # from placing this hold. We now need to see if the patron has exceeded
457
    # the maximum number of holds allowed for this itemtype based on the patrons
458
    # the maximum number of holds allowed for this itemtype based on the patrons
458
    my $sth = $dbh->prepare("SELECT categorycode, itemtype, branchcode, reservesallowed 
459
    my $sth = $dbh->prepare(q{
459
                             FROM issuingrules 
460
        SELECT categorycode, itemtype, branchcode, reservesallowed 
460
                             WHERE (categorycode in (?,'*') ) 
461
        FROM issuingrules 
461
                             AND (itemtype IN (?,'*')) 
462
        WHERE (categorycode in (?,'*') ) 
462
                             AND (branchcode IN (?,'*')) 
463
          AND (itemtype IN (?,'*')) 
463
                             ORDER BY 
464
          AND (branchcode IN (?,'*')) 
464
                               categorycode DESC, 
465
        ORDER BY 
465
                               itemtype     DESC, 
466
          categorycode DESC, 
466
                               branchcode   DESC;"
467
          itemtype     DESC, 
467
                           );
468
          branchcode   DESC;
468
                           
469
    });
469
    my $querycount ="SELECT 
470
470
                            count(*) as count
471
    my $querycount = q{
471
                            FROM reserves
472
        SELECT count(*) as count
472
                                LEFT JOIN items USING (itemnumber)
473
        FROM reserves
473
                                LEFT JOIN biblioitems ON (reserves.biblionumber=biblioitems.biblionumber)
474
        LEFT JOIN items       USING (itemnumber)
474
                                LEFT JOIN borrowers USING (borrowernumber)
475
        LEFT JOIN biblioitems USING (biblionumber)
475
                            WHERE borrowernumber = ?
476
        LEFT JOIN borrowers   USING (borrowernumber)
476
                                ";
477
        WHERE borrowernumber = ?
477
    
478
    };
478
    
479
479
    my $itemtype     = $item->{$itype};
480
    my $itemtype     = $item->{$itype};
480
    my $categorycode = $borrower->{categorycode};
481
    my $categorycode = $borrower->{categorycode};
481
    my $branchcode   = "";
482
    my $branchcode   = "";
482
    my $branchfield  = "reserves.branchcode";
483
    my $branchfield  = "reserves.branchcode";
483
    
484
484
    if( $controlbranch eq "ItemHomeLibrary" ){
485
    if ( $controlbranch eq "ItemHomeLibrary" ) {
485
        $branchfield = "items.homebranch";
486
        $branchfield = "items.homebranch";
486
        $branchcode = $item->{homebranch};
487
        $branchcode  = $item->{homebranch};
487
    }elsif( $controlbranch eq "PatronLibrary" ){
488
    }
489
    elsif ( $controlbranch eq "PatronLibrary" ) {
488
        $branchfield = "borrowers.branchcode";
490
        $branchfield = "borrowers.branchcode";
489
        $branchcode = $borrower->{branchcode};
491
        $branchcode  = $borrower->{branchcode};
490
    }
492
    }
491
    
493
492
    # we retrieve rights 
494
    # we retrieve rights
493
    $sth->execute($categorycode, $itemtype, $branchcode);
495
    $sth->execute( $categorycode, $itemtype, $branchcode );
494
    if(my $rights = $sth->fetchrow_hashref()){
496
    if ( my $rights = $sth->fetchrow_hashref() ) {
495
        $itemtype        = $rights->{itemtype};
497
        $itemtype        = $rights->{itemtype};
496
        $allowedreserves = $rights->{reservesallowed}; 
498
        $allowedreserves = $rights->{reservesallowed};
497
    }else{
499
    }
500
    else {
498
        $itemtype = '*';
501
        $itemtype = '*';
499
    }
502
    }
500
    
503
501
    # we retrieve count
504
    # we retrieve count
502
    
505
503
    $querycount .= "AND $branchfield = ?";
506
    $querycount .= "AND $branchfield = ?";
504
    
507
505
    $querycount .= " AND $itype = ?" if ($itemtype ne "*");
508
    $querycount .= " AND $itype = ?" if ( $itemtype ne "*" );
506
    my $sthcount = $dbh->prepare($querycount);
509
    my $sthcount = $dbh->prepare($querycount);
507
    
510
508
    if($itemtype eq "*"){
511
    if ( $itemtype eq "*" ) {
509
        $sthcount->execute($borrowernumber, $branchcode);
512
        $sthcount->execute( $borrowernumber, $branchcode );
510
    }else{
511
        $sthcount->execute($borrowernumber, $branchcode, $itemtype);
512
    }
513
    }
513
    
514
    else {
515
        $sthcount->execute( $borrowernumber, $branchcode, $itemtype );
516
    }
517
514
    my $reservecount = "0";
518
    my $reservecount = "0";
515
    if(my $rowcount = $sthcount->fetchrow_hashref()){
519
    if ( my $rowcount = $sthcount->fetchrow_hashref() ) {
516
        $reservecount = $rowcount->{count};
520
        $reservecount = $rowcount->{count};
517
    }
521
    }
518
    
522
519
    # we check if it's ok or not
523
    # we check if it's ok or not
520
    if( $reservecount < $allowedreserves ){
524
    if ( $reservecount < $allowedreserves ) {
521
        return 1;
525
        return 1;
522
    }else{
526
    }
527
    else {
523
        return 0;
528
        return 0;
524
    }
529
    }
525
}
530
}
526
- 

Return to bug 10314