X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fcdr.pm;h=fedf28aa643db2a06c1912c8e994280b19bae40b;hb=fed12e8214a8a951377961ccbe7a09171b1e38c2;hp=05179f264c486838ce85d89d3c4b10ead225590b;hpb=a655a75c52c62be3faef81a5cb74de6e52e1b3f6;p=freeside.git diff --git a/FS/FS/cdr.pm b/FS/FS/cdr.pm index 05179f264..fedf28aa6 100644 --- a/FS/FS/cdr.pm +++ b/FS/FS/cdr.pm @@ -11,6 +11,7 @@ use Date::Parse; use Date::Format; use Time::Local; use List::Util qw( first min ); +use Text::CSV_XS; use FS::UID qw( dbh ); use FS::Conf; use FS::Record qw( qsearch qsearchs ); @@ -325,6 +326,10 @@ sub check { $self->billsec( $self->enddate - $self->answerdate ); } + if ( ! $self->enddate && $self->startdate && $self->duration ) { + $self->enddate( $self->startdate + $self->duration ); + } + $self->set_charged_party; #check the foreign keys even? @@ -773,11 +778,16 @@ sub rate_prefix { my $seconds_left = $part_pkg->option_cacheable('use_duration') ? $self->duration : $self->billsec; - # charge for the first (conn_sec) seconds - my $seconds = min($seconds_left, $rate_detail->conn_sec); - $seconds_left -= $seconds; - $weektime += $seconds; - my $charge = $rate_detail->conn_charge; + + #no, do this later so it respects (group) included minutes + # # charge for the first (conn_sec) seconds + # my $seconds = min($seconds_left, $rate_detail->conn_sec); + # $seconds_left -= $seconds; + # $weektime += $seconds; + # my $charge = $rate_detail->conn_charge; + my $seconds = 0; + my $charge = 0; + my $connection_charged = 0; my $etime; while($seconds_left) { @@ -840,6 +850,7 @@ sub rate_prefix { $seconds += $charge_sec; + my $region_group = ($part_pkg->option_cacheable('min_included') || 0) > 0; ${$opt{region_group_included_min}} -= $minutes @@ -853,10 +864,21 @@ sub rate_prefix { ) ) { + + #NOW do connection charges here... right? + #my $conn_seconds = min($seconds_left, $rate_detail->conn_sec); + my $conn_seconds = 0; + unless ( $connection_charged++ ) { #only one connection charge + $conn_seconds = min($charge_sec, $rate_detail->conn_sec); + $seconds_left -= $conn_seconds; + $weektime += $conn_seconds; + $charge += $rate_detail->conn_charge; + } + #should preserve (display?) this - my $charge_min = 0 - $included_min->{$regionnum}{$ratetimenum}; + my $charge_min = 0 - $included_min->{$regionnum}{$ratetimenum} - ( $conn_seconds / 60 ); $included_min->{$regionnum}{$ratetimenum} = 0; - $charge += ($rate_detail->min_charge * $charge_min); #still not rounded + $charge += ($rate_detail->min_charge * $charge_min) if $charge_min > 0; #still not rounded } elsif ( ${$opt{region_group_included_min}} > 0 && $region_group @@ -1269,8 +1291,6 @@ sub downstream_csv { #$opt{'money_char'} ||= $conf->config('money_char') || '$'; $opt{'money_char'} ||= FS::Conf->new->config('money_char') || '$'; - eval "use Text::CSV_XS;"; - die $@ if $@; my $csv = new Text::CSV_XS; my @columns = @@ -1561,6 +1581,11 @@ my %import_options = ( keys %cdr_info }, + 'format_asn_formats' => + { map { $_ => $cdr_info{$_}->{'asn_format'}; } + keys %cdr_info + }, + 'format_row_callbacks' => { map { $_ => $cdr_info{$_}->{'row_callback'}; } keys %cdr_info },