X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fcust_bill.pm;h=2d7341efdf11696ba99f1e190b47a41e6a0add2b;hb=26e91d6afcd21b7113cdc6aebb37ad5acd3d5de8;hp=d8d6eb107e80f8f8084b2f8039e26bc9ed66824a;hpb=41e328867acb7a2b4a956bef497dbf95d833fb5f;p=freeside.git diff --git a/FS/FS/cust_bill.pm b/FS/FS/cust_bill.pm index d8d6eb107..2d7341efd 100644 --- a/FS/FS/cust_bill.pm +++ b/FS/FS/cust_bill.pm @@ -245,6 +245,7 @@ sub delete { cust_pay_batch cust_bill_pay_batch cust_bill_pkg + cust_bill_batch )) { foreach my $linked ( $self->$table() ) { @@ -654,8 +655,8 @@ sub cust_bill_pay_pkg { 'table' => 'cust_bill_pay_pkg', 'addl_from' => ' LEFT JOIN cust_bill_pay USING ( billpaynum ) '. ' LEFT JOIN cust_bill_pkg USING ( billpkgnum ) ', - 'extra_sql' => ' WHERE invnum = '. $self->invnum. - " AND pkgnum = $pkgnum", + 'extra_sql' => ' WHERE cust_bill_pkg.invnum = '. $self->invnum. + " AND cust_bill_pkg.pkgnum = $pkgnum", }); } @@ -698,12 +699,23 @@ sub cust_credit_bill_pkg { 'table' => 'cust_credit_bill_pkg', 'addl_from' => ' LEFT JOIN cust_credit_bill USING ( creditbillnum ) '. ' LEFT JOIN cust_bill_pkg USING ( billpkgnum ) ', - 'extra_sql' => ' WHERE invnum = '. $self->invnum. - " AND pkgnum = $pkgnum", + 'extra_sql' => ' WHERE cust_bill_pkg.invnum = '. $self->invnum. + " AND cust_bill_pkg.pkgnum = $pkgnum", }); } +=item cust_bill_batch + +Returns all invoice batch records (L) for this invoice. + +=cut + +sub cust_bill_batch { + my $self = shift; + qsearch('cust_bill_batch', { 'invnum' => $self->invnum }); +} + =item tax Returns the tax amount (see L) for this invoice. @@ -2517,6 +2529,7 @@ sub print_generic { #invoice from info 'company_name' => scalar( $conf->config('company_name', $agentnum) ), 'company_address' => join("\n", $conf->config('company_address', $agentnum) ). "\n", + 'company_phonenum'=> scalar( $conf->config('company_phonenum', $agentnum) ), 'returnaddress' => $returnaddress, 'agent' => &$escape_function($cust_main->agent->agent), @@ -2827,7 +2840,7 @@ sub print_generic { } } - + if ( @pr_cust_bill && !$conf->exists('disable_previous_balance') ) { push @buf, ['','-----------']; push @buf, [ 'Total Previous Balance', @@ -2840,12 +2853,11 @@ sub print_generic { if $DEBUG > 1; my ($didsummary,$minutes) = $self->_did_summary; - my $didsummary_desc = 'DID Activity Summary (Past 30 days)'; + my $didsummary_desc = 'DID Activity Summary (since last invoice)'; push @detail_items, { 'description' => $didsummary_desc, 'ext_description' => [ $didsummary, $minutes ], - } - if !$multisection; + }; } foreach my $section (@sections, @$late_sections) { @@ -3306,7 +3318,7 @@ sub print_ps { my ($file, $logofile, $barcodefile) = $self->print_latex(@_); my $ps = generate_ps($file); unlink($logofile); - unlink($barcodefile); + unlink($barcodefile) if $barcodefile; $ps; } @@ -3335,7 +3347,7 @@ sub print_pdf { my ($file, $logofile, $barcodefile) = $self->print_latex(@_); my $pdf = generate_pdf($file); unlink($logofile); - unlink($barcodefile); + unlink($barcodefile) if $barcodefile; $pdf; } @@ -3658,7 +3670,7 @@ sub _items_sections { } } @sections; push @early, @$extra_sections if $extra_sections; - + sort { $a->{sort_weight} <=> $b->{sort_weight} } @early; } @@ -4023,7 +4035,12 @@ sub _items_extra_usage_sections { sub _did_summary { my $self = shift; my $end = $self->_date; - my $start = $end - 2592000; # 30 days + + # start at date of previous invoice + 1 second or 0 if no previous invoice + my $start = $self->scalar_sql("SELECT max(_date) FROM cust_bill WHERE custnum = ? and invnum != ?",$self->custnum,$self->invnum); + $start = 0 if !$start; + $start++; + my $cust_main = $self->cust_main; my @pkgs = $cust_main->all_pkgs; my($num_activated,$num_deactivated,$num_portedin,$num_portedout,$minutes) @@ -4037,7 +4054,7 @@ sub _did_summary { my $inserted = $h_cust_svc->date_inserted; my $deleted = $h_cust_svc->date_deleted; - my $phone_inserted = $h_cust_svc->h_svc_x($inserted); + my $phone_inserted = $h_cust_svc->h_svc_x($inserted+5); my $phone_deleted; $phone_deleted = $h_cust_svc->h_svc_x($deleted) if $deleted; @@ -4070,10 +4087,13 @@ sub _did_summary { } # increment usage minutes - my @cdrs = $phone_inserted->get_cdrs('begin'=>$start,'end'=>$end); - foreach my $cdr ( @cdrs ) { - $minutes += $cdr->billsec/60; - } + if ( $phone_inserted ) { + my @cdrs = $phone_inserted->get_cdrs('begin'=>$start,'end'=>$end,'billsec_sum'=>1); + $minutes = $cdrs[0]->billsec_sum if scalar(@cdrs) == 1; + } + else { + warn "WARNING: no matching h_svc_phone insert record for insert time $inserted, svcnum " . $h_cust_svc->svcnum; + } # don't look at this service again push @seen, $h_cust_svc->svcnum; @@ -4442,23 +4462,10 @@ sub _items_cust_bill_pkg { foreach my $cust_bill_pkg ( @$cust_bill_pkgs ) { - warn "$me _items_cust_bill_pkg considering cust_bill_pkg $cust_bill_pkg\n" + warn "$me _items_cust_bill_pkg considering cust_bill_pkg ". + $cust_bill_pkg->billpkgnum. ", pkgnum ". $cust_bill_pkg->pkgnum. "\n" if $DEBUG > 1; - $discount_show_always = ($cust_bill_pkg->cust_bill_pkg_discount - && $conf->exists('discount-show-always')); - - foreach ( $s, $r, ($opt{skip_usage} ? () : $u ) ) { - if ( $_ && !$cust_bill_pkg->hidden ) { - $_->{amount} = sprintf( "%.2f", $_->{amount} ), - $_->{amount} =~ s/^\-0\.00$/0.00/; - $_->{unit_amount} = sprintf( "%.2f", $_->{unit_amount} ), - push @b, { %$_ } - unless ( $_->{amount} == 0 && !$discount_show_always ); - $_ = undef; - } - } - foreach my $display ( grep { defined($section) ? $_->section eq $section : 1 @@ -4537,9 +4544,13 @@ sub _items_cust_bill_pkg { } - if ( ( $cust_bill_pkg->recur != 0 || $cust_bill_pkg->setup == 0 || - ($discount_show_always && $cust_bill_pkg->recur == 0) ) && - ( !$type || $type eq 'R' || $type eq 'U' ) + if ( ( !$type || $type eq 'R' || $type eq 'U' ) + && ( + $cust_bill_pkg->recur != 0 + || $cust_bill_pkg->setup == 0 + || $discount_show_always + || $cust_bill_pkg->recur_show_zero + ) ) { @@ -4553,7 +4564,8 @@ sub _items_cust_bill_pkg { $description .= " (" . time2str($date_format, $cust_bill_pkg->sdate). " - ". time2str($date_format, $cust_bill_pkg->edate). ")" - unless $conf->exists('disable_line_item_date_ranges'); + unless $conf->exists('disable_line_item_date_ranges') + || $cust_pkg->part_pkg->option('disable_line_item_date_ranges',1); my @d = (); @@ -4685,21 +4697,38 @@ sub _items_cust_bill_pkg { } + $discount_show_always = ($cust_bill_pkg->cust_bill_pkg_discount + && $conf->exists('discount-show-always')); + + foreach ( $s, $r, ($opt{skip_usage} ? () : $u ) ) { + if ( $_ && !$cust_bill_pkg->hidden ) { + $_->{amount} = sprintf( "%.2f", $_->{amount} ), + $_->{amount} =~ s/^\-0\.00$/0.00/; + $_->{unit_amount} = sprintf( "%.2f", $_->{unit_amount} ), + push @b, { %$_ } + if $_->{amount} != 0 + || $discount_show_always + || $cust_bill_pkg->recur_show_zero; + $_ = undef; + } + } + } + #foreach ( $s, $r, ($opt{skip_usage} ? () : $u ) ) { + # if ( $_ ) { + # $_->{amount} = sprintf( "%.2f", $_->{amount} ), + # $_->{amount} =~ s/^\-0\.00$/0.00/; + # $_->{unit_amount} = sprintf( "%.2f", $_->{unit_amount} ), + # push @b, { %$_ } + # if $_->{amount} != 0 + # || $discount_show_always + # } + #} + warn "$me _items_cust_bill_pkg done considering cust_bill_pkgs\n" if $DEBUG > 1; - foreach ( $s, $r, ($opt{skip_usage} ? () : $u ) ) { - if ( $_ ) { - $_->{amount} = sprintf( "%.2f", $_->{amount} ), - $_->{amount} =~ s/^\-0\.00$/0.00/; - $_->{unit_amount} = sprintf( "%.2f", $_->{unit_amount} ), - push @b, { %$_ } - unless ( $_->{amount} == 0 && !$discount_show_always ); - } - } - @b; }