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

(-)a/C4/HoldsQueue.pm (-2 / +2 lines)
Lines 240-246 sub GetBibsWithPendingHoldRequests { Link Here
240
                     FROM reserves
240
                     FROM reserves
241
                     WHERE found IS NULL
241
                     WHERE found IS NULL
242
                     AND priority > 0
242
                     AND priority > 0
243
                     AND reservedate <= CURRENT_DATE()
243
                     AND reservedate <= CURRENT_TIMESTAMP()
244
                     AND suspend = 0
244
                     AND suspend = 0
245
                     ";
245
                     ";
246
    my $sth = $dbh->prepare($bib_query);
246
    my $sth = $dbh->prepare($bib_query);
Lines 284-290 sub GetPendingHoldRequestsForBib { Link Here
284
                         WHERE biblionumber = ?
284
                         WHERE biblionumber = ?
285
                         AND found IS NULL
285
                         AND found IS NULL
286
                         AND priority > 0
286
                         AND priority > 0
287
                         AND reservedate <= CURRENT_DATE()
287
                         AND reservedate <= CURRENT_TIMESTAMP()
288
                         AND suspend = 0
288
                         AND suspend = 0
289
                         ORDER BY priority";
289
                         ORDER BY priority";
290
    my $sth = $dbh->prepare($request_query);
290
    my $sth = $dbh->prepare($request_query);
(-)a/C4/Reserves.pm (-4 / +27 lines)
Lines 195-201 sub AddReserve { Link Here
195
    my $non_priority   = $params->{non_priority};
195
    my $non_priority   = $params->{non_priority};
196
    my $item_group_id  = $params->{item_group_id};
196
    my $item_group_id  = $params->{item_group_id};
197
197
198
    $resdate ||= dt_from_string;
198
    if ( C4::Context->preference('HourBasedHolds') ){
199
        if ( $resdate ){
200
            $resdate = dt_from_string( $resdate );
201
        } else {
202
            $resdate = dt_from_string();
203
        }
204
        if ( $expdate ){
205
            $expdate = dt_from_string( $expdate );
206
        }
207
    } else {
208
        # add hour and minute components
209
        if ( $resdate ){
210
            $resdate = dt_from_string( $resdate )->set({ hour => 00, minute => 00, second => 00 });
211
        } else {
212
            $resdate = dt_from_string();
213
        }
214
        if ( $expdate ){
215
            $expdate = dt_from_string( $expdate )->set({ hour => 23, minute => 59, second => 59 });
216
        }
217
    }
199
218
200
    # if we have an item selectionned, and the pickup branch is the same as the holdingbranch
219
    # if we have an item selectionned, and the pickup branch is the same as the holdingbranch
201
    # of the document, we force the value $priority and $found .
220
    # of the document, we force the value $priority and $found .
Lines 520-530 sub CanItemBeReserved { Link Here
520
        }
539
        }
521
    }
540
    }
522
541
542
    my $dtf = Koha::Database->new->schema->storage->datetime_parser;
543
    my $fromdate = dt_from_string->set({ hour => 00, minute => 00, second => 00 });
544
    my $todate = dt_from_string->set({ hour => 23, minute => 59, second => 59 });
545
523
    if (!$params->{ignore_hold_counts} && defined $holds_per_day && $holds_per_day ne '')
546
    if (!$params->{ignore_hold_counts} && defined $holds_per_day && $holds_per_day ne '')
524
    {
547
    {
525
        my $today_holds = Koha::Holds->search({
548
        my $today_holds = Koha::Holds->search({
526
            borrowernumber => $patron->borrowernumber,
549
            borrowernumber => $patron->borrowernumber,
527
            reservedate    => dt_from_string->date
550
            reservedate    => [ -and => { '>=' => $dtf->format_datetime($fromdate) }, { '<=' => $dtf->format_datetime($todate) } ],
528
        });
551
        });
529
        return { status => 'tooManyReservesToday', limit => $holds_per_day } if $today_holds->count() >= $holds_per_day;
552
        return { status => 'tooManyReservesToday', limit => $holds_per_day } if $today_holds->count() >= $holds_per_day;
530
    }
553
    }
