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

(-)a/C4/ILSDI/Services.pm (-1 / +1 lines)
Lines 742-748 sub CancelHold { Link Here
742
    return { code => 'RecordNotFound' } unless $reserve;
742
    return { code => 'RecordNotFound' } unless $reserve;
743
    return { code => 'RecordNotFound' } unless ($reserve->{borrowernumber} == $borrowernumber);
743
    return { code => 'RecordNotFound' } unless ($reserve->{borrowernumber} == $borrowernumber);
744
744
745
    C4::Reserves::CancelReserveFromId($reserve_id);
745
    C4::Reserves::CancelReserve({reserve_id => $reserve_id});
746
    
746
    
747
    return { code => 'Canceled' };
747
    return { code => 'Canceled' };
748
}
748
}
(-)a/C4/Reserves.pm (-75 / +14 lines)
Lines 117-125 BEGIN { Link Here
117
        
117
        
118
        &CheckReserves
118
        &CheckReserves
119
        &CanBookBeReserved
119
        &CanBookBeReserved
120
	&CanItemBeReserved
120
	    &CanItemBeReserved
121
        &CancelReserve
121
        &CancelReserve
122
        &CancelReserveFromId
123
        &CancelExpiredReserves
122
        &CancelExpiredReserves
124
123
125
        &AutoUnsuspendReserves
124
        &AutoUnsuspendReserves
Lines 1031-1116 sub CancelReserve { Link Here
1031
    return unless ( $reserve_id );
1030
    return unless ( $reserve_id );
1032
1031
1033
    my $dbh = C4::Context->dbh;
1032
    my $dbh = C4::Context->dbh;
1034
1035
    my $reserve = GetReserve( $reserve_id );
1033
    my $reserve = GetReserve( $reserve_id );
1036
1037
    my $query = "
1038
        UPDATE reserves
1039
        SET    cancellationdate = now(),
1040
               found            = Null,
1041
               priority         = 0
1042
        WHERE  reserve_id = ?
1043
    ";
1044
    my $sth = $dbh->prepare($query);
1045
    $sth->execute( $reserve_id );
1046
1047
    $query = "
1048
        INSERT INTO old_reserves
1049
        SELECT * FROM reserves
1050
        WHERE  reserve_id = ?
1051
    ";
1052
    $sth = $dbh->prepare($query);
1053
    $sth->execute( $reserve_id );
1054
1055
    $query = "
1056
        DELETE FROM reserves
1057
        WHERE  reserve_id = ?
1058
    ";
1059
    $sth = $dbh->prepare($query);
1060
    $sth->execute( $reserve_id );
1061
1062
    # now fix the priority on the others....
1063
    _FixPriority({ biblionumber => $reserve->{biblionumber} });    
1064
}
1065
1066
=head2 CancelReserveFromId
1067
1068
    C4::Reserves::CancelReserveFromId($reserve_id);
1069
1070
Cancel a reserve, given its reserve_id
1071
1072
=cut
1073
1074
sub CancelReserveFromId {
1075
    my ($reserve_id) = @_;
1076
1077
    my $reserve = GetReserve($reserve_id);
1078
    if ($reserve) {
1034
    if ($reserve) {
1079
        my $dbh = C4::Context->dbh;
1035
        my $query = "
1080
1081
        # update the database, removing the record...
1082
        my $query = qq{
1083
            UPDATE reserves
1036
            UPDATE reserves
1084
            SET cancellationdate = NOW(),
1037
            SET    cancellationdate = now(),
1085
                found = NULL,
1038
                   found            = Null,
1086
                priority = 0
1039
                   priority         = 0
1087
            WHERE reserve_id = ?
1040
            WHERE  reserve_id = ?
1088
        };
1041
        ";
1089
        my $sth = $dbh->prepare($query);
1042
        my $sth = $dbh->prepare($query);
1090
        $sth->execute($reserve_id);
1043
        $sth->execute( $reserve_id );
1091
        $sth->finish;
1092
1044
1093
        $query = qq{
1045
        $query = "
1094
            INSERT INTO old_reserves
1046
            DELETE FROM reserves
1095
            SELECT * FROM reserves
1047
            WHERE  reserve_id = ?
1096
            WHERE reserve_id = ?
1048
        ";
1097
        };
1098
        $sth = $dbh->prepare($query);
1049
        $sth = $dbh->prepare($query);
1099
        my $rv = $sth->execute($reserve_id);
1050
        $sth->execute( $reserve_id );
1100
1101
        if ($rv) {
1102
            $query = qq{
1103
                DELETE FROM reserves
1104
                WHERE reserve_id = ?
1105
            };
1106
            $sth = $dbh->prepare($query);
1107
            $sth->execute($reserve_id);
1108
        } else {
1109
            warn "ERROR: Failed to move reserve $reserve_id to table old_reserves.";
1110
            return;
1111
        }
1112
1051
1113
        # now fix the priority on the others...
1052
        # now fix the priority on the others....
1114
        _FixPriority({ biblionumber => $reserve->{biblionumber} });
1053
        _FixPriority({ biblionumber => $reserve->{biblionumber} });
1115
    }
1054
    }
1116
1055
(-)a/t/db_dependent/Reserves.t (-5 / +5 lines)
Lines 238-252 $reserve = GetReserve($reserve_id); Link Here
238
isa_ok($reserve, 'HASH', "GetReserve return");
238
isa_ok($reserve, 'HASH', "GetReserve return");
239
is($reserve->{biblionumber}, $biblionumber);
239
is($reserve->{biblionumber}, $biblionumber);
240
240
241
$reserve = CancelReserveFromId($reserve_id);
241
$reserve = CancelReserve({reserve_id => $reserve_id});
242
isa_ok($reserve, 'HASH', "CancelReserveFromId return");
242
isa_ok($reserve, 'HASH', "CancelReserve return");
243
is($reserve->{biblionumber}, $biblionumber);
243
is($reserve->{biblionumber}, $biblionumber);
244
244
245
$reserve = GetReserve($reserve_id);
245
$reserve = GetReserve($reserve_id);
246
is($reserve, undef, "GetReserve returns undef after deletion");
246
is($reserve, undef, "GetReserve returns undef after deletion");
247
247
248
$reserve = CancelReserveFromId($reserve_id);
248
$reserve = CancelReserve({reserve_id => $reserve_id});
249
is($reserve, undef, "CancelReserveFromId return undef if reserve does not exist");
249
is($reserve, undef, "CancelReserve return undef if reserve does not exist");
250
250
251
251
# Tests for bug 9761 (ConfirmFutureHolds): new CheckReserves lookahead parameter, and corresponding change in AddReturn
252
# Tests for bug 9761 (ConfirmFutureHolds): new CheckReserves lookahead parameter, and corresponding change in AddReturn
252
# Note that CheckReserve uses its lookahead parameter and does not check ConfirmFutureHolds pref (it should be passed if needed like AddReturn does)
253
# Note that CheckReserve uses its lookahead parameter and does not check ConfirmFutureHolds pref (it should be passed if needed like AddReturn does)
253
- 

Return to bug 8868