RT#37064: Add action link to manually refund a payment
[freeside.git] / httemplate / view / cust_main / payment_history.html
index 204647f..1cd8386 100644 (file)
   <A HREF="<% $p %>edit/cust_pay.cgi?payby=MCRD;custnum=<% $custnum %>"><% mt('Post manual (offline/POS) credit card payment') |h %></A>
 % } 
 
+% if ( $payby{'MCRD'} && $curuser->access_right('Post payment') ) { 
+  <% $s++ ? ' | ' : '' %>
+  <A HREF="<% $p %>edit/cust_pay.cgi?payby=MCHK;custnum=<% $custnum %>"><% mt('Post manual (offline) electronic check payment') |h %></A>
+% } 
+
 <% $s ? '<BR>' : '' %>
 
 %# credit links
   <A HREF="<% $p %>edit/cust_refund.cgi?payby=MCRD;custnum=<% $custnum %>"><% mt('Post manual (offline/POS) credit card refund') |h %></A>
 % } 
 
+% if ( $payby{'MCHK'} && $curuser->access_right('Post refund') ) { 
+  <% $s++ ? ' | ' : '' %>
+  <A HREF="<% $p %>edit/cust_refund.cgi?payby=MCRD;custnum=<% $custnum %>"><% mt('Post manual (offline) electronic check 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>
+%   if ( $curuser->access_right('Resend invoices')
+%          && $cust_main->invoicing_list_emailonly ) {
+
+  <A HREF="<% $p %>misc/email-customer-statement.html?table=cust_main;agent_virt_agentnum=<% $cust_main->agentnum %>;custnum=<% $custnum %>"><% mt('Email statement to this customer') |h %></A>
   <BR>
+
+%   }
+%   if ( $num_cust_bill > 0
+%          && $curuser->access_right('View legacy typeset statements')
+%   ) {
+      <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>
 % } 
@@ -413,9 +432,10 @@ my %opt = (
       (
         'View invoices', 'Void invoices', 'Unvoid invoices', 'Delete invoices',
         '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',
-        'Apply credit', 'Delete Credit', 'Unapply credit',
+        'Apply credit', 'Delete credit', 'Unapply credit', 'Void credit', 'Unvoid credit',
         'Delete refund',
         'Billing event reports', 'View customer billing events',
       )
@@ -432,6 +452,8 @@ $opt{'date_format'} ||= '%m/%d/%Y';
 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,
   };
@@ -442,6 +464,8 @@ my $num_cust_bill = 0;
 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,
   };
@@ -452,6 +476,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,
+    'order'       => 0,
+    'num'         => $cust_bill_void->invnum,
     'desc'        => include('payment_history/voided_invoice.html', $cust_bill_void, %opt ),
     'void_charge' => $cust_bill_void->charged,
   };
@@ -461,6 +487,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,
+    'order'  => 2,
+    'num'    => $cust_statement->statementnum,
     'desc'   => include('payment_history/statement.html', $cust_statement, %opt ),
     #'charge' => $cust_bill->charged,
   };
@@ -470,6 +498,8 @@ foreach my $cust_statement ($cust_main->cust_statement) {
 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
@@ -480,6 +510,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,
+    'order'   => 4,
+    'num'     => $cust_pay_pending->paypendingnum,
     'desc'    => include('payment_history/pending_payment.html', $cust_pay_pending, %opt ),
     'void_payment' => $cust_pay_pending->paid, 
   };
@@ -490,6 +522,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,
+    'order'  => 3,
+    'num'    => $cust_pay_void->paynum,
     'desc'   => include('payment_history/voided_payment.html', $cust_pay_void, %opt ),
     'void_payment' => $cust_pay_void->paid,
   };
@@ -500,6 +534,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,
+    'order'       => 7,
+    'num'         => $cust_credit_void->paynum,
     'desc'        => include('payment_history/voided_credit.html', $cust_credit_void, %opt ),
     'void_credit' => $cust_credit_void->amount,
   };
@@ -509,6 +545,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,
+    '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
@@ -521,6 +559,8 @@ foreach my $cust_pay_batch (
   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,
   };
@@ -530,6 +570,8 @@ foreach my $cust_pay_batch (
 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,
   };
@@ -540,6 +582,8 @@ foreach my $cust_credit ($cust_main->cust_credit) {
 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,
   };
@@ -551,7 +595,12 @@ my $years =  $conf->config('payment_history-years') || 2;
 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) {
@@ -578,7 +627,11 @@ if ( @history and $history[-1]->{'hide'} ) {
 
 # 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 {
@@ -616,13 +669,18 @@ sub translate_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' ) {
+        #false laziness w/payinfo_Mixin::payby_payinfo_pretty, should use that
         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);