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

(-)a/C4/ILSDI/Services.pm (-3 / +3 lines)
Lines 769-777 sub CancelHold { Link Here
769
769
770
    # Get the reserve or return an error code
770
    # Get the reserve or return an error code
771
    my $reserve_id = $cgi->param('item_id');
771
    my $reserve_id = $cgi->param('item_id');
772
    my $reserve = C4::Reserves::GetReserve($reserve_id);
772
    my $hold = Koha::Holds->find( $reserve_id );
773
    return { code => 'RecordNotFound' } unless $reserve;
773
    return { code => 'RecordNotFound' } unless $hold;
774
    return { code => 'RecordNotFound' } unless ($reserve->{borrowernumber} == $borrowernumber);
774
    return { code => 'RecordNotFound' } unless ($hold->borrowernumber == $borrowernumber);
775
775
776
    C4::Reserves::CancelReserve({reserve_id => $reserve_id});
776
    C4::Reserves::CancelReserve({reserve_id => $reserve_id});
777
777
(-)a/C4/Reserves.pm (-43 / +43 lines)
Lines 465-474 sub CanReserveBeCanceledFromOpac { Link Here
465
    my ($reserve_id, $borrowernumber) = @_;
465
    my ($reserve_id, $borrowernumber) = @_;
466
466
467
    return unless $reserve_id and $borrowernumber;
467
    return unless $reserve_id and $borrowernumber;
468
    my $reserve = GetReserve($reserve_id);
468
    my $reserve = Koha::Holds->find($reserve_id);
469
469
470
    return 0 unless $reserve->{borrowernumber} == $borrowernumber;
470
    return 0 unless $reserve->borrowernumber == $borrowernumber;
471
    return 0 if ( $reserve->{found} eq 'W' ) or ( $reserve->{found} eq 'T' );
471
    return 0 if ( $reserve->found eq 'W' ) or ( $reserve->found eq 'T' );
472
472
473
    return 1;
473
    return 1;
474
474
Lines 874-921 sub CancelReserve { Link Here
874
874
875
    my $dbh = C4::Context->dbh;
875
    my $dbh = C4::Context->dbh;
876
876
877
    my $reserve = GetReserve( $reserve_id );
877
    my $hold = Koha::Holds->find( $reserve_id );
878
    if ($reserve) {
878
    return unless $hold;
879
879
880
        my $hold = Koha::Holds->find( $reserve_id );
880
    logaction( 'HOLDS', 'CANCEL', $hold->reserve_id, Dumper($hold->unblessed) )
881
        logaction( 'HOLDS', 'CANCEL', $hold->reserve_id, Dumper($hold->unblessed) )
881
        if C4::Context->preference('HoldsLog');
882
            if C4::Context->preference('HoldsLog');
883
882
884
        my $query = "
883
    my $query = "
885
            UPDATE reserves
884
        UPDATE reserves
886
            SET    cancellationdate = now(),
885
        SET    cancellationdate = now(),
887
                   priority         = 0
886
               priority         = 0
888
            WHERE  reserve_id = ?
887
        WHERE  reserve_id = ?
889
        ";
888
    ";
890
        my $sth = $dbh->prepare($query);
889
    my $sth = $dbh->prepare($query);
891
        $sth->execute( $reserve_id );
890
    $sth->execute( $reserve_id );
892
891
893
        $query = "
892
    $query = "
894
            INSERT INTO old_reserves
893
        INSERT INTO old_reserves
895
            SELECT * FROM reserves
894
        SELECT * FROM reserves
896
            WHERE  reserve_id = ?
895
        WHERE  reserve_id = ?
897
        ";
896
    ";
898
        $sth = $dbh->prepare($query);
897
    $sth = $dbh->prepare($query);
899
        $sth->execute( $reserve_id );
898
    $sth->execute( $reserve_id );
900
899
901
        $query = "
900
    $query = "
902
            DELETE FROM reserves
901
        DELETE FROM reserves
903
            WHERE  reserve_id = ?
902
        WHERE  reserve_id = ?
904
        ";
903
    ";
905
        $sth = $dbh->prepare($query);
904
    $sth = $dbh->prepare($query);
906
        $sth->execute( $reserve_id );
905
    $sth->execute( $reserve_id );
907
906
908
        # now fix the priority on the others....
907
    # now fix the priority on the others....
909
        _FixPriority({ biblionumber => $reserve->{biblionumber} });
908
    _FixPriority({ biblionumber => $hold->biblionumber });
910
909
911
        # and, if desired, charge a cancel fee
910
    # and, if desired, charge a cancel fee
912
        my $charge = C4::Context->preference("ExpireReservesMaxPickUpDelayCharge");
911
    my $charge = C4::Context->preference("ExpireReservesMaxPickUpDelayCharge");
913
        if ( $charge && $params->{'charge_cancel_fee'} ) {
912
    if ( $charge && $params->{'charge_cancel_fee'} ) {
914
            manualinvoice($reserve->{'borrowernumber'}, $reserve->{'itemnumber'}, '', 'HE', $charge);
913
        manualinvoice($hold->borrowernumber, $hold->itemnumber, '', 'HE', $charge);
915
        }
916
    }
914
    }
917
915
918
    return $reserve;
916
    return $hold->unblessed;
919
}
917
}
920
918
921
=head2 ModReserve
919
=head2 ModReserve
Lines 1311-1326 Input: $where is 'up', 'down', 'top' or 'bottom'. Biblionumber, Date reserve was Link Here
1311
sub AlterPriority {
1309
sub AlterPriority {
1312
    my ( $where, $reserve_id ) = @_;
1310
    my ( $where, $reserve_id ) = @_;
1313
1311
1314
    my $reserve = GetReserve( $reserve_id );
1312
    my $hold = Koha::Holds->find( $reserve_id );
1313
    return unless $hold;
1315
1314
1316
    if ( $reserve->{cancellationdate} ) {
1315
    if ( $hold->cancellationdate ) {
1317
        warn "I cannot alter the priority for reserve_id $reserve_id, the reserve has been cancelled (".$reserve->{cancellationdate}.')';
1316
        warn "I cannot alter the priority for reserve_id $reserve_id, the reserve has been cancelled (" . $hold->cancellationdate . ')';
1318
        return;
1317
        return;
1319
    }
1318
    }
1320
1319
1321
    if ( $where eq 'up' || $where eq 'down' ) {
1320
    if ( $where eq 'up' || $where eq 'down' ) {
1322
1321
1323
      my $priority = $reserve->{'priority'};
1322
      my $priority = $hold->priority;
1324
      $priority = $where eq 'up' ? $priority - 1 : $priority + 1;
1323
      $priority = $where eq 'up' ? $priority - 1 : $priority + 1;
1325
      _FixPriority({ reserve_id => $reserve_id, rank => $priority })
1324
      _FixPriority({ reserve_id => $reserve_id, rank => $priority })
1326
1325
Lines 1333-1338 sub AlterPriority { Link Here
1333
      _FixPriority({ reserve_id => $reserve_id, rank => '999999' });
1332
      _FixPriority({ reserve_id => $reserve_id, rank => '999999' });
1334
1333
1335
    }
1334
    }
1335
    # FIXME Should return the new priority
1336
}
1336
}
1337
1337
1338
=head2 ToggleLowestPriority
1338
=head2 ToggleLowestPriority
Lines 1468-1475 sub _FixPriority { Link Here
1468
    my $dbh = C4::Context->dbh;
1468
    my $dbh = C4::Context->dbh;
1469
1469
1470
    unless ( $biblionumber ) {
1470
    unless ( $biblionumber ) {
1471
        my $res = GetReserve( $reserve_id );
1471
        my $hold = Koha::Holds->find( $reserve_id );
1472
        $biblionumber = $res->{biblionumber};
1472
        $biblionumber = $hold->biblionumber;
1473
    }
1473
    }
1474
1474
1475
    if ( $rank eq "del" ) {
1475
    if ( $rank eq "del" ) {
(-)a/Koha/REST/V1/Hold.pm (-10 / +8 lines)
Lines 118-128 sub edit { Link Here
118
    my ($c, $args, $cb) = @_;
118
    my ($c, $args, $cb) = @_;
119
119
120
    my $reserve_id = $args->{reserve_id};
120
    my $reserve_id = $args->{reserve_id};
121
    my $reserve = C4::Reserves::GetReserve($reserve_id);
121
    my $hold = Koha::Holds->find( $reserve_id );
122
122
123
    unless ($reserve) {
123
    return $c->$cb({error => "Reserve not found"}, 404)
124
        return $c->$cb({error => "Reserve not found"}, 404);
124
        unless $hold;
125
    }
126
125
127
    my $body = $c->req->json;
126
    my $body = $c->req->json;
128
127
Lines 142-161 sub edit { Link Here
142
    };
141
    };
143
142
144
    C4::Reserves::ModReserve($params);
143
    C4::Reserves::ModReserve($params);
145
    $reserve = Koha::Holds->find($reserve_id);
144
    $hold = Koha::Holds->find($reserve_id);
146
145
147
    return $c->$cb($reserve, 200);
146
    return $c->$cb($hold, 200);
148
}
147
}
149
148
150
sub delete {
149
sub delete {
151
    my ($c, $args, $cb) = @_;
150
    my ($c, $args, $cb) = @_;
152
151
153
    my $reserve_id = $args->{reserve_id};
152
    my $reserve_id = $args->{reserve_id};
154
    my $reserve = C4::Reserves::GetReserve($reserve_id);
153
    my $hold = Koha::Holds->find( $reserve_id );
155
154
156
    unless ($reserve) {
155
    return $c->$cb({error => "Reserve not found"}, 404)
157
        return $c->$cb({error => "Reserve not found"}, 404);
156
        unless $hold;
158
    }
159
157
160
    C4::Reserves::CancelReserve({ reserve_id => $reserve_id });
158
    C4::Reserves::CancelReserve({ reserve_id => $reserve_id });
161
159
(-)a/t/db_dependent/Circulation/issue.t (-2 / +3 lines)
Lines 31-36 use C4::Members; Link Here
31
use C4::Reserves;
31
use C4::Reserves;
32
use Koha::Database;
32
use Koha::Database;
33
use Koha::DateUtils;
33
use Koha::DateUtils;
34
use Koha::Holds;
34
use Koha::Library;
35
use Koha::Library;
35
use Koha::Patrons;
36
use Koha::Patrons;
36
37
Lines 373-380 my $reserve_id = AddReserve($branchcode_1, $borrower_id1, $biblionumber, Link Here
373
    undef,  1, undef, undef, "a note", "a title", undef, '');
374
    undef,  1, undef, undef, "a note", "a title", undef, '');
374
ok( $reserve_id, 'The reserve should have been inserted' );
375
ok( $reserve_id, 'The reserve should have been inserted' );
375
AddIssue( $borrower_2, $barcode_1, dt_from_string, 'cancel' );
376
AddIssue( $borrower_2, $barcode_1, dt_from_string, 'cancel' );
376
my $reserve = GetReserve( $reserve_id );
377
my $hold = Koha::Holds->find( $reserve_id );
377
is( $reserve, undef, 'The reserve should have been correctly cancelled' );
378
is( $hold, undef, 'The reserve should have been correctly cancelled' );
378
379
379
#End transaction
380
#End transaction
380
$schema->storage->txn_rollback;
381
$schema->storage->txn_rollback;
(-)a/t/db_dependent/Holds.t (-34 / +34 lines)
Lines 145-166 ModReserve({ Link Here
145
    suspend_until => output_pref( { dt => dt_from_string( "2013-01-01", "iso" ), dateonly => 1 } ),
145
    suspend_until => output_pref( { dt => dt_from_string( "2013-01-01", "iso" ), dateonly => 1 } ),
146
});
146
});
147
147
148
my $reserve = GetReserve( $reserve_id );
148
$hold = Koha::Holds->find( $reserve_id );
149
ok( $reserve->{'priority'} eq '4', "Test GetReserve(), priority changed correctly" );
149
ok( $hold->priority eq '4', "Test ModReserve, priority changed correctly" );
150
ok( $reserve->{'suspend'}, "Test GetReserve(), suspend hold" );
150
ok( $hold->suspend, "Test ModReserve, suspend hold" );
151
is( $reserve->{'suspend_until'}, '2013-01-01 00:00:00', "Test GetReserve(), suspend until date" );
151
is( $hold->suspend_until, '2013-01-01 00:00:00', "Test ModReserve, suspend until date" );
152
152
153
ToggleSuspend( $reserve_id );
153
ToggleSuspend( $reserve_id );
154
$reserve = GetReserve( $reserve_id );
154
$hold = Koha::Holds->find( $reserve_id );
155
ok( !$reserve->{'suspend'}, "Test ToggleSuspend(), no date" );
155
ok( ! $hold->suspend, "Test ToggleSuspend(), no date" );
156
156
157
ToggleSuspend( $reserve_id, '2012-01-01' );
157
ToggleSuspend( $reserve_id, '2012-01-01' );
158
$reserve = GetReserve( $reserve_id );
158
$hold = Koha::Holds->find( $reserve_id );
159
is( $reserve->{'suspend_until'}, '2012-01-01 00:00:00', "Test ToggleSuspend(), with date" );
159
is( $hold->suspend_until, '2012-01-01 00:00:00', "Test ToggleSuspend(), with date" );
160
160
161
AutoUnsuspendReserves();
161
AutoUnsuspendReserves();
162
$reserve = GetReserve( $reserve_id );
162
$hold = Koha::Holds->find( $reserve_id );
163
ok( !$reserve->{'suspend'}, "Test AutoUnsuspendReserves()" );
163
ok( ! $hold->suspend, "Test AutoUnsuspendReserves()" );
164
164
165
SuspendAll(
165
SuspendAll(
166
    borrowernumber => $borrowernumber,
166
    borrowernumber => $borrowernumber,
Lines 168-185 SuspendAll( Link Here
168
    suspend => 1,
168
    suspend => 1,
169
    suspend_until => '2012-01-01',
169
    suspend_until => '2012-01-01',
170
);
170
);
171
$reserve = GetReserve( $reserve_id );
171
$hold = Koha::Holds->find( $reserve_id );
172
is( $reserve->{'suspend'}, 1, "Test SuspendAll()" );
172
is( $hold->suspend, 1, "Test SuspendAll()" );
173
is( $reserve->{'suspend_until'}, '2012-01-01 00:00:00', "Test SuspendAll(), with date" );
173
is( $hold->suspend_until, '2012-01-01 00:00:00', "Test SuspendAll(), with date" );
174
174
175
SuspendAll(
175
SuspendAll(
176
    borrowernumber => $borrowernumber,
176
    borrowernumber => $borrowernumber,
177
    biblionumber   => $biblionumber,
177
    biblionumber   => $biblionumber,
178
    suspend => 0,
178
    suspend => 0,
179
);
179
);
180
$reserve = GetReserve( $reserve_id );
180
$hold = Koha::Holds->find( $reserve_id );
181
is( $reserve->{'suspend'}, 0, "Test resuming with SuspendAll()" );
181
is( $hold->suspend, 0, "Test resuming with SuspendAll()" );
182
is( $reserve->{'suspend_until'}, undef, "Test resuming with SuspendAll(), should have no suspend until date" );
182
is( $hold->suspend_until, undef, "Test resuming with SuspendAll(), should have no suspend until date" );
183
183
184
# Add a new hold for the borrower whose hold we canceled earlier, this time at the bib level
184
# Add a new hold for the borrower whose hold we canceled earlier, this time at the bib level
185
AddReserve(
185
AddReserve(
Lines 204-230 my $reserveid = C4::Reserves::GetReserveId( Link Here
204
    }
204
    }
205
);
205
);
206
is( $reserveid, $holds->next->reserve_id, "Test GetReserveId" );
206
is( $reserveid, $holds->next->reserve_id, "Test GetReserveId" );
207
ModReserveMinusPriority( $itemnumber, $reserve->{'reserve_id'} );
207
ModReserveMinusPriority( $itemnumber, $reserveid );
208
$holds = $patron->holds;
208
$holds = $patron->holds;
209
is( $holds->next->itemnumber, $itemnumber, "Test ModReserveMinusPriority()" );
209
is( $holds->next->itemnumber, $itemnumber, "Test ModReserveMinusPriority()" );
210
210
211
$holds = $biblio->holds;
211
$holds = $biblio->holds;
212
$hold = $holds->next;
212
$hold = $holds->next;
213
AlterPriority( 'top', $hold->reserve_id );
213
AlterPriority( 'top', $hold->reserve_id );
214
$reserve = GetReserve( $reserve->{'reserve_id'} );
214
$hold = Koha::Holds->find( $reserveid );
215
is( $reserve->{'priority'}, '1', "Test AlterPriority(), move to top" );
215
is( $hold->priority, '1', "Test AlterPriority(), move to top" );
216
216
217
AlterPriority( 'down', $reserve->{'reserve_id'} );
217
AlterPriority( 'down', $hold->reserve_id );
218
$reserve = GetReserve( $reserve->{'reserve_id'} );
218
$hold = Koha::Holds->find( $reserveid );
219
is( $reserve->{'priority'}, '2', "Test AlterPriority(), move down" );
219
is( $hold->priority, '2', "Test AlterPriority(), move down" );
220
220
221
AlterPriority( 'up', $reserve->{'reserve_id'} );
221
AlterPriority( 'up', $hold->reserve_id );
222
$reserve = GetReserve( $reserve->{'reserve_id'} );
222
$hold = Koha::Holds->find( $reserveid );
223
is( $reserve->{'priority'}, '1', "Test AlterPriority(), move up" );
223
is( $hold->priority, '1', "Test AlterPriority(), move up" );
224
224
225
AlterPriority( 'bottom', $reserve->{'reserve_id'} );
225
AlterPriority( 'bottom', $hold->reserve_id );
226
$reserve = GetReserve( $reserve->{'reserve_id'} );
226
$hold = Koha::Holds->find( $reserveid );
227
is( $reserve->{'priority'}, '5', "Test AlterPriority(), move to bottom" );
227
is( $hold->priority, '5', "Test AlterPriority(), move to bottom" );
228
228
229
# Regression test for bug 2394
229
# Regression test for bug 2394
230
#
230
#
Lines 315-322 my $reserveid2 = C4::Reserves::GetReserveId( Link Here
315
315
316
CancelReserve({ reserve_id => $reserveid1 });
316
CancelReserve({ reserve_id => $reserveid1 });
317
317
318
my $reserve2 = GetReserve( $reserveid2 );
318
my $hold2 = Koha::Holds->find( $reserveid2 );
319
is( $reserve2->{priority}, 1, "After cancelreserve, the 2nd reserve becomes the first on the waiting list" );
319
is( $hold2->priority, 1, "After cancelreserve, the 2nd reserve becomes the first on the waiting list" );
320
320
321
($item_bibnum, $item_bibitemnum, $itemnumber) = AddItem({ homebranch => $branch_1, holdingbranch => $branch_1 } , $bibnum);
321
($item_bibnum, $item_bibitemnum, $itemnumber) = AddItem({ homebranch => $branch_1, holdingbranch => $branch_1 } , $bibnum);
322
AddReserve(
322
AddReserve(
Lines 333-344 my $reserveid3 = C4::Reserves::GetReserveId( Link Here
333
    }
333
    }
334
);
334
);
335
335
336
my $reserve3 = GetReserve( $reserveid3 );
336
my $hold3 = Koha::Holds->find( $reserveid3 );
337
is( $reserve3->{priority}, 2, "New reserve for patron 0, the reserve has a priority = 2" );
337
is( $hold3->priority, 2, "New reserve for patron 0, the reserve has a priority = 2" );
338
338
339
ModReserve({ reserve_id => $reserveid2, rank => 'del' });
339
ModReserve({ reserve_id => $reserveid2, rank => 'del' });
340
$reserve3 = GetReserve( $reserveid3 );
340
$hold3 = Koha::Holds->find( $reserveid3 );
341
is( $reserve3->{priority}, 1, "After ModReserve, the 3rd reserve becomes the first on the waiting list" );
341
is( $hold3->priority, 1, "After ModReserve, the 3rd reserve becomes the first on the waiting list" );
342
342
343
ModItem({ damaged => 1 }, $item_bibnum, $itemnumber);
343
ModItem({ damaged => 1 }, $item_bibnum, $itemnumber);
344
t::lib::Mocks::mock_preference( 'AllowHoldsOnDamagedItems', 1 );
344
t::lib::Mocks::mock_preference( 'AllowHoldsOnDamagedItems', 1 );
(-)a/t/db_dependent/Items/MoveItemFromBiblio.t (-6 / +7 lines)
Lines 21-26 use Test::More tests => 8; Link Here
21
use C4::Items;
21
use C4::Items;
22
use C4::Reserves;
22
use C4::Reserves;
23
use Koha::Database;
23
use Koha::Database;
24
use Koha::Holds;
24
25
25
use t::lib::TestBuilder;
26
use t::lib::TestBuilder;
26
use Data::Dumper qw|Dumper|;
27
use Data::Dumper qw|Dumper|;
Lines 85-97 is( $get_item2->{biblionumber}, $to_biblio->{biblionumber}, 'The item2 should ha Link Here
85
my $get_item3 = C4::Items::GetItem( $item3->{itemnumber} );
86
my $get_item3 = C4::Items::GetItem( $item3->{itemnumber} );
86
is( $get_item3->{biblionumber}, $to_biblio->{biblionumber}, 'The item3 should not have been moved' );
87
is( $get_item3->{biblionumber}, $to_biblio->{biblionumber}, 'The item3 should not have been moved' );
87
88
88
my $get_bib_level_hold    = C4::Reserves::GetReserve( $bib_level_hold_not_to_move->{reserve_id} );
89
my $get_bib_level_hold    = Koha::Holds->find( $bib_level_hold_not_to_move->{reserve_id} );
89
my $get_item_level_hold_1 = C4::Reserves::GetReserve( $item_level_hold_not_to_move->{reserve_id} );
90
my $get_item_level_hold_1 = Koha::Holds->find( $item_level_hold_not_to_move->{reserve_id} );
90
my $get_item_level_hold_2 = C4::Reserves::GetReserve( $item_level_hold_to_move->{reserve_id} );
91
my $get_item_level_hold_2 = Koha::Holds->find( $item_level_hold_to_move->{reserve_id} );
91
92
92
is( $get_bib_level_hold->{biblionumber},    $from_biblio->{biblionumber}, 'MoveItemFromBiblio should not have moved the biblio-level hold' );
93
is( $get_bib_level_hold->biblionumber,    $from_biblio->{biblionumber}, 'MoveItemFromBiblio should not have moved the biblio-level hold' );
93
is( $get_item_level_hold_1->{biblionumber}, $from_biblio->{biblionumber}, 'MoveItemFromBiblio should not have moved the item-level hold placed on item 1' );
94
is( $get_item_level_hold_1->biblionumber, $from_biblio->{biblionumber}, 'MoveItemFromBiblio should not have moved the item-level hold placed on item 1' );
94
is( $get_item_level_hold_2->{biblionumber}, $to_biblio->{biblionumber},   'MoveItemFromBiblio should have moved the item-level hold placed on item 2' );
95
is( $get_item_level_hold_2->biblionumber, $to_biblio->{biblionumber},   'MoveItemFromBiblio should have moved the item-level hold placed on item 2' );
95
96
96
$schema->storage->txn_rollback;
97
$schema->storage->txn_rollback;
97
98
(-)a/t/db_dependent/Reserves.t (-8 / +3 lines)
Lines 17-23 Link Here
17
17
18
use Modern::Perl;
18
use Modern::Perl;
19
19
20
use Test::More tests => 72;
20
use Test::More tests => 70;
21
use Test::MockModule;
21
use Test::MockModule;
22
use Test::Warn;
22
use Test::Warn;
23
23
Lines 321-336 $holds = $biblio->holds; Link Here
321
is($holds->count, 1, "Only one reserves for this biblio");
321
is($holds->count, 1, "Only one reserves for this biblio");
322
my $reserve_id = $holds->next->reserve_id;
322
my $reserve_id = $holds->next->reserve_id;
323
323
324
$reserve = GetReserve($reserve_id);
325
isa_ok($reserve, 'HASH', "GetReserve return");
326
is($reserve->{biblionumber}, $biblionumber);
327
328
$reserve = CancelReserve({reserve_id => $reserve_id});
324
$reserve = CancelReserve({reserve_id => $reserve_id});
329
isa_ok($reserve, 'HASH', "CancelReserve return");
325
isa_ok($reserve, 'HASH', "CancelReserve return");
330
is($reserve->{biblionumber}, $biblionumber);
326
is($reserve->{biblionumber}, $biblionumber);
331
327
332
$reserve = GetReserve($reserve_id);
328
my $hold = Koha::Holds->find( $reserve_id );
333
is($reserve, undef, "GetReserve returns undef after deletion");
329
is($hold, undef, "CancelReserve should have cancel the reserve");
334
330
335
$reserve = CancelReserve({reserve_id => $reserve_id});
331
$reserve = CancelReserve({reserve_id => $reserve_id});
336
is($reserve, undef, "CancelReserve return undef if reserve does not exist");
332
is($reserve, undef, "CancelReserve return undef if reserve does not exist");
337
- 

Return to bug 19057