RT#37908: Convert existing email-sending code to use common interface [removals and...
[freeside.git] / httemplate / view / cust_main / payment_history.html
index 95e34a1..c855595 100644 (file)
@@ -2,184 +2,6 @@
   <TR>
     <TD ALIGN="left">
 
   <TR>
     <TD ALIGN="left">
 
-%# payment links
-
-% my $s = 0;
-% if ( $payby{'BILL'} && $curuser->access_right(['Post payment', 'Post check payment' ]) ) { 
-  <% $s++ ? ' | ' : '' %>
-  <& /elements/popup_link-cust_main.html,
-               'label'       => emt('Enter check payment'),
-               'action'      => "${p}edit/cust_pay.cgi?popup=1;payby=BILL",
-               'cust_main'   => $cust_main,
-               'actionlabel' => emt('Enter check payment'),
-               'width'       => 392,
-               'height'      => 392,
-  &>
-% } 
-
-% if ( $payby{'CASH'} && $curuser->access_right(['Post payment', 'Post cash payment']) ) { 
-  <% $s++ ? ' | ' : '' %>
-  <& /elements/popup_link-cust_main.html,
-               'label'       => emt('Enter cash payment'),
-               'action'      => "${p}edit/cust_pay.cgi?popup=1;payby=CASH",
-               'cust_main'   => $cust_main,
-               'actionlabel' => emt('Enter cash payment'),
-               'width'       => 392,
-               'height'      => 392,
-  &>
-% } 
-
-% if ( $payby{'WEST'} && $curuser->access_right('Post payment') ) { 
-  <% $s++ ? ' | ' : '' %>
-  <A HREF="<% $p %>edit/cust_pay.cgi?payby=WEST;custnum=<% $custnum %>"><% mt('Enter Western Union payment') |h %></A>
-% } 
-
-<% $s ? '<BR>' : '' %>
-% $s=0;
-
-% if ( ( $payby{'CARD'} || $payby{'DCRD'} )
-%        && $curuser->access_right(['Process payment', 'Process credit card payment'])
-%        && ! $cust_main->is_encrypted($cust_main->payinfo)
-%      ) {
-  <% $s++ ? ' | ' : '' %>
-  <A HREF="<% $p %>misc/payment.cgi?payby=CARD;custnum=<% $custnum %>"><% mt('Process credit card payment') |h %></A>
-% } 
-
-% if ( ( $payby{'CHEK'} || $payby{'DCHK'} )
-%        && $curuser->access_right(['Process payment', 'Process Echeck payment'])
-%        && ! $cust_main->is_encrypted($cust_main->payinfo)
-%      ) {
-  <% $s++ ? ' | ' : '' %>
-  <A HREF="<% $p %>misc/payment.cgi?payby=CHEK;custnum=<% $custnum %>"><% mt('Process electronic check (ACH) payment') |h %></A>
-% } 
-
-% if ( $payby{'MCRD'} && $curuser->access_right('Post payment') ) { 
-  <% $s++ ? ' | ' : '' %>
-  <A HREF="<% $p %>edit/cust_pay.cgi?payby=MCRD;custnum=<% $custnum %>"><% mt('Post manual (offline/POS) credit card payment') |h %></A>
-% } 
-
-<% $s ? '<BR>' : '' %>
-
-%# credit links
-
-% $s=0;
-% if ( $curuser->access_right('Post credit') ) { 
-  <% $s++ ? ' | ' : '' %>
-  <& /elements/popup_link-cust_main.html,
-               'label'       => emt('Enter credit'),
-               'action'      => "${p}edit/cust_credit.cgi",
-               'cust_main'   => $cust_main,
-               'actionlabel' => emt('Enter credit'),
-               'width'       => 616, #make room for reasons #540 default
-  &>
-% }
-% if ( $curuser->access_right('Credit line items') ) { 
-  <% $s++ ? ' | ' : '' %>
-  <& /elements/popup_link-cust_main.html,
-               'label'       => emt('Credit line items'),
-               #'action'      => "${p}search/cust_bill_pkg.cgi?nottax=1;type=select",
-               'action'      => "${p}edit/credit-cust_bill_pkg.html",
-               'cust_main'   => $cust_main,
-               'actionlabel' => emt('Credit line items'),
-               'width'       => 968, #763,
-               'height'      => 575,
-  &>
-% } 
-<% $s ? '<BR>' : '' %>
-
-%# refund links
-
-% $s = 0;
-% if ( $payby{'BILL'} && $curuser->access_right(['Post refund', 'Post check refund']) ) { 
-  <% $s++ ? ' | ' : '' %>
-  <& /elements/popup_link-cust_main.html,
-               'label'       => emt('Enter check refund'),
-               'action'      => "${p}edit/cust_refund.cgi?popup=1;payby=BILL",
-               'cust_main'   => $cust_main,
-               'actionlabel' => emt('Enter check refund'),
-               'width'       => 392,
-  &>
-% } 
-
-% if ( $payby{'CASH'} && $curuser->access_right(['Post refund', 'Post cash refund']) ) { 
-  <% $s++ ? ' | ' : '' %>
-  <& /elements/popup_link-cust_main.html,
-               'label'       => emt('Enter cash refund'),
-               'action'      => "${p}edit/cust_refund.cgi?popup=1;payby=CASH",
-               'cust_main'   => $cust_main,
-               'actionlabel' => emt('Enter cash refund'),
-               'width'       => 392,
-  &>
-% } 
-
-%# someday, perhaps.  very few gateways let you do unlinked refunds at all.
-%# Authorize.net makes you sign a special form
-%#
-%#    % if ( ( $payby{'CARD'} || $payby{'DCRD'} )
-%#    %        && $curuser->access_right('Process refund')
-%#    %        && ! $cust_main->is_encrypted($cust_main->payinfo)
-%#    %      ) {
-%#      <% $s++ ? ' | ' : '' %>
-%#      <A HREF="<% $p %>misc/refund.cgi?payby=CARD;custnum=<% $custnum %>">Process credit card refund</A>
-%#    % } 
-%#    
-%#    % if ( ( $payby{'CHEK'} || $payby{'DCHK'} )
-%#    %        && $curuser->access_right('Process refund')
-%#    %        && ! $cust_main->is_encrypted($cust_main->payinfo)
-%#    %      ) {
-%#      <% $s++ ? ' | ' : '' %>
-%#      <A HREF="<% $p %>misc/refund.cgi?payby=CHEK;custnum=<% $custnum %>">Process electronic check (ACH) refund</A>
-%#    % } 
-
-% if ( $payby{'MCRD'} && $curuser->access_right('Post refund') ) { 
-  <% $s++ ? ' | ' : '' %>
-  <A HREF="<% $p %>edit/cust_refund.cgi?payby=MCRD;custnum=<% $custnum %>"><% mt('Post manual (offline/POS) credit card refund') |h %></A>
-% } 
-
-    </TD>
-    <TD ALIGN="right" VALIGN="top">
-
-%# invoice reports, combined statement
-% if ( $curuser->access_right('List invoices') ) { 
-%   if ( $num_cust_bill > 0 ) {
-  <A HREF="<% $p %>view/cust_main_statement-pdf.cgi?<% $custnum %>"><%
-  mt('Download typeset statement PDF') |h %></A>
-  <BR>
-%   }
-  <A HREF="<% $p %>search/report_cust_bill.html?custnum=<% $custnum %>"><% mt('Invoice reports') |h %></A>
-% } 
-<BR>
-
-%# XXX payments, credits, refund reports
-
-%# tax exemption link
-
-% my $view_exemptions = $curuser->access_right('View customer tax exemptions');
-% my $add_adjustment = ( $conf->exists('enable_tax_adjustments')
-%                       && $curuser->access_right('Add customer tax adjustment')
-%                      );
-% if ( $view_exemptions || $add_adjustment ) {
-
-%   if ( $view_exemptions ) {
-      <A HREF="<% $p %>search/cust_tax_exempt_pkg.cgi?custnum=<% $custnum %>"><% mt('View tax exemptions') |h %></A>
-      <% $add_adjustment ? '|' : '' %>
-%   } 
-
-%   if ( $add_adjustment ) {
-      <& /elements/popup_link.html, {
-           'action' => $p.'edit/cust_tax_adjustment.html?custnum='. $cust_main->custnum,
-           'label'  => emt('Add tax adjustment'),
-           'actionlabel' => emt('Add tax adjustment'),
-           'height' => 200,
-         }
-      &>
-      |
-      <A HREF="<% $p %>search/cust_tax_adjustment.html?custnum=<% $custnum %>"><% mt('View tax adjustments') |h %></A>
-%   } 
-
-  <BR>
-% }
-
 %# batched payment links
 
 % if ( ( $conf->exists('batch-enable') || $conf->config('batch-enable_payby') )
 %# batched payment links
 
 % if ( ( $conf->exists('batch-enable') || $conf->config('batch-enable_payby') )
     <BR>
 % } 
 
     <BR>
 % } 
 
