Merge branch 'master' of git.freeside.biz:/home/git/freeside
[freeside.git] / httemplate / view / cust_main / payment_history / payment.html
index e745864..6402383 100644 (file)
@@ -1,38 +1,19 @@
-<% $pre %>Payment<% $post %> by <% $otaker %>
-<% "$info$desc$view$apply$refund$void$delete$unapply" %>
+<% $payment. ' '.  $info. $desc.
+   $view. $email. $change_pkg. $apply. $refund. $void. $unapply
+%>
 <%init>
 
 my( $cust_pay, %opt ) = @_;
 
 my $date_format = $opt{'date_format'} || '%m/%d/%Y';
 
-my $conf = new FS::Conf;
-my $curuser = $FS::CurrentUser::CurrentUser;
-
-my $payby = $cust_pay->payby;
-
-my $payinfo;
-if ( $payby eq 'CARD' ) {
-  $payinfo = $cust_pay->paymask;
-} elsif ( $payby eq 'CHEK' ) {
-  my( $account, $aba ) = split('@', $cust_pay->paymask );
-  $payinfo = "ABA $aba, Acct #$account";
-} else {
-  $payinfo = $cust_pay->payinfo;
-}
 my @cust_bill_pay = $cust_pay->cust_bill_pay;
 my @cust_pay_refund = $cust_pay->cust_pay_refund;
+my $unapplied = $cust_pay->unapplied;
 
+my ($payby,$payinfo) = translate_payinfo($cust_pay);
 my $target = "$payby$payinfo";
-$payby =~ s/^BILL$/Check #/ if $payinfo;
-$payby =~ s/^CHEK$/Electronic check /;
-$payby =~ s/^PREP$/Prepaid card /;
-$payby =~ s/^CARD$/Credit card #/; 
-$payby =~ s/^COMP$/Complimentary by /; 
-$payby =~ s/^CASH$/Cash/;
-$payby =~ s/^WEST$/Western Union/;
-$payby =~ s/^MCRD$/Manual credit card/;
-$payby =~ s/^BILL$//;
+$payby = translate_payby($payby,$payinfo);
 my $info = $payby ? "($payby$payinfo)" : '';
 
 my $desc = '';
