adding pkg_reason_type and pkg_not_reason_type conditions, RT#20084
authorIvan Kohler <ivan@freeside.biz>
Sat, 3 Nov 2012 19:25:22 +0000 (12:25 -0700)
committerIvan Kohler <ivan@freeside.biz>
Sat, 3 Nov 2012 19:25:22 +0000 (12:25 -0700)
FS/FS/part_event/Condition/pkg_not_reason_type.pm [new file with mode: 0644]
FS/FS/part_event/Condition/pkg_reason_type.pm [new file with mode: 0644]
httemplate/elements/select-reason_type.html [new file with mode: 0644]
httemplate/elements/tr-select-reason_type.html [new file with mode: 0644]

diff --git a/FS/FS/part_event/Condition/pkg_not_reason_type.pm b/FS/FS/part_event/Condition/pkg_not_reason_type.pm
new file mode 100644 (file)
index 0000000..3fa08b7
--- /dev/null
@@ -0,0 +1,58 @@
+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;
diff --git a/FS/FS/part_event/Condition/pkg_reason_type.pm b/FS/FS/part_event/Condition/pkg_reason_type.pm
new file mode 100644 (file)
index 0000000..f110e1b
--- /dev/null
@@ -0,0 +1,58 @@
+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;
diff --git a/httemplate/elements/select-reason_type.html b/httemplate/elements/select-reason_type.html
new file mode 100644 (file)
index 0000000..9031e58
--- /dev/null
@@ -0,0 +1,21 @@
+<% 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>
diff --git a/httemplate/elements/tr-select-reason_type.html b/httemplate/elements/tr-select-reason_type.html
new file mode 100644 (file)
index 0000000..9ac473c
--- /dev/null
@@ -0,0 +1,29 @@
+% 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>