X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fcust_bill.pm;h=34feb40f71501c41cc61e6484cf823c42251d932;hb=7d0b690f5684cdfdcd68d25568a101f6b088ad98;hp=c292cfb5fa4133077d0469c87e2fcb48f24bd852;hpb=57258cd385f8b61abf430c3a448fdaf4e1831494;p=freeside.git diff --git a/FS/FS/cust_bill.pm b/FS/FS/cust_bill.pm index c292cfb5f..34feb40f7 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. @@ -1676,6 +1702,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 ) = @_; @@ -1689,8 +1717,8 @@ sub print_generic { my $cust_main = $self->cust_main; $cust_main->payname( $cust_main->first. ' '. $cust_main->getfield('last') ) - unless $cust_main->payname && $cust_main->payby !~ /^(CHEK|DCHK)$/; - + unless $cust_main->payname + && $cust_main->payby !~ /^(CARD|DCRD|CHEK|DCHK)$/; my %delimiters = ( 'latex' => [ '[@--', '--@]' ], 'html' => [ '<%=', '%>' ], @@ -1760,6 +1788,7 @@ sub print_generic { s/~/ /g; s/\\\\\*?\s*$/
/; s/\\hyphenation\{[\w\s\-]+}//; + s/\\([&])/$1/g; $_; } @_ }, @@ -1854,7 +1883,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 +1891,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 +1908,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), @@ -1894,10 +1923,11 @@ sub print_generic { 'city' => &$escape_function($cust_main->city), 'state' => &$escape_function($cust_main->state), 'zip' => &$escape_function($cust_main->zip), + 'fax' => &$escape_function($cust_main->fax), '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", @@ -2011,7 +2041,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' => '', ); @@ -2144,26 +2174,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, ]; } @@ -2585,7 +2625,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 { @@ -2711,11 +2762,8 @@ sub _items_previous { sub _items_pkg { my $self = shift; - my %options = @_; - my $section = $options{'section'}; - my $desc = $section->{'description'}; my @cust_bill_pkg = grep { $_->pkgnum } $self->cust_bill_pkg; - $self->_items_cust_bill_pkg(\@cust_bill_pkg, %options); + $self->_items_cust_bill_pkg(\@cust_bill_pkg, @_); } sub _taxsort { @@ -2760,6 +2808,8 @@ sub _items_cust_bill_pkg { my $cust_pkg = $cust_bill_pkg->cust_pkg; my $desc = $cust_bill_pkg->desc; + $desc = substr($desc, 0, 50). '...' + if $format eq 'latex' && length($desc) > 50; my %details_opt = ( 'format' => $format, 'escape_function' => $escape_function,