Lines 1005-1011 sub CancelExpiredReserves { Link Here
1005
    my $dtf = Koha::Database->new->schema->storage->datetime_parser;
1028
    my $dtf = Koha::Database->new->schema->storage->datetime_parser;
1006
    my $params = {
1029
    my $params = {
1007
        -or => [
1030
        -or => [
1008
            { expirationdate => { '<', $dtf->format_date($today) } },
1031
            { expirationdate => { '<', $dtf->format_datetime($today) } },
1009
            { patron_expiration_date => { '<' => $dtf->format_date($today) } }
1032
            { patron_expiration_date => { '<' => $dtf->format_date($today) } }
1010
        ]
1033
        ]
1011
    };
1034
    };
Lines 2300-2306 sub CalculatePriority { Link Here
2300
        $sql.= ' AND ( reservedate <= ? )';
2323
        $sql.= ' AND ( reservedate <= ? )';
2301
    }
2324
    }
2302
    else {
2325
    else {
2303
        $sql.= ' AND ( reservedate < NOW() )';
2326
        $sql.= ' AND ( reservedate <= NOW() )';
2304
    }
2327
    }
2305
    my $dbh = C4::Context->dbh();
2328
    my $dbh = C4::Context->dbh();
2306
    my @row = $dbh->selectrow_array(
2329
    my @row = $dbh->selectrow_array(
(-)a/Koha/Item.pm (-1 / +1 lines)
Lines 853-859 sub current_holds { Link Here
853
        itemnumber => $self->itemnumber,
853
        itemnumber => $self->itemnumber,
854
        suspend => 0,
854
        suspend => 0,
855
        -or => [
855
        -or => [
856
            reservedate => { '<=' => $dtf->format_date(dt_from_string) },
856
            reservedate => { '<=' => $dtf->format_datetime(dt_from_string) },
857
            waitingdate => { '!=' => undef },
857
            waitingdate => { '!=' => undef },
858
        ],
858
        ],
859
    };
859
    };
(-)a/koha-tmpl/intranet-tmpl/prog/en/includes/holds_table.inc (-3 / +7 lines)
Lines 119-131 Link Here
119
            <td>[% hold.notes | html | html_line_break %]</td>
119
            <td>[% hold.notes | html | html_line_break %]</td>
120
            <td>
120
            <td>
121
                [% IF Koha.Preference('AllowHoldDateInFuture') %]
121
                [% IF Koha.Preference('AllowHoldDateInFuture') %]
122
                    <input type="text" class="flatpickr" value="[% hold.date | html %]" required="required" size="10" name="reservedate" />
122
                    <input type="text" class="flatpickr" value="[% hold.date | html %]" required="required" size="15" name="reservedate" />
123
                [% ELSE %]
123
                [% ELSE %]
124
                    [% hold.date | $KohaDates %]
124
                    [% IF Koha.Preference('HourBasedHolds') %]
125
                        [% hold.date | $KohaDates with_hours = 1 %]
126
                    [% ELSE %]
127
                        [% hold.date | $KohaDates %]
128
                    [% END %]
125
                [% END %]
129
                [% END %]
126
            </td>
130
            </td>
127
            <td>
131
            <td>
128
                <input type="text" class="flatpickr" data-flatpickr-futuredate="true" value="[% hold.expirationdate | html %]" size="10" name="expirationdate" />
132
                <input type="text" class="flatpickr" data-flatpickr-futuredate="true" value="[% hold.expirationdate | html %]" size="15" name="expirationdate" />
129
            </td>
133
            </td>
130
            <td>
134
            <td>
131
                [%- IF ( hold.found ) -%]
135
                [%- IF ( hold.found ) -%]
(-)a/koha-tmpl/intranet-tmpl/prog/en/includes/waiting_holds.inc (-1 / +5 lines)
Lines 27-33 Link Here
27
            <tr>
27
            <tr>
28
                <th><input type="checkbox" class="select_hold" data-id="[% reserveloo.reserve_id | html %]"/></th>
28
                <th><input type="checkbox" class="select_hold" data-id="[% reserveloo.reserve_id | html %]"/></th>
29
                <td data-order="[% reserveloo.waitingdate | html %]"><span>[% reserveloo.waitingdate | $KohaDates %]</span></td>
29
                <td data-order="[% reserveloo.waitingdate | html %]"><span>[% reserveloo.waitingdate | $KohaDates %]</span></td>
30
                <td data-order="[% reserveloo.reservedate | html %]"><span>[% reserveloo.reservedate | $KohaDates %]</span></td>
30
                [% IF Koha.Preference('HourBasedHolds') %]
31
                    <td data-order="[% reserveloo.reservedate | html %]"><span>[% reserveloo.reservedate | $KohaDates with_hours = 1 %]</span></td>
32
                [% ELSE %]
33
                    <td data-order="[% reserveloo.reservedate | html %]"><span>[% reserveloo.reservedate | $KohaDates %]</span></td>
34
                [% END %]
31
              [% IF table_name == 'holdscr' %]
35
              [% IF table_name == 'holdscr' %]
32
                [% IF reserveloo.cancellation_requests.count %]
36
                [% IF reserveloo.cancellation_requests.count %]
33
                  [% FOREACH cancellation_request IN reserveloo.cancellation_requests %]
37
                  [% FOREACH cancellation_request IN reserveloo.cancellation_requests %]
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/pendingreserves.tt (-1 / +5 lines)
Lines 200-206 Link Here
200
            </ul>
200
            </ul>
201
        </td>
201
        </td>
202
        <td data-order="[% hold.reservedate | html %]">
202
        <td data-order="[% hold.reservedate | html %]">
203
            [% hold.reservedate | $KohaDates %] in [% Branches.GetName ( hold.branchcode ) | html %]
203
            [% IF Koha.Preference('HourBasedHolds') %]
204
                [% hold.reservedate | $KohaDates with_hours = 1 %] in [% Branches.GetName ( hold.branchcode ) | html %]
205
            [% ELSE %]
206
                [% hold.reservedate | $KohaDates %] in [% Branches.GetName ( hold.branchcode ) | html %]
207
            [% END %]
204
        </td>
208
        </td>
205
        <td>[% hold.reservenotes | html %]</td>
209
        <td>[% hold.reservenotes | html %]</td>
206
        <td>
210
        <td>
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/view_holdsqueue.tt (-1 / +7 lines)
Lines 214-220 Link Here
214
                        </td>
214
                        </td>
215
                        <td class="hq-patroncategory">[% itemsloo.patron.category.description | html %] ([% itemsloo.patron.categorycode | html %])</td>
215
                        <td class="hq-patroncategory">[% itemsloo.patron.category.description | html %] ([% itemsloo.patron.categorycode | html %])</td>
216
                        <td class="hq-sendto">[% Branches.GetName( itemsloo.pickbranch ) | html %]</td>
216
                        <td class="hq-sendto">[% Branches.GetName( itemsloo.pickbranch ) | html %]</td>
217
                        <td class="hq-date" data-order="[% itemsloo.reservedate | html %]">[% itemsloo.reservedate | $KohaDates %]</td>
217
                        <td class="hq-date" data-order="[% itemsloo.reservedate | html %]">
218
                            [% IF Koha.Preference('HourBasedHolds') %]
219
                                [% itemsloo.reservedate | $KohaDates with_hours = 1 %]
220
                            [% ELSE %]
221
                                [% itemsloo.reservedate | $KohaDates %]
222
                            [% END %]
223
                        </td>
218
                        <td class="hq-notes">[% itemsloo.notes | html %]</td>
224
                        <td class="hq-notes">[% itemsloo.notes | html %]</td>
219
                    </tr>
225
                    </tr>
220
                [% END %]
226
                [% END %]
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/members/holdshistory.tt (-4 / +7 lines)
Lines 78-87 Link Here
78
          <td>[% hold.biblio.author | html %]</td>
78
          <td>[% hold.biblio.author | html %]</td>
79
          <td>[% hold.item.barcode | html %]</td>
79
          <td>[% hold.item.barcode | html %]</td>
80
          <td>[% Branches.GetName( hold.branchcode ) | html %]</td>
80
          <td>[% Branches.GetName( hold.branchcode ) | html %]</td>
81
          <td data-order="[% hold.reservedate | html %]">[% hold.reservedate | $KohaDates %]</td>
81
          [% IF Koha.Preference('HourBasedHolds') %]
82
          <td data-order="[% hold.expirationdate | html %]">
82
              <td data-order="[% hold.reservedate | html %]">[% hold.reservedate | $KohaDates with_hours = 1 %]</td>
83
                [% hold.expirationdate | $KohaDates %]
83
              <td data-order="[% hold.expirationdate | html %]">[% hold.expirationdate | $KohaDates with_hours = 1 %]</td>
84
          </td>
84
          [% ELSE %]
85
              <td data-order="[% hold.reservedate | html %]">[% hold.reservedate | $KohaDates %]</td>
86
              <td data-order="[% hold.expirationdate | html %]">[% hold.expirationdate | $KohaDates %]</td>
87
          [% END %]
85
          <td data-order="[% hold.waitingdate | html %]">
88
          <td data-order="[% hold.waitingdate | html %]">
86
                [% hold.waitingdate | $KohaDates %]
89
                [% hold.waitingdate | $KohaDates %]
87
          </td>
90
          </td>
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/reserve/request.tt (-2 / +23 lines)
Lines 587-599 Link Here
587
                            [% IF ( Koha.Preference('AllowHoldDateInFuture') ) %]
587
                            [% IF ( Koha.Preference('AllowHoldDateInFuture') ) %]
588
                                <li>
588
                                <li>
589
                                    <label for="from">Hold starts on date:</label>
589
                                    <label for="from">Hold starts on date:</label>
590
                                    <input id="reserve_date" name="reserve_date" id="from" size="10" type="text" data-date_to="expiration_date" class="flatpickr" data-flatpickr-futuredate="true" />
590
                                    <input id="reserve_date" name="reserve_date" id="from" size="15" type="text" data-date_to="expiration_date" class="flatpickr" data-flatpickr-futuredate="true" />
591
                                </li>
591
                                </li>
592
                            [% END %]
592
                            [% END %]
593
593
594
                            <li>
594
                            <li>
595
                                <label for="to">Hold expires on date:</label>
595
                                <label for="to">Hold expires on date:</label>
596
                                <input id="expiration_date" name="expiration_date" id="to" size="10" type="text" class="flatpickr" data-flatpickr-futuredate="true" />
596
                                <input id="expiration_date" name="expiration_date" id="to" size="15" type="text" class="flatpickr" data-flatpickr-futuredate="true" />
597
                            </li>
597
                            </li>
598
598
599
                            [% UNLESS ( multi_hold ) %]
599
                            [% UNLESS ( multi_hold ) %]
Lines 1385-1390 Link Here
1385
                });
