RT#14671: Usage for current day when billing outstanding usage (for cancelling custom...
[freeside.git] / FS / FS / cust_pay.pm
index aa5655d..c2e0955 100644 (file)
@@ -9,7 +9,7 @@ use vars qw( $DEBUG $me $conf @encrypted_fields
 use Date::Format;
 use Business::CreditCard;
 use Text::Template;
-use FS::UID qw( getotaker );
+use FS::UID qw( getotaker driver_name );
 use FS::Misc qw( send_email );
 use FS::Misc::DateTime qw( parse_datetime ); #for batch_import
 use FS::Record qw( dbh qsearch qsearchs );
@@ -707,7 +707,7 @@ sub send_receipt {
         'msgtype' => 'receipt',
       };
       $error = $queue->insert(
-        'from'    => $conf->config('invoice_from', $cust_main->agentnum),
+        'from'    => $conf->invoice_from_full( $cust_main->agentnum ),
                                    #invoice_from??? well as good as any
         'to'      => \@invoicing_list,
         'subject' => 'Payment receipt',
@@ -728,13 +728,22 @@ sub send_receipt {
        'custnum' => $cust_main->custnum,
     };
 
-    $error = $queue->insert(
+    my %opt = (
       'invnum'      => $cust_bill->invnum,
-      'template'    => 'statement',
-      'notice_name' => 'Statement',
       'no_coupon'   => 1,
     );
 
+    if ( my $mode = $conf->config('payment_receipt_statement_mode') ) {
+      $opt{'mode'} = $mode;
+    } else {
+      # backward compatibility, no good fix for this yet as some people may
+      # still have "invoice_latex_statement" and such options
+      $opt{'template'} = 'statement';
+      $opt{'notice_name'} = 'Statement';
+    }
+
+    $error = $queue->insert(%opt);
+
   }
   
   warn "send_receipt: $error\n" if $error;
@@ -1077,9 +1086,10 @@ sub process_upgrade_paybatch {
   ###
   # migrate batchnums from the misused 'paybatch' field to 'batchnum'
   ###
+  my $text = (driver_name =~ /^mysql/i) ? 'char' : 'text';
   my $search = FS::Cursor->new( {
     'table'     => 'cust_pay',
-    'addl_from' => ' JOIN pay_batch ON cust_pay.paybatch = CONCAT(pay_batch.batchnum) ',
+    'addl_from' => " JOIN pay_batch ON cust_pay.paybatch = CAST(pay_batch.batchnum AS $text) ",
   } );
   while (my $cust_pay = $search->fetch) {
     $cust_pay->set('batchnum' => $cust_pay->paybatch);
@@ -1182,7 +1192,7 @@ sub batch_import {
   my @fields;
   my $payby;
   if ( $format eq 'simple' ) {
-    @fields = qw( custnum agent_custid paid payinfo );
+    @fields = qw( custnum agent_custid paid payinfo invnum );
     $payby = 'BILL';
   } elsif ( $format eq 'extended' ) {
     die "unimplemented\n";
@@ -1267,9 +1277,20 @@ sub batch_import {
       $cust_pay{custnum} = $2;
     }
 
+    my $custnum = $cust_pay{custnum};
+
     my $cust_pay = new FS::cust_pay( \%cust_pay );
     my $error = $cust_pay->insert;
 
+    if ( ! $error && $cust_pay->custnum != $custnum ) {
+      #invnum was defined, and ->insert set custnum to the customer for that
+      #invoice, but it wasn't the one the import specified.
+      $dbh->rollback if $oldAutoCommit;
+      $error = "specified invoice #". $cust_pay{invnum}.
+               " is for custnum ". $cust_pay->custnum.
+               ", not specified custnum $custnum";
+    }
+
     if ( $error ) {
       $dbh->rollback if $oldAutoCommit;
       return "can't insert payment for $line: $error";