Merge branch 'master' of git.freeside.biz:/home/git/freeside
authorMark Wells <mark@freeside.biz>
Sat, 14 May 2016 16:40:07 +0000 (09:40 -0700)
committerMark Wells <mark@freeside.biz>
Sat, 14 May 2016 16:40:07 +0000 (09:40 -0700)
FS/FS/API.pm
FS/FS/Record.pm
FS/FS/Schema.pm
FS/FS/cdr/conexiant.pm
FS/bin/freeside-cdr-conexiant-import
httemplate/search/cust_event.html

index 9d0ef25..6ca2b55 100644 (file)
@@ -66,6 +66,10 @@ Amount paid
 
 Option date for payment
 
+=item order_number
+
+Optional order number
+
 =back
 
 Example:
@@ -78,6 +82,7 @@ Example:
 
     #optional
     '_date'   => 1397977200, #UNIX timestamp
+    'order_number' => '12345',
   );
 
   if ( $result->{'error'} ) {
index a117b74..7f76d99 100644 (file)
@@ -2152,6 +2152,7 @@ sub batch_import {
   #my $job     = $param->{job};
   my $line;
   my $imported = 0;
+  my $unique_skip = 0; #lines skipped because they're already in the system
   my( $last, $min_sec ) = ( time, 5 ); #progressbar foo
   while (1) {
 
@@ -2254,6 +2255,7 @@ sub batch_import {
       }
       last if exists( $param->{skiprow} );
     }
+    $unique_skip++ if $param->{unique_skip}; #line is already in the system
     next if exists( $param->{skiprow} );
 
     if ( $preinsert_callback ) {
@@ -2299,7 +2301,8 @@ sub batch_import {
 
   unless ( $imported || $param->{empty_ok} ) {
     $dbh->rollback if $oldAutoCommit;
-    return "Empty file!";
+    # freeside-cdr-conexiant-import is sensitive to the text of this message
+    return $unique_skip ? "All records in file were previously imported" : "Empty file!";
   }
 
   $dbh->commit or die $dbh->errstr if $oldAutoCommit;
index 4f7dade..cdb0d28 100644 (file)
@@ -2463,7 +2463,7 @@ sub tables_hashref {
         'gatewaynum',      'int', 'NULL',      '', '', '', # payment_gateway FK
         'processor',   'varchar', 'NULL', $char_d, '', '', # module name
         'auth',        'varchar', 'NULL',      16, '', '', # CC auth number
-        'order_number','varchar', 'NULL', $char_d, '', '', # transaction number
+        'order_number','varchar', 'NULL', 256, '', '', # transaction number
       ],
       'primary_key'  => 'paynum',
       #i guess not now, with cust_pay_pending, if we actually make it here, we _do_ want to record it# 'unique' => [ [ 'payunique' ] ],
@@ -2517,7 +2517,7 @@ sub tables_hashref {
         'gatewaynum',      'int', 'NULL',      '', '', '', # payment_gateway FK
         'processor',   'varchar', 'NULL', $char_d, '', '', # module name
         'auth',        'varchar', 'NULL',      16, '', '', # CC auth number
-        'order_number','varchar', 'NULL', $char_d, '', '', # transaction number
+        'order_number','varchar', 'NULL', 256, '', '', # transaction number
 
         #void fields
         'void_date',  @date_type,                  '', '', 
index 852c2f6..4ee3f14 100644 (file)
@@ -15,9 +15,10 @@ use FS::cdr qw( _cdr_date_parser_maker _cdr_min_parser_maker );
     skip(3),               #LookupError,Direction,LegType
     sub {                  #CallId
       my($cdr,$value,$conf,$param) = @_;
+      #filter out already-imported cdrs here
       if (qsearchs('cdr',{'uniqueid' => $value})) {
         $param->{'skiprow'} = 1;
-        $param->{'empty_ok'} = 1;
+        $param->{'unique_skip'} = 1; #tell batch_import why we're skipping
       } else {
         $cdr->uniqueid($value);
       }
index a79477c..f2b4691 100755 (executable)
@@ -68,13 +68,11 @@ my $ua  = LWP::UserAgent->new;
 # Download files are created automatically at regular frequent intervals,
 # but they contain overlapping data.
 #
-# FS::cdr::conexiant automatically skips previously imported cdrs,
-# though if it does so for all records in a file, 
-# then batch_import thinks the file is empty
+# FS::cdr::conexiant automatically skips previously imported cdrs
 foreach my $file (@$files) {
   next unless $file->{'BilledCallsOnly'};
   my $cdrbatch = 'conexiant-' . $file->{'Identifier'};
-  # files that were "empty" will unfortunately be re-downloaded,
+  # files that contained no new records will unfortunately be re-downloaded,
   # but the alternative is to leave an excess of empty batches in system,
   # and re-downloading is harmless (all files expire after 48 hours anyway)
   if (qsearchs('cdr_batch',{ 'cdrbatch' => $cdrbatch })) {
@@ -113,6 +111,9 @@ foreach my $file (@$files) {
     'format'          => 'conexiant'
   });
   if ($error eq 'Empty file!') {
+    print "File contains no records\n" if $verbose;
+    $error = '';
+  } elsif ($error eq "All records in file were previously imported") {
     print "File contains no new cdrs, no batch created\n" if $verbose;
     $error = '';
   } elsif ($verbose && !$error) {
index 122bee0..b1ba909 100644 (file)
@@ -157,7 +157,7 @@ die "access denied"
               || $cgi->param('pkgnum')  =~ /^(\d+)$/
             );
 
-my @statuses = $cgi->multi_param('event_status');
+my @statuses = $cgi->param('event_status');
 my $title = 'Billing events';
 if ( $statuses[0] eq 'failed' and !defined($statuses[1]) ) {
   # tweak the title if we're showing only failed events
@@ -181,12 +181,16 @@ $search{'ending'}    = $ending;
 my $where = ' WHERE '. FS::cust_event->search_sql_where( \%search );
 
 my $join = FS::cust_event->join_sql() .
+  # warning: does not show the true service address for package events.
+  # the query to do that would be painfully slow.
   'LEFT JOIN cust_location bill_location '.
   'ON (cust_main.bill_locationnum = bill_location.locationnum) '.
   'LEFT JOIN cust_location ship_location '.
-  'ON (cust_main.ship_locationnum = ship_location.locationnum)';
-  # warning: does not show the true service address for package events.
-  # the query to do that would be painfully slow.
+  'ON (cust_main.ship_locationnum = ship_location.locationnum)'.
+  # include link to referral in case it's in cust-fields
+  #   (maybe we should be using FS::UI::Web::join_cust_main instead?)
+  'LEFT JOIN (select refnum, referral from part_referral) AS part_referral_x '.
+  'ON (cust_main.refnum = part_referral_x.refnum) ';
 
 my $sql_query = {
   'table'     => 'cust_event',