X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fcust_bill.pm;h=704b3504a5a7dc1ad5173cab3e5b18a011c1404e;hb=a4b8ce8cd1d309de00c64f38049a8dda38798046;hp=7504f6b0a6c32e14f5b7504bb700a88925f35c90;hpb=37b7af5d150bb1a4656dc191daf768519203eddd;p=freeside.git diff --git a/FS/FS/cust_bill.pm b/FS/FS/cust_bill.pm index 7504f6b0a..704b3504a 100644 --- a/FS/FS/cust_bill.pm +++ b/FS/FS/cust_bill.pm @@ -843,7 +843,9 @@ sub send { my $invoice_from = scalar(@_) ? shift - : ( $self->_agent_invoice_from || $conf->config('invoice_from') ); + : ( $self->_agent_invoice_from || #XXX should go away + $conf->config('invoice_from', $self->cust_main->agentnum ) + ); my $balance_over = ( scalar(@_) && $_[0] !~ /^\s*$/ ) ? shift : 0; @@ -899,7 +901,10 @@ sub email { my $invoice_from = scalar(@_) ? shift - : ( $self->_agent_invoice_from || $conf->config('invoice_from') ); + : ( $self->_agent_invoice_from || #XXX should go away + $conf->config('invoice_from', $self->cust_main->agentnum ) + ); + my @invoicing_list = grep { $_ !~ /^(POST|FAX)$/ } $self->cust_main->invoicing_list; @@ -907,10 +912,13 @@ sub email { #better to notify this person than silence @invoicing_list = ($invoice_from) unless @invoicing_list; + my $subject = $self->email_subject($template); + my $error = send_email( $self->generate_email( 'from' => $invoice_from, 'to' => [ grep { $_ !~ /^(POST|FAX)$/ } @invoicing_list ], + 'subject' => $subject, 'template' => $template, ) ); @@ -919,6 +927,24 @@ sub email { } +sub email_subject { + my $self = shift; + + #my $template = scalar(@_) ? shift : ''; + #per-template? + + my $subject = $conf->config('invoice_subject', $self->cust_main->agentnum) + || 'Invoice'; + + my $cust_main = $self->cust_main; + my $name = $cust_main->name; + my $name_short = $cust_main->name_short; + my $invoice_number = $self->invnum; + my $invoice_date = $self->_date_pretty; + + eval qq("$subject"); +} + =item lpr_data [ TEMPLATENAME ] Returns the postscript or plaintext for this invoice as an arrayref. @@ -1611,7 +1637,6 @@ L and L for conversion functions. =cut sub print_latex { - my( $self, $today, $template ) = @_; my %params = ( 'format' => 'latex' ); @@ -1627,11 +1652,13 @@ sub print_latex { UNLINK => 0, ) or die "can't open temp file: $!\n"; - if ($template && $conf->exists("logo_${template}.eps")) { - print $lh $conf->config_binary("logo_${template}.eps") + my $agentnum = $self->cust_main->agentnum; + + if ( $template && $conf->exists("logo_${template}.eps", $agentnum) ) { + print $lh $conf->config_binary("logo_${template}.eps", $agentnum) or die "can't write temp file: $!\n"; - }else{ - print $lh $conf->config_binary('logo.eps') + } else { + print $lh $conf->config_binary('logo.eps', $agentnum) or die "can't write temp file: $!\n"; } close $lh; @@ -1676,6 +1703,8 @@ unsquelch_cdr - overrides any per customer cdr squelching when true =cut +#what's with all the sprintf('%10.2f')'s in here? will it cause any +# (alignment?) problems to change them all to '%.2f' ? sub print_generic { my( $self, %params ) = @_; @@ -1760,6 +1789,7 @@ sub print_generic { s/~/ /g; s/\\\\\*?\s*$/
/; s/\\hyphenation\{[\w\s\-]+}//; + s/\\([&])/$1/g; $_; } @_ }, @@ -1854,7 +1884,7 @@ sub print_generic { ) ) ); - } elsif ( grep /\S/, $conf->config('company_address') ) { + } elsif ( grep /\S/, $conf->config('company_address', $self->cust_main->agentnum) ) { my $convert_map = $convert_maps{$format}{'returnaddress'}; $returnaddress = join( "\n", &$convert_map( @@ -1862,8 +1892,8 @@ sub print_generic { s/$/\\\\\*/; $_ } - ( $conf->config('company_name'), - $conf->config('company_address'), + ( $conf->config('company_name', $self->cust_main->agentnum), + $conf->config('company_address', $self->cust_main->agentnum), ) ) ); @@ -1879,8 +1909,8 @@ sub print_generic { } my %invoice_data = ( - 'company_name' => scalar( $conf->config('company_name') ), - 'company_address' => join("\n", $conf->config('company_address') ). "\n", + 'company_name' => scalar( $conf->config('company_name', $self->cust_main->agentnum) ), + 'company_address' => join("\n", $conf->config('company_address', $self->cust_main->agentnum) ). "\n", 'custnum' => $cust_main->display_custnum, 'invnum' => $self->invnum, 'date' => time2str($date_format, $self->_date), @@ -1898,7 +1928,7 @@ sub print_generic { 'returnaddress' => $returnaddress, #'quantity' => 1, 'terms' => $self->terms, - 'template' => $params{'template'}, + 'template' => $template, #params{'template'}, #'notes' => join("\n", $conf->config('invoice_latexnotes') ), # better hang on to conf_dir for a while 'conf_dir' => "$FS::UID::conf_dir/conf.$FS::UID::datasrc", @@ -2012,7 +2042,7 @@ sub print_generic { ); my $money_char = $money_chars{$format}; - my %other_money_chars = ( 'latex' => '\dollar ', + my %other_money_chars = ( 'latex' => '\dollar ',#XXX should be a config too 'html' => $conf->config('money_char') || '$', 'template' => '', ); @@ -2145,26 +2175,36 @@ sub print_generic { } foreach my $tax ( $self->_items_tax ) { - my $total = {}; - $total->{'total_item'} = &$escape_function($tax->{'description'}); + $taxtotal += $tax->{'amount'}; - $total->{'total_amount'} = $other_money_char. $tax->{'amount'}; + + my $description = &$escape_function( $tax->{'description'} ); + my $amount = sprintf( '%.2f', $tax->{'amount'} ); + if ( $multisection ) { + my $money = $old_latex ? '' : $money_char; push @detail_items, { ext_description => [], ref => '', quantity => '', - description => &$escape_function($tax->{'description'}), - amount => $money. $tax->{'amount'}, + description => $description, + amount => $money. $amount, product_code => '', section => $tax_section, }; - }else{ - push @total_items, $total; + + } else { + + push @total_items, { + 'total_item' => $description, + 'total_amount' => $other_money_char. $amount, + }; + } - push @buf,[ $total->{'total_item'}, - $money_char. sprintf("%10.2f", $total->{'total_amount'}), + + push @buf,[ $description, + $money_char. $amount, ]; } @@ -2586,7 +2626,18 @@ Returns a string with the invoice number and date, for example: sub invnum_date_pretty { my $self = shift; - 'Invoice #'. $self->invnum. ' ('. time2str('%x', $self->_date). ')'; + 'Invoice #'. $self->invnum. ' ('. $self->_date_pretty. ')'; +} + +=item _date_pretty + +Returns a string with the date, for example: "3/20/2008" + +=cut + +sub _date_pretty { + my $self = shift; + time2str('%x', $self->_date); } sub _items_sections { @@ -2758,7 +2809,7 @@ sub _items_cust_bill_pkg { my $cust_pkg = $cust_bill_pkg->cust_pkg; my $desc = $cust_bill_pkg->desc; - $desc = substr($desc, 0, 50). '...'; + $desc = substr($desc, 0, 50). '...' if $format eq 'latex' && length($desc) > 50; my %details_opt = ( 'format' => $format,