X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=FS%2FFS%2Fcust_bill.pm;h=96c1db7fb57934aaf89086e0b008faa0396e66f9;hp=e758a0e3d005dea3935694873d072d426960b2b6;hb=efc68f41987d007de5e792b88df1c63bf3dedf4c;hpb=0b65820a72512288dce2989af4e7ed4fcdf72662 diff --git a/FS/FS/cust_bill.pm b/FS/FS/cust_bill.pm index e758a0e3d..96c1db7fb 100644 --- a/FS/FS/cust_bill.pm +++ b/FS/FS/cust_bill.pm @@ -226,7 +226,12 @@ Returns the line items (see L) for this invoice. sub cust_bill_pkg { my $self = shift; - qsearch( 'cust_bill_pkg', { 'invnum' => $self->invnum } ); + qsearch( + { 'table' => 'cust_bill_pkg', + 'hashref' => { 'invnum' => $self->invnum }, + 'order_by' => 'ORDER BY billpkgnum', + } + ); } =item cust_pkg @@ -557,19 +562,27 @@ sub apply_payments_and_credits { } -=item generate_email PARAMHASH +=item generate_email OPTION => VALUE ... -PARAMHASH can contain the following: +Options: =over 4 -=item from => sender address, required +=item from + +sender address, required + +=item tempate -=item tempate => alternate template name, optional +alternate template name, optional -=item print_text => text attachment arrayref, optional +=item print_text -=item subject => email subject, optional +text attachment arrayref, optional + +=item subject + +email subject, optional =back @@ -1618,6 +1631,8 @@ L and L for conversion functions. cid - +unsquelch_cdr - overrides any per customer cdr squelching when true + =cut sub print_generic { @@ -1830,7 +1845,7 @@ sub print_generic { 'date' => time2str($date_format, $self->_date), 'today' => time2str('%b %o, %Y', $today), 'agent' => &$escape_function($cust_main->agent->agent), - 'agent_custid => &$escape_function($cust_main->agent_custid), + 'agent_custid' => &$escape_function($cust_main->agent_custid), 'payname' => &$escape_function($cust_main->payname), 'company' => &$escape_function($cust_main->company), 'address1' => &$escape_function($cust_main->address1), @@ -1847,20 +1862,24 @@ sub print_generic { 'conf_dir' => "$FS::UID::conf_dir/conf.$FS::UID::datasrc", 'page' => 1, 'total_pages' => 1, + 'current_charges' => sprintf("%.2f", $self->charged), + 'duedate' => $self->due_date2str('%m/%d/%Y'), #date_format? 'ship_enable' => $conf->exists('invoice-ship_address'), 'unitprices' => $conf->exists('invoice-unitprice'), ); + my $countrydefault = $conf->config('countrydefault') || 'US'; my $prefix = $cust_main->has_ship_address ? 'ship_' : ''; foreach ( qw( contact company address1 address2 city state zip country fax) ){ my $method = $prefix.$_; $invoice_data{"ship_$_"} = _latex_escape($cust_main->$method); } + $invoice_data{'ship_country'} = '' + if ( $invoice_data{'ship_country'} eq $countrydefault ); $invoice_data{'cid'} = $params{'cid'} if $params{'cid'}; - my $countrydefault = $conf->config('countrydefault') || 'US'; if ( $cust_main->country eq $countrydefault ) { $invoice_data{'country'} = ''; } else { @@ -1895,7 +1914,8 @@ sub print_generic { # my( $cr_total, @cr_cust_credit ) = $self->cust_credit; #credits #my $balance_due = $self->owed + $pr_total - $cr_total; my $balance_due = $self->owed + $pr_total; - $invoice_data{'balance'} = $balance_due; + $invoice_data{'previous_balance'} = sprintf("%.2f", $pr_total); + $invoice_data{'balance'} = sprintf("%.2f", $balance_due); #do variable substitution in notes, footer, smallfooter foreach my $include (qw( notes footer smallfooter coupon )) { @@ -2036,6 +2056,8 @@ sub print_generic { $options{'section'} = $section if $multisection; $options{'format'} = $format; $options{'escape_function'} = $escape_function; + $options{'format_function'} = sub { () } + unless $params{unsquelch_cdr} || $cust_main->squelch_cdr ne 'Y'; foreach my $line_item ( $self->_items_pkg(%options) ) { my $detail = { @@ -2119,6 +2141,7 @@ sub print_generic { unshift @total_items, $total; } } + $invoice_data{'taxtotal'} = sprintf('%.2f', $taxtotal); push @buf,['','-----------']; push @buf,[( $conf->exists('disable_previous_balance') @@ -2142,8 +2165,8 @@ sub print_generic { ) ); if ( $multisection ) { - $adjust_section->{'pretotal'} = 'New charges total '. - $total->{'total_amount'}; + $adjust_section->{'pretotal'} = 'New charges total '. $other_money_char. + sprintf('%.2f', $self->charged ); }else{ push @total_items, $total; } @@ -2164,10 +2187,11 @@ sub print_generic { #foreach my $thing ( sort { $a->_date <=> $b->_date } $self->_items_credits, $self->_items_payments # credits + my $credittotal = 0; foreach my $credit ( $self->_items_credits ) { my $total; $total->{'total_item'} = &$escape_function($credit->{'description'}); - #$credittotal + $credittotal += $credit->{'amount'}; $total->{'total_amount'} = '-'. $other_money_char. $credit->{'amount'}; $adjusttotal += $credit->{'amount'}; if ( $multisection ) { @@ -2185,6 +2209,7 @@ sub print_generic { push @total_items, $total; } } + $invoice_data{'credittotal'} = sprintf('%.2f', $credittotal); # credits (again) foreach ( $self->cust_credited ) { @@ -2201,10 +2226,11 @@ sub print_generic { } # payments + my $paymenttotal = 0; foreach my $payment ( $self->_items_payments ) { my $total = {}; $total->{'total_item'} = &$escape_function($payment->{'description'}); - #$paymenttotal + $paymenttotal += $payment->{'amount'}; $total->{'total_amount'} = '-'. $other_money_char. $payment->{'amount'}; $adjusttotal += $payment->{'amount'}; if ( $multisection ) { @@ -2225,6 +2251,7 @@ sub print_generic { $money_char. sprintf("%10.2f", $payment->{'amount'}), ]; } + $invoice_data{'paymenttotal'} = sprintf('%.2f', $paymenttotal); if ( $multisection ) { $adjust_section->{'subtotal'} = $other_money_char. @@ -2486,6 +2513,16 @@ sub balance_due_msg { $msg; } +sub balance_due_date { + my $self = shift; + my $duedate = ''; + if ( $conf->exists('invoice_default_terms') + && $conf->config('invoice_default_terms')=~ /^\s*Net\s*(\d+)\s*$/ ) { + $duedate = time2str("%m/%d/%Y", $self->_date + ($1*86400) ); + } + $duedate; +} + =item invnum_date_pretty Returns a string with the invoice number and date, for example: @@ -2506,7 +2543,7 @@ sub _items_sections { if ( $cust_bill_pkg->pkgnum > 0 ) { - my $desc = $cust_bill_pkg->part_pkg->classname; + my $desc = $cust_bill_pkg->part_pkg->categoryname; $s{$desc} += $cust_bill_pkg->setup if ( $cust_bill_pkg->setup != 0 ); @@ -2576,7 +2613,7 @@ sub _items_pkg { my @cust_bill_pkg = grep { $_->pkgnum && ( defined($section) - ? $_->part_pkg->classname eq $section->{'description'} + ? $_->part_pkg->categoryname eq $section->{'description'} : 1 ) } $self->cust_bill_pkg; @@ -2605,6 +2642,7 @@ sub _items_cust_bill_pkg { my $format = $opt{format} || ''; my $escape_function = $opt{escape_function} || sub { shift }; + my $format_function = $opt{format_function} || ''; my @b = (); foreach my $cust_bill_pkg ( @$cust_bill_pkg ) { @@ -2615,6 +2653,7 @@ sub _items_cust_bill_pkg { my %details_opt = ( 'format' => $format, 'escape_function' => $escape_function, + 'format_function' => $format_function, ); if ( $cust_bill_pkg->pkgnum > 0 ) { @@ -2644,8 +2683,8 @@ sub _items_cust_bill_pkg { my $description = $desc; unless ( $conf->exists('disable_line_item_date_ranges') ) { - $desc .= " (" . time2str("%x", $cust_bill_pkg->sdate). - " - ". time2str("%x", $cust_bill_pkg->edate). ")"; + $description .= " (" . time2str("%x", $cust_bill_pkg->sdate). + " - ". time2str("%x", $cust_bill_pkg->edate). ")"; } #at least until cust_bill_pkg has "past" ranges in addition to @@ -2654,6 +2693,7 @@ sub _items_cust_bill_pkg { $cust_pkg->h_labels_short($self->_date); #$cust_bill_pkg->edate, #$cust_bill_pkg->sdate), + @d = () if $cust_bill_pkg->itemdesc; push @d, $cust_bill_pkg->details(%details_opt); push @b, {