move account search (httemplate/search/svc_acct.cgi) to new template, cust-fields...
[freeside.git] / FS / FS / cust_pay.pm
index d901c78..0f872a4 100644 (file)
@@ -1,19 +1,22 @@
 package FS::cust_pay;
 
 use strict;
-use vars qw( @ISA $conf $unsuspendauto );
+use vars qw( @ISA $conf $unsuspendauto $ignore_noapply );
 use Date::Format;
 use Business::CreditCard;
 use Text::Template;
-use FS::Record qw( dbh qsearch qsearchs );
 use FS::Misc qw(send_email);
+use FS::Record qw( dbh qsearch qsearchs );
+use FS::cust_main_Mixin;
 use FS::cust_bill;
 use FS::cust_bill_pay;
 use FS::cust_pay_refund;
 use FS::cust_main;
 use FS::cust_pay_void;
 
-@ISA = qw( FS::Record );
+@ISA = qw( FS::cust_main_Mixin FS::Record );
+
+$ignore_noapply = 0;
 
 #ask FS::UID to run this stuff for us later
 FS::UID->install_callback( sub { 
@@ -79,6 +82,12 @@ Creates a new payment.  To add the payment to the databse, see L<"insert">.
 =cut
 
 sub table { 'cust_pay'; }
+sub cust_linked { $_[0]->cust_main_custnum; } 
+sub cust_unlinked_msg {
+  my $self = shift;
+  "WARNING: can't find cust_main.custnum ". $self->custnum.
+  ' (cust_pay.paynum '. $self->paynum. ')';
+}
 
 =item insert
 
@@ -134,8 +143,13 @@ sub insert {
     };
     $error = $cust_bill_pay->insert;
     if ( $error ) {
-      $dbh->rollback if $oldAutoCommit;
-      return "error inserting $cust_bill_pay: $error";
+      if ( $ignore_noapply ) {
+        warn "warning: error inserting $cust_bill_pay: $error ".
+             "(ignore_noapply flag set; inserting cust_pay record anyway)\n";
+      } else {
+        $dbh->rollback if $oldAutoCommit;
+        return "error inserting $cust_bill_pay: $error";
+      }
     }
   }
 
@@ -150,6 +164,8 @@ sub insert {
     }
   }
 
+  $dbh->commit or die $dbh->errstr if $oldAutoCommit;
+
   #false laziness w/ cust_credit::insert
   if ( $unsuspendauto && $old_balance && $cust_main->balance <= 0 ) {
     my @errors = $cust_main->unsuspend;
@@ -165,7 +181,7 @@ sub insert {
 
   #my $cust_main = $self->cust_main;
   if ( $conf->exists('payment_receipt_email')
-       && grep { $_ ne 'POST' } $cust_main->invoicing_list
+       && grep { $_ !~ /^(POST|FAX)$/ } $cust_main->invoicing_list
   ) {
 
     my $receipt_template = new Text::Template (
@@ -176,12 +192,13 @@ sub insert {
       return '';
     };
 
-    my @invoicing_list = grep { $_ ne 'POST' } $cust_main->invoicing_list;
+    my @invoicing_list = grep { $_ !~ /^(POST|FAX)$/ } $cust_main->invoicing_list;
 
     my $payby = $self->payby;
     my $payinfo = $self->payinfo;
     $payby =~ s/^BILL$/Check/ if $payinfo;
-    $payinfo = $self->payinfo_masked if $payby eq 'CARD';
+    $payinfo = $self->payinfo_masked if $payby eq 'CARD' || $payby eq 'CHEK';
+    $payby =~ s/^CHEK$/Electronic check/;
 
     my $error = send_email(
       'from'    => $conf->config('invoice_from'), #??? well as good as any
@@ -355,7 +372,7 @@ sub check {
 
   $self->_date(time) unless $self->_date;
 
-  $self->payby =~ /^(CARD|CHEK|LECB|BILL|COMP)$/ or return "Illegal payby";
+  $self->payby =~ /^(CARD|CHEK|LECB|BILL|COMP|PREP)$/ or return "Illegal payby";
   $self->payby($1);
 
   #false laziness with cust_refund::check
@@ -462,8 +479,16 @@ by 'x'es.  Useful for displaying credit cards.
 
 sub payinfo_masked {
   my $self = shift;
-  my $payinfo = $self->payinfo;
-  'x'x(length($payinfo)-4). substr($payinfo,(length($payinfo)-4));
+  #some false laziness w/cust_main::paymask
+  if ( $self->payby eq 'CARD' ) {
+    my $payinfo = $self->payinfo;
+    'x'x(length($payinfo)-4). substr($payinfo,(length($payinfo)-4));
+  } elsif ( $self->payby eq 'CHEK' ) {
+    my( $account, $aba ) = split('@', $self->payinfo );
+    'x'x(length($account)-2). substr($account,(length($account)-2)). "@". $aba;
+  } else {
+    $self->payinfo;
+  }
 }
 
 =back