1 package FS::detail_format::sum_count;
5 use parent qw(FS::detail_format);
6 use FS::Record qw(qsearchs);
8 use FS::svc_Common; # for label
12 sub name { 'Number of calls, one line per service' };
16 if ( $self->{inbound} ) {
17 'Destination,Messages,Price'
20 'Source,Messages,Price'
26 my $svcnums = ($self->{svcnums} ||= {});
27 foreach my $cdr (@_) {
28 my $object = $self->{inbound} ? $cdr->cdr_termination(1) : $cdr;
29 my $svcnum = $object->svcnum; # yes, $object->svcnum.
31 my $subtotal = ($svcnums->{$svcnum} ||=
32 { count => 0, duration => 0, amount => 0 });
34 $subtotal->{amount} += $object->rated_price;
40 my $svcnums = $self->{svcnums};
41 my $buffer = $self->{buffer};
42 foreach my $svcnum (keys %$svcnums) {
44 my $subtotal = $svcnums->{$svcnum};
45 next if $subtotal->{amount} < 0.01;
47 my $cust_svc = qsearchs('cust_svc', { svcnum => $svcnum })
48 or die "svcnum #$svcnum not found";
49 my $phonenum = $cust_svc->svc_x->label;
50 warn "processing $phonenum\n" if $DEBUG;
55 $self->money_char . sprintf('%.02f',$subtotal->{amount}),
58 warn "adding detail: ".$self->csv->string."\n" if $DEBUG;
60 push @$buffer, FS::cust_bill_pkg_detail->new({
61 amount => $subtotal->{amount},
63 classnum => '', #ignored in this format
65 phonenum => $phonenum,
66 accountcode => '', #ignored in this format
67 startdate => '', #could use the earliest startdate in the bunch?
68 regionname => '', #no, we're using prefix instead
69 detail => $self->csv->string,
73 # supposedly the compiler is smart enough to do this in place
74 @$buffer = sort { $a->{Hash}->{phonenum} cmp $b->{Hash}->{phonenum} }