X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fcust_bill.pm;h=ecc6d5f4ce0979c6c38661a07979d9bd98c2618c;hb=c62991706722410987b249893f1323b4ba0e7a5f;hp=2755be0ae3948746c1bf7562a46d724dd283af63;hpb=2041a9143fac20b79ead4a1ae01224dedf5b27c2;p=freeside.git diff --git a/FS/FS/cust_bill.pm b/FS/FS/cust_bill.pm index 2755be0ae..ecc6d5f4c 100644 --- a/FS/FS/cust_bill.pm +++ b/FS/FS/cust_bill.pm @@ -356,14 +356,13 @@ sub send { 'body' => \@print_text, ); die "can't email invoice: $error\n" if $error; + #die "$error\n" if $error; } - if ( $conf->config('invoice_latex') ) { - @print_text = $self->print_ps('', $template); - } - if ( grep { $_ eq 'POST' } @invoicing_list ) { #postal + @print_text = $self->print_ps('', $template) + if $conf->config('invoice_latex'); my $lpr = $conf->config('lpr'); open(LPR, "|$lpr") or die "Can't open pipe to $lpr: $!\n"; @@ -377,6 +376,29 @@ sub send { } +=item send_if_newest [ TEMPLATENAME [ , AGENTNUM [ , INVOICE_FROM ] ] ] + +Like B, but only sends the invoice if it is the newest open invoice for +this customer. + +=cut + +sub send_if_newest { + my $self = shift; + + return '' + if scalar( + grep { $_->owed > 0 } + qsearch('cust_bill', { + 'custnum' => $self->custnum, + #'_date' => { op=>'>', value=>$self->_date }, + 'invnum' => { op=>'>', value=>$self->invnum }, + } ) + ); + + $self->send(@_); +} + =item send_csv OPTIONS Sends invoice as a CSV data-file to a remote host with the specified protocol. @@ -773,7 +795,8 @@ sub print_text { push @buf, [ $description, $money_char. sprintf("%10.2f", $cust_bill_pkg->setup) ]; push @buf, - map { [ " ". $_->[0]. ": ". $_->[1], '' ] } $cust_pkg->labels; + map { [ " ". $_->[0]. ": ". $_->[1], '' ] } + $cust_pkg->h_labels($self->_date); } if ( $cust_bill_pkg->recur != 0 ) { @@ -783,7 +806,8 @@ sub print_text { $money_char. sprintf("%10.2f", $cust_bill_pkg->recur) ]; push @buf, - map { [ " ". $_->[0]. ": ". $_->[1], '' ] } $cust_pkg->labels; + map { [ " ". $_->[0]. ": ". $_->[1], '' ] } + $cust_pkg->h_labels($cust_bill_pkg->edate, $cust_bill_pkg->sdate); } push @buf, map { [ " $_", '' ] } $cust_bill_pkg->details; @@ -1168,12 +1192,12 @@ sub print_ps { my $sfile = shell_quote $file; system("pslatex $sfile.tex >/dev/null 2>&1") == 0 - or die "pslatex $file.tex failed: $!"; + 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: $!"; + or die "pslatex $file.tex failed; see $file.log for details?\n"; system('dvips', '-q', '-t', 'letter', "$file.dvi", '-o', "$file.ps" ) == 0 - or die "dvips failed: $!"; + or die "dvips failed"; open(POSTSCRIPT, "<$file.ps") or die "can't open $file.ps: $! (error in LaTeX template?)\n"; @@ -1256,7 +1280,7 @@ sub print_pdf { sub _latex_escape { my $value = shift; - $value =~ s/([#\$%&~_\^{}])( )?/"\\$1". ( length($2) ? "\\$2" : '' )/ge; + $value =~ s/([#\$%&~_\^{}])( )?/"\\$1". ( ( defined($2) && length($2) ) ? "\\$2" : '' )/ge; $value; } @@ -1343,45 +1367,32 @@ sub _items_cust_bill_pkg { my $part_pkg = qsearchs('part_pkg', { pkgpart=>$cust_pkg->pkgpart } ); my $pkg = $part_pkg->pkg; - my %labels; - #tie %labels, 'Tie::IxHash'; - push @{ $labels{$_->[0]} }, $_->[1] foreach $cust_pkg->labels; - my @ext_description; - foreach my $label ( keys %labels ) { - my @values = @{ $labels{$label} }; - my $num = scalar(@values); - if ( $num > 5 ) { - push @ext_description, "$label ($num)"; - } else { - push @ext_description, map { "$label: $_" } @values; - } - } - if ( $cust_bill_pkg->setup != 0 ) { my $description = $pkg; $description .= ' Setup' if $cust_bill_pkg->recur != 0; - my @d = @ext_description; + my @d = $cust_pkg->h_labels_short($self->_date); push @d, $cust_bill_pkg->details if $cust_bill_pkg->recur == 0; push @b, { - 'description' => $description, - #'pkgpart' => $part_pkg->pkgpart, - 'pkgnum' => $cust_pkg->pkgnum, - 'amount' => sprintf("%10.2f", $cust_bill_pkg->setup), - 'ext_description' => \@d, + description => $description, + #pkgpart => $part_pkg->pkgpart, + pkgnum => $cust_pkg->pkgnum, + amount => sprintf("%10.2f", $cust_bill_pkg->setup), + ext_description => \@d, }; } if ( $cust_bill_pkg->recur != 0 ) { push @b, { - 'description' => "$pkg (" . + description => "$pkg (" . time2str('%x', $cust_bill_pkg->sdate). ' - '. time2str('%x', $cust_bill_pkg->edate). ')', - #'pkgpart' => $part_pkg->pkgpart, - 'pkgnum' => $cust_pkg->pkgnum, - 'amount' => sprintf("%10.2f", $cust_bill_pkg->recur), - 'ext_description' => [ @ext_description, - $cust_bill_pkg->details, - ], + #pkgpart => $part_pkg->pkgpart, + pkgnum => $cust_pkg->pkgnum, + amount => sprintf("%10.2f", $cust_bill_pkg->recur), + ext_description => [ $cust_pkg->h_labels_short($cust_bill_pkg->edate, + $cust_bill_pkg->sdate), + $cust_bill_pkg->details, + ], }; }