Option date for payment
+=item order_number
+
+Optional order number
+
=back
Example:
#optional
'_date' => 1397977200, #UNIX timestamp
+ 'order_number' => '12345',
);
if ( $result->{'error'} ) {
#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) {
}
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 ) {
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;
'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' ] ],
'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, '', '',
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);
}
# 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 })) {
'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) {
|| $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
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',