+ #if ($section == $sections[$#sections]) {\r
+ foreach my $line (grep {$_->{section}->{description} eq $section->{description}} @total_items) {\r
+ if ($section->{total_line_generator}) {\r
+ $OUT .= &{$section->{total_line_generator}}($line);\r
+ } else {\r
+ $OUT .= '\FStotaldesc{' . $line->{'total_item'} . '}' .\r
+ '{' . $line->{'total_amount'} . '}' . "\n";\r
+ }\r
+ }\r
+ #}\r
+\r
+ $OUT .= '\hline';\r
+ $OUT .= '\endlastfoot';\r
+\r
+ my $lastref = 0;\r
+ foreach my $line (\r
+ grep { ( scalar( @sections ) > 1 \r
+ ? $section->{'description'} eq $_->{'section'}->{'description'}\r
+ : 1\r
+ ) }\r
+ @detail_items )\r
+ {\r
+ my $ext_description = $line->{'ext_description'};\r
+ \r
+ # Don't break-up small packages.\r
+ my $rowbreak = @$ext_description < 5 ? '*' : '';\r
+ \r
+ $OUT .= "\\hline\n" if (($line->{'ref'} || 0) ne $lastref);\r
+ if ($section->{description_generator}) {\r
+ $OUT .= &{$section->{description_generator}}($line);\r
+ } elsif ($section->{usage_section}) {\r
+ my $minutes = sprintf('%d', $line->{'duration'} / 60);\r
+ my $seconds = $line->{'duration'} % 60;\r
+ $OUT .= '\FSusagedesc\r
+ {' . $line->{'description'} . '}\r
+ {' . $line->{'quantity'} . '}\r
+ {' . $minutes . 'm ' . $seconds . 's' . '}\r
+ {' . $line->{'amount'} . '}';\r
+ } else {\r
+ $OUT .= '\FSdesc'.\r
+ '{}'.\r
+ '{' . $line->{'description'} . '}' ;\r
+ if ( $unitprices and length($line->{'unit_amount'}) ) {\r
+ # then show the unit amount and quantity\r
+ $OUT .= \r
+ '{\\dollar' . $line->{'unit_amount'} . '}'.\r
+ '{' . $line->{'quantity'} . '}';\r
+ } else {\r
+ # leave those columns blank\r
+ $OUT .= '{}{}';\r
+ }\r
+ $OUT .= '{\\dollar' . $line->{'amount'} . "}${rowbreak}\n";\r
+ }\r
+ $lastref = $line->{'ref'} || 0;\r
+\r
+ foreach my $ext_desc (@$ext_description) {\r
+ if ($section->{extended_description_generator}) {\r
+ $OUT .= &{$section->{extended_description_generator}}($ext_desc);\r
+ } else {\r
+ if ( $ext_desc !~ /[^\\]&/ ) {\r
+ $ext_desc = substr($ext_desc, 0, 80) . '...'\r
+ if (length($ext_desc) > 80);\r
+ $ext_desc = '\multicolumn{6}{l}{\small{~~~'. $ext_desc. '}}';\r
+ }else{\r
+ $ext_desc = "~~~$ext_desc";\r
+ }\r
+ $OUT .= '\FSextdesc{' . $ext_desc . '}' . "${rowbreak}\n";\r
+ }\r
+ }\r
+\r
+ }\r