X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fcdr.pm;h=b3cceb4aab5e4dc12471f59c2e598d3b75513dd8;hb=b0c05606c571c67e750ccd3c34c35d5e77345aba;hp=db9832a4b0a0bce5db3ca127023caf5cd39f6ba6;hpb=138fb1483c92e225e89ba4a0848f6cd556a39060;p=freeside.git diff --git a/FS/FS/cdr.pm b/FS/FS/cdr.pm index db9832a4b..b3cceb4aa 100644 --- a/FS/FS/cdr.pm +++ b/FS/FS/cdr.pm @@ -161,6 +161,8 @@ following fields are currently supported: =item cdrbatch +=item detailnum - Link to invoice detail (L) + =back =head1 METHODS @@ -214,6 +216,7 @@ sub table_info { #'upstream_rateplanid' => '', #'ratedetailnum' => '', 'rated_price' => 'Rated price', + 'rated_cost' => 'Rated cost', #'distance' => '', #'islocal' => '', #'calltypenum' => '', @@ -226,6 +229,7 @@ sub table_info { 'freesiderewritestatus' => 'Freeside rewrite status', 'cdrbatch' => 'Legacy batch', 'cdrbatchnum' => 'Batch', + 'detailnum' => 'Freeside invoice detail line', }, }; @@ -337,8 +341,12 @@ sub check { #check the foreign keys even? #do we want to outright *reject* the CDR? - my $error = - $self->ut_numbern('acctid'); + my $error = $self->ut_numbern('acctid'); + return $error if $error; + + if ( $self->freesidestatus ne 'done' ) { + $self->set('detailnum', ''); # can't have this on an unbilled call + } #add a config option to turn these back on if someone needs 'em # @@ -351,8 +359,6 @@ sub check { # # Telstra =1, Optus = 2, RSL COM = 3 # || $self->ut_foreign_keyn('carrierid', 'cdr_carrier', 'carrierid' ) - return $error if $error; - $self->SUPER::check; } @@ -463,7 +469,9 @@ Sets the status and rated price. Available options are: inbound, rated_pretty_dst, rated_regionname, rated_seconds, rated_minutes, rated_granularity, rated_ratedetailnum, -rated_classnum, rated_ratename. +rated_classnum, rated_ratename. If rated_ratedetailnum is provided, +will also set a recalculated L in the rated_cost field +after the other fields are set (does not work with inbound.) If there is an error, returns the error, otherwise returns false. @@ -501,6 +509,8 @@ sub set_status_and_rated_price { qw( pretty_dst regionname seconds minutes granularity ratedetailnum classnum ratename ); $self->svcnum($svcnum) if $svcnum; + $self->rated_cost($self->rate_cost) if $opt{'rated_ratedetailnum'}; + return $self->replace(); } @@ -536,6 +546,9 @@ sub parse_number { my $field = $options{column} || 'dst'; my $intl = $options{international_prefix} || '011'; + # Still, don't break anyone's CDR rating if they have an empty string in + # there. Require an explicit statement that there's no prefix. + $intl = '' if lc($intl) eq 'none'; my $countrycode = ''; my $number = $self->$field(); @@ -1458,7 +1471,7 @@ as keys (for use with part_pkg::voip_cdr) and "pretty" format names as values. sub invoice_formats { map { ($_ => $export_names{$_}->{'name'}) } grep { $export_names{$_}->{'invoice_header'} } - keys %export_names; + sort keys %export_names; } =item invoice_header FORMAT