-%# pending payment links
-
-% if ( $curuser->access_right('View customer pending payments')
-%      && scalar($cust_main->cust_pay_pending)
-%    )
-% {
-    <A HREF="<% $p %>search/cust_pay_pending.html?magic=_date;statusNOT=done;custnum=<% $custnum %>"><% mt('View pending payments') |h %></A><BR>
-% }
-
     </TD>
   </TR>
   <TR>
     </TD>
   </TR>
   <TR>
 %   my $bgcolor2 = '#ffffff';
 %   my $bgcolor = '';
 
 %   my $bgcolor2 = '#ffffff';
 %   my $bgcolor = '';
 
+<THEAD>
 <TR>
   <TH CLASS="grid" BGCOLOR="#cccccc"><% mt('Date') |h %></TH>
   <TH CLASS="grid" BGCOLOR="#cccccc"><% mt('Description') |h %></TH>
 <TR>
   <TH CLASS="grid" BGCOLOR="#cccccc"><% mt('Date') |h %></TH>
   <TH CLASS="grid" BGCOLOR="#cccccc"><% mt('Description') |h %></TH>
   <TH CLASS="grid" BGCOLOR="#cccccc"><FONT SIZE=-1><% mt('Refund') |h %></FONT></TH>
   <TH CLASS="grid" BGCOLOR="#cccccc"><FONT SIZE=-1><% mt('Balance') |h %></FONT></TH>
 </TR>
   <TH CLASS="grid" BGCOLOR="#cccccc"><FONT SIZE=-1><% mt('Refund') |h %></FONT></TH>
   <TH CLASS="grid" BGCOLOR="#cccccc"><FONT SIZE=-1><% mt('Balance') |h %></FONT></TH>
 </TR>
