RT#36806: Add message template substitution to show last four digits of credit card...
[freeside.git] / FS / FS / msg_template.pm
index 644663e..5c6392c 100644 (file)
@@ -268,19 +268,7 @@ invoicing_list addresses.  Multiple addresses may be comma-separated.
 
 =item substitutions
 
-A hash reference of additional string substitutions
-
-=item sub_param
-
-A hash reference, keys are the names of existing substitutions,
-values are an addition parameter object to pass to the subroutine
-for that substitution, e.g.
-
-       'sub_param' => {
-         'payment_history' => {
-           'start_date' => 1434764295,
-         },
-       },
+A hash reference of additional substitutions
 
 =back
 
@@ -336,10 +324,7 @@ sub prepare {
       }
       elsif( ref($name) eq 'ARRAY' ) {
         # [ foo => sub { ... } ]
-        my @subparam = ();
-        push(@subparam, $opt{'sub_param'}->{$name->[0]})
-          if $opt{'sub_param'} && $opt{'sub_param'}->{$name->[0]};
-        $hash{$prefix.($name->[0])} = $name->[1]->($obj,@subparam);
+        $hash{$prefix.($name->[0])} = $name->[1]->($obj);
       }
       else {
         warn "bad msg_template substitution: '$name'\n";
@@ -352,10 +337,7 @@ sub prepare {
     $hash{$_} = $opt{substitutions}->{$_} foreach keys %{$opt{substitutions}};
   }
 
-  foreach my $key (keys %hash) {
-    next if $self->no_encode($key);
-    $hash{$key} = encode_entities($_ || '');
-  };
+  $_ = encode_entities($_ || '') foreach values(%hash);
 
   ###
   # clean up template
@@ -522,17 +504,21 @@ my $usage_warning = sub {
 
 #my $conf = new FS::Conf;
 
-# for substitutions that handle their own encoding
-sub no_encode {
-  my $self = shift;
-  my $field = shift;
-  return ($field eq 'payment_history');
-}
-
 #return contexts and fill-in values
 # If you add anything, be sure to add a description in 
 # httemplate/edit/msg_template.html.
 sub substitutions {
+  my $payinfo_sub = sub { 
+    my $obj = shift;
+    ($obj->payby eq 'CARD' || $obj->payby eq 'CHEK')
+    ? $obj->paymask 
+    : $obj->decrypt($obj->payinfo)
+  };
+  my $payinfo_end = sub {
+    my $obj = shift;
+    my $payinfo = &$payinfo_sub($obj);
+    substr($payinfo, -4);
+  };
   { 'cust_main' => [qw(
       display_custnum agentnum agent_name
 
@@ -587,12 +573,6 @@ sub substitutions {
       [ selfservice_server_base_url => sub { 
           $conf->config('selfservice_server-base_url') #, shift->agentnum) 
         } ],
-      [ payment_history => sub {
-          my $cust_main = shift;
-          my $param = shift || {};
-          #html works, see no_encode method
-          return '<PRE>' . encode_entities($cust_main->payment_history_text($param)) . '</PRE>';
-        } ],
     ],
     # next_bill_date
     'cust_pkg'  => [qw( 
@@ -685,11 +665,17 @@ sub substitutions {
       # overrides the one in cust_main in cases where a cust_pay is passed
       [ payby             => sub { FS::payby->shortname(shift->payby) } ],
       [ date              => sub { time2str("%a %B %o, %Y", shift->_date) } ],
-      [ payinfo           => sub { 
-          my $cust_pay = shift;
-          ($cust_pay->payby eq 'CARD' || $cust_pay->payby eq 'CHEK') ?
-            $cust_pay->paymask : $cust_pay->decrypt($cust_pay->payinfo)
-        } ],
+      [ 'payinfo' => $payinfo_sub ],
+      [ 'payinfo_end' => $payinfo_end ],
+    ],
+    # for refund receipts
+    'cust_refund' => [
+      'refundnum',
+      [ refund            => sub { sprintf("%.2f", shift->refund) } ],
+      [ payby             => sub { FS::payby->shortname(shift->payby) } ],
+      [ date              => sub { time2str("%a %B %o, %Y", shift->_date) } ],
+      [ 'payinfo' => $payinfo_sub ],
+      [ 'payinfo_end' => $payinfo_end ],
     ],
     # for payment decline messages
     # try to support all cust_pay fields
@@ -701,11 +687,8 @@ sub substitutions {
       [ paid              => sub { sprintf("%.2f", shift->paid) } ],
       [ payby             => sub { FS::payby->shortname(shift->payby) } ],
       [ date              => sub { time2str("%a %B %o, %Y", shift->_date) } ],
-      [ payinfo           => sub {
-          my $pending = shift;
-          ($pending->payby eq 'CARD' || $pending->payby eq 'CHEK') ?
-            $pending->paymask : $pending->decrypt($pending->payinfo)
-        } ],
+      [ 'payinfo' => $payinfo_sub ],
+      [ 'payinfo_end' => $payinfo_end ],
     ],
   };
 }