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

(-)a/C4/Circulation.pm (-109 / +72 lines)
Lines 1321-1333 Get loan length for an itemtype, a borrower type and a branch Link Here
1321
sub GetLoanLength {
1321
sub GetLoanLength {
1322
    my ( $borrowertype, $itemtype, $branchcode ) = @_;
1322
    my ( $borrowertype, $itemtype, $branchcode ) = @_;
1323
    my $dbh = C4::Context->dbh;
1323
    my $dbh = C4::Context->dbh;
1324
    my $sth =
1324
    my $sth = $dbh->prepare(qq{
1325
      $dbh->prepare(
1325
        SELECT issuelength, lengthunit, renewalperiod
1326
'select issuelength, lengthunit from issuingrules where categorycode=? and itemtype=? and branchcode=? and issuelength is not null'
1326
        FROM issuingrules
1327
      );
1327
        WHERE   categorycode=?
1328
# warn "in get loan lenght $borrowertype $itemtype $branchcode ";
1328
            AND itemtype=?
1329
# try to find issuelength & return the 1st available.
1329
            AND branchcode=?
1330
# check with borrowertype, itemtype and branchcode, then without one of those parameters
1330
            AND issuelength IS NOT NULL
1331
    });
1332
1333
    # try to find issuelength & return the 1st available.
1334
    # check with borrowertype, itemtype and branchcode, then without one of those parameters
1335
1331
    $sth->execute( $borrowertype, $itemtype, $branchcode );
1336
    $sth->execute( $borrowertype, $itemtype, $branchcode );
1332
    my $loanlength = $sth->fetchrow_hashref;
1337
    my $loanlength = $sth->fetchrow_hashref;
1333
    return $loanlength
1338
    return $loanlength
Lines 1371-1376 sub GetLoanLength { Link Here
1371
    # if no rule is set => 21 days (hardcoded)
1376
    # if no rule is set => 21 days (hardcoded)
1372
    return {
1377
    return {
1373
        issuelength => 21,
1378
        issuelength => 21,
1379
        renewalperiod => 21,
1374
        lengthunit => 'days',
1380
        lengthunit => 'days',
1375
    };
1381
    };
1376
1382
Lines 1405-1411 sub GetHardDueDate { Link Here
1405
1411
1406
FIXME - This is a copy-paste of GetLoanLength
1412
FIXME - This is a copy-paste of GetLoanLength
1407
as a stop-gap.  Do not wish to change API for GetLoanLength 
1413
as a stop-gap.  Do not wish to change API for GetLoanLength 
1408
this close to release, however, Overdues::GetIssuingRules is broken.
1414
this close to release.
1409
1415
1410
Get the issuing rule for an itemtype, a borrower type and a branch
1416
Get the issuing rule for an itemtype, a borrower type and a branch
1411
Returns a hashref from the issuingrules table.
1417
Returns a hashref from the issuingrules table.
Lines 2427-2491 sub CanBookBeRenewed { Link Here
2427
    my $dbh       = C4::Context->dbh;
2433
    my $dbh       = C4::Context->dbh;
2428
    my $renews    = 1;
2434
    my $renews    = 1;
2429
    my $renewokay = 0;
2435
    my $renewokay = 0;
2430
	my $error;
2436
    my $error;
2431
2437
2432
    # Look in the issues table for this item, lent to this borrower,
2438
    my $borrower    = C4::Members::GetMemberDetails( $borrowernumber, 0 )   or return;
2433
    # and not yet returned.
2439
    my $item        = GetItem($itemnumber)                                  or return;
2440
    my $itemissue   = GetItemIssue($itemnumber)                             or return;
2434
2441
2435
    # Look in the issues table for this item, lent to this borrower,
2442
    my $branchcode  = _GetCircControlBranch($item, $borrower);
2436
    # and not yet returned.
2437
    my %branch = (
2438
            'ItemHomeLibrary' => 'items.homebranch',
2439
            'PickupLibrary'   => 'items.holdingbranch',
2440
            'PatronLibrary'   => 'borrowers.branchcode'
2441
            );
2442
    my $controlbranch = $branch{C4::Context->preference('CircControl')};
2443
    my $itype         = C4::Context->preference('item-level_itypes') ? 'items.itype' : 'biblioitems.itemtype';
2444
    
2445
    my $sthcount = $dbh->prepare("
2446
                   SELECT 
2447
                    borrowers.categorycode, biblioitems.itemtype, issues.renewals, renewalsallowed, $controlbranch
2448
                   FROM  issuingrules, 
2449
                   issues
2450
                   LEFT JOIN items USING (itemnumber) 
2451
                   LEFT JOIN borrowers USING (borrowernumber) 
2452
                   LEFT JOIN biblioitems USING (biblioitemnumber)
2453
                   
2454
                   WHERE
2455
                    (issuingrules.categorycode = borrowers.categorycode OR issuingrules.categorycode = '*')
2456
                   AND
2457
                    (issuingrules.itemtype = $itype OR issuingrules.itemtype = '*')
2458
                   AND
2459
                    (issuingrules.branchcode = $controlbranch OR issuingrules.branchcode = '*') 
2460
                   AND 
2461
                    borrowernumber = ? 
2462
                   AND
2463
                    itemnumber = ?
2464
                   ORDER BY
2465
                    issuingrules.categorycode desc,
2466
                    issuingrules.itemtype desc,
2467
                    issuingrules.branchcode desc
2468
                   LIMIT 1;
2469
                  ");
2470
2471
    $sthcount->execute( $borrowernumber, $itemnumber );
2472
    if ( my $data1 = $sthcount->fetchrow_hashref ) {
2473
        
2474
        if ( ( $data1->{renewalsallowed} && $data1->{renewalsallowed} > $data1->{renewals} ) || $override_limit ) {
2475
            $renewokay = 1;
2476
        }
2477
        else {
2478
			$error="too_many";
2479
		}
2480
		
2481
        my ( $resfound, $resrec, undef ) = C4::Reserves::CheckReserves($itemnumber);
2482
        if ($resfound) {
2483
            $renewokay = 0;
2484
			$error="on_reserve"
2485
        }
2486
2443
2444
    my $issuingrule = GetIssuingRule($borrower->{categorycode}, $item->{itype}, $branchcode);
2445
2446
    if ( ( $issuingrule->{renewalsallowed} > $itemissue->{renewals} ) || $override_limit ) {
2447
        $renewokay = 1;
2448
    } else {
2449
        $error = "too_many";
2487
    }
2450
    }
2488
    return ($renewokay,$error);
2451
2452
    my ( $resfound, $resrec ) = C4::Reserves::CheckReserves($itemnumber);
2453
    if ( $resfound ) {
2454
        $renewokay = 0;
2455
        $error     = "on_reserve";
2456
    }
2457
2458
    return ( $renewokay, $error );
2489
}
2459
}
2490
2460
2491
=head2 AddRenewal
2461
=head2 AddRenewal
Lines 2546-2552 sub AddRenewal { Link Here
2546
        $datedue = (C4::Context->preference('RenewalPeriodBase') eq 'date_due') ?
2516
        $datedue = (C4::Context->preference('RenewalPeriodBase') eq 'date_due') ?
2547
                                        $issuedata->{date_due} :
2517
                                        $issuedata->{date_due} :
2548
                                        DateTime->now( time_zone => C4::Context->tz());
2518
                                        DateTime->now( time_zone => C4::Context->tz());
2549
        $datedue =  CalcDateDue($datedue,$itemtype,$issuedata->{'branchcode'},$borrower);
2519
        $datedue =  CalcDateDue($datedue, $itemtype, $issuedata->{'branchcode'}, $borrower, 'is a renewal');
2550
    }
2520
    }
2551
2521
2552
    # Update the issues record to have the new due date, and a new count
2522
    # Update the issues record to have the new due date, and a new count
Lines 2993-3050 C<$borrower> = Borrower object Link Here
2993
=cut
2963
=cut
2994
2964
2995
sub CalcDateDue {
2965
sub CalcDateDue {
2996
    my ( $startdate, $itemtype, $branch, $borrower ) = @_;
2966
    my ( $startdate, $itemtype, $branch, $borrower, $isrenewal ) = @_;
2967
2968
    $isrenewal ||= 0;
2997
2969
2998
    # loanlength now a href
2970
    # loanlength now a href
2999
    my $loanlength =
2971
    my $loanlength =
3000
      GetLoanLength( $borrower->{'categorycode'}, $itemtype, $branch );
2972
            GetLoanLength( $borrower->{'categorycode'}, $itemtype, $branch );
2973
2974
    my $length_key = ( $isrenewal and defined $loanlength->{renewalperiod} )
2975
            ? qq{renewalperiod}
2976
            : qq{issuelength};
3001
2977
3002
    my $datedue;
2978
    my $datedue;
3003
2979
3004
    # if globalDueDate ON the datedue is set to that date
2980
    # calculate the datedue as normal
3005
    if (C4::Context->preference('globalDueDate')
2981
    if ( C4::Context->preference('useDaysMode') eq 'Days' )
3006
        && ( C4::Context->preference('globalDueDate') =~
2982
    {    # ignoring calendar
3007
            C4::Dates->regexp('syspref') )
2983
        my $dt =
3008
      ) {
2984
          DateTime->now( time_zone => C4::Context->tz() )
3009
        $datedue = dt_from_string(
2985
          ->truncate( to => 'minute' );
3010
            C4::Context->preference('globalDueDate'),
2986
        if ( $loanlength->{lengthunit} eq 'hours' ) {
3011
            C4::Context->preference('dateformat')
2987
            $dt->add( hours => $loanlength->{$length_key} );
3012
        );
2988
        } else {    # days
2989
            $dt->add( days => $loanlength->{$length_key} );
2990
            $dt->set_hour(23);
2991
            $dt->set_minute(59);
2992
        }
2993
        # break
2994
        return $dt;
3013
    } else {
2995
    } else {
3014
2996
        my $dur;
3015
        # otherwise, calculate the datedue as normal
2997
        if ($loanlength->{lengthunit} eq 'hours') {
3016
        if ( C4::Context->preference('useDaysMode') eq 'Days' )
2998
            $dur = DateTime::Duration->new( hours => $loanlength->{$length_key});
3017
        {    # ignoring calendar
2999
        }
3018
            my $dt =
3000
        else { # days
3019
              DateTime->now( time_zone => C4::Context->tz() )
3001
            $dur = DateTime::Duration->new( days => $loanlength->{$length_key});
3020
              ->truncate( to => 'minute' );
3002
        }
3021
            if ( $loanlength->{lengthunit} eq 'hours' ) {
3003
        if (ref $startdate ne 'DateTime' ) {
3022
                $dt->add( hours => $loanlength->{issuelength} );
3004
            $startdate = dt_from_string($startdate);
3023
            } else {    # days
3005
        }
3024
                $dt->add( days => $loanlength->{issuelength} );
3006
        my $calendar = Koha::Calendar->new( branchcode => $branch );
3025
                $dt->set_hour(23);
3007
        $datedue = $calendar->addDate( $startdate, $dur, $loanlength->{lengthunit} );
3026
                $dt->set_minute(59);
3008
        if ($loanlength->{lengthunit} eq 'days') {
3027
            }
3009
            $datedue->set_hour(23);
3028
            # break
3010
            $datedue->set_minute(59);
3029
            return $dt;
3030
3031
        } else {
3032
            my $dur;
3033
            if ($loanlength->{lengthunit} eq 'hours') {
3034
                $dur = DateTime::Duration->new( hours => $loanlength->{issuelength});
3035
            }
3036
            else { # days
3037
                $dur = DateTime::Duration->new( days => $loanlength->{issuelength});
3038
            }
3039
            if (ref $startdate ne 'DateTime' ) {
3040
                $startdate = dt_from_string($startdate);
3041
            }
3042
            my $calendar = Koha::Calendar->new( branchcode => $branch );
3043
            $datedue = $calendar->addDate( $startdate, $dur, $loanlength->{lengthunit} );
3044
            if ($loanlength->{lengthunit} eq 'days') {
3045
                $datedue->set_hour(23);
3046
                $datedue->set_minute(59);
3047
            }
3048
        }
3011
        }
3049
    }
3012
    }
3050
3013
(-)a/C4/Overdues.pm (-39 lines)
Lines 72-81 BEGIN { Link Here
72
	push @EXPORT, qw(
72
	push @EXPORT, qw(
73
        &GetIssuesIteminfo
73
        &GetIssuesIteminfo
74
	);
74
	);
75
    #
76
	# &GetIssuingRules - delete.
77
	# use C4::Circulation::GetIssuingRule instead.
78
	
79
	# subs to move to Members.pm
75
	# subs to move to Members.pm
80
	push @EXPORT, qw(
76
	push @EXPORT, qw(
81
        &CheckBorrowerDebarred
77
        &CheckBorrowerDebarred
Lines 692-732 sub GetFine { Link Here
692
    return 0;
688
    return 0;
693
}
689
}
694
690
695
696
=head2 GetIssuingRules
697
698
FIXME - This sub should be deprecated and removed.
699
It ignores branch and defaults.
700
701
    $data = &GetIssuingRules($itemtype,$categorycode);
702
703
Looks up for all issuingrules an item info 
704
705
C<$itemnumber> is a reference-to-hash whose keys are all of the fields
706
from the borrowers and categories tables of the Koha database. Thus,
707
708
C<$categorycode> contains  information about borrowers category 
709
710
C<$data> contains all information about both the borrower and
711
category he or she belongs to.
712
=cut 
713
714
sub GetIssuingRules {
715
	warn "GetIssuingRules is deprecated: use GetIssuingRule from C4::Circulation instead.";
716
   my ($itemtype,$categorycode)=@_;
717
   my $dbh   = C4::Context->dbh();    
718
   my $query=qq|SELECT *
719
        FROM issuingrules
720
        WHERE issuingrules.itemtype=?
721
            AND issuingrules.categorycode=?
722
        |;
723
    my $sth = $dbh->prepare($query);
724
    #  print $query;
725
    $sth->execute($itemtype,$categorycode);
726
    return $sth->fetchrow_hashref;
727
}
728
729
730
sub ReplacementCost2 {
691
sub ReplacementCost2 {
731
    my ( $itemnum, $borrowernumber ) = @_;
692
    my ( $itemnum, $borrowernumber ) = @_;
732
    my $dbh   = C4::Context->dbh();
693
    my $dbh   = C4::Context->dbh();
(-)a/admin/smart-rules.pl (-4 / +5 lines)
Lines 101-108 elsif ($op eq 'delete-branch-item') { Link Here
101
# save the values entered
101
# save the values entered
102
elsif ($op eq 'add') {
102
elsif ($op eq 'add') {
103
    my $sth_search = $dbh->prepare('SELECT COUNT(*) AS total FROM issuingrules WHERE branchcode=? AND categorycode=? AND itemtype=?');
103
    my $sth_search = $dbh->prepare('SELECT COUNT(*) AS total FROM issuingrules WHERE branchcode=? AND categorycode=? AND itemtype=?');
104
    my $sth_insert = $dbh->prepare('INSERT INTO issuingrules (branchcode, categorycode, itemtype, maxissueqty, renewalsallowed, reservesallowed, issuelength, lengthunit, hardduedate, hardduedatecompare, fine, finedays, firstremind, chargeperiod,rentaldiscount, overduefinescap) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)');
104
    my $sth_insert = $dbh->prepare('INSERT INTO issuingrules (branchcode, categorycode, itemtype, maxissueqty, renewalsallowed, renewalperiod, reservesallowed, issuelength, lengthunit, hardduedate, hardduedatecompare, fine, finedays, firstremind, chargeperiod,rentaldiscount, overduefinescap) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)');
105
    my $sth_update=$dbh->prepare("UPDATE issuingrules SET fine=?, finedays=?, firstremind=?, chargeperiod=?, maxissueqty=?, renewalsallowed=?, reservesallowed=?, issuelength=?, lengthunit = ?, hardduedate=?, hardduedatecompare=?, rentaldiscount=?, overduefinescap=?  WHERE branchcode=? AND categorycode=? AND itemtype=?");
105
    my $sth_update=$dbh->prepare("UPDATE issuingrules SET fine=?, finedays=?, firstremind=?, chargeperiod=?, maxissueqty=?, renewalsallowed=?, renewalperiod=?, reservesallowed=?, issuelength=?, lengthunit = ?, hardduedate=?, hardduedatecompare=?, rentaldiscount=?, overduefinescap=?  WHERE branchcode=? AND categorycode=? AND itemtype=?");
106
    
106
    
107
    my $br = $branch; # branch
107
    my $br = $branch; # branch
108
    my $bor  = $input->param('categorycode'); # borrower category
108
    my $bor  = $input->param('categorycode'); # borrower category
Lines 113-118 elsif ($op eq 'add') { Link Here
113
    my $chargeperiod = $input->param('chargeperiod');
113
    my $chargeperiod = $input->param('chargeperiod');
114
    my $maxissueqty  = $input->param('maxissueqty');
114
    my $maxissueqty  = $input->param('maxissueqty');
115
    my $renewalsallowed  = $input->param('renewalsallowed');
115
    my $renewalsallowed  = $input->param('renewalsallowed');
116
    my $renewalperiod    = $input->param('renewalperiod');
116
    my $reservesallowed  = $input->param('reservesallowed');
117
    my $reservesallowed  = $input->param('reservesallowed');
117
    $maxissueqty =~ s/\s//g;
118
    $maxissueqty =~ s/\s//g;
118
    $maxissueqty = undef if $maxissueqty !~ /^\d+/;
119
    $maxissueqty = undef if $maxissueqty !~ /^\d+/;
Lines 128-136 elsif ($op eq 'add') { Link Here
128
    $sth_search->execute($br,$bor,$cat);
129
    $sth_search->execute($br,$bor,$cat);
129
    my $res = $sth_search->fetchrow_hashref();
130
    my $res = $sth_search->fetchrow_hashref();
130
    if ($res->{total}) {
131
    if ($res->{total}) {
131
        $sth_update->execute($fine, $finedays,$firstremind, $chargeperiod, $maxissueqty, $renewalsallowed,$reservesallowed, $issuelength,$lengthunit, $hardduedate,$hardduedatecompare,$rentaldiscount,$overduefinescap, $br,$bor,$cat);
132
        $sth_update->execute($fine, $finedays,$firstremind, $chargeperiod, $maxissueqty, $renewalsallowed, $renewalperiod, $reservesallowed, $issuelength,$lengthunit, $hardduedate,$hardduedatecompare,$rentaldiscount,$overduefinescap, $br,$bor,$cat);
132
    } else {
133
    } else {
133
        $sth_insert->execute($br,$bor,$cat,$maxissueqty,$renewalsallowed,$reservesallowed,$issuelength,$lengthunit,$hardduedate,$hardduedatecompare,$fine,$finedays,$firstremind,$chargeperiod,$rentaldiscount,$overduefinescap);
134
        $sth_insert->execute($br,$bor,$cat,$maxissueqty,$renewalsallowed, $renewalperiod, $reservesallowed,$issuelength,$lengthunit,$hardduedate,$hardduedatecompare,$fine,$finedays,$firstremind,$chargeperiod,$rentaldiscount,$overduefinescap);
134
    }
135
    }
135
} 
136
} 
136
elsif ($op eq "set-branch-defaults") {
137
elsif ($op eq "set-branch-defaults") {
(-)a/installer/data/mysql/kohastructure.sql (+1 lines)
Lines 1016-1021 CREATE TABLE `issuingrules` ( -- circulation and fine rules Link Here
1016
  `hardduedate` date default NULL, -- hard due date
1016
  `hardduedate` date default NULL, -- hard due date
1017
  `hardduedatecompare` tinyint NOT NULL default "0", -- type of hard due date (1 = after, 0 = on, -1 = before)
1017
  `hardduedatecompare` tinyint NOT NULL default "0", -- type of hard due date (1 = after, 0 = on, -1 = before)
1018
  `renewalsallowed` smallint(6) NOT NULL default "0", -- how many renewals are allowed
1018
  `renewalsallowed` smallint(6) NOT NULL default "0", -- how many renewals are allowed
1019
  `renewalperiod` int(4) default NULL -- renewal period in the unit set in issuingrules.lengthunit
1019
  `reservesallowed` smallint(6) NOT NULL default "0", -- how many holds are allowed
1020
  `reservesallowed` smallint(6) NOT NULL default "0", -- how many holds are allowed
1020
  `branchcode` varchar(10) NOT NULL default '', -- the branch this rule is for (branches.branchcode)
1021
  `branchcode` varchar(10) NOT NULL default '', -- the branch this rule is for (branches.branchcode)
1021
  overduefinescap decimal default NULL, -- the maximum amount of an overdue fine
1022
  overduefinescap decimal default NULL, -- the maximum amount of an overdue fine
(-)a/installer/data/mysql/updatedatabase.pl (+12 lines)
Lines 6285-6290 if (CheckVersion($DBversion)) { Link Here
6285
    SetVersion ($DBversion);
6285
    SetVersion ($DBversion);
6286
}
6286
}
6287
6287
6288
$DBversion = '3.09.00.XXX';
6289
if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
6290
    $dbh->do(qq{
6291
        ALTER TABLE issuingrules ADD COLUMN renewalperiod int(4) DEFAULT NULL AFTER renewalsallowed
6292
    });
6293
    $dbh->do(qq{
6294
        UPDATE issuingrules SET renewalperiod = issuelength
6295
    });
6296
    print "Upgrade to $DBversion done (Add colum issuingrules.renewalperiod)\n";
6297
    SetVersion ($DBversion);
6298
}
6299
6288
=head1 FUNCTIONS
6300
=head1 FUNCTIONS
6289
6301
6290
=head2 TableExists($table)
6302
=head2 TableExists($table)
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/smart-rules.tt (+3 lines)
Lines 75-80 for="tobranch"><strong>Clone these rules to:</strong></label> <input type="hidde Link Here
75
                <th>Overdue Fines Cap ($)</th>
75
                <th>Overdue Fines Cap ($)</th>
76
                <th>Suspension in days (day)</th>
76
                <th>Suspension in days (day)</th>
77
                <th>Renewals allowed (count)</th>
77
                <th>Renewals allowed (count)</th>
78
                <th>Renewals period</th>
78
                <th>Holds allowed (count)</th>
79
                <th>Holds allowed (count)</th>
79
		<th>Rental discount (%)</th>
80
		<th>Rental discount (%)</th>
80
				<th>&nbsp;</th>
81
				<th>&nbsp;</th>
Lines 120-125 for="tobranch"><strong>Clone these rules to:</strong></label> <input type="hidde Link Here
120
                            <td>[% rule.overduefinescap FILTER format("%.2f") %]</td>
121
                            <td>[% rule.overduefinescap FILTER format("%.2f") %]</td>
121
							<td>[% rule.finedays %]</td>
122
							<td>[% rule.finedays %]</td>
122
							<td>[% rule.renewalsallowed %]</td>
123
							<td>[% rule.renewalsallowed %]</td>
124
                            <td>[% rule.renewalperiod %]</td>
123
							<td>[% rule.reservesallowed %]</td>
125
							<td>[% rule.reservesallowed %]</td>
124
							<td>[% rule.rentaldiscount %]</td>
126
							<td>[% rule.rentaldiscount %]</td>
125
							<td>
127
							<td>
Lines 166-171 for="tobranch"><strong>Clone these rules to:</strong></label> <input type="hidde Link Here
166
                    <td><input name="overduefinescap" size="6" /> </td>
168
                    <td><input name="overduefinescap" size="6" /> </td>
167
                    <td><input name="finedays" size="3" /> </td>
169
                    <td><input name="finedays" size="3" /> </td>
168
                    <td><input name="renewalsallowed" size="2" /></td>
170
                    <td><input name="renewalsallowed" size="2" /></td>
171
                    <td><input name="renewalperiod" size="3" /></td>
169
                    <td><input name="reservesallowed" size="2" /></td>
172
                    <td><input name="reservesallowed" size="2" /></td>
170
		    <td><input name="rentaldiscount" size="2" /></td>
173
		    <td><input name="rentaldiscount" size="2" /></td>
171
                    <td><input type="hidden" name="branch" value="[% current_branch %]"/><input type="submit" value="Add" class="submit" /></td>
174
                    <td><input type="hidden" name="branch" value="[% current_branch %]"/><input type="submit" value="Add" class="submit" /></td>
(-)a/t/db_dependent/lib/KohaTest/Overdues.pm (-2 lines)
Lines 23-29 sub methods : Test( 1 ) { Link Here
23
                       BorType 
23
                       BorType 
24
                       ReplacementCost 
24
                       ReplacementCost 
25
                       GetFine 
25
                       GetFine 
26
                       GetIssuingRules 
27
                       ReplacementCost2 
26
                       ReplacementCost2 
28
                       GetNextIdNotify 
27
                       GetNextIdNotify 
29
                       NumberNotifyId
28
                       NumberNotifyId
30
- 

Return to bug 8365