+</THEAD>
 
 %#display payment history
 
 
 %#display payment history
 
@@ -402,7 +217,7 @@ my %opt = (
         qw( card_refund-days date_format )
   ),
   ( map { $_ => $conf->exists($_) } 
         qw( card_refund-days date_format )
   ),
   ( map { $_ => $conf->exists($_) } 
-        qw( deleteinvoices deletepayments deleterefunds pkg-balances
+        qw( deletepayments deleterefunds pkg-balances
             cust_credit_bill_pkg-manual cust_bill_pay_pkg-manual
           )
   ),
             cust_credit_bill_pkg-manual cust_bill_pay_pkg-manual
           )
   ),
@@ -411,11 +226,12 @@ my %opt = (
   #rights
   ( map { $_ => $curuser->access_right($_) }
       (
   #rights
   ( map { $_ => $curuser->access_right($_) }
       (
-        'View invoices', 'Void invoices', 'Unvoid invoices', 'Delete invoices',
+        'View invoices', 'Void invoices', 'Unvoid invoices',
         'Apply payment', 'Refund credit card payment', 'Refund Echeck payment',
         'Apply payment', 'Refund credit card payment', 'Refund Echeck payment',
+        'Post refund', 'Post check refund', 'Post cash refund ', 'Refund payment',
         'Credit card void', 'Echeck void', 'Void payments', 'Unvoid payments',
         'Delete payment', 'Unapply payment',
         'Credit card void', 'Echeck void', 'Void payments', 'Unvoid payments',
         'Delete payment', 'Unapply payment',
-        'Apply credit', 'Delete Credit', 'Unapply credit',
+        'Apply credit', 'Unapply credit', 'Void credit', 'Unvoid credit',
         'Delete refund',
         'Billing event reports', 'View customer billing events',
       )
         'Delete refund',
         'Billing event reports', 'View customer billing events',
       )
@@ -432,6 +248,8 @@ $opt{'date_format'} ||= '%m/%d/%Y';
 foreach my $legacy_cust_bill ($cust_main->legacy_cust_bill) {
   push @history, {
     'date'   => $legacy_cust_bill->_date,
 foreach my $legacy_cust_bill ($cust_main->legacy_cust_bill) {
   push @history, {
     'date'   => $legacy_cust_bill->_date,
+    'order'  => 1,
+    'num'    => $legacy_cust_bill->legacyid,
     'desc'   => include('payment_history/legacy_invoice.html', $legacy_cust_bill, %opt ),
     'charge_nobal' => $legacy_cust_bill->charged,
   };
     'desc'   => include('payment_history/legacy_invoice.html', $legacy_cust_bill, %opt ),
     'charge_nobal' => $legacy_cust_bill->charged,
   };
@@ -442,6 +260,8 @@ my $num_cust_bill = 0;
 foreach my $cust_bill ($cust_main->cust_bill) {
   push @history, {
     'date'   => $cust_bill->_date,
 foreach my $cust_bill ($cust_main->cust_bill) {
   push @history, {
     'date'   => $cust_bill->_date,
+    'order'  => 1,
+    'num'    => $cust_bill->invnum,
     'desc'   => include('payment_history/invoice.html', $cust_bill, %opt ),
     'charge' => $cust_bill->charged,
   };
     'desc'   => include('payment_history/invoice.html', $cust_bill, %opt ),
     'charge' => $cust_bill->charged,
   };
@@ -452,6 +272,8 @@ foreach my $cust_bill ($cust_main->cust_bill) {
 foreach my $cust_bill_void ($cust_main->cust_bill_void) {
   push @history, {
     'date'        => $cust_bill_void->_date,
 foreach my $cust_bill_void ($cust_main->cust_bill_void) {
   push @history, {
     'date'        => $cust_bill_void->_date,
+    'order'       => 0,
+    'num'         => $cust_bill_void->invnum,
     'desc'        => include('payment_history/voided_invoice.html', $cust_bill_void, %opt ),
     'void_charge' => $cust_bill_void->charged,
   };
     'desc'        => include('payment_history/voided_invoice.html', $cust_bill_void, %opt ),
     'void_charge' => $cust_bill_void->charged,
   };
@@ -461,6 +283,8 @@ foreach my $cust_bill_void ($cust_main->cust_bill_void) {
 foreach my $cust_statement ($cust_main->cust_statement) {
   push @history, {
     'date'   => $cust_statement->_date,
 foreach my $cust_statement ($cust_main->cust_statement) {
   push @history, {
     'date'   => $cust_statement->_date,
+    'order'  => 2,
+    'num'    => $cust_statement->statementnum,
     'desc'   => include('payment_history/statement.html', $cust_statement, %opt ),
     #'charge' => $cust_bill->charged,
   };
     'desc'   => include('payment_history/statement.html', $cust_statement, %opt ),
     #'charge' => $cust_bill->charged,
   };
@@ -470,6 +294,8 @@ foreach my $cust_statement ($cust_main->cust_statement) {
 foreach my $cust_pay ($cust_main->cust_pay) {
   push @history, {
     'date'    => $cust_pay->_date,
 foreach my $cust_pay ($cust_main->cust_pay) {
   push @history, {
     'date'    => $cust_pay->_date,
+    'order'   => 6,
+    'num'     => $cust_pay->paynum,
     'desc'    => include('payment_history/payment.html', $cust_pay, %opt ),
     'payment' => $cust_pay->paid,
     #'target'  => $target, #XXX
     'desc'    => include('payment_history/payment.html', $cust_pay, %opt ),
     'payment' => $cust_pay->paid,
     #'target'  => $target, #XXX
@@ -480,6 +306,8 @@ foreach my $cust_pay ($cust_main->cust_pay) {
 foreach my $cust_pay_pending ($cust_main->cust_pay_pending) {
   push @history, {
     'date'    => $cust_pay_pending->_date,
 foreach my $cust_pay_pending ($cust_main->cust_pay_pending) {
   push @history, {
     'date'    => $cust_pay_pending->_date,
+    'order'   => 4,
+    'num'     => $cust_pay_pending->paypendingnum,
     'desc'    => include('payment_history/pending_payment.html', $cust_pay_pending, %opt ),
     'void_payment' => $cust_pay_pending->paid, 
   };
     'desc'    => include('payment_history/pending_payment.html', $cust_pay_pending, %opt ),
     'void_payment' => $cust_pay_pending->paid, 
   };
@@ -490,6 +318,8 @@ foreach my $cust_pay_pending ($cust_main->cust_pay_pending) {
 foreach my $cust_pay_void ($cust_main->cust_pay_void) {
   push @history, {
     'date'   => $cust_pay_void->_date,
 foreach my $cust_pay_void ($cust_main->cust_pay_void) {
   push @history, {
     'date'   => $cust_pay_void->_date,
+    'order'  => 3,
+    'num'    => $cust_pay_void->paynum,
     'desc'   => include('payment_history/voided_payment.html', $cust_pay_void, %opt ),
     'void_payment' => $cust_pay_void->paid,
   };
     'desc'   => include('payment_history/voided_payment.html', $cust_pay_void, %opt ),
     'void_payment' => $cust_pay_void->paid,
   };
@@ -500,6 +330,8 @@ foreach my $cust_pay_void ($cust_main->cust_pay_void) {
 foreach my $cust_credit_void ($cust_main->cust_credit_void) {
   push @history, {
     'date'        => $cust_credit_void->_date,
 foreach my $cust_credit_void ($cust_main->cust_credit_void) {
   push @history, {
     'date'        => $cust_credit_void->_date,
+    'order'       => 7,
+    'num'         => $cust_credit_void->paynum,
     'desc'        => include('payment_history/voided_credit.html', $cust_credit_void, %opt ),
     'void_credit' => $cust_credit_void->amount,
   };
     'desc'        => include('payment_history/voided_credit.html', $cust_credit_void, %opt ),
     'void_credit' => $cust_credit_void->amount,
   };
@@ -509,6 +341,8 @@ foreach my $cust_credit_void ($cust_main->cust_credit_void) {
 foreach my $cust_pay_pending ($cust_main->cust_pay_pending_attempt) {
   push @history, {
     'date'    => $cust_pay_pending->_date,
 foreach my $cust_pay_pending ($cust_main->cust_pay_pending_attempt) {
   push @history, {
     'date'    => $cust_pay_pending->_date,
+    'order'   => 5,
+    'num'     => $cust_pay_pending->paypendingnum,
     'desc'    => include('payment_history/attempted_payment.html', $cust_pay_pending, %opt ),
     'void_payment' => $cust_pay_pending->paid, #??
     #'target'  => $target, #XXX
     'desc'    => include('payment_history/attempted_payment.html', $cust_pay_pending, %opt ),
     'void_payment' => $cust_pay_pending->paid, #??
     #'target'  => $target, #XXX
@@ -521,6 +355,8 @@ foreach my $cust_pay_batch (
   my $pay_batch = $cust_pay_batch->pay_batch;
   push @history, {
     'date'    => $pay_batch->upload,
   my $pay_batch = $cust_pay_batch->pay_batch;
   push @history, {
     'date'    => $pay_batch->upload,
+    'order'   => 5,
+    'num'     => $cust_pay_batch->paybatchnum,
     'desc'    => include('payment_history/attempted_batch_payment.html', $cust_pay_batch, %opt),
     'void_payment' => $cust_pay_batch->amount,
   };
     'desc'    => include('payment_history/attempted_batch_payment.html', $cust_pay_batch, %opt),
     'void_payment' => $cust_pay_batch->amount,
   };
@@ -530,6 +366,8 @@ foreach my $cust_pay_batch (
 foreach my $cust_credit ($cust_main->cust_credit) {
   push @history, {
     'date'   => $cust_credit->_date,
 foreach my $cust_credit ($cust_main->cust_credit) {
   push @history, {
     'date'   => $cust_credit->_date,
+    'order'  => 8,
+    'num'    => $cust_credit->crednum,
     'desc'   => include('payment_history/credit.html', $cust_credit, %opt ),
     'credit' => $cust_credit->amount,
   };
     'desc'   => include('payment_history/credit.html', $cust_credit, %opt ),
     'credit' => $cust_credit->amount,
   };
@@ -540,6 +378,8 @@ foreach my $cust_credit ($cust_main->cust_credit) {
 foreach my $cust_refund ($cust_main->cust_refund) {
   push @history, {
     'date'   => $cust_refund->_date,
 foreach my $cust_refund ($cust_main->cust_refund) {
   push @history, {
     'date'   => $cust_refund->_date,
+    'order'  => 9,
+    'num'    => $cust_refund->refundnum,
     'desc'   => include('payment_history/refund.html', $cust_refund, %opt),
     'refund' => $cust_refund->refund,
   };
     'desc'   => include('payment_history/refund.html', $cust_refund, %opt),
     'refund' => $cust_refund->refund,
   };
@@ -551,7 +391,12 @@ my $years =  $conf->config('payment_history-years') || 2;
 my $older_than = time - $years * 31556926; #60*60*24*365.2422
 my $balance = 0;
 
 my $older_than = time - $years * 31556926; #60*60*24*365.2422
 my $balance = 0;
 
-@history = sort { $a->{date} <=> $b->{date} } @history;
+@history = sort {    $a->{date}  <=> $b->{date}
+                  or $a->{order} <=> $b->{order}
+                  or $a->{num}   <=> $b->{num}
+                }
+             @history;
+
 my $i = 0;
 my $balance_forward;
 foreach my $item (@history) {
 my $i = 0;
 my $balance_forward;
 foreach my $item (@history) {
@@ -578,7 +423,11 @@ if ( @history and $history[-1]->{'hide'} ) {
 
 # then sort in user-pref order
 if ( $curuser->option('history_order') eq 'newest' ) {
 
 # then sort in user-pref order
 if ( $curuser->option('history_order') eq 'newest' ) {
-  @history = sort { $b->{date} <=> $a->{date} } @history;
+  @history = sort {    $b->{date}  <=> $a->{date}
+                    or $b->{order} <=> $a->{order} #or still forward here?
+                    or $b->{num}   <=> $a->{num}
+                  }
+               @history;
 } # else it's already oldest-first, and there are no other options yet
 
 sub translate_payby {
 } # else it's already oldest-first, and there are no other options yet
 
 sub translate_payby {
@@ -616,13 +465,18 @@ sub translate_payinfo {
     my $payby = $object->payby;
     my $payinfo = $object->payinfo;
 
     my $payby = $object->payby;
     my $payinfo = $object->payinfo;
 
-    my $conf = new FS::Conf;
-
     if ( $payby eq 'CARD' ) {
         $payinfo = $object->paymask;
     } elsif ( $payby eq 'CHEK' ) {
     if ( $payby eq 'CARD' ) {
         $payinfo = $object->paymask;
     } elsif ( $payby eq 'CHEK' ) {
+        #false laziness w/payinfo_Mixin::payby_payinfo_pretty, should use that
         my( $account, $aba ) = split('@', $object->paymask );
         my( $account, $aba ) = split('@', $object->paymask );
-        $payinfo = emt("ABA [_1], Acct #[_2]",$aba,$account);
+        if ( $aba =~ /^(\d{5})\.(\d{3})$/ ) { #blame canada
+          my($branch, $routing) = ($1, $2);
+          $payinfo = emt("Routing [_1], Branch [_2], Acct [_3]",
+                         $routing, $branch, $account);
+        } else {
+          $payinfo = emt("Routing [_1], Acct [_2]", $aba, $account);
+        }
     }
 
     ($payby,$payinfo);
     }
 
     ($payby,$payinfo);