--- /dev/null
+package FS::part_event::Condition::pkg_not_reason_type;
+use base qw( FS::part_event::Condition );
+
+use strict;
+use Tie::IxHash;
+#use FS::Record qw( qsearch );
+
+sub description {
+ 'Package Not Reason Type';
+}
+
+sub eventtable_hashref {
+ { 'cust_main' => 0,
+ 'cust_bill' => 0,
+ 'cust_pkg' => 1,
+ 'svc_acct' => 1,
+ };
+}
+
+tie my %actions, 'Tie::IxHash',
+ #'adjourn' =>
+ 'susp' => 'Suspension',
+ #'expire' =>
+ 'cancel' => 'Cancellation'
+;
+
+sub option_fields {
+ (
+ 'action' => { 'label' => 'Package Action',
+ 'type' => 'select',
+ 'options' => [ keys %actions ],
+ 'labels' => \%actions,
+ },
+ 'typenum' => { 'label' => 'Not Reason Type',
+ 'type' => 'select-reason_type',
+ 'multiple' => 1,
+ },
+ );
+}
+
+sub condition {
+ my( $self, $object ) = @_;
+
+ my $cust_pkg = $self->cust_pkg($object);
+
+ my $reason = $cust_pkg->last_reason( $self->option('action') )
+ or return 0;
+
+ my $hashref = $self->option('typenum') || {};
+ ! $hashref->{ $reason->reason_type };
+}
+
+#sub condition_sql {
+# my( $self, $table ) = @_;
+#
+#}
+
+1;
--- /dev/null
+package FS::part_event::Condition::pkg_reason_type;
+use base qw( FS::part_event::Condition );
+
+use strict;
+use Tie::IxHash;
+#use FS::Record qw( qsearch );
+
+sub description {
+ 'Package Reason Type';
+}
+
+sub eventtable_hashref {
+ { 'cust_main' => 0,
+ 'cust_bill' => 0,
+ 'cust_pkg' => 1,
+ 'svc_acct' => 1,
+ };
+}
+
+tie my %actions, 'Tie::IxHash',
+ #'adjourn' =>
+ 'susp' => 'Suspension',
+ #'expire' =>
+ 'cancel' => 'Cancellation'
+;
+
+sub option_fields {
+ (
+ 'action' => { 'label' => 'Package Action',
+ 'type' => 'select',
+ 'options' => [ keys %actions ],
+ 'labels' => \%actions,
+ },
+ 'typenum' => { 'label' => 'Reason Type',
+ 'type' => 'select-reason_type',
+ 'multiple' => 1,
+ },
+ );
+}
+
+sub condition {
+ my( $self, $object ) = @_;
+
+ my $cust_pkg = $self->cust_pkg($object);
+
+ my $reason = $cust_pkg->last_reason( $self->option('action') )
+ or return 0;
+
+ my $hashref = $self->option('typenum') || {};
+ $hashref->{ $reason->reason_type };
+}
+
+#sub condition_sql {
+# my( $self, $table ) = @_;
+#
+#}
+
+1;
--- /dev/null
+<% include( '/elements/select-table.html',
+ 'table' => 'reason_type',
+ 'name_col' => 'type',
+ 'value' => $typenum,
+ #XXX? 'empty_label' => '(none)',
+ #XXX? 'hashref' => { 'disabled' => '' },
+ %opt,
+ )
+%>
+<%init>
+
+my %opt = @_;
+my $typenum = $opt{'curr_value'} || $opt{'value'};
+
+#my %hash = ();
+#$hash{'disabled'} = '' unless $opt{'showdisabled'};
+
+#$opt{'records'} = delete $opt{'reason_type'}
+# if $opt{'reason_type'};
+
+</%init>
--- /dev/null
+% if ( scalar(@{ $opt{'reason_type'} }) == 0 ) {
+
+ <INPUT TYPE="hidden" NAME="<% $opt{'element_name'} || $opt{'field'} || 'typenum' %>" VALUE="">
+
+% } else {
+
+ <& /elements/tr-td-label.html, label => $opt{'label'} || 'Reason type', %opt &>
+
+ <TD COLSPAN="<% $colspan %>">
+ <% include( '/elements/select-reason_type.html',
+ 'curr_value' => $typenum,
+ %opt
+ )
+ %>
+ </TD>
+ </TR>
+
+% }
+
+<%init>
+
+my %opt = @_;
+my $typenum = $opt{'curr_value'} || $opt{'value'};
+
+$opt{'reason_type'} ||= [ qsearch( 'reason_type', { disabled=>'' } ) ];
+
+my $colspan = delete($opt{'colspan'}) || 1;
+
+</%init>