From 01dbdf631092f7a56182d1cce6dde68de4e2516b Mon Sep 17 00:00:00 2001 From: mark Date: Tue, 4 May 2010 22:25:45 +0000 Subject: [PATCH] RT#8026: WIP CDR format --- FS/FS/cdr.pm | 5 ++++- FS/FS/cdr/wip.pm | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 FS/FS/cdr/wip.pm diff --git a/FS/FS/cdr.pm b/FS/FS/cdr.pm index 36797b717..2426f4191 100644 --- a/FS/FS/cdr.pm +++ b/FS/FS/cdr.pm @@ -746,7 +746,10 @@ sub _cdr_date_parse { ($mon, $day, $year, $hour, $min, $sec) = ( $1, $2, $3, $4, $5, $6 ); } elsif ( $date =~ /^\s*(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d+\.\d+)(\D|$)/ ) { # broadsoft: 20081223201938.314 - ($year, $mon, $day, $hour, $min, $sec) = ( $1, $2, $3, $4, $5, $6); + ($year, $mon, $day, $hour, $min, $sec) = ( $1, $2, $3, $4, $5, $6 ); + } elsif ( $date =~ /^\s*(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})$/ ) { + # WIP: 20100329121420 + ($year, $mon, $day, $hour, $min, $sec) = ( $1, $2, $3, $4, $5, $6 ); } else { die "unparsable date: $date"; #maybe we shouldn't die... } diff --git a/FS/FS/cdr/wip.pm b/FS/FS/cdr/wip.pm new file mode 100644 index 000000000..070e25343 --- /dev/null +++ b/FS/FS/cdr/wip.pm @@ -0,0 +1,49 @@ +package FS::cdr::wip; + +use strict; +use vars qw( @ISA %info ); +use FS::cdr qw(_cdr_date_parser_maker); + +@ISA = qw(FS::cdr); + +%info = ( + 'name' => 'WIP', + 'weight' => 100, + 'header' => 1, + 'type' => 'csv', + 'sep_char' => ':', + 'import_fields' => [ +# All of these are based on the January 2010 version of the spec, +# except that we assume that before all the fields mentioned in the +# spec, there's a counter field. + skip(4), # counter, id, APCSJursID, RecordType + 'unique_id', # CDRID + skip(1), # AccountNumber; empty + 'charged_party', # ServiceNumber + skip(1), # ServiceNumberType + 'src', # PointOrigin + 'dst', # PointTarget + 'calltypenum', # Jurisdiction: need to remap + _cdr_date_parser_maker('startdate'), #TransactionDate + skip(3), # BillClass, TypeIDUsage, ElementID + 'duration', # PrimaryUnits + skip(6), # CompletionStatus, Latitude, Longitude, + # OriginDescription, TargetDescription, RatePeriod + 'billsec', # RatedUnits; seems to always be equal to PrimaryUnits + skip(6), #SecondsUnits, ThirdUnits, FileID, OriginalExtractSequenceNumber, + #RateClass, #ProviderClass + skip(8), #ProviderID, CurrencyCode, EquipmentTypeCode, ClassOfServiceCode, + #RateUnitsType, DistanceBandID, ZoneClass, CDRStatus + 'upstream_price', # ISPBuy + skip(2), # EUBuy, CDRFromCarrier + ], +# Need clarification on: +# Values for RecordType, Jurisdiction, CompletionStatus, and ProviderClass +# Do we care about the following: +# AccountNumber, ServiceNumberType, CDRStatus + +); + +sub skip { map {''} (1..$_[0]) } + +1; -- 2.11.0