From 022b6591c328532097d3cbbc2374d6b7d8221a4b Mon Sep 17 00:00:00 2001 From: Mark Wells Date: Thu, 2 Jun 2016 09:17:48 -0700 Subject: [PATCH] new CDR detail format to summarize by accountcode, #37808 --- FS/FS/cdr.pm | 8 +++ FS/FS/detail_format/sum_duration_accountcode.pm | 69 +++++++++++++++++++++++++ 2 files changed, 77 insertions(+) create mode 100644 FS/FS/detail_format/sum_duration_accountcode.pm diff --git a/FS/FS/cdr.pm b/FS/FS/cdr.pm index df16c7fda..a2b9a8ccb 100644 --- a/FS/FS/cdr.pm +++ b/FS/FS/cdr.pm @@ -1264,6 +1264,10 @@ my %export_names = ( 'name' => 'Number of calls, one line per service', 'invoice_header' => 'Caller,Rate,Messages,Price', }, + 'sum_duration' => { + 'name' => 'Summary, one line per service', + 'invoice_header' => 'Caller,Rate,Calls,Minutes,Price', + }, 'sum_duration_prefix' => { 'name' => 'Summary, one line per destination prefix', 'invoice_header' => 'Caller,Rate,Calls,Minutes,Price', @@ -1272,6 +1276,10 @@ my %export_names = ( 'name' => 'Summary, one line per usage class', 'invoice_header' => 'Caller,Class,Calls,Price', }, + 'sum_duration_accountcode' => { + 'name' => 'Summary, one line per accountcode', + 'invoice_header' => 'Caller,Rate,Calls,Minutes,Price', + }, ); my %export_formats = (); diff --git a/FS/FS/detail_format/sum_duration_accountcode.pm b/FS/FS/detail_format/sum_duration_accountcode.pm new file mode 100644 index 000000000..d181d474c --- /dev/null +++ b/FS/FS/detail_format/sum_duration_accountcode.pm @@ -0,0 +1,69 @@ +package FS::detail_format::sum_duration_accountcode; + +use strict; +use vars qw( $DEBUG ); +use base qw(FS::detail_format); + +$DEBUG = 0; + +my $me = '[sum_duration_accountcode]'; + +sub name { 'Summary, one line per accountcode' }; + +sub header_detail { + 'Account code,Calls,Duration,Price'; +} + +sub append { + my $self = shift; + my $codes = ($self->{codes} ||= {}); + my $acctids = ($self->{acctids} ||= []); + foreach my $cdr (@_) { + my $accountcode = $cdr->accountcode || 'other'; + + my $object = $self->{inbound} ? $cdr->cdr_termination(1) : $cdr; + my $subtotal = $codes->{$accountcode} + ||= { count => 0, duration => 0, amount => 0.0 }; + $subtotal->{count}++; + $subtotal->{duration} += $object->rated_seconds; + $subtotal->{amount} += $object->rated_price + if $object->freesidestatus ne 'no-charge'; + + push @$acctids, $cdr->acctid; + } +} + +sub finish { + my $self = shift; + my $codes = $self->{codes}; + foreach my $accountcode (sort { $a cmp $b } keys %$codes) { + + warn "processing $accountcode\n" if $DEBUG; + + my $subtotal = $codes->{$accountcode}; + + $self->csv->combine( + $accountcode, + $subtotal->{count}, + sprintf('%.01f min', $subtotal->{duration}/60), + $self->money_char . sprintf('%.02f', $subtotal->{amount}) + ); + + warn "adding detail: ".$self->csv->string."\n" if $DEBUG; + + push @{ $self->{buffer} }, FS::cust_bill_pkg_detail->new({ + amount => $subtotal->{amount}, + format => 'C', + classnum => '', #ignored in this format + duration => $subtotal->{duration}, + phonenum => '', # not divided up per service + accountcode => $accountcode, + startdate => '', + regionname => '', + detail => $self->csv->string, + acctid => $self->{acctids}, + }); + } #foreach $accountcode +} + +1; -- 2.11.0