1385
                });
1386
            [% END %]
1386
            [% END %]
1387
1387
1388
            var startPicker = $("#reserve_date").flatpickr({
1389
                [% IF Koha.Preference('HourBasedHolds') %]
1390
                    enableTime: true,
1391
                    dateFormat: flatpickr_dateformat_string + " " + flatpickr_timeformat_string,
1392
                [% END %]
1393
            });
1394
1395
            var endPicker = $("#expiration_date").flatpickr({
1396
                [% IF Koha.Preference('HourBasedHolds') %]
1397
                    enableTime: true,
1398
                    dateFormat: flatpickr_dateformat_string + " " + flatpickr_timeformat_string,
1399
                [% END %]
1400
            });
1401
1402
            [% IF Koha.Preference('HourBasedHolds') %]
1403
                $(".holdst_reservedate, .futuredate").flatpickr({
1404
                    enableTime: true,
1405
                    dateFormat: flatpickr_dateformat_string + " " + flatpickr_timeformat_string,
1406
                });
1407
            [% END %]
1408
1388
            var my_table = $("#requestspecific").dataTable($.extend(true, {}, dataTablesDefaults, {
1409
            var my_table = $("#requestspecific").dataTable($.extend(true, {}, dataTablesDefaults, {
1389
                'bPaginate': false,
1410
                'bPaginate': false,
1390
                "sDom": '<"top pager"ilf>t',
1411
                "sDom": '<"top pager"ilf>t',
(-)a/svc/holds (-6 / +19 lines)
Lines 114-132 while ( my $h = $holds_rs->next() ) { Link Here
114
        waiting_here   => $h->branch()->branchcode() eq $branch,
114
        waiting_here   => $h->branch()->branchcode() eq $branch,
115
        priority       => $h->priority(),
115
        priority       => $h->priority(),
116
        itemtype_limit => $itemtype_limit,
116
        itemtype_limit => $itemtype_limit,
117
        reservedate_formatted => $h->reservedate() ? output_pref(
118
            { dt => dt_from_string( $h->reservedate() ), dateonly => 1 }
119
          )
120
        : q{},
121
        suspend_until_formatted => $h->suspend_until() ? output_pref(
117
        suspend_until_formatted => $h->suspend_until() ? output_pref(
122
            { dt => dt_from_string( $h->suspend_until() ), dateonly => 1 }
118
            { dt => dt_from_string( $h->suspend_until() ), dateonly => 1 }
123
          )
119
          )
124
        : q{},
120
        : q{},
125
        expirationdate_formatted => $h->expirationdate() ? output_pref(
121
    };
122
123
    if ( C4::Context->preference('HourBasedHolds') ){
124
        $hold->{reservedate_formatted} = $h->reservedate() ? output_pref(
125
            { dt => dt_from_string( $h->reservedate() ) }
126
          )
127
        : q{},
128
        $hold->{expirationdate_formatted} = $h->expirationdate() ? output_pref(
129
            { dt => dt_from_string( $h->expirationdate() ) }
130
          )
131
        : q{},
132
    } else {
133
        $hold->{reservedate_formatted} = $h->reservedate() ? output_pref(
134
            { dt => dt_from_string( $h->reservedate() ), dateonly => 1 }
135
          )
136
        : q{},
137
        $hold->{expirationdate_formatted} = $h->expirationdate() ? output_pref(
126
            { dt => dt_from_string( $h->expirationdate() ), dateonly => 1 }
138
            { dt => dt_from_string( $h->expirationdate() ), dateonly => 1 }
127
          )
139
          )
128
        : q{},
140
        : q{},
129
    };
141
    }
142
130
143
131
    $hold->{transfered}     = 0;
144
    $hold->{transfered}     = 0;
132
    $hold->{not_transfered} = 0;
145
    $hold->{not_transfered} = 0;
(-)a/t/db_dependent/Holds.t (-5 / +71 lines)
Lines 7-13 use t::lib::TestBuilder; Link Here
7
7
8
use C4::Context;
8
use C4::Context;
9
9
10
use Test::More tests => 76;
10
use Test::More tests => 77;
11
use Test::Exception;
11
use Test::Exception;
12
12
13
use MARC::Record;
13
use MARC::Record;
Lines 108-114 my $reservedate = $first_hold->reservedate; Link Here
108
my $borrowernumber = $first_hold->borrowernumber;
108
my $borrowernumber = $first_hold->borrowernumber;
109
my $branch_1code = $first_hold->branchcode;
109
my $branch_1code = $first_hold->branchcode;
110
my $reserve_id = $first_hold->reserve_id;
110
my $reserve_id = $first_hold->reserve_id;
111
is( $reservedate, output_pref({ dt => dt_from_string, dateformat => 'iso', dateonly => 1 }), "holds_placed_today should return a valid reserve date");
111
is( dt_from_string($reservedate), dt_from_string, "holds_placed_today should return a valid reserve date");
112
is( $borrowernumber, $borrowernumbers[0], "holds_placed_today should return a valid borrowernumber");
112
is( $borrowernumber, $borrowernumbers[0], "holds_placed_today should return a valid borrowernumber");
113
is( $branch_1code, $branch_1, "holds_placed_today should return a valid branchcode");
113
is( $branch_1code, $branch_1, "holds_placed_today should return a valid branchcode");
114
ok($reserve_id, "Test holds_placed_today()");
114
ok($reserve_id, "Test holds_placed_today()");
Lines 942-948 subtest 'CanItemBeReserved / holds_per_day tests' => sub { Link Here
942
    is_deeply(
942
    is_deeply(
943
        CanItemBeReserved( $patron, $item_2 ),
943
        CanItemBeReserved( $patron, $item_2 ),
944
        { status => 'tooManyReservesToday', limit => 2 },
944
        { status => 'tooManyReservesToday', limit => 2 },
945
        'Patron cannot a third item with 2 reserves daily cap'
945
        'Patron cannot reserve a third item with 2 reserves daily cap'
946
    );
946
    );
947
947
948
    # Update last hold so reservedate is in the past, so 2 holds, but different day
948
    # Update last hold so reservedate is in the past, so 2 holds, but different day
Lines 1705-1711 subtest 'ModReserve can only update expirationdate for found holds' => sub { Link Here
1705
1705
1706
    $hold = Koha::Holds->find($reserve_id);
1706
    $hold = Koha::Holds->find($reserve_id);
1707
1707
1708
    is( $hold->expirationdate, '1981-06-10',
1708
    is( dt_from_string( $hold->expirationdate )->ymd, '1981-06-10',
1709
        'Found hold expiration date updated correctly' );
1709
        'Found hold expiration date updated correctly' );
1710
    is( $hold->priority, '0', 'Found hold priority was not updated' );
1710
    is( $hold->priority, '0', 'Found hold priority was not updated' );
1711
1711
Lines 1807-1809 subtest 'Koha::Holds->get_items_that_can_fill returns items with datecancelled o Link Here
1807
1807
1808
    $schema->storage->txn_rollback;
1808
    $schema->storage->txn_rollback;
1809
};
1809
};
1810
- 
1810
1811
subtest 'HourBasedHolds' => sub {
1812
    plan tests => 4;
1813
    $schema->storage->txn_begin;
1814
1815
    my $category = $builder->build({ source => 'Category' });
1816
    my $branch = $builder->build({ source => 'Branch' })->{ branchcode };
1817
    my $biblio = $builder->build_sample_biblio( { itemtype => 'DUMMY' } );
1818
    my $itemnumber = $builder->build_sample_item(
1819
        { library => $branch, biblionumber => $biblio->biblionumber } )
1820
      ->itemnumber;
1821
1822
    my $borrowernumber = Koha::Patron->new(
1823
        {
1824
            firstname    => 'firstname',
1825
            surname      => 'surname',
1826
            categorycode => $category->{categorycode},
1827
            branchcode   => $branch,
1828
        }
1829
    )->store->borrowernumber;
1830
1831
    t::lib::Mocks::mock_preference('HourBasedHolds', 1);
1832
1833
    my $reservation_date = DateTime->now->set( hour => 7, minute => 30 );
1834
    my $expiration_date = DateTime->now->set( hour => 19, minute => 30 );
1835
1836
    my $reserve_id = AddReserve(
1837
        {
1838
            branchcode     => $branch,
1839
            borrowernumber => $borrowernumber,
1840
            biblionumber   => $biblio->biblionumber,
1841
            priority       =>
1842
              C4::Reserves::CalculatePriority( $biblio->biblionumber ),
1843
            itemnumber => $itemnumber,
1844
            reservation_date => $reservation_date,
1845
            expiration_date => $expiration_date,
1846
        }
1847
    );
1848
1849
    my $hold = Koha::Holds->find($reserve_id);
1850
    is( dt_from_string( $hold->reservedate )->hour, 07, "Hold reserve date is set correctly with hours when HourBasedHolds enabled" );
1851
    is( dt_from_string( $hold->expirationdate )->hour, 19, "Hold expiration date is set correctly with hours when HourBasedHolds enabled" );
1852
1853
    t::lib::Mocks::mock_preference('HourBasedHolds', 0);
1854
1855
    $reservation_date = DateTime->now->ymd;
1856
    $expiration_date = DateTime->now->ymd;
1857
1858
    $reserve_id = AddReserve(
1859
        {
1860
            branchcode     => $branch,
1861
            borrowernumber => $borrowernumber,
1862
            biblionumber   => $biblio->biblionumber,
1863
            priority       =>
1864
              C4::Reserves::CalculatePriority( $biblio->biblionumber ),
1865
            itemnumber => $itemnumber,
1866
            reservation_date => $reservation_date,
1867
            expiration_date => $expiration_date,
1868
        }
1869
    );
1870
1871
    $hold = Koha::Holds->find($reserve_id);
1872
    is( dt_from_string( $hold->reservedate )->hour, 00, "Hold reserve date is set correctly when HourBasedHolds disabled" );
1873
    is( dt_from_string( $hold->expirationdate )->hour, 23, "Hold expiration date is set correctly when HourBasedHolds disabled" );
1874
1875
    $schema->storage->txn_rollback;
1876
};

Return to bug 24718