X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=FS%2FFS%2Fcust_bill.pm;h=46189586b6d8fc3f66e4bc8059c71333b6de67da;hp=e295ded2cfbd3aace87c82a20c1a182777c16986;hb=f13afe5e228a220311557e1ca6dacbf847c26baf;hpb=847b97e96568f0d34fbc65e3110430430ae68bb6 diff --git a/FS/FS/cust_bill.pm b/FS/FS/cust_bill.pm index e295ded2c..46189586b 100644 --- a/FS/FS/cust_bill.pm +++ b/FS/FS/cust_bill.pm @@ -12,7 +12,7 @@ use String::ShellQuote; use HTML::Entities; use Locale::Country; use FS::UID qw( datasrc ); -use FS::Misc qw( send_email send_fax generate_ps do_print ); +use FS::Misc qw( send_email send_fax generate_ps generate_pdf do_print ); use FS::Record qw( qsearch qsearchs dbh ); use FS::cust_main_Mixin; use FS::cust_main; @@ -838,13 +838,15 @@ sub send { my @invoicing_list = $self->cust_main->invoicing_list; + #$self->email_invoice($template, $invoice_from) $self->email($template, $invoice_from) if grep { $_ !~ /^(POST|FAX)$/ } @invoicing_list or !@invoicing_list; + #$self->print_invoice($template) $self->print($template) if grep { $_ eq 'POST' } @invoicing_list; #postal - $self->fax($template) + $self->fax_invoice($template) if grep { $_ eq 'FAX' } @invoicing_list; #fax ''; @@ -876,6 +878,7 @@ sub queueable_email { } +#sub email_invoice { sub email { my $self = shift; my $template = scalar(@_) ? shift : ''; @@ -925,6 +928,7 @@ TEMPLATENAME, if specified, is the name of a suffix for alternate invoices. =cut +#sub print_invoice { sub print { my $self = shift; my $template = scalar(@_) ? shift : ''; @@ -932,7 +936,7 @@ sub print { do_print $self->lpr_data($template); } -=item fax [ TEMPLATENAME ] +=item fax_invoice [ TEMPLATENAME ] Faxes this invoice. @@ -940,7 +944,7 @@ TEMPLATENAME, if specified, is the name of a suffix for alternate invoices. =cut -sub fax { +sub fax_invoice { my $self = shift; my $template = scalar(@_) ? shift : ''; @@ -1671,6 +1675,7 @@ sub print_generic { 'footer' => sub { map "$_", @_ }, 'smallfooter' => sub { map "$_", @_ }, 'returnaddress' => sub { map "$_", @_ }, + 'coupon' => sub { map "$_", @_ }, }, 'html' => { 'notes' => @@ -1702,6 +1707,7 @@ sub print_generic { $_; } @_ }, + 'coupon' => sub { "" }, }, 'template' => { 'notes' => @@ -1731,6 +1737,7 @@ sub print_generic { $_; } @_ }, + 'coupon' => sub { "" }, }, ); @@ -1823,6 +1830,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), 'payname' => &$escape_function($cust_main->payname), 'company' => &$escape_function($cust_main->company), 'address1' => &$escape_function($cust_main->address1), @@ -1831,7 +1839,7 @@ sub print_generic { 'state' => &$escape_function($cust_main->state), 'zip' => &$escape_function($cust_main->zip), 'returnaddress' => $returnaddress, - 'quantity' => 1, + #'quantity' => 1, 'terms' => $self->terms, 'template' => $params{'template'}, #'notes' => join("\n", $conf->config('invoice_latexnotes') ), @@ -1839,8 +1847,16 @@ sub print_generic { 'conf_dir' => "$FS::UID::conf_dir/conf.$FS::UID::datasrc", 'page' => 1, 'total_pages' => 1, + 'ship_enable' => $conf->exists('invoice-ship_address'), + 'unitprices' => $conf->exists('invoice-unitprice'), ); + 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{'cid'} = $params{'cid'} if $params{'cid'}; @@ -1872,8 +1888,17 @@ sub print_generic { push @address, '' while (scalar(@address) < 5); + $invoice_data{'logo_file'} = $params{'logo_file'} + if $params{'logo_file'}; + + my( $pr_total, @pr_cust_bill ) = $self->previous; #previous balance +# 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; + #do variable substitution in notes, footer, smallfooter - foreach my $include (qw( notes footer smallfooter )) { + foreach my $include (qw( notes footer smallfooter coupon )) { my $inc_file = $conf->key_orbase("invoice_${format}$include", $template); my @inc_src; @@ -1919,11 +1944,6 @@ sub print_generic { ? &$escape_function("Purchase Order #". $cust_main->payinfo) : $nbsp; - my( $pr_total, @pr_cust_bill ) = $self->previous; #previous balance -# 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; - my %money_chars = ( 'latex' => '', 'html' => $conf->config('money_char') || '$', 'template' => '', @@ -1983,10 +2003,8 @@ sub print_generic { &$escape_function($_); } @{$line_item->{'ext_description'}}; } - { - my $money = $old_latex ? '' : $money_char; - $detail->{'amount'} = $money. $line_item->{'amount'}; - } + $detail->{'amount'} = ( $old_latex ? '' : $money_char). + $line_item->{'amount'}; $detail->{'product_code'} = $line_item->{'pkgpart'} || 'N/A'; push @detail_items, $detail; @@ -2024,16 +2042,16 @@ sub print_generic { ext_description => [], }; $detail->{'ref'} = $line_item->{'pkgnum'}; - $detail->{'quantity'} = 1; + $detail->{'quantity'} = $line_item->{'quantity'}; $detail->{'section'} = $section; $detail->{'description'} = &$escape_function($line_item->{'description'}); if ( exists $line_item->{'ext_description'} ) { @{$detail->{'ext_description'}} = @{$line_item->{'ext_description'}}; } - { - my $money = $old_latex ? '' : $money_char; - $detail->{'amount'} = $money. $line_item->{'amount'}; - } + $detail->{'amount'} = ( $old_latex ? '' : $money_char ). + $line_item->{'amount'}; + $detail->{'unit_amount'} = ( $old_latex ? '' : $money_char ). + $line_item->{'unit_amount'}; $detail->{'product_code'} = $line_item->{'pkgpart'} || 'N/A'; push @detail_items, $detail; @@ -2233,9 +2251,6 @@ sub print_generic { } } - $invoice_data{'logo_file'} = $params{'logo_file'} - if $params{'logo_file'}; - $invoice_lines = 0; my $wasfunc = 0; foreach ( grep /invoice_lines\(\d*\)/, @invoice_template ) { #kludgy @@ -2303,8 +2318,8 @@ sub print_ps { my ($file, $lfile) = $self->print_latex(@_); my $ps = generate_ps($file); unlink($lfile); - $ps; + $ps; } =item print_pdf [ TIME [ , TEMPLATE ] ] @@ -2322,44 +2337,10 @@ sub print_pdf { my $self = shift; my ($file, $lfile) = $self->print_latex(@_); + my $pdf = generate_pdf($file); + unlink($lfile); - my $dir = $FS::UID::conf_dir. "/cache.". $FS::UID::datasrc; - chdir($dir); - - #system('pdflatex', "$file.tex"); - #system('pdflatex', "$file.tex"); - #! LaTeX Error: Unknown graphics extension: .eps. - - my $sfile = shell_quote $file; - - system("pslatex $sfile.tex >/dev/null 2>&1") == 0 - or die "pslatex $file.tex failed; see $file.log for details?\n"; - system("pslatex $sfile.tex >/dev/null 2>&1") == 0 - or die "pslatex $file.tex failed; see $file.log for details?\n"; - - #system('dvipdf', "$file.dvi", "$file.pdf" ); - system( - "dvips -q -t letter -f $sfile.dvi ". - "| gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=$sfile.pdf ". - " -c save pop -" - ) == 0 - or die "dvips | gs failed: $!"; - - open(PDF, "<$file.pdf") - or die "can't open $file.pdf: $! (error in LaTeX template?)\n"; - - unlink("$file.dvi", "$file.log", "$file.aux", "$file.pdf", "$file.tex"); - unlink("$lfile"); - - my $pdf = ''; - while () { - $pdf .= $_; - } - - close PDF; - - return $pdf; - + $pdf; } =item print_html [ TIME [ , TEMPLATE [ , CID ] ] ] @@ -2505,6 +2486,18 @@ sub balance_due_msg { $msg; } +=item invnum_date_pretty + +Returns a string with the invoice number and date, for example: +"Invoice #54 (3/20/2008)" + +=cut + +sub invnum_date_pretty { + my $self = shift; + 'Invoice #'. $self->invnum. ' ('. time2str('%x', $self->_date). ')'; +} + sub _items_sections { my $self = shift; @@ -2513,7 +2506,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 ); @@ -2583,7 +2576,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; @@ -2641,6 +2634,8 @@ sub _items_cust_bill_pkg { #pkgpart => $part_pkg->pkgpart, pkgnum => $cust_bill_pkg->pkgnum, amount => sprintf("%.2f", $cust_bill_pkg->setup), + unit_amount => sprintf("%.2f", $cust_bill_pkg->unitsetup), + quantity => $cust_bill_pkg->quantity, ext_description => \@d, }; } @@ -2666,8 +2661,9 @@ sub _items_cust_bill_pkg { #pkgpart => $part_pkg->pkgpart, pkgnum => $cust_bill_pkg->pkgnum, amount => sprintf("%.2f", $cust_bill_pkg->recur), + unit_amount => sprintf("%.2f", $cust_bill_pkg->unitrecur), + quantity => $cust_bill_pkg->quantity, ext_description => \@d, - }; }