+my @header = (
+ '#',
+ ucfirst($classname) . ' reason type',
+ ucfirst($classname) . ' reason',
+);
+
+my @fields = (
+ 'reasonnum',
+ sub { shift->reasontype->type },
+ 'reason',
+);
+
+my @links = (
+ $link,
+ $link,
+ '',
+);
+
+my $align = 'rll';
+
+if ( $class eq 'S' or $class eq 'C' ) {
+ push @header, 'Credit unused service';
+ push @fields,
+ sub {
+ my $reason = shift;
+ if ( $reason->unused_credit ) {
+ return '<SPAN STYLE="background-color:#00ff00">YES</SPAN>';
+ } else {
+ return '<SPAN STYLE="background-color:#ff0000">NO</SPAN>';
+ }
+ };
+ $align .= 'c';
+}
+if ( $class eq 'S' ) {
+ push @header, 'Suspension fee';
+ push @fields,
+ sub {
+ my $reason = shift;
+ my $feepart = $reason->feepart;
+ my ($href, $text, $detail);
+ if ( $feepart ) {
+ my $part_fee = FS::part_fee->by_key($feepart) or return '';
+ $text = $part_fee->itemdesc . ': ' . $part_fee->explanation;
+ $detail = $reason->fee_on_unsuspend ? 'unsuspension' : 'suspension';
+ if ( $reason->fee_hold ) {
+ $detail = "next bill after $detail";
+ }
+ $detail = "(on $detail)";
+ $href = $p."edit/part_fee.html?$feepart";
+ } else {
+ my $pkgpart = $reason->unsuspend_pkgpart;
+ my $part_pkg = FS::part_pkg->by_key($pkgpart) or return '';
+ $text = $part_pkg->pkg_comment;
+ $href = $p."edit/part_pkg.cgi?$pkgpart";
+ $detail = $reason->unsuspend_hold ?
+ '(on next bill after unsuspension)' : '(on unsuspension)';
+ }
+ return '' unless length($text);
+
+ $text = qq!<A HREF="$href">! . encode_entities($text) . "</A> ".
+ "<FONT SIZE=-1>$detail</FONT>";
+ $text .= '</FONT>';
+ }
+ ;
+ $align .= 'l';
+}
+
+# reason merge handling
+push @header, '';
+push @fields, sub {
+ my $reason = shift;
+ my $reasonnum = $reason->reasonnum;
+ qq!<INPUT TYPE="checkbox" NAME="reasonnum" VALUE="$reasonnum">!;
+};
+push @links, '';
+$align .= 'l';
+my $html_foot = include('/search/elements/checkbox-foot.html',
+ onclick => include( '/elements/popup_link_onclick.html',
+ js_action => q!'! . "${p}misc/reason-merge.html?" . q!' + toCGIString()!,
+ actionlabel => 'Merge reasons',
+ ),
+ label => 'merge selected reasons',
+ minboxes => 2,
+) . '</FORM>';
+