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

(-)a/C4/Overdues.pm (-7 / +8 lines)
Lines 982-993 C<$categorycode> contains the borrower categorycode Link Here
982
982
983
sub GetOverdueDelays {
983
sub GetOverdueDelays {
984
    my ($category) = @_;
984
    my ($category) = @_;
985
    my $query      = qq|SELECT delay1,delay2,delay3
985
    my $query      = qq|SELECT delay
986
                FROM overduerules
986
                FROM overduerules
987
                WHERE categorycode=?|;
987
                WHERE categorycode=?
988
                ORDER BY typecode ASC|;
988
    my $sth = C4::Context->dbh->prepare($query);
989
    my $sth = C4::Context->dbh->prepare($query);
989
    $sth->execute($category);
990
    $sth->execute($category);
990
    my (@delays) = $sth->fetchrow_array;
991
    my (@delays) = ($sth->fetchrow_array,$sth->fetchrow_array,$sth->fetchrow_array);
991
    return (@delays);
992
    return (@delays);
992
}
993
}
993
994
Lines 1001-1007 returns a list of branch codes for branches with overdue rules defined. Link Here
1001
1002
1002
sub GetBranchcodesWithOverdueRules {
1003
sub GetBranchcodesWithOverdueRules {
1003
    my $dbh               = C4::Context->dbh;
1004
    my $dbh               = C4::Context->dbh;
1004
    my $rqoverduebranches = $dbh->prepare("SELECT DISTINCT branchcode FROM overduerules WHERE delay1 IS NOT NULL AND branchcode <> '' ORDER BY branchcode");
1005
    my $rqoverduebranches = $dbh->prepare("SELECT DISTINCT branchcode FROM overduerules WHERE delay IS NOT NULL AND branchcode <> '' ORDER BY branchcode");
1005
    $rqoverduebranches->execute;
1006
    $rqoverduebranches->execute;
1006
    my @branches = map { shift @$_ } @{ $rqoverduebranches->fetchall_arrayref };
1007
    my @branches = map { shift @$_ } @{ $rqoverduebranches->fetchall_arrayref };
1007
    if (!$branches[0]) {
1008
    if (!$branches[0]) {
Lines 1062-1072 C<$notify_level> contains the notify level Link Here
1062
sub GetOverduerules {
1063
sub GetOverduerules {
1063
    my ( $category, $notify_level ) = @_;
1064
    my ( $category, $notify_level ) = @_;
1064
    my $dbh   = C4::Context->dbh;
1065
    my $dbh   = C4::Context->dbh;
1065
    my $query = qq|SELECT debarred$notify_level
1066
    my $query = qq|SELECT debarred
1066
                     FROM overduerules
1067
                     FROM overduerules
1067
                    WHERE categorycode=?|;
1068
                    WHERE categorycode=? AND typecode=?|;
1068
    my $sth = $dbh->prepare($query);
1069
    my $sth = $dbh->prepare($query);
1069
    $sth->execute($category);
1070
    $sth->execute($category,$notify_level);
1070
    my ($overduerules) = $sth->fetchrow;
1071
    my ($overduerules) = $sth->fetchrow;
1071
    return ($overduerules);
1072
    return ($overduerules);
1072
}
1073
}
(-)a/installer/data/mysql/kohastructure.sql (-10 / +6 lines)
Lines 1498-1515 CREATE TABLE `opac_news` ( -- data from the news tool Link Here
1498
1498
1499
DROP TABLE IF EXISTS `overduerules`;
1499
DROP TABLE IF EXISTS `overduerules`;
1500
CREATE TABLE `overduerules` ( -- overdue notice status and triggers
1500
CREATE TABLE `overduerules` ( -- overdue notice status and triggers
1501
  `overduerules_id` mediumint NOT NULL AUTO_INCREMENT,
1502
  `delay` int(4) default NULL, -- number of days after the item is overdue that this notice is sent
1503
  `letter` varchar(20) default NULL, -- foreign key from the letter table to define which notice should be sent
1504
  `debarred` varchar(1) default 0, -- is the patron restricted when this notice is sent (1 for yes, 0 for no)
1505
  `typecode` varchar(10) NOT NULL default '1', -- 1 2 3 for first second third, may be extended later
1501
  `branchcode` varchar(10) NOT NULL default '', -- foreign key from the branches table to define which branch this rule is for (if blank it's all libraries)
1506
  `branchcode` varchar(10) NOT NULL default '', -- foreign key from the branches table to define which branch this rule is for (if blank it's all libraries)
1502
  `categorycode` varchar(10) NOT NULL default '', -- foreign key from the categories table to define which patron category this rule is for
1507
  `categorycode` varchar(10) NOT NULL default '', -- foreign key from the categories table to define which patron category this rule is for
1503
  `delay1` int(4) default NULL, -- number of days after the item is overdue that the first notice is sent
1508
  PRIMARY KEY (`overduerules_id`)
1504
  `letter1` varchar(20) default NULL, -- foreign key from the letter table to define which notice should be sent as the first notice
1505
  `debarred1` varchar(1) default 0, -- is the patron restricted when the first notice is sent (1 for yes, 0 for no)
1506
  `delay2` int(4) default NULL, -- number of days after the item is overdue that the second notice is sent
1507
  `debarred2` varchar(1) default 0, -- is the patron restricted when the second notice is sent (1 for yes, 0 for no)
1508
  `letter2` varchar(20) default NULL, -- foreign key from the letter table to define which notice should be sent as the second notice
1509
  `delay3` int(4) default NULL, -- number of days after the item is overdue that the third notice is sent
1510
  `letter3` varchar(20) default NULL, -- foreign key from the letter table to define which notice should be sent as the third notice
1511
  `debarred3` int(1) default 0, -- is the patron restricted when the third notice is sent (1 for yes, 0 for no)
1512
  PRIMARY KEY  (`branchcode`,`categorycode`)
1513
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
1509
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
1514
1510
1515
--
1511
--
(-)a/installer/data/mysql/updatedatabase.pl (+24 lines)
Lines 5291-5296 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) { Link Here
5291
}
5291
}
5292
5292
5293
5293
5294
5295
$DBversion = "3.09.00.XXX";
5296
if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
5297
    $dbh->do("ALTER TABLE overduerules RENAME TO old_overduerules");
5298
    $dbh->do("CREATE TABLE `overduerules` ( -- overdue notice status and triggers
5299
  `overduerules_id` mediumint NOT NULL AUTO_INCREMENT,
5300
  `delay` int(4) default NULL, -- number of days after the item is overdue that this notice is sent
5301
  `letter` varchar(20) default NULL, -- foreign key from the letter table to define which notice should be sent
5302
  `debarred` varchar(1) default 0, -- is the patron restricted when this notice is sent (1 for yes, 0 for no)
5303
  `typecode` varchar(10) NOT NULL default '1', -- 1 2 3 for first second third, may be extended later
5304
  `branchcode` varchar(10) NOT NULL default '', -- foreign key from the branches table to define which branch this rule is for (if blank it's all libraries)
5305
  `categorycode` varchar(10) NOT NULL default '', -- foreign key from the categories table to define which patron category this rule is for
5306
  PRIMARY KEY (`overduerules_id`)
5307
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
5308
");
5309
    $dbh->do("INSERT INTO overduerules (delay, letter, debarred, typecode, branchcode, categorycode) SELECT delay1 AS delay, letter1 AS letter, debarred1 as debarred, '1' AS typecode, branchcode, categorycode FROM old_overduerules");
5310
    $dbh->do("INSERT INTO overduerules (delay, letter, debarred, typecode, branchcode, categorycode) SELECT delay2 AS delay, letter2 AS letter, debarred2 as debarred, '2' AS typecode, branchcode, categorycode FROM old_overduerules");
5311
    $dbh->do("INSERT INTO overduerules (delay, letter, debarred, typecode, branchcode, categorycode) SELECT delay3 AS delay, letter3 AS letter, debarred3 as debarred, '3' AS typecode, branchcode, categorycode FROM old_overduerules");
5312
    print "Upgrade to $DBversion done (Restructure table overduerules for future expansion - you should check the conversion and DROP old_overduerules - that may be done automatically in a future version of Koha)\n";
5313
    SetVersion($DBversion);
5314
}
5315
5316
5317
5294
=head1 FUNCTIONS
5318
=head1 FUNCTIONS
5295
5319
5296
=head2 TableExists($table)
5320
=head2 TableExists($table)
(-)a/misc/cronjobs/overdue_notices.pl (-13 / +28 lines)
Lines 385-420 SELECT biblio.*, items.*, issues.*, biblioitems.itemtype, TO_DAYS(NOW())-TO_DAYS Link Here
385
    AND TO_DAYS(NOW())-TO_DAYS(date_due) BETWEEN ? and ?
385
    AND TO_DAYS(NOW())-TO_DAYS(date_due) BETWEEN ? and ?
386
END_SQL
386
END_SQL
387
387
388
    my $query = "SELECT * FROM overduerules WHERE delay1 IS NOT NULL AND branchcode = ? ";
388
    my $query = "SELECT * FROM overduerules WHERE delay IS NOT NULL AND typecode = ? AND branchcode = ? ";
389
    $query .= " AND categorycode IN (".join( ',' , ('?') x @myborcat ).") " if (@myborcat);
389
    $query .= " AND categorycode IN (".join( ',' , ('?') x @myborcat ).") " if (@myborcat);
390
    $query .= " AND categorycode NOT IN (".join( ',' , ('?') x @myborcatout ).") " if (@myborcatout);
390
    $query .= " AND categorycode NOT IN (".join( ',' , ('?') x @myborcatout ).") " if (@myborcatout);
391
    
391
    
392
    my $rqoverduerules =  $dbh->prepare($query);
392
    my $rqoverduerules =  $dbh->prepare($query);
393
    $rqoverduerules->execute($branchcode, @myborcat, @myborcatout);
393
    $rqoverduerules->execute(1, $branchcode, @myborcat, @myborcatout);
394
        
395
    my $trqoverduerules =  $dbh->prepare($query);
396
    $trqoverduerules->execute(2, $branchcode, @myborcat, @myborcatout);
397
    
398
    my $ttrqoverduerules =  $dbh->prepare($query);
399
    $ttrqoverduerules->execute(3, $branchcode, @myborcat, @myborcatout);
394
    
400
    
395
    # We get default rules is there is no rule for this branch
401
    # We get default rules is there is no rule for this branch
396
    if($rqoverduerules->rows == 0){
402
    if($rqoverduerules->rows == 0){
397
        $query = "SELECT * FROM overduerules WHERE delay1 IS NOT NULL AND branchcode = '' ";
403
        $query = "SELECT * FROM overduerules WHERE delay IS NOT NULL AND typecode = ? AND branchcode = '' ";
398
        $query .= " AND categorycode IN (".join( ',' , ('?') x @myborcat ).") " if (@myborcat);
404
        $query .= " AND categorycode IN (".join( ',' , ('?') x @myborcat ).") " if (@myborcat);
399
        $query .= " AND categorycode NOT IN (".join( ',' , ('?') x @myborcatout ).") " if (@myborcatout);
405
        $query .= " AND categorycode NOT IN (".join( ',' , ('?') x @myborcatout ).") " if (@myborcatout);
400
        
406
        
401
        $rqoverduerules = $dbh->prepare($query);
407
        $rqoverduerules = $dbh->prepare($query);
402
        $rqoverduerules->execute(@myborcat, @myborcatout);
408
        $rqoverduerules->execute(1, @myborcat, @myborcatout);
409
        
410
        $trqoverduerules = $dbh->prepare($query);
411
        $trqoverduerules->execute(2, @myborcat, @myborcatout);
412
        
413
        $ttrqoverduerules = $dbh->prepare($query);
414
        $ttrqoverduerules->execute(3, @myborcat, @myborcatout);
403
    }
415
    }
404
416
405
    # my $outfile = 'overdues_' . ( $mybranch || $branchcode || 'default' );
417
    # my $outfile = 'overdues_' . ( $mybranch || $branchcode || 'default' );
406
    while ( my $overdue_rules = $rqoverduerules->fetchrow_hashref ) {
418
    while ( my $overdue_rules[1] = $rqoverduerules->fetchrow_hashref ) {
419
      $overdue_rules[2] = $trqoverduerules->fetchrow_hashref;
420
      $overdue_rules[3] = $ttrqoverduerules->fetchrow_hashref;
421
407
      PERIOD: foreach my $i ( 1 .. 3 ) {
422
      PERIOD: foreach my $i ( 1 .. 3 ) {
408
423
409
            $verbose and warn "branch '$branchcode', pass $i\n";
424
            $verbose and warn "branch '$branchcode', pass $i\n";
410
            my $mindays = $overdue_rules->{"delay$i"};    # the notice will be sent after mindays days (grace period)
425
            my $mindays = $overdue_rules[$i]->{"delay"};    # the notice will be sent after mindays days (grace period)
411
            my $maxdays = (
426
            my $maxdays = (
412
                  $overdue_rules->{ "delay" . ( $i + 1 ) }
427
                  $overdue_rules[$i+1]->{ "delay" }
413
                ? $overdue_rules->{ "delay" . ( $i + 1 ) } - 1
428
                ? $overdue_rules[$i+1]->{ "delay" } - 1
414
                : ($MAX)
429
                : ($MAX)
415
            );                                            # issues being more than maxdays late are managed somewhere else. (borrower probably suspended)
430
            );                                            # issues being more than maxdays late are managed somewhere else. (borrower probably suspended)
416
431
417
            if ( !$overdue_rules->{"letter$i"} ) {
432
            if ( !$overdue_rules[$i]->{"letter"} ) {
418
                $verbose and warn "No letter$i code for branch '$branchcode'";
433
                $verbose and warn "No letter$i code for branch '$branchcode'";
419
                next PERIOD;
434
                next PERIOD;
420
            }
435
            }
Lines 438-444 END_SQL Link Here
438
            }
453
            }
439
            if ( $overdue_rules->{categorycode} ) {
454
            if ( $overdue_rules->{categorycode} ) {
440
                $borrower_sql .= ' AND borrowers.categorycode=? ';
455
                $borrower_sql .= ' AND borrowers.categorycode=? ';
441
                push @borrower_parameters, $overdue_rules->{categorycode};
456
                push @borrower_parameters, $overdue_rules[$i]->{categorycode};
442
            }
457
            }
443
            $borrower_sql .= '  AND categories.overduenoticerequired=1 ';
458
            $borrower_sql .= '  AND categories.overduenoticerequired=1 ';
444
            if($triggered) {
459
            if($triggered) {
Lines 452-458 END_SQL Link Here
452
            # $sth gets borrower info iff at least one overdue item has triggered the overdue action.
467
            # $sth gets borrower info iff at least one overdue item has triggered the overdue action.
453
	        my $sth = $dbh->prepare($borrower_sql);
468
	        my $sth = $dbh->prepare($borrower_sql);
454
            $sth->execute(@borrower_parameters);
469
            $sth->execute(@borrower_parameters);
455
            $verbose and warn $borrower_sql . "\n $branchcode | " . $overdue_rules->{'categorycode'} . "\n ($mindays, $maxdays)\nreturns " . $sth->rows . " rows";
470
            $verbose and warn $borrower_sql . "\n $branchcode | " . $overdue_rules[$i]->{'categorycode'} . "\n ($mindays, $maxdays)\nreturns " . $sth->rows . " rows";
456
471
457
            while ( my ( $borrowernumber, $firstname, $lastname,
472
            while ( my ( $borrowernumber, $firstname, $lastname,
458
                    $address1, $address2, $city, $postcode, $country, $email
473
                    $address1, $address2, $city, $postcode, $country, $email
Lines 460-466 END_SQL Link Here
460
            {
475
            {
461
                $verbose and warn "borrower $firstname, $lastname ($borrowernumber) has items triggering level $i.";
476
                $verbose and warn "borrower $firstname, $lastname ($borrowernumber) has items triggering level $i.";
462
    
477
    
463
                if ( $overdue_rules->{"debarred$i"} ) {
478
                if ( $overdue_rules[$i]->{"debarred"} ) {
464
    
479
    
465
                    #action taken is debarring
480
                    #action taken is debarring
466
                    C4::Members::DebarMember($borrowernumber, '9999-12-31');
481
                    C4::Members::DebarMember($borrowernumber, '9999-12-31');
Lines 489-495 END_SQL Link Here
489
                $sth2->finish;
504
                $sth2->finish;
490
505
491
                my $letter = parse_letter(
506
                my $letter = parse_letter(
492
                    {   letter_code     => $overdue_rules->{"letter$i"},
507
                    {   letter_code     => $overdue_rules[$i]->{"letter"},
493
                        borrowernumber  => $borrowernumber,
508
                        borrowernumber  => $borrowernumber,
494
                        branchcode      => $branchcode,
509
                        branchcode      => $branchcode,
495
                        items           => \@items,
510
                        items           => \@items,
(-)a/tools/overduerules.pl (-13 / +20 lines)
Lines 79-88 my %temphash; Link Here
79
my $input_saved = 0;
79
my $input_saved = 0;
80
if ($op eq 'save') {
80
if ($op eq 'save') {
81
    my @names=$input->param();
81
    my @names=$input->param();
82
    my $sth_search = $dbh->prepare("SELECT count(*) AS total FROM overduerules WHERE branchcode=? AND categorycode=?");
82
    my $sth_search = $dbh->prepare("SELECT count(*) AS total FROM overduerules WHERE branchcode=? AND categorycode=? AND typecode = '1'");
83
83
84
    my $sth_insert = $dbh->prepare("INSERT INTO overduerules (branchcode,categorycode, delay1,letter1,debarred1, delay2,letter2,debarred2, delay3,letter3,debarred3) VALUES (?,?,?,?,?,?,?,?,?,?,?)");
84
    my $sth_insert = $dbh->prepare("INSERT INTO overduerules (branchcode,categorycode, delay,letter,debarred, typecode) VALUES (?,?,?,?,?,'1'),(?,?,?,?,?,'2'),(?,?,?,?,?,'3')");
85
    my $sth_update=$dbh->prepare("UPDATE overduerules SET delay1=?, letter1=?, debarred1=?, delay2=?, letter2=?, debarred2=?, delay3=?, letter3=?, debarred3=? WHERE branchcode=? AND categorycode=?");
85
    my $sth_update=$dbh->prepare("UPDATE overduerules SET delay=?, letter=?, debarred=? WHERE branchcode=? AND categorycode=? AND typecode=?");
86
    my $sth_delete=$dbh->prepare("DELETE FROM overduerules WHERE branchcode=? AND categorycode=?");
86
    my $sth_delete=$dbh->prepare("DELETE FROM overduerules WHERE branchcode=? AND categorycode=?");
87
    foreach my $key (@names){
87
    foreach my $key (@names){
88
            # ISSUES
88
            # ISSUES
Lines 145-166 if ($op eq 'save') { Link Here
145
                            ($temphash{$bor}->{"delay1"}?$temphash{$bor}->{"delay1"}:undef),
145
                            ($temphash{$bor}->{"delay1"}?$temphash{$bor}->{"delay1"}:undef),
146
                            ($temphash{$bor}->{"letter1"}?$temphash{$bor}->{"letter1"}:""),
146
                            ($temphash{$bor}->{"letter1"}?$temphash{$bor}->{"letter1"}:""),
147
                            ($temphash{$bor}->{"debarred1"}?$temphash{$bor}->{"debarred1"}:0),
147
                            ($temphash{$bor}->{"debarred1"}?$temphash{$bor}->{"debarred1"}:0),
148
                            $branch ,$bor, '1'
149
                            );
150
                        $sth_update->execute(
148
                            ($temphash{$bor}->{"delay2"}?$temphash{$bor}->{"delay2"}:undef),
151
                            ($temphash{$bor}->{"delay2"}?$temphash{$bor}->{"delay2"}:undef),
149
                            ($temphash{$bor}->{"letter2"}?$temphash{$bor}->{"letter2"}:""),
152
                            ($temphash{$bor}->{"letter2"}?$temphash{$bor}->{"letter2"}:""),
150
                            ($temphash{$bor}->{"debarred2"}?$temphash{$bor}->{"debarred2"}:0),
153
                            ($temphash{$bor}->{"debarred2"}?$temphash{$bor}->{"debarred2"}:0),
154
                            $branch ,$bor, '2'
155
                            );
156
                        $sth_update->execute(
151
                            ($temphash{$bor}->{"delay3"}?$temphash{$bor}->{"delay3"}:undef),
157
                            ($temphash{$bor}->{"delay3"}?$temphash{$bor}->{"delay3"}:undef),
152
                            ($temphash{$bor}->{"letter3"}?$temphash{$bor}->{"letter3"}:""),
158
                            ($temphash{$bor}->{"letter3"}?$temphash{$bor}->{"letter3"}:""),
153
                            ($temphash{$bor}->{"debarred3"}?$temphash{$bor}->{"debarred3"}:0),
159
                            ($temphash{$bor}->{"debarred3"}?$temphash{$bor}->{"debarred3"}:0),
154
                            $branch ,$bor
160
                            $branch ,$bor, '3'
155
                            );
161
                            );
156
                    } else {
162
                    } else {
157
                        $sth_insert->execute($branch,$bor,
163
                        $sth_insert->execute($branch,$bor,
158
                            ($temphash{$bor}->{"delay1"}?$temphash{$bor}->{"delay1"}:0),
164
                            ($temphash{$bor}->{"delay1"}?$temphash{$bor}->{"delay1"}:0),
159
                            ($temphash{$bor}->{"letter1"}?$temphash{$bor}->{"letter1"}:""),
165
                            ($temphash{$bor}->{"letter1"}?$temphash{$bor}->{"letter1"}:""),
160
                            ($temphash{$bor}->{"debarred1"}?$temphash{$bor}->{"debarred1"}:0),
166
                            ($temphash{$bor}->{"debarred1"}?$temphash{$bor}->{"debarred1"}:0),
167
                            $branch,$bor,
161
                            ($temphash{$bor}->{"delay2"}?$temphash{$bor}->{"delay2"}:0),
168
                            ($temphash{$bor}->{"delay2"}?$temphash{$bor}->{"delay2"}:0),
162
                            ($temphash{$bor}->{"letter2"}?$temphash{$bor}->{"letter2"}:""),
169
                            ($temphash{$bor}->{"letter2"}?$temphash{$bor}->{"letter2"}:""),
163
                            ($temphash{$bor}->{"debarred2"}?$temphash{$bor}->{"debarred2"}:0),
170
                            ($temphash{$bor}->{"debarred2"}?$temphash{$bor}->{"debarred2"}:0),
171
                            $branch,$bor,
164
                            ($temphash{$bor}->{"delay3"}?$temphash{$bor}->{"delay3"}:0),
172
                            ($temphash{$bor}->{"delay3"}?$temphash{$bor}->{"delay3"}:0),
165
                            ($temphash{$bor}->{"letter3"}?$temphash{$bor}->{"letter3"}:""),
173
                            ($temphash{$bor}->{"letter3"}?$temphash{$bor}->{"letter3"}:""),
166
                            ($temphash{$bor}->{"debarred3"}?$temphash{$bor}->{"debarred3"}:0)
174
                            ($temphash{$bor}->{"debarred3"}?$temphash{$bor}->{"debarred3"}:0)
Lines 220-234 for my $data (@categories) { Link Here
220
        }
228
        }
221
    } else {
229
    } else {
222
    #getting values from table
230
    #getting values from table
223
        my $sth2=$dbh->prepare("SELECT * from overduerules WHERE branchcode=? AND categorycode=?");
231
        my $sth2=$dbh->prepare("SELECT * from overduerules WHERE branchcode=? AND categorycode=? AND typecode=?");
224
        $sth2->execute($branch,$data->{'categorycode'});
232
	foreach my $i (1,2,3) {
225
        my $dat=$sth2->fetchrow_hashref;
233
	    $sth2->execute($branch,$data->{'categorycode'},$i);
226
        for (my $i=1;$i<=3;$i++){
234
	    my $dat=$sth2->fetchrow_hashref;
227
            if ($countletters){
235
            if ($countletters){
228
                my @letterloop;
236
                my @letterloop;
229
                foreach my $thisletter (sort { $letters->{$a} cmp $letters->{$b} } keys %$letters) {
237
                foreach my $thisletter (sort { $letters->{$a} cmp $letters->{$b} } keys %$letters) {
230
                    my $selected;
238
                    my $selected;
231
                    if ($dat->{"letter$i"} && $thisletter eq $dat->{"letter$i"}) {
239
                    if ($dat->{"letter"} && $thisletter eq $dat->{"letter"}) {
232
                        $selected = 1;
240
                        $selected = 1;
233
                    }
241
                    }
234
                    my %letterrow =(value => $thisletter,
242
                    my %letterrow =(value => $thisletter,
Lines 240-249 for my $data (@categories) { Link Here
240
                $row{"letterloop$i"}=\@letterloop;
248
                $row{"letterloop$i"}=\@letterloop;
241
            } else {
249
            } else {
242
                $row{"noletter"}=1;
250
                $row{"noletter"}=1;
243
                if ($dat->{"letter$i"}){$row{"letter$i"}=$dat->{"letter$i"};}
251
                if ($dat->{"letter"}){$row{"letter$i"}=$dat->{"letter"};}
244
            }
252
            }
245
            if ($dat->{"delay$i"}){$row{"delay$i"}=$dat->{"delay$i"};}
253
            if ($dat->{"delay"}){$row{"delay$i"}=$dat->{"delay"};}
246
            if ($dat->{"debarred$i"}){$row{"debarred$i"}=$dat->{"debarred$i"};}
254
            if ($dat->{"debarred"}){$row{"debarred$i"}=$dat->{"debarred"};}
247
        }
255
        }
248
    }
256
    }
249
    push @line_loop,\%row;
257
    push @line_loop,\%row;
250
- 

Return to bug 9296