X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fpart_pkg%2Fvoip_cdr.pm;h=a7c1903e6d9f93cb4dd379d4bc466be2fbc215b8;hb=efc68f41987d007de5e792b88df1c63bf3dedf4c;hp=c4e6ab2d8fd6cb09e432cf349ceec901391e517b;hpb=125a6f06ea2d8814e3ea80ca61170da2e2e05034;p=freeside.git diff --git a/FS/FS/part_pkg/voip_cdr.pm b/FS/FS/part_pkg/voip_cdr.pm index c4e6ab2d8..a7c1903e6 100644 --- a/FS/FS/part_pkg/voip_cdr.pm +++ b/FS/FS/part_pkg/voip_cdr.pm @@ -85,6 +85,10 @@ tie my %rating_method, 'Tie::IxHash', 'select_options' => { FS::cdr::invoice_formats() }, }, + 'separate_usage' => { 'name' => 'Separate usage charges from recurring charges', + 'type' => 'checkbox', + }, + #XXX also have option for an external db # 'cdr_location' => { 'name' => 'CDR database location' # 'type' => 'select', @@ -116,6 +120,7 @@ tie my %rating_method, 'Tie::IxHash', disable_src domestic_prefix international_prefix use_amaflags use_disposition output_format + separate_usage ) ], 'weight' => 40, @@ -126,8 +131,16 @@ sub calc_setup { $self->option('setup_fee'); } -#false laziness w/voip_sqlradacct... resolve it if that one ever gets used again sub calc_recur { + my $self = shift; + my $charges = 0; + $charges = $self->calc_usage(@_) + unless $self->option('separate_usage', 'Hush!'); + $self->option('recur_fee') + $charges; +} + +#false laziness w/voip_sqlradacct calc_recur resolve it if that one ever gets used again +sub calc_usage { my($self, $cust_pkg, $sdate, $details, $param ) = @_; my $last_bill = $cust_pkg->last_bill; @@ -145,6 +158,10 @@ sub calc_recur { my $output_format = $self->option('output_format', 'Hush!') || 'simple'; + eval "use Text::CSV_XS;"; + die $@ if $@; + my $csv = new Text::CSV_XS; + foreach my $cust_svc ( grep { $_->part_svc->svcdb eq 'svc_phone' } $cust_pkg->cust_svc ) { @@ -285,7 +302,7 @@ sub calc_recur { $charge = sprintf('%.2f', $cdr->upstream_price); $charges += $charge; - + @call_details = ( #time2str("%Y %b %d - %r", $cdr->calldate_unix ), time2str("%c", $cdr->calldate_unix), #XXX this should probably be a config option dropdown so they can select US vs- rest of world dates or whatnot @@ -370,10 +387,9 @@ sub calc_recur { if ( $self->option('rating_method') eq 'upstream_simple' ) { $call_details = [ 'C', $call_details[0] ]; }else{ - $call_details = join(' - ', @call_details ); + $csv->combine(@call_details); + $call_details = [ 'C', $csv->string ]; } - warn " adding details on charge to invoice: $call_details" - if ( $DEBUG && !ref($call_details) ); warn " adding details on charge to invoice: [ ". join(', ', @{$call_details} ). " ]" if ( $DEBUG && ref($call_details) ); @@ -425,7 +441,7 @@ sub calc_recur { } #if ( $spool_cdr && length($downstream_cdr) ) - $self->option('recur_fee') + $charges; + $charges; } @@ -445,5 +461,30 @@ sub calc_units { scalar(grep { $_->part_svc->svcdb eq 'svc_phone' } $cust_pkg->cust_svc); } +sub append_cust_bill_pkgs { + my $self = shift; + my($cust_pkg, $sdate, $details, $param ) = @_; + return [] + unless $self->option('separate_usage', 'Hush!'); + + my @details = (); + my $charges = $self->calc_usage($cust_pkg, $sdate, \@details, $param); + + my $cust_bill_pkg = new FS::cust_bill_pkg { + 'pkgnum' => $cust_pkg->pkgnum, + 'setup' => 0, + 'unitsetup' => 0, + 'recur' => sprintf( "%.2f", $charges), # hmmm + 'unitrecur' => 0, + 'quantity' => $cust_pkg->quantity, + 'sdate' => $$sdate, + 'edate' => $cust_pkg->bill, # already fiddled + 'itemdesc' => 'Usage charges', # configurable? + 'details' => \@details, + }; + + return [ $cust_bill_pkg ]; +} + 1;