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

(-)a/C4/Reserves.pm (-6 / +17 lines)
Lines 672-689 sub GetReserveFee { Link Here
672
    my $borquery = qq{
672
    my $borquery = qq{
673
SELECT reservefee FROM borrowers LEFT JOIN categories ON borrowers.categorycode = categories.categorycode WHERE borrowernumber = ?
673
SELECT reservefee FROM borrowers LEFT JOIN categories ON borrowers.categorycode = categories.categorycode WHERE borrowernumber = ?
674
    };
674
    };
675
    my $issue_qry = qq{
676
SELECT COUNT(*) FROM items
677
LEFT JOIN issues USING (itemnumber)
678
WHERE items.biblionumber=? AND issues.issue_id IS NULL
679
    };
680
    my $holds_qry = qq{
681
SELECT COUNT(*) FROM reserves WHERE biblionumber=? AND borrowernumber<>?
682
    };
675
683
676
    my $dbh = C4::Context->dbh;
684
    my $dbh = C4::Context->dbh;
677
    my ( $fee ) = $dbh->selectrow_array( $borquery, undef, ($borrowernumber) );
685
    my ( $fee ) = $dbh->selectrow_array( $borquery, undef, ($borrowernumber) );
678
    if( $fee && $fee > 0 ) {
686
    if( $fee && $fee > 0 ) {
679
        # This is a reconstruction of the old code:
687
        # This is a reconstruction of the old code:
680
        # Calculate number of items, items issued and holds
688
        # Compare number of items with items issued, and optionally check holds
681
        my ( $cnt1 ) = $dbh->selectrow_array( "SELECT COUNT(*) FROM items WHERE biblionumber=?", undef, ( $biblionumber ) );
682
        my ( $cnt2 ) = $dbh->selectrow_array( "SELECT COUNT(*) FROM issues LEFT JOIN items USING (itemnumber) WHERE biblionumber=?", undef, ( $biblionumber ));
683
        my ( $cnt3 ) = $dbh->selectrow_array( "SELECT COUNT(*) FROM reserves WHERE biblionumber=? AND borrowernumber<>?", undef, ( $biblionumber, $borrowernumber ) );
684
        # If not all items are issued and there are no holds: charge no fee
689
        # If not all items are issued and there are no holds: charge no fee
685
        # NOTE: Lost, damaged, not-for-loan, etc. are just ignored here
690
        # NOTE: Lost, damaged, not-for-loan, etc. are just ignored here
686
        $fee = 0 if $cnt1 - $cnt2 > 0 && $cnt3 == 0;
691
        my ( $notissued, $reserved );
692
        ( $notissued ) = $dbh->selectrow_array( $issue_qry, undef,
693
            ( $biblionumber ) );
694
        if( $notissued ) {
695
            ( $reserved ) = $dbh->selectrow_array( $holds_qry, undef,
696
                ( $biblionumber, $borrowernumber ) );
697
            $fee = 0 if $reserved == 0;
698
        }
687
    }
699
    }
688
    return $fee;
700
    return $fee;
689
}
701
}
690
- 

Return to bug 14702