X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fcust_main.pm;h=88d8bdd9157b24da8e1aa9b2b4d1a533e9749ebb;hb=808b89d9c1f34c9c66064da212ab7036b85973a1;hp=e64d666bcbf989ee4af1dd12716dabd9d9bb2970;hpb=faa9e03809537153822776b375d3add5de7c7800;p=freeside.git diff --git a/FS/FS/cust_main.pm b/FS/FS/cust_main.pm index e64d666bc..88d8bdd91 100644 --- a/FS/FS/cust_main.pm +++ b/FS/FS/cust_main.pm @@ -29,6 +29,7 @@ use FS::cust_pkg; use FS::cust_svc; use FS::cust_bill; use FS::cust_bill_pkg; +use FS::cust_bill_pkg_display; use FS::cust_pay; use FS::cust_pay_pending; use FS::cust_pay_void; @@ -2567,89 +2568,40 @@ sub _handle_taxes { } #if $conf->exists('enable_taxproducts') ... - my $section = $cust_pkg->part_pkg->option('usage_section', 'Hush!') - if $cust_pkg->part_pkg->option('separate_usage', 'Hush!' ); - my $want_duplicate = - $cust_pkg->part_pkg->option('summarize_usage', 'Hush!') && - $cust_pkg->part_pkg->option('usage_section', 'Hush!'); + my @display = (); + if ( $conf->exists('separate_usage') ) { + my $section = $cust_pkg->part_pkg->option('usage_section', 'Hush!'); + my $summary = $cust_pkg->part_pkg->option('summarize_usage', 'Hush!'); + push @display, new FS::cust_bill_pkg_display { type => 'S' }; + push @display, new FS::cust_bill_pkg_display { type => 'R' }; + push @display, new FS::cust_bill_pkg_display { type => 'U', + section => $section + }; + if ($section && $summary) { + $display[2]->post_total('Y'); + push @display, new FS::cust_bill_pkg_display { type => 'U', + summary => 'Y', + } + } + } + $cust_bill_pkg->set('display', \@display); -#BUNK. DO NOT CREATE DUPLICATE cust_bill_pkg!!!!!!!!!!!! -# -# # XXX this mostly goes away with cust_bill_pkg refactor -# -# $cust_bill_pkg{setup} = $cust_bill_pkg if $cust_bill_pkg->setup; -# $cust_bill_pkg{recur} = $cust_bill_pkg if $cust_bill_pkg->recur; -# -# -# #split setup and recur -# if ($cust_bill_pkg->setup && $cust_bill_pkg->recur) { -# my $cust_bill_pkg_recur = new FS::cust_bill_pkg { $cust_bill_pkg->hash }; -# $cust_bill_pkg_recur->details($cust_bill_pkg-> -# $cust_bill_pkg_recur->setup(0); -# $cust_bill_pkg_recur->unitsetup(0); -# $cust_bill_pkg{recur} = $cust_bill_pkg_recur; -# -# $cust_bill_pkg->set('details', []); -# $cust_bill_pkg->recur(0); -# $cust_bill_pkg->unitrecur(0); -# $cust_bill_pkg->type(''); -# } -# -# #split usage from recur -# my $usage = sprintf( "%.2f", $cust_bill_pkg{recur}->usage ); -# warn "usage is $usage\n" if $DEBUG; -# if ($usage) { -# my $cust_bill_pkg_usage = -# new FS::cust_bill_pkg { $cust_bill_pkg{recur}->hash }; -# $cust_bill_pkg_usage->recur( $usage ); -# $cust_bill_pkg_usage->type( 'U' ); -# $cust_bill_pkg_usage->duplicate( $want_duplicate ? 'Y' : '' ); -# $cust_bill_pkg_usage->section( $section ); -# $cust_bill_pkg_usage->post_total( $want_duplicate ? 'Y' : '' ); -# my $recur = sprintf( "%.2f", $cust_bill_pkg{recur}->recur - $usage ); -# $cust_bill_pkg{recur}->recur( $recur ); -# $cust_bill_pkg{recur}->type( '' ); -# $cust_bill_pkg{recur}->set('details', []); -# $cust_bill_pkg{''} = $cust_bill_pkg_usage; -# } -# -# #subdivide usage by usage_class -# if (exists($cust_bill_pkg{''})) { -# foreach my $class (grep {$_ && $_ ne 'setup' && $_ ne 'recur' } @classes) { -# my $usage = sprintf( "%.2f", $cust_bill_pkg{''}->usage($class) ); -# my $cust_bill_pkg_usage = -# new FS::cust_bill_pkg { $cust_bill_pkg{''}->hash }; -# $cust_bill_pkg_usage->recur( $usage ); -# $cust_bill_pkg_usage->set('details', []); -# my $classless = sprintf( "%.2f", $cust_bill_pkg{''}->recur - $usage ); -# $cust_bill_pkg{''}->recur( $classless ); -# $cust_bill_pkg{$class} = $cust_bill_pkg_usage; -# } -# delete $cust_bill_pkg{''} unless $cust_bill_pkg{''}->recur; -# } -# -# foreach my $key (keys %cust_bill_pkg) { -# my @taxes = @{ $taxes{$key} }; -# my $cust_bill_pkg = $cust_bill_pkg{$key}; -# -# foreach my $tax ( @taxes ) { -# my $taxname = ref( $tax ). ' '. $tax->taxnum; -# if ( exists( $taxlisthash->{ $taxname } ) ) { -# push @{ $taxlisthash->{ $taxname } }, $cust_bill_pkg; -# }else{ -# $taxlisthash->{ $taxname } = [ $tax, $cust_bill_pkg ]; -# } -# } -# } -# -# # sort setup,recur,'', and the rest numeric && return -# my @result = map { $cust_bill_pkg{$_} } -# sort { my $ad = ($a=~/^\d+$/); my $bd = ($b=~/^\d+$/); -# ( $ad cmp $bd ) || ( $ad ? $a<=>$b : $b cmp $a ) -# } -# keys %cust_bill_pkg; -# -# \@result; + my %tax_cust_bill_pkg = $cust_bill_pkg->disintegrate; + foreach my $key (keys %tax_cust_bill_pkg) { + my @taxes = @{ $taxes{$key} }; + my $tax_cust_bill_pkg = $tax_cust_bill_pkg{$key}; + + foreach my $tax ( @taxes ) { + my $taxname = ref( $tax ). ' '. $tax->taxnum; + if ( exists( $taxlisthash->{ $taxname } ) ) { + push @{ $taxlisthash->{ $taxname } }, $tax_cust_bill_pkg; + }else{ + $taxlisthash->{ $taxname } = [ $tax, $tax_cust_bill_pkg ]; + } + } + } + + ''; } sub _gather_taxes {