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

(-)a/C4/Circulation.pm (-108 / +72 lines)
Lines 1319-1331 Get loan length for an itemtype, a borrower type and a branch Link Here
1319
sub GetLoanLength {
1319
sub GetLoanLength {
1320
    my ( $borrowertype, $itemtype, $branchcode ) = @_;
1320
    my ( $borrowertype, $itemtype, $branchcode ) = @_;
1321
    my $dbh = C4::Context->dbh;
1321
    my $dbh = C4::Context->dbh;
1322
    my $sth =
1322
    my $sth = $dbh->prepare(qq{
1323
      $dbh->prepare(
1323
        SELECT issuelength, lengthunit, renewalperiod
1324
'select issuelength, lengthunit from issuingrules where categorycode=? and itemtype=? and branchcode=? and issuelength is not null'
1324
        FROM issuingrules
1325
      );
1325
        WHERE   categorycode=?
1326
# warn "in get loan lenght $borrowertype $itemtype $branchcode ";
1326
            AND itemtype=?
1327
# try to find issuelength & return the 1st available.
1327
            AND branchcode=?
1328
# check with borrowertype, itemtype and branchcode, then without one of those parameters
1328
            AND issuelength IS NOT NULL
1329
    });
1330
1331
    # try to find issuelength & return the 1st available.
1332
    # check with borrowertype, itemtype and branchcode, then without one of those parameters
1333
1329
    $sth->execute( $borrowertype, $itemtype, $branchcode );
1334
    $sth->execute( $borrowertype, $itemtype, $branchcode );
1330
    my $loanlength = $sth->fetchrow_hashref;
1335
    my $loanlength = $sth->fetchrow_hashref;
1331
    return $loanlength
1336
    return $loanlength
Lines 1369-1374 sub GetLoanLength { Link Here
1369
    # if no rule is set => 21 days (hardcoded)
1374
    # if no rule is set => 21 days (hardcoded)
1370
    return {
1375
    return {
1371
        issuelength => 21,
1376
        issuelength => 21,
1377
        renewalperiod => 21,
1372
        lengthunit => 'days',
1378
        lengthunit => 'days',
1373
    };
1379
    };
1374
1380
Lines 1403-1409 sub GetHardDueDate { Link Here
1403
1409
1404
FIXME - This is a copy-paste of GetLoanLength
1410
FIXME - This is a copy-paste of GetLoanLength
1405
as a stop-gap.  Do not wish to change API for GetLoanLength 
1411
as a stop-gap.  Do not wish to change API for GetLoanLength 
1406
this close to release, however, Overdues::GetIssuingRules is broken.
1412
this close to release.
1407
1413
1408
Get the issuing rule for an itemtype, a borrower type and a branch
1414
Get the issuing rule for an itemtype, a borrower type and a branch
1409
Returns a hashref from the issuingrules table.
1415
Returns a hashref from the issuingrules table.
Lines 2420-2484 sub CanBookBeRenewed { Link Here
2420
    my $dbh       = C4::Context->dbh;
2426
    my $dbh       = C4::Context->dbh;
2421
    my $renews    = 1;
2427
    my $renews    = 1;
2422
    my $renewokay = 0;
2428
    my $renewokay = 0;
2423
	my $error;
2429
    my $error;
2424
2430
2425
    # Look in the issues table for this item, lent to this borrower,
2431
    my $borrower    = C4::Members::GetMemberDetails( $borrowernumber, 0 )   or return;
2426
    # and not yet returned.
2432
    my $item        = GetItem($itemnumber)                                  or return;
2433
    my $itemissue   = GetItemIssue($itemnumber)                             or return;
2427
2434
2428
    # Look in the issues table for this item, lent to this borrower,
2435
    my $branchcode  = _GetCircControlBranch($item, $borrower);
2429
    # and not yet returned.
2436
2430
    my %branch = (
2437
    my $issuingrule = GetIssuingRule($borrower->{categorycode}, $item->{itype}, $branchcode);
2431
            'ItemHomeLibrary' => 'items.homebranch',
2432
            'PickupLibrary'   => 'items.holdingbranch',
2433
            'PatronLibrary'   => 'borrowers.branchcode'
2434
            );
2435
    my $controlbranch = $branch{C4::Context->preference('CircControl')};
2436
    my $itype         = C4::Context->preference('item-level_itypes') ? 'items.itype' : 'biblioitems.itemtype';
2437
    
2438
    my $sthcount = $dbh->prepare("
2439
                   SELECT 
2440
                    borrowers.categorycode, biblioitems.itemtype, issues.renewals, renewalsallowed, $controlbranch
2441
                   FROM  issuingrules, 
2442
                   issues
2443
                   LEFT JOIN items USING (itemnumber) 
2444
                   LEFT JOIN borrowers USING (borrowernumber) 
2445
                   LEFT JOIN biblioitems USING (biblioitemnumber)
2446
                   
2447
                   WHERE
2448
                    (issuingrules.categorycode = borrowers.categorycode OR issuingrules.categorycode = '*')
2449
                   AND
2450
                    (issuingrules.itemtype = $itype OR issuingrules.itemtype = '*')
2451
                   AND
2452
                    (issuingrules.branchcode = $controlbranch OR issuingrules.branchcode = '*') 
2453
                   AND 
2454
                    borrowernumber = ? 
2455
                   AND
2456
                    itemnumber = ?
2457
                   ORDER BY
2458
                    issuingrules.categorycode desc,
2459
                    issuingrules.itemtype desc,
2460
                    issuingrules.branchcode desc
2461
                   LIMIT 1;
2462
                  ");
2463
2464
    $sthcount->execute( $borrowernumber, $itemnumber );
2465
    if ( my $data1 = $sthcount->fetchrow_hashref ) {
2466
        
2467
        if ( ( $data1->{renewalsallowed} && $data1->{renewalsallowed} > $data1->{renewals} ) || $override_limit ) {
2468
            $renewokay = 1;
2469
        }
2470
        else {
2471
			$error="too_many";
2472
		}
2473
		
2474
        my ( $resfound, $resrec, undef ) = C4::Reserves::CheckReserves($itemnumber);
2475
        if ($resfound) {
2476
            $renewokay = 0;
2477
			$error="on_reserve"
2478
        }
2479
2438
2439
    if ( ( $issuingrule->{renewalsallowed} > $itemissue->{renewals} ) || $override_limit ) {
2440
        $renewokay = 1;
2441
    } else {
2442
        $error = "too_many";
2443
    }
2444
2445
    my ( $resfound, $resrec ) = C4::Reserves::CheckReserves($itemnumber);
2446
    if ( $resfound ) {
2447
        $renewokay = 0;
2448
        $error     = "on_reserve";
2480
    }
2449
    }
2481
    return ($renewokay,$error);
2450
2451
    return ( $renewokay, $error );
2482
}
2452
}
2483
2453
2484
=head2 AddRenewal
2454
=head2 AddRenewal
Lines 2539-2545 sub AddRenewal { Link Here
2539
        $datedue = (C4::Context->preference('RenewalPeriodBase') eq 'date_due') ?
2509
        $datedue = (C4::Context->preference('RenewalPeriodBase') eq 'date_due') ?
2540
                                        $issuedata->{date_due} :
2510
                                        $issuedata->{date_due} :
2541
                                        DateTime->now( time_zone => C4::Context->tz());
2511
                                        DateTime->now( time_zone => C4::Context->tz());
2542
        $datedue =  CalcDateDue($datedue,$itemtype,$issuedata->{'branchcode'},$borrower);
2512
        $datedue =  CalcDateDue($datedue, $itemtype, $issuedata->{'branchcode'}, $borrower, 'is a renewal');
2543
    }
2513
    }
2544
2514
2545
    # Update the issues record to have the new due date, and a new count
2515
    # Update the issues record to have the new due date, and a new count
Lines 2986-3042 C<$borrower> = Borrower object Link Here
2986
=cut
2956
=cut
2987
2957
2988
sub CalcDateDue {
2958
sub CalcDateDue {
2989
    my ( $startdate, $itemtype, $branch, $borrower ) = @_;
2959
    my ( $startdate, $itemtype, $branch, $borrower, $isrenewal ) = @_;
2960
2961
    $isrenewal ||= 0;
2990
2962
2991
    # loanlength now a href
2963
    # loanlength now a href
2992
    my $loanlength =
2964
    my $loanlength =
2993
      GetLoanLength( $borrower->{'categorycode'}, $itemtype, $branch );
2965
            GetLoanLength( $borrower->{'categorycode'}, $itemtype, $branch );
2966
2967
    my $length_key = ( $isrenewal and defined $loanlength->{renewalperiod} )
2968
            ? qq{renewalperiod}
2969
            : qq{issuelength};
2994
2970
2995
    my $datedue;
2971
    my $datedue;
2996
2972
2997
    # if globalDueDate ON the datedue is set to that date
2973
    # calculate the datedue as normal
2998
    if (C4::Context->preference('globalDueDate')
2974
    if ( C4::Context->preference('useDaysMode') eq 'Days' )
2999
        && ( C4::Context->preference('globalDueDate') =~
2975
    {    # ignoring calendar
3000
            C4::Dates->regexp('syspref') )
2976
        my $dt =
3001
      ) {
2977
          DateTime->now( time_zone => C4::Context->tz() )
3002
        $datedue = dt_from_string(
2978
          ->truncate( to => 'minute' );
3003
            C4::Context->preference('globalDueDate'),
2979
        if ( $loanlength->{lengthunit} eq 'hours' ) {
3004
            C4::Context->preference('dateformat')
2980
            $dt->add( hours => $loanlength->{$length_key} );
3005
        );
2981
            return $dt;
2982
        } else {    # days
2983
            $dt->add( days => $loanlength->{$length_key} );
2984
            $dt->set_hour(23);
2985
            $dt->set_minute(59);
2986
            return $dt;
2987
        }
3006
    } else {
2988
    } else {
3007
2989
        my $dur;
3008
        # otherwise, calculate the datedue as normal
2990
        if ($loanlength->{lengthunit} eq 'hours') {
3009
        if ( C4::Context->preference('useDaysMode') eq 'Days' )
2991
            $dur = DateTime::Duration->new( hours => $loanlength->{$length_key});
3010
        {    # ignoring calendar
2992
        }
3011
            my $dt =
2993
        else { # days
3012
              DateTime->now( time_zone => C4::Context->tz() )
2994
            $dur = DateTime::Duration->new( days => $loanlength->{$length_key});
3013
              ->truncate( to => 'minute' );
2995
        }
3014
            if ( $loanlength->{lengthunit} eq 'hours' ) {
2996
        if (ref $startdate ne 'DateTime' ) {
3015
                $dt->add( hours => $loanlength->{issuelength} );
2997
            $startdate = dt_from_string($startdate);
3016
                return $dt;
2998
        }
3017
            } else {    # days
2999
        my $calendar = Koha::Calendar->new( branchcode => $branch );
3018
                $dt->add( days => $loanlength->{issuelength} );
3000
        $datedue = $calendar->addDate( $startdate, $dur, $loanlength->{lengthunit} );
3019
                $dt->set_hour(23);
3001
        if ($loanlength->{lengthunit} eq 'days') {
3020
                $dt->set_minute(59);
3002
            $datedue->set_hour(23);
3021
                return $dt;
3003
            $datedue->set_minute(59);
3022
            }
3023
        } else {
3024
            my $dur;
3025
            if ($loanlength->{lengthunit} eq 'hours') {
3026
                $dur = DateTime::Duration->new( hours => $loanlength->{issuelength});
3027
            }
3028
            else { # days
3029
                $dur = DateTime::Duration->new( days => $loanlength->{issuelength});
3030
            }
3031
            if (ref $startdate ne 'DateTime' ) {
3032
                $startdate = dt_from_string($startdate);
3033
            }
3034
            my $calendar = Koha::Calendar->new( branchcode => $branch );
3035
            $datedue = $calendar->addDate( $startdate, $dur, $loanlength->{lengthunit} );
3036
            if ($loanlength->{lengthunit} eq 'days') {
3037
                $datedue->set_hour(23);
3038
                $datedue->set_minute(59);
3039
            }
3040
        }
3004
        }
3041
    }
3005
    }
3042
3006
(-)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 1015-1020 CREATE TABLE `issuingrules` ( -- circulation and fine rules Link Here
1015
  `hardduedate` date default NULL, -- hard due date
1015
  `hardduedate` date default NULL, -- hard due date
1016
  `hardduedatecompare` tinyint NOT NULL default "0", -- type of hard due date (1 = after, 0 = on, -1 = before)
1016
  `hardduedatecompare` tinyint NOT NULL default "0", -- type of hard due date (1 = after, 0 = on, -1 = before)
1017
  `renewalsallowed` smallint(6) NOT NULL default "0", -- how many renewals are allowed
1017
  `renewalsallowed` smallint(6) NOT NULL default "0", -- how many renewals are allowed
1018
  `renewalperiod` int(4) default NULL -- renewal period in the unit set in issuingrules.lengthunit
1018
  `reservesallowed` smallint(6) NOT NULL default "0", -- how many holds are allowed
1019
  `reservesallowed` smallint(6) NOT NULL default "0", -- how many holds are allowed
1019
  `branchcode` varchar(10) NOT NULL default '', -- the branch this rule is for (branches.branchcode)
1020
  `branchcode` varchar(10) NOT NULL default '', -- the branch this rule is for (branches.branchcode)
1020
  overduefinescap decimal default NULL, -- the maximum amount of an overdue fine
1021
  overduefinescap decimal default NULL, -- the maximum amount of an overdue fine
(-)a/installer/data/mysql/updatedatabase.pl (+12 lines)
Lines 5953-5958 if (C4::Context->preference("Version") < TransformToNum($DBversion)) { Link Here
5953
}
5953
}
5954
5954
5955
5955
5956
$DBversion = '3.09.00.XXX';
5957
if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
5958
    $dbh->do(qq{
5959
        ALTER TABLE issuingrules ADD COLUMN renewalperiod int(4) DEFAULT NULL AFTER renewalsallowed
5960
    });
5961
    $dbh->do(qq{
5962
        UPDATE issuingrules SET renewalperiod = issuelength
5963
    });
5964
    print "Upgrade to $DBversion done (Add colum issuingrules.renewalperiod)\n";
5965
    SetVersion ($DBversion);
5966
}
5967
5956
=head1 FUNCTIONS
5968
=head1 FUNCTIONS
5957
5969
5958
=head2 TableExists($table)
5970
=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