=cut
+my %export_names = (
+ 'convergent' => {},
+ 'simple' => { 'name' => 'Simple',
+ 'invoice_header' =>
+ "Date,Time,Name,Destination,Duration,Price",
+ },
+ 'simple2' => { 'name' => 'Simple with source',
+ 'invoice_header' =>
+ #"Date,Time,Name,Called From,Destination,Duration,Price",
+ "Date,Time,Called From,Destination,Duration,Price",
+ },
+);
+
my %export_formats = (
'convergent' => [
'carriername', #CARRIER
sub { shift->rated_price ? 'Y' : 'N' }, #RATED
'', #OTHER_INFO
],
+ 'simple' => [
+ sub { time2str('%D', shift->calldate_unix ) }, #DATE
+ sub { time2str('%r', shift->calldate_unix ) }, #TIME
+ 'userfield', #USER
+ 'dst', #NUMBER_DIALED
+ sub { sprintf('%.2fm', shift->billsec / 60 ) }, #DURATION
+ sub { sprintf('%.3f', shift->upstream_price ) }, #PRICE
+ ],
+ 'simple2' => [
+ sub { time2str('%D', shift->calldate_unix ) }, #DATE
+ sub { time2str('%r', shift->calldate_unix ) }, #TIME
+ #'userfield', #USER
+ 'dst', #NUMBER_DIALED
+ 'src', #called from
+ sub { sprintf('%.2fm', shift->billsec / 60 ) }, #DURATION
+ sub { sprintf('%.3f', shift->upstream_price ) }, #PRICE
+ ],
);
sub downstream_csv {
=over 4
+=item invoice_formats
+
+Returns an ordered list of key value pairs containing invoice format names
+as keys (for use with part_pkg::voip_cdr) and "pretty" format names as values.
+
+=cut
+
+sub invoice_formats {
+ map { ($_ => $export_names{$_}->{'name'}) }
+ grep { $export_names{$_}->{'invoice_header'} }
+ keys %export_names;
+}
+
+=item invoice_header FORMAT
+
+Returns a scalar containing the CSV column header for invoice format FORMAT.
+
+=cut
+
+sub invoice_header {
+ my $format = shift;
+ $export_names{$format}->{'invoice_header'};
+}
+
=item import_formats
Returns an ordered list of key value pairs containing import format names
sub import_formats {
(
- 'asterisk' => 'Asterisk',
- 'taqua' => 'Taqua',
- 'unitel' => 'Unitel/RSLCOM',
- 'simple' => 'Simple',
+ 'asterisk' => 'Asterisk',
+ 'taqua' => 'Taqua',
+ 'unitel' => 'Unitel/RSLCOM',
+ 'simple' => 'Simple',
);
}
);
my %import_header = (
- 'simple' => 1,
- 'taqua' => 1,
+ 'simple' => 1,
+ 'taqua' => 1,
);
=item batch_import HASHREF
local $FS::UID::AutoCommit = 0;
my $dbh = dbh;
- my $body = 0;
+ my $header_lines =
+ exists($import_header{$format}) ? $import_header{$format} : 0;
+
my $line;
while ( defined($line=<$fh>) ) {
- #skip header...
- if ( ! $body++ && $import_header{$format} ) { #&& $line =~ /^[\w, "]+$/ ) {
- next;
- }
+ next if $header_lines-- > 0; #&& $line =~ /^[\w, "]+$/
$csv->parse($line) or do {
$dbh->rollback if $oldAutoCommit;