}
-=item generate_email PARAMHASH
+=item generate_email OPTION => VALUE ...
-PARAMHASH can contain the following:
+Options:
=over 4
-=item from => sender address, required
+=item from
-=item tempate => alternate template name, optional
+sender address, required
-=item print_text => text attachment arrayref, optional
+=item tempate
-=item subject => email subject, optional
+alternate template name, optional
+
+=item print_text
+
+text attachment arrayref, optional
+
+=item subject
+
+email subject, optional
=back
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
'';
}
+#sub email_invoice {
sub email {
my $self = shift;
my $template = scalar(@_) ? shift : '';
=cut
+#sub print_invoice {
sub print {
my $self = shift;
my $template = scalar(@_) ? shift : '';
do_print $self->lpr_data($template);
}
-=item fax [ TEMPLATENAME ]
+=item fax_invoice [ TEMPLATENAME ]
Faxes this invoice.
=cut
-sub fax {
+sub fax_invoice {
my $self = shift;
my $template = scalar(@_) ? shift : '';
'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),
'conf_dir' => "$FS::UID::conf_dir/conf.$FS::UID::datasrc",
'page' => 1,
'total_pages' => 1,
+ 'current_charges' => sprintf("%.2f", $self->charged),
+ 'duedate' => $self->due_date2str('%m/%d/%Y'), #date_format?
+ 'ship_enable' => $conf->exists('invoice-ship_address'),
+ 'unitprices' => $conf->exists('invoice-unitprice'),
);
+ my $countrydefault = $conf->config('countrydefault') || 'US';
+ 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{'ship_country'} = ''
+ if ( $invoice_data{'ship_country'} eq $countrydefault );
+
$invoice_data{'cid'} = $params{'cid'}
if $params{'cid'};
- my $countrydefault = $conf->config('countrydefault') || 'US';
if ( $cust_main->country eq $countrydefault ) {
$invoice_data{'country'} = '';
} else {
# 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;
+ $invoice_data{'previous_balance'} = sprintf("%.2f", $pr_total);
+ $invoice_data{'balance'} = sprintf("%.2f", $balance_due);
#do variable substitution in notes, footer, smallfooter
foreach my $include (qw( notes footer smallfooter coupon )) {
unshift @total_items, $total;
}
}
+ $invoice_data{'taxtotal'} = sprintf('%.2f', $taxtotal);
push @buf,['','-----------'];
push @buf,[( $conf->exists('disable_previous_balance')
#foreach my $thing ( sort { $a->_date <=> $b->_date } $self->_items_credits, $self->_items_payments
# credits
+ my $credittotal = 0;
foreach my $credit ( $self->_items_credits ) {
my $total;
$total->{'total_item'} = &$escape_function($credit->{'description'});
- #$credittotal
+ $credittotal += $credit->{'amount'};
$total->{'total_amount'} = '-'. $other_money_char. $credit->{'amount'};
$adjusttotal += $credit->{'amount'};
if ( $multisection ) {
push @total_items, $total;
}
}
+ $invoice_data{'credittotal'} = sprintf('%.2f', $credittotal);
# credits (again)
foreach ( $self->cust_credited ) {
}
# payments
+ my $paymenttotal = 0;
foreach my $payment ( $self->_items_payments ) {
my $total = {};
$total->{'total_item'} = &$escape_function($payment->{'description'});
- #$paymenttotal
+ $paymenttotal += $payment->{'amount'};
$total->{'total_amount'} = '-'. $other_money_char. $payment->{'amount'};
$adjusttotal += $payment->{'amount'};
if ( $multisection ) {
$money_char. sprintf("%10.2f", $payment->{'amount'}),
];
}
+ $invoice_data{'paymenttotal'} = sprintf('%.2f', $paymenttotal);
if ( $multisection ) {
$adjust_section->{'subtotal'} = $other_money_char.
$msg;
}
+sub balance_due_date {
+ my $self = shift;
+ my $duedate = '';
+ if ( $conf->exists('invoice_default_terms')
+ && $conf->config('invoice_default_terms')=~ /^\s*Net\s*(\d+)\s*$/ ) {
+ $duedate = time2str("%m/%d/%Y", $self->_date + ($1*86400) );
+ }
+ $duedate;
+}
+
=item invnum_date_pretty
Returns a string with the invoice number and date, for example:
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 );
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;