diff options
author | ivan <ivan> | 2001-09-03 22:07:39 +0000 |
---|---|---|
committer | ivan <ivan> | 2001-09-03 22:07:39 +0000 |
commit | fbcb45dfe5a1bce7981fe4527176b9fdf2ec54b7 (patch) | |
tree | f23551e188aaf6965bb61c13ccae3a48764aab02 /httemplate | |
parent | 33204e66fb11e9e551b95e8656d088506745e361 (diff) |
fix more bugs
Diffstat (limited to 'httemplate')
-rw-r--r-- | httemplate/docs/signup.html | 2 | ||||
-rw-r--r-- | httemplate/docs/upgrade8.html | 30 | ||||
-rwxr-xr-x | httemplate/edit/cust_credit.cgi | 14 | ||||
-rwxr-xr-x | httemplate/edit/cust_credit_bill.cgi | 66 | ||||
-rwxr-xr-x | httemplate/edit/cust_pay.cgi | 33 | ||||
-rwxr-xr-x | httemplate/edit/process/cust_pay.cgi | 26 | ||||
-rwxr-xr-x | httemplate/misc/bill.cgi | 5 | ||||
-rwxr-xr-x | httemplate/view/cust_bill.cgi | 12 | ||||
-rwxr-xr-x | httemplate/view/cust_main.cgi | 59 |
9 files changed, 175 insertions, 72 deletions
diff --git a/httemplate/docs/signup.html b/httemplate/docs/signup.html index f99b7ebb5..262b697bb 100644 --- a/httemplate/docs/signup.html +++ b/httemplate/docs/signup.html @@ -42,7 +42,7 @@ Optional: <li>$password <li>$email_name - first and last name </ul> - (an example file is included as <b>fs_signup/ieak.template</b>) + (an example file is included as <b>fs_signup/ieak.template</b>) See the <a href="http://www.microsoft.com/windows/ieak/techinfo/deploy/60/en/toc.asp">IEAK documentation</a> for more information. <li>If you create a <b>/usr/local/freeside/cck.template</b> file on the external machine, the variables defined will be sent to Netscape users with MIME type <i>application/x-netscape-autoconfigure-dialer-v2</i>. This file will be processed with <a href="http://search.cpan.org/doc/MJD/Text-Template-1.23/Template.pm">Text::Template</a> with the following variables available: <ul> <li>$ac - area code of selected POP diff --git a/httemplate/docs/upgrade8.html b/httemplate/docs/upgrade8.html index 6d5018816..518d76168 100644 --- a/httemplate/docs/upgrade8.html +++ b/httemplate/docs/upgrade8.html @@ -181,8 +181,34 @@ ALTER TABLE cust_main ADD COLUMN comments varchar NULL; <table border><tr><th>PostgreSQL</th><th>MySQL, others</th></tr> <tr><td> <font size=-1><pre> -ALTER TABLE cust_pay RENAME COLUMN invnum TO depreciated; -ALTER TABLE cust_refund RENAME COLUMN crednum TO depreciated; +CREATE TABLE cust_pay_temp ( + paynum int primary key, + custnum int not null, + paid decimal(10,2) not null, + _date int null, + payby char(4) not null, + payinfo varchar(16) null, + paybatch varchar(80) null +); +INSERT INTO cust_pay_temp SELECT * from cust_pay; +DROP TABLE cust_pay; +ALTER TABLE cust_pay_temp RENAME TO cust_pay; +CREATE UNIQUE INDEX cust_pay1 ON cust_pay paynum; +CREATE TABLE cust_refund_temp ( + refundnum int primary key, + custnum int not null, + _date int null, + refund decimal(10,2) not null, + otaker varchar(8) not null, + reason varchar(80) not null, + payby char(4) not null, + payinfo varchar(16) null, + paybatch varchar(80) null +); +INSERT INTO cust_refund_temp SELECT * from cust_refund; +DROP TABLE cust_refund; +ALTER TABLE cust_refund_temp RENAME TO cust_refund; +CREATE UNIQUE INDEX cust_refund1 ON cust_refund refundnum; </pre></font> </td><td> <font size=-1><pre> diff --git a/httemplate/edit/cust_credit.cgi b/httemplate/edit/cust_credit.cgi index a95636662..9b215389a 100755 --- a/httemplate/edit/cust_credit.cgi +++ b/httemplate/edit/cust_credit.cgi @@ -1,5 +1,5 @@ <% -#<!-- $Id: cust_credit.cgi,v 1.2 2001-08-21 02:31:56 ivan Exp $ --> +#<!-- $Id: cust_credit.cgi,v 1.3 2001-09-03 22:07:39 ivan Exp $ --> use strict; use vars qw( $cgi $query $custnum $otaker $p1 $crednum $_date $amount $reason ); @@ -42,31 +42,29 @@ print qq!<FONT SIZE="+1" COLOR="#ff0000">Error: !, $cgi->param('error'), if $cgi->param('error'); print <<END; <FORM ACTION="${p1}process/cust_credit.cgi" METHOD=POST> - <PRE> END $crednum = ""; print qq!Credit #<B>!, $crednum ? $crednum : " <I>(NEW)</I>", qq!</B><INPUT TYPE="hidden" NAME="crednum" VALUE="$crednum">!; -print qq!\nCustomer #<B>$custnum</B><INPUT TYPE="hidden" NAME="custnum" VALUE="$custnum">!; +print qq!<BR>Customer #<B>$custnum</B><INPUT TYPE="hidden" NAME="custnum" VALUE="$custnum">!; print qq!<INPUT TYPE="hidden" NAME="paybatch" VALUE="">!; -print qq!\nDate: <B>!, time2str("%D",$_date), qq!</B><INPUT TYPE="hidden" NAME="_date" VALUE="">!; +print qq!<BR>Date: <B>!, time2str("%D",$_date), qq!</B><INPUT TYPE="hidden" NAME="_date" VALUE="">!; -print qq!\nAmount \$<INPUT TYPE="text" NAME="amount" VALUE="$amount" SIZE=8 MAXLENGTH=8>!; +print qq!<BR>Amount \$<INPUT TYPE="text" NAME="amount" VALUE="$amount" SIZE=8 MAXLENGTH=8>!; print qq!<INPUT TYPE="hidden" NAME="credited" VALUE="">!; #print qq! <INPUT TYPE="checkbox" NAME="refund" VALUE="$refund">Also post refund!; print qq!<INPUT TYPE="hidden" NAME="otaker" VALUE="$otaker">!; -print qq!\nReason <INPUT TYPE="text" NAME="reason" VALUE="$reason" SIZE=72>!; +print qq!<BR>Reason <INPUT TYPE="text" NAME="reason" VALUE="$reason">!; print <<END; -</PRE> <BR> -<CENTER><INPUT TYPE="submit" VALUE="Post"></CENTER> +<INPUT TYPE="submit" VALUE="Post"> END print <<END; diff --git a/httemplate/edit/cust_credit_bill.cgi b/httemplate/edit/cust_credit_bill.cgi index c4cd34eab..13bad1852 100755 --- a/httemplate/edit/cust_credit_bill.cgi +++ b/httemplate/edit/cust_credit_bill.cgi @@ -1,11 +1,12 @@ <% -#<!-- $Id: cust_credit_bill.cgi,v 1.2 2001-09-02 07:49:52 ivan Exp $ --> +#<!-- $Id: cust_credit_bill.cgi,v 1.3 2001-09-03 22:07:39 ivan Exp $ --> use strict; -use vars qw( $cgi $query $custnum $invnum $otaker $p1 $crednum $_date $amount $reason $cust_credit ); +use vars qw( $cgi $query $custnum $invnum $otaker $p1 $crednum $amount $reason $cust_credit ); use Date::Format; use CGI; use CGI::Carp qw(fatalsToBrowser); +use Date::Format; use FS::UID qw(cgisuidsetup getotaker); use FS::CGI qw(header popurl); use FS::Record qw(qsearch fields); @@ -32,7 +33,6 @@ if ( $cgi->param('error') ) { #$refund = 'yes'; $invnum = ''; } -$_date = time; $otaker = getotaker; @@ -44,31 +44,65 @@ print qq!<FONT SIZE="+1" COLOR="#ff0000">Error: !, $cgi->param('error'), if $cgi->param('error'); print <<END; <FORM ACTION="${p1}process/cust_credit_bill.cgi" METHOD=POST> - <PRE> END die unless $cust_credit = qsearchs('cust_credit', { 'crednum' => $crednum } ); -print qq!Credit #<B>!, $crednum, qq!</B><INPUT TYPE="hidden" NAME="crednum" VALUE="$crednum">!; +my $credited = $cust_credit->credited; + +print "Credit # <B>$crednum</B>". + qq!<INPUT TYPE="hidden" NAME="crednum" VALUE="$crednum">!. + '<BR>Date: <B>'. time2str("%D", $cust_credit->_date). '</B>'. + '<BR>Amount: $<B>'. $cust_credit->amount. '</B>'. + "<BR>Unapplied amount: \$<B>$credited</B>". + '<BR>Reason: <B>'. $cust_credit->reason. '</B>' + ; + +my @cust_bill = grep $_->owed != 0, + qsearch('cust_bill', { 'custnum' => $cust_credit->custnum } ); + +print <<END; +<SCRIPT> +function changed(what) { + cust_bill = what.options[what.selectedIndex].value; +END -print qq!\nInvoice # <SELECT NAME="invnum" SIZE=1>!; -foreach $_ (grep $_->owed != 0, qsearch('cust_bill', { 'custnum' => $cust_credit->custnum } ) ) { - print "<OPTION", (($_->invnum eq $invnum) ? " SELECTED" : ""), - qq! VALUE="! .$_->invnum. qq!">!. $_->invnum. qq! (! . $_->owed . qq!)!; +foreach my $cust_bill ( @cust_bill ) { + my $invnum = $cust_bill->invnum; + my $changeto = $cust_bill->owed < $cust_credit->credited + ? $cust_bill->owed + : $cust_credit->credited; + print <<END; + if ( cust_bill == $invnum ) { + what.form.amount.value = "$changeto"; + } +END } -print qq!<OPTION VALUE="Refund">Refund!; -print "</SELECT>"; -print qq!\nDate: <B>!, time2str("%D",$_date), qq!</B><INPUT TYPE="hidden" NAME="_date" VALUE="">!; +print <<END; + if ( cust_bill == "Refund" ) { + what.form.amount.value = "$credited"; + } +} +</SCRIPT> +END -print qq!\nAmount \$<INPUT TYPE="text" NAME="amount" VALUE="$amount" SIZE=8 MAXLENGTH=8>!; +print qq!<BR>Invoice #<SELECT NAME="invnum" SIZE=1 onChange="changed(this)">!, + '<OPTION VALUE="">'; +foreach my $cust_bill ( @cust_bill ) { + print '<OPTION'. ( $cust_bill->invnum eq $invnum ? ' SELECTED' : '' ). + ' VALUE="'. $cust_bill->invnum. '">'. $cust_bill->invnum. + ' - '. time2str("%D",$cust_bill->_date). + ' - $'. $cust_bill->owed; +} +print qq!<OPTION VALUE="Refund">Refund!; +print "</SELECT>"; -#print qq! <INPUT TYPE="checkbox" NAME="refund" VALUE="$refund">Also post refund!; +print qq!<BR>Amount \$<INPUT TYPE="text" NAME="amount" VALUE="$amount" SIZE=8 MAXLENGTH=8>!; print <<END; -</PRE> <BR> -<CENTER><INPUT TYPE="submit" VALUE="Post"></CENTER> +<INPUT TYPE="submit" VALUE="Apply"> END print <<END; diff --git a/httemplate/edit/cust_pay.cgi b/httemplate/edit/cust_pay.cgi index d1823d4b3..c83f585d1 100755 --- a/httemplate/edit/cust_pay.cgi +++ b/httemplate/edit/cust_pay.cgi @@ -1,8 +1,8 @@ <% -#<!-- $Id: cust_pay.cgi,v 1.2 2001-08-21 02:31:56 ivan Exp $ --> +#<!-- $Id: cust_pay.cgi,v 1.3 2001-09-03 22:07:39 ivan Exp $ --> use strict; -use vars qw( $cgi $invnum $p1 $_date $payby $payinfo $paid ); +use vars qw( $cgi $link $linknum $p1 $_date $payby $payinfo $paid ); use Date::Format; use CGI; use CGI::Carp qw(fatalsToBrowser); @@ -13,17 +13,27 @@ $cgi = new CGI; cgisuidsetup($cgi); if ( $cgi->param('error') ) { - $invnum = $cgi->param('invnum'); + $link = $cgi->param('link'); + $linknum = $cgi->param('linknum'); $paid = $cgi->param('paid'); $payby = $cgi->param('payby'); $payinfo = $cgi->param('payinfo'); -} else { - my ($query) = $cgi->keywords; +} elsif ($cgi->keywords) { + my($query) = $cgi->keywords; $query =~ /^(\d+)$/; - $invnum = $1; + $link = 'invnum'; + $linknum = $1; $paid = ''; - $payby = "BILL"; + $payby = 'BILL'; $payinfo = ""; +} elsif ( $cgi->param('custnum') =~ /^(\d+)$/ ) { + $link = 'custnum'; + $linknum = $1; + $paid = ''; + $payby = 'BILL'; + $payinfo = ''; +} else { + die "illegal query ". $cgi->keywords; } $_date = time; @@ -36,10 +46,15 @@ print qq!<FONT SIZE="+1" COLOR="#ff0000">Error: !, $cgi->param('error'), print <<END; <FORM ACTION="${p1}process/cust_pay.cgi" METHOD=POST> - <HR><PRE> + <INPUT TYPE="hidden" NAME="link" VALUE="$link"> + <INPUT TYPE="hidden" NAME="linknum" VALUE="$linknum"> END -print qq!Invoice #<B>$invnum</B><INPUT TYPE="hidden" NAME="invnum" VALUE="$invnum">!; +if ( $link eq 'invnum' ) { + print "Invoice #<B>$linknum</B>"; +} elsif ( $link eq 'custnum' ) { + print "Customer #<B>$linknum</B>"; +} print qq!<BR>Date: <B>!, time2str("%D",$_date), qq!</B><INPUT TYPE="hidden" NAME="_date" VALUE="$_date">!; diff --git a/httemplate/edit/process/cust_pay.cgi b/httemplate/edit/process/cust_pay.cgi index fcdc233b9..9be96505d 100755 --- a/httemplate/edit/process/cust_pay.cgi +++ b/httemplate/edit/process/cust_pay.cgi @@ -1,8 +1,8 @@ <% -#<!-- $Id: cust_pay.cgi,v 1.2 2001-08-21 02:31:56 ivan Exp $ --> +#<!-- $Id: cust_pay.cgi,v 1.3 2001-09-03 22:07:39 ivan Exp $ --> use strict; -use vars qw( $cgi $invnum $new $error ); +use vars qw( $cgi $link $linknum $new $error ); use CGI; use CGI::Carp qw(fatalsToBrowser); use FS::UID qw(cgisuidsetup); @@ -13,24 +13,32 @@ use FS::cust_pay; $cgi = new CGI; &cgisuidsetup($cgi); -$cgi->param('invnum') =~ /^(\d*)$/ or die "Illegal svcnum!"; -$invnum = $1; +$cgi->param('linknum') =~ /^(\d+)$/ + or die "Illegal linknum: ". $cgi->param('linknum'); +$linknum = $1; + +$cgi->param('link') =~ /^(custnum|invnum)$/ + or die "Illegal link: ". $cgi->param('link'); +$link = $1; $new = new FS::cust_pay ( { + $link => $linknum, map { $_, scalar($cgi->param($_)); - #} qw(invnum paid _date payby payinfo paybatch) - } fields('cust_pay') + } qw(paid _date payby payinfo paybatch) + #} fields('cust_pay') } ); -$error=$new->insert; +$error = $new->insert; if ($error) { $cgi->param('error', $error); print $cgi->redirect(popurl(2). 'cust_pay.cgi?'. $cgi->query_string ); exit; -} else { - print $cgi->redirect(popurl(3). "view/cust_bill.cgi?$invnum"); +} elsif ( $link eq 'invnum' ) { + print $cgi->redirect(popurl(3). "view/cust_bill.cgi?$linknum"); +} elsif ( $link eq 'custnum' ) { + print $cgi->redirect(popurl(3). "view/cust_main.cgi?$linknum"); } %> diff --git a/httemplate/misc/bill.cgi b/httemplate/misc/bill.cgi index cc7938308..43c7c576d 100755 --- a/httemplate/misc/bill.cgi +++ b/httemplate/misc/bill.cgi @@ -1,5 +1,5 @@ <% -#<!-- $Id: bill.cgi,v 1.2 2001-08-21 02:31:56 ivan Exp $ --> +#<!-- $Id: bill.cgi,v 1.3 2001-09-03 22:07:39 ivan Exp $ --> use strict; use vars qw( $cgi $query $custnum $cust_main $error ); @@ -25,6 +25,9 @@ $error = $cust_main->bill( ); &eidiot($error) if $error; +$cust_main->apply_payments; +$cust_main->apply_credits; + $error = $cust_main->collect( # 'invoice-time'=>$time, # 'batch_card'=> 'yes', diff --git a/httemplate/view/cust_bill.cgi b/httemplate/view/cust_bill.cgi index 12fe8578a..1e024f377 100755 --- a/httemplate/view/cust_bill.cgi +++ b/httemplate/view/cust_bill.cgi @@ -1,5 +1,5 @@ <% -# <!-- $Id: cust_bill.cgi,v 1.2 2001-08-21 02:31:57 ivan Exp $ --> +# <!-- $Id: cust_bill.cgi,v 1.3 2001-09-03 22:07:39 ivan Exp $ --> use strict; use vars qw ( $cgi $query $invnum $cust_bill $custnum $printed $p ); @@ -29,9 +29,13 @@ $p = popurl(2); print $cgi->header( '-expires' => 'now' ), header('Invoice View', menubar( "Main Menu" => $p, "View this customer (#$custnum)" => "${p}view/cust_main.cgi?$custnum", -)), <<END; - <A HREF="${p}edit/cust_pay.cgi?$invnum">Enter payments (check/cash) against this invoice</A> - <BR><A HREF="${p}misc/print-invoice.cgi?$invnum">Reprint this invoice</A> +)); + +print qq!<A HREF="${p}edit/cust_pay.cgi?$invnum">Enter payments (check/cash) against this invoice</A> | ! + if $cust_bill->owed > 0; + +print <<END; + <A HREF="${p}misc/print-invoice.cgi?$invnum">Reprint this invoice</A> <BR><BR>(Printed $printed times) <PRE> END diff --git a/httemplate/view/cust_main.cgi b/httemplate/view/cust_main.cgi index 6ece5c2be..a32abc0e1 100755 --- a/httemplate/view/cust_main.cgi +++ b/httemplate/view/cust_main.cgi @@ -1,5 +1,5 @@ <% -#<!-- $Id: cust_main.cgi,v 1.7 2001-09-02 07:49:52 ivan Exp $ --> +#<!-- $Id: cust_main.cgi,v 1.8 2001-09-03 22:07:39 ivan Exp $ --> use strict; use vars qw ( $cgi $query $custnum $cust_main $hashref $agent $referral @@ -192,7 +192,7 @@ print '<BR>'; @invoicing_list = $cust_main->invoicing_list; print "Billing information (", - qq!<A HREF="!, popurl(2), qq!/misc/bill.cgi?$custnum">!, "Bill now</A>)", + qq!<A HREF="!, popurl(2), qq!misc/bill.cgi?$custnum">!, "Bill now</A>)", &ntable("#cccccc"), "<TR><TD>", &ntable("#cccccc",2), '<TR><TD ALIGN="right">Tax exempt</TD><TD BGCOLOR="#ffffff">', $cust_main->tax ? 'yes' : 'no', @@ -269,9 +269,9 @@ print qq!!, &table(), "\n", #get package info if ( $conf->exists('hidecancelledpackages') ) { - @packages = $cust_main->ncancelled_pkgs; + @packages = sort { $a->pkgnum <=> $b->pkgnum } ($cust_main->ncancelled_pkgs); } else { - @packages = $cust_main->all_pkgs; + @packages = sort { $a->pkgnum <=> $b->pkgnum } ($cust_main->all_pkgs); } $n1 = '<TR>'; @@ -320,28 +320,31 @@ print "</TR>"; print "</TABLE>"; #formatting -print qq!<BR><BR><A NAME="history">Payment History!, - qq!</A>!, - qq! ( Click on invoice to view invoice/enter payment. | !, - qq!<A HREF="!, popurl(2), qq!edit/cust_credit.cgi?$custnum">!, - qq!Post credit / refund</A> )!; +print qq!<BR><BR><A NAME="history">Payment History!. + qq!</A> ( !. + qq!<A HREF="!. popurl(2). qq!edit/cust_pay.cgi?custnum=$custnum">!. + qq!Post payment</A> | !. + qq!<A HREF="!. popurl(2). qq!edit/cust_credit.cgi?$custnum">!. + qq!Post credit</A> )!; #get payment history # # major problem: this whole thing is way too sloppy. # minor problem: the description lines need better formatting. -# SHOULD SHOW UNAPPLIED PAYMENTS (now show unapplied credits) - @history = (); #needed for mod_perl :) @bills = qsearch('cust_bill',{'custnum'=>$custnum}); foreach $bill (@bills) { my($bref)=$bill->hashref; + my $bpre = ( $bill->owed > 0 ) + ? '<b><font size="+1" color="#ff0000"> Open ' + : ''; + my $bpost = ( $bill->owed > 0 ) ? '</font></b>' : ''; push @history, $bref->{_date} . qq!\t<A HREF="!. popurl(2). qq!view/cust_bill.cgi?! . - $bref->{invnum} . qq!">Invoice #! . $bref->{invnum} . - qq! (Balance \$! . $bill->owed . qq!)</A>\t! . + $bref->{invnum} . qq!">${bpre}Invoice #! . $bref->{invnum} . + qq! (Balance \$! . $bill->owed . qq!)$bpost</A>\t! . $bref->{charged} . qq!\t\t\t!; my(@cust_bill_pay)=qsearch('cust_bill_pay',{'invnum'=> $bref->{invnum} } ); @@ -356,6 +359,7 @@ foreach $bill (@bills) { $payment->payinfo, $cust_bill_pay->amount, ); + $payinfo = substr($payinfo,0,4). 'x'x(length($payinfo)-4) if $payby eq 'CARD'; push @history, "$date\tPayment, Invoice #$invnum ($payby $payinfo)\t\t$paid\t\t"; } @@ -364,33 +368,34 @@ foreach $bill (@bills) { qsearch('cust_credit_bill', { 'invnum'=> $bref->{invnum} } ); foreach my $cust_credit_bill (@cust_credit_bill) { my $cust_credit = $cust_credit_bill->cust_credit; - my($date, $invnum, $crednum, $amount, $reason ) = ( + my($date, $invnum, $crednum, $amount, $reason, $app_date ) = ( $cust_credit->_date, $cust_credit_bill->invnum, $cust_credit_bill->crednum, $cust_credit_bill->amount, $cust_credit->reason, + time2str("%D", $cust_credit_bill->_date), ); push @history, - "$date\tCredit #$crednum, Invoice #$invnum $reason\t\t\t$amount\t"; + "$date\tCredit #$crednum: $reason<BR>". + "(applied to invoice #$invnum on $app_date)\t\t\t$amount\t"; } } -@credits = grep $_->credited, qsearch('cust_credit',{'custnum'=>$custnum}); +@credits = grep { $_->credited > 0 } + qsearch('cust_credit',{'custnum'=>$custnum}); foreach $credit (@credits) { my($cref)=$credit->hashref; push @history, $cref->{_date} . "\t" . qq!<A HREF="! . popurl(2). qq!edit/cust_credit_bill.cgi?!. $cref->{crednum} . qq!">!. - '<font color="#ff0000">Unapplied credit #' . - $cref->{crednum} . ", (Balance \$" . - $credit->credited . ")</font></A> ". - $cref->{reason} . "\t\t\t" . $cref->{amount} . "\t"; + '<b><font size="+1" color="#ff0000">Unapplied credit #' . + $cref->{crednum} . "</font></b></A>: ". + $cref->{reason} . "\t\t\t" . $credit->credited . "\t"; } my(@refunds)=qsearch('cust_refund',{'custnum'=> $custnum } ); -my($refund); -foreach $refund (@refunds) { +foreach my $refund (@refunds) { my($rref)=$refund->hashref; my($refundnum) = ( $refund->refundnum, @@ -403,6 +408,16 @@ foreach $refund (@refunds) { $rref->{refund}; } +my @unapplied_payments = + grep { $_->unapplied > 0 } qsearch('cust_pay', { 'custnum' => $custnum } ); +foreach my $payment (@unapplied_payments) { + push @history, + $payment->_date. "\t". + '<A HREF="'. popurl(2). 'edit/cust_bill_pay.cgi?'. $payment->paynum. '">'. + '<b><font size="+1" color="#ff0000">Unapplied payment #' . + $payment->paynum . "</font></b></A>". + "\t\t" . $payment->unapplied . "\t\t"; +} #formatting print &table(), <<END; |