@@ -43,186 +24,194 @@ if ( $opt{'pkg-balances'} && $cust_pay->pkgnum ) {
 
 my %cust_bill_pay_width = ('width' => 392);
 my %cust_bill_pay_height = ();
-if ($conf->exists('cust_bill_pay_pkg-manual')) {
+if ( $opt{'cust_bill_pay_pkg-manual'} ) {
   %cust_bill_pay_width = ('width' => 592);
   %cust_bill_pay_height = ('height' => 436);
 }
 
-my( $pre, $post, $apply, $ext ) = ( '', '', '', '' );
+my $apply = '';
+
+my $italicize_otaker = 0;
+my $otaker = $cust_pay->otaker;
+if ( $otaker eq 'fs_daily' ) {
+    $otaker = 'auto billing';
+    $italicize_otaker = 1;
+}
+if ( $otaker eq 'fs_selfservice' ) {
+    $otaker = 'customer self-service';
+    $italicize_otaker = 1;
+}
+
+my $payment = emt("Payment by [_1]",$otaker);
+$payment =~ s/$otaker/<i>$otaker<\/i>/ if $italicize_otaker;
+
 if (    scalar(@cust_bill_pay)   == 0
      && scalar(@cust_pay_refund) == 0 ) {
   #completely unapplied
-  $pre = '<B><FONT COLOR="#FF0000">Unapplied ';
-  $post = '</FONT></B>';
-  if ( $curuser->access_right('Apply payment') ) {
-    if ( $cust_pay->cust_main->total_owed > 0 ) {
-      $apply = ' ('.
-               include( '/elements/popup_link.html',
-                          'label'       => 'apply',
-                          'action'      => "${p}edit/cust_bill_pay.cgi?".
-                                           $cust_pay->paynum,
-                          'actionlabel' => 'Apply payment',
-                          %cust_bill_pay_width,
-                          %cust_bill_pay_height,
-                      ).
-                ')';
-    }
-    if ( $cust_pay->cust_main->total_unapplied_refunds > 0 ) {
-      $apply.= ' ('.
-               include( '/elements/popup_link.html',
-                          'label'       => 'apply to refund',
-                          'action'      => "${p}edit/cust_pay_refund.cgi?".
-                                           $cust_pay->paynum,
-                          'actionlabel' => 'Apply payment to refund',
-                          'width'       => 392,
-                          #default# 'height' => 336,
-                      ).
-               ')';
-    }
-  }
+  $payment = emt("Unapplied Payment by [_1]",$otaker);
+  $payment =~ s/$otaker/<i>$otaker<\/i>/ if $italicize_otaker;
+  $payment = '<B><FONT COLOR="#FF0000">'.$payment.'</FONT></B>';
 } elsif (    scalar(@cust_bill_pay)   == 1
           && scalar(@cust_pay_refund) == 0
-          && $cust_pay->unapplied == 0     ) {
+          && $unapplied == 0     ) {
   #applied to one invoice, the usual situation
   $desc .= ' '. $cust_bill_pay[0]->applied_to_invoice;
 } elsif (    scalar(@cust_bill_pay)   == 0
           && scalar(@cust_pay_refund) == 1
-          && $cust_pay->unapplied == 0     ) {
+          && $unapplied == 0     ) {
   #applied to one refund
-  $desc .= ' refunded on '. time2str($date_format, $cust_pay_refund[0]->_date);
+  $desc .= emt(" refunded on [_1]", time2str($date_format, $cust_pay_refund[0]->_date) );
 } else {
   #complicated
   $desc .= '<BR>';
   foreach my $app ( sort { $a->_date <=> $b->_date }
                          ( @cust_bill_pay, @cust_pay_refund ) ) {
     if ( $app->isa('FS::cust_bill_pay') ) {
-      $desc .= '&nbsp;&nbsp;'.
-               '$'. $app->amount.
-               ' '. $app->applied_to_invoice.
-               '<BR>';
-               #' on '. time2str($date_format, $cust_bill_pay->_date).
+      $desc .= '&nbsp;&nbsp;' . $opt{money_char} . $app->amount . ' ' .
+                $app->applied_to_invoice . '<BR>';
     } elsif ( $app->isa('FS::cust_pay_refund') ) {
-      $desc .= '&nbsp;&nbsp;'.
-               '$'. $app->amount.
-               ' refunded on '. time2str($date_format, $app->_date).
-               '<BR>';
+      $desc .= '&nbsp;&nbsp;' .
+               emt("[_1][_2] refunded on [_3]", $opt{money_char}, $app->amount,
+                        time2str($date_format, $app->_date) ) . '<BR>';
     } else {
       die "$app is not a FS::cust_bill_pay or FS::cust_pay_refund";
     }
   }
-  if ( $cust_pay->unapplied > 0 ) {
+  if ( $unapplied > 0 ) {
     $desc .= '&nbsp;&nbsp;'.
-             '<B><FONT COLOR="#FF0000">$'.
-             $cust_pay->unapplied. ' unapplied</FONT></B>';
-    if ( $curuser->access_right('Apply payment') ) {
-      if ( $cust_pay->cust_main->total_owed > 0 ) {
-        $apply = ' ('.
-                 include( '/elements/popup_link.html',
-                            'label'      => 'apply',
-                            'action'     => "${p}edit/cust_bill_pay.cgi?".
-                                            $cust_pay->paynum,
-                            'actionlabel' => 'Apply payment',
-                            %cust_bill_pay_width,
-                            %cust_bill_pay_height,
-                        ).
-                 ')';
-      }
-      if ( $cust_pay->cust_main->total_unapplied_refunds > 0 ) {
-        $apply.= ' ('.
-                 include( '/elements/popup_link.html',
-                            'label'      => 'apply to refund',
-                            'action'     => "${p}edit/cust_pay_refund.cgi?".
-                                            $cust_pay->paynum,
-                            'actionlabel' => 'Apply payment to refund',
-                            'width'      => 392,
-                            #default# 'height' => 336,
-                        ).
-                 ')';
-      }
-    }
+             '<B><FONT COLOR="#FF0000">'.
+             emt("[_1][_2] unapplied", $opt{money_char}, $unapplied).
+             '</FONT></B>';
     $desc .= '<BR>';
   }
 }
 
+if ($unapplied > 0) {
+  if ( $opt{'Apply payment'} ) {
+    if ( $opt{total_owed} > 0 ) {
+      $apply = ' ('.
+               include( '/elements/popup_link.html',
+                          'label'       => emt('apply'),
+                          'action'      => "${p}edit/cust_bill_pay.cgi?".
+                                           $cust_pay->paynum,
+                          'actionlabel' => emt('Apply payment'),
+                          %cust_bill_pay_width,
+                          %cust_bill_pay_height,
+                      ).
+                ')';
+    }
+    if ( $opt{total_unapplied_refunds} > 0 ) {
+      $apply.= ' ('.
+               include( '/elements/popup_link.html',
+                          'label'       => emt('apply refund'),
+                          'style'       => 'white-space: nowrap',
+                          'action'      => "${p}edit/cust_pay_refund.cgi?".
+                                           $cust_pay->paynum,
+                          'actionlabel' => emt('Apply payment to refund'),
+                          'width'       => 392,
+                      ).
+               ')';
+    }
+    $apply .= ' (auto&#8209;apply:&nbsp;'
+           .  ($cust_pay->no_auto_apply ? 'no' : 'yes')
+           .  '&nbsp;|&nbsp;'
+           .  include( '/elements/popup_link.html',
+                          'label'       => emt($cust_pay->no_auto_apply ? 'yes' : 'no'),
+                          'action'      => "${p}edit/process/cust_pay-no_auto_apply.cgi?paynum="
+                                           . $cust_pay->paynum
+                                           . '&no_auto_apply='
+                                           . ($cust_pay->no_auto_apply ? '' : 'Y'),
+                          'actionlabel' => emt('Toggle Auto-Apply'),
+                          'width'       => 392,
+                          'height'      => 200,
+                      )
+           . ')';
+  } else { # end if $opt('Apply payment')
+    $apply .= ' (no auto-apply)' if $cust_pay->no_auto_apply;
+  }
+} # end if $unapplied > 0
+
 my $view =
   ' ('. include('/elements/popup_link.html',
-                  'label'     => 'view receipt',
+                  'label'     => emt('view receipt'),
                   'action'    => "${p}view/cust_pay.html?link=popup;paynum=".
                                   $cust_pay->paynum,
-                  'actionlabel' => 'Payment Receipt',
+                  'actionlabel' => emt('Payment Receipt'),
+               ).
+   ')';
+
+my $email = $opt{'has_email_address'} ? 
+  q! (<A HREF="javascript:void(0)" ONCLICK="areyousure_popup('Send email receipt for payment to customer?','!.
+  "${p}view/cust_pay.html?link=email;paynum=".
+  $cust_pay->paynum.
+  q!','Email Payment Receipt')" TITLE="Send email receipt">email&nbsp;receipt</A>)!
+  : '';
+
+my $change_pkg = '';
+if ( $apply && $opt{'pkg-balances'} && $cust_pay->pkgnum ) {
+  $change_pkg =
+  ' ('. include('/elements/popup_link.html',
+                  'label'       => emt('change package'),
+                  'action'      => "${p}edit/cust_pay-pkgnum.html?paynum=".
+                                    $cust_pay->paynum,
+                  'actionlabel' => emt('Change payment package'),
+                  'width'       => 763,
                ).
    ')';
+}
 
 my $refund = '';
 my $refund_days = $opt{'card_refund-days'} || 120;
-my @rights = ('Refund payment');
-push @rights, 'Refund credit card payment' if $payby eq 'CARD';
-push @rights, 'Refund Echeck payment' if $payby eq 'CHEK';
+my @refund_right = grep { $opt{$_} } $FS::CurrentUser::CurrentUser->refund_rights($cust_pay->payby);
 if (    $cust_pay->closed !~ /^Y/i
-     && $cust_pay->payby =~ /^(CARD|CHEK)$/
+     && $cust_pay->payby =~ /^(CARD|CHEK|BILL)$/
      && time-$cust_pay->_date < $refund_days*86400
      && $cust_pay->unrefunded > 0
-     && $curuser->access_right(\@rights)
+     && scalar(@refund_right)
 ) {
+  my $refundtitle = ($cust_pay->payby =~ /^(CARD|CHEK)$/)
+           ? emt('Send a refund for this payment to the payment gateway')
+           : emt('Record a refund for this payment');
+
   $refund = qq! (<A HREF="${p}edit/cust_refund.cgi?payby=$1;!.
             qq!paynum=!. $cust_pay->paynum. '"'.
-            qq! TITLE="Send a refund for this payment to the payment gateway"!.
-            qq!>refund</A>)!;
+            qq! TITLE="! . $refundtitle
+            . '">' . emt('refund') . '</A>)';
 }
 
 my $void = '';
-if (    $cust_pay->closed !~ /^Y/i
-     && (    ( $cust_pay->payby eq 'CARD'
-               && $curuser->access_right('Credit card void')
-             )
-          || ( $cust_pay->payby eq 'CHEK'
-               && $curuser->access_right('Echeck void')
-             )
-          || ( $cust_pay->payby !~ /^(CARD|CHEK)$/
-               && $curuser->access_right('Regular void')
-             )
-        )
-   )
-{
-  $void = qq! (<A HREF="javascript:areyousure('!.
-          qq!${p}misc/void-cust_pay.cgi?!. $cust_pay->paynum.
-          qq!', 'Are you sure you want to void this payment?')"!.
-          qq! TITLE="Void this payment from the database!.
-            ( $cust_pay->payby =~ /^(CARD|CHEK)$/
-              ? ' (do not send anything to the payment gateway)'
-              : '' 
-            ). '"'.
-          qq!>void</A>)!;
-}
-
-my $delete = '';
-if ( $cust_pay->closed !~ /^Y/i
-     && $opt{'deletepayments'}
-     && $curuser->access_right('Delete payment')
-   )
-{
-  $delete = qq! (<A HREF="javascript:areyousure('!.
-            qq!${p}misc/delete-cust_pay.cgi?!. $cust_pay->paynum.
-            qq!', 'Are you sure you want to delete this payment?')"!.
-            qq! TITLE="Delete this payment from the database completely - not recommended"!.
-            qq!>delete</A>)!;
-}
+my $voidmsg = $cust_pay->payby =~ /^(CARD|CHEK)$/
+              ? ' (' . emt('do not send anything to the payment gateway').')'
+              : '';
+$void = ' ('.
+           include( '/elements/popup_link.html',
+                'label'    => emt('void'),
+                'action'   => "${p}misc/void-cust_pay.html?".$cust_pay->paynum,
+                'actionlabel' => emt('Void payment'),
+                'title'       => emt('Void this payment from the database').
+                                 $voidmsg,
+           ).
+         ')'
+  if $cust_pay->closed !~ /^Y/i
+  && (    ( $cust_pay->payby eq 'CARD'          && $opt{'Credit card void'} )
+       || ( $cust_pay->payby eq 'CHEK'          && $opt{'Echeck void'}      )
+       || ( $cust_pay->payby !~ /^(CARD|CHEK)$/ && $opt{'Void payments'}    )
+     );
 
 my $unapply = '';
-if (    $cust_pay->closed !~ /^Y/i
-     && scalar(@cust_bill_pay)           
-     && $curuser->access_right('Unapply payment')
-   )
-{
-  $unapply = qq! (<A HREF="javascript:areyousure('!.
-             qq!${p}misc/unapply-cust_pay.cgi?!. $cust_pay->paynum.
-             qq!', 'Are you sure you want to unapply this payment?')"!.
-             qq! TITLE="Keep this payment, but dissociate it from the invoices it is currently applied against"!.
-             qq!>unapply</A>)!;
+if ($opt{'Unapply payment'} && !$cust_pay->closed) {
+  $unapply = areyousure_link("${p}misc/unapply-cust_pay.cgi?".$cust_pay->paynum,
+                              emt('Are you sure you want to unapply this payment from invoices?'),
+                              emt('Keep this payment, but dissociate it from the invoices it is currently applied against'),
+                              emt('unapply')
+                            )
+    if @cust_bill_pay;
+  $unapply .= areyousure_link("${p}misc/unapply-cust_pay_refund.cgi?".$cust_pay->paynum,
+                               emt('Are you sure you want to unapply this payment from refunds?'),
+                               emt('Keep this payment, but dissociate it from the refunds it is currently applied to'),
+                               emt('unapply refunds')
+                             )
+    if $cust_pay->refund_to_unapply;
 }
 
-my $otaker = $cust_pay->otaker;
-$otaker = '<i>auto billing</i>'          if $otaker eq 'fs_daily';
-$otaker = '<i>customer self-service</i>' if $otaker eq 'fs_selfservice';
-
 </%init>