'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";
}
+=item send_if_newest [ TEMPLATENAME [ , AGENTNUM [ , INVOICE_FROM ] ] ]
+
+Like B<send>, 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.
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 ) {
$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;
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";
sub _latex_escape {
my $value = shift;
- $value =~ s/([#\$%&~_\^{}])( )?/"\\$1". ( length($2) ? "\\$2" : '' )/ge;
+ $value =~ s/([#\$%&~_\^{}])( )?/"\\$1". ( ( defined($2) && length($2) ) ? "\\$2" : '' )/ge;
$value;
}
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,
+ ],
};
}