1 package FS::detail_format::sum_count_class;
5 use base qw(FS::detail_format);
6 use FS::Record qw(qsearchs);
8 use FS::svc_Common; # for label
12 sub name { 'Summary, one line per service and usage class' };
16 if ( $self->{inbound} ) {
17 'Destination,Charge Class,Quantity,Price'
20 'Source,Charge Class,Quantity,Price'
26 my $svcnums = ($self->{svcnums} ||= {});
27 my $acctids = $self->{acctids} ||= {};
28 foreach my $cdr (@_) {
29 my $object = $self->{inbound} ? $cdr->cdr_termination(1) : $cdr;
30 my $svcnum = $object->svcnum; # yes, $object->svcnum.
32 my $subtotal = ($svcnums->{$svcnum}->{$cdr->rated_classnum} ||=
33 { count => 0, duration => 0, amount => 0 });
35 $subtotal->{duration} += $object->rated_seconds;
36 $subtotal->{amount} += $object->rated_price
37 if $object->freesidestatus ne 'no-charge';
39 my $these_acctids = $acctids->{$cdr->rated_classnum} ||= [];
40 push @$these_acctids, $cdr->acctid;
46 my $svcnums = $self->{svcnums};
47 my $buffer = $self->{buffer};
48 foreach my $svcnum (keys %$svcnums) {
50 my $classnums = $svcnums->{$svcnum};
52 my $cust_svc = qsearchs('cust_svc', { svcnum => $svcnum })
53 or die "svcnum #$svcnum not found";
54 my $phonenum = $cust_svc->svc_x->label;
55 warn "processing $phonenum\n" if $DEBUG;
57 foreach my $classnum (keys %$classnums) {
58 my $subtotal = $classnums->{$classnum};
59 next if $subtotal->{amount} < 0.01;
60 my $classname = ($classnum ?
61 FS::usage_class->by_key($classnum)->classname :
67 $self->money_char . sprintf('%.02f',$subtotal->{amount}),
70 warn "adding detail: ".$self->csv->string."\n" if $DEBUG;
72 push @$buffer, FS::cust_bill_pkg_detail->new({
73 amount => $subtotal->{amount},
75 classnum => $classnum,
76 duration => $subtotal->{duration},
77 phonenum => $phonenum,
78 accountcode => '', #ignored in this format
79 startdate => '', #could use the earliest startdate in the bunch?
81 detail => $self->csv->string,
82 acctid => $self->{acctids}->{$classnum},
87 # supposedly the compiler is smart enough to do this in place
88 @$buffer = sort { $a->{Hash}->{phonenum} cmp $b->{Hash}->{phonenum} or
89 $a->{Hash}->{classnum} <=> $b->{Hash}->{classnum} }