summaryrefslogtreecommitdiff
path: root/httemplate/edit
diff options
context:
space:
mode:
authorivan <ivan>2008-06-05 05:06:36 +0000
committerivan <ivan>2008-06-05 05:06:36 +0000
commitd7977d0a346e3e5975c44a75b915bb437be66f4f (patch)
treefab1f36589dd47ddb27d54edd81a69b35fa92fd1 /httemplate/edit
parente77f5d7c3812a65be18c5fc4ede509c42c5e3358 (diff)
payment and credit applications have separate "apply to refund" choices now, and no auto-refund choice in the invoice dropdown. RT#3545
Diffstat (limited to 'httemplate/edit')
-rwxr-xr-xhttemplate/edit/cust_bill_pay.cgi88
-rwxr-xr-xhttemplate/edit/cust_credit_bill.cgi95
-rwxr-xr-xhttemplate/edit/cust_credit_refund.cgi14
-rwxr-xr-xhttemplate/edit/cust_pay_refund.cgi14
-rw-r--r--httemplate/edit/elements/ApplicationCommon.html170
-rwxr-xr-xhttemplate/edit/process/cust_bill_pay.cgi50
-rwxr-xr-xhttemplate/edit/process/cust_credit_bill.cgi51
-rwxr-xr-xhttemplate/edit/process/cust_credit_refund.cgi13
-rwxr-xr-xhttemplate/edit/process/cust_pay_refund.cgi13
-rw-r--r--httemplate/edit/process/elements/ApplicationCommon.html77
10 files changed, 331 insertions, 254 deletions
diff --git a/httemplate/edit/cust_bill_pay.cgi b/httemplate/edit/cust_bill_pay.cgi
index b6a064768..532db6a6e 100755
--- a/httemplate/edit/cust_bill_pay.cgi
+++ b/httemplate/edit/cust_bill_pay.cgi
@@ -1,86 +1,14 @@
-<% include('/elements/header-popup.html', 'Apply Payment') %>
-
-<% include('/elements/error.html') %>
-
-<FORM ACTION="<% $p1 %>process/cust_bill_pay.cgi" METHOD=POST>
-
-Payment #<B><% $paynum %></B>
-<INPUT TYPE="hidden" NAME="paynum" VALUE="<% $paynum %>">
-
-<BR>Date: <B><% time2str("%D", $cust_pay->_date) %></B>
-
-<BR>Amount: $<B><% $cust_pay->paid %></B>
-
-<BR>Unapplied amount: $<B><% $unapplied %></B>
-
-<SCRIPT TYPE="text/javascript">
-function changed(what) {
- cust_bill = what.options[what.selectedIndex].value;
-
-% foreach my $cust_bill ( @cust_bill ) {
-
- if ( cust_bill == <% $cust_bill->invnum %> ) {
- what.form.amount.value = "<% min($cust_bill->owed, $unapplied) %>";
- }
-
-% }
-
- if ( cust_bill == "Refund" ) {
- what.form.amount.value = "<% $unapplied %>";
- }
-}
-</SCRIPT>
-
-<BR>Invoice #<SELECT NAME="invnum" SIZE=1 onChange="changed(this)">
-<OPTION VALUE="">
-
-% foreach my $cust_bill ( @cust_bill ) {
- <OPTION<% $cust_bill->invnum eq $invnum ? ' SELECTED' : '' %> VALUE="<% $cust_bill->invnum %>"><% $cust_bill->invnum %> - <% time2str("%D", $cust_bill->_date) %> - $<% $cust_bill->owed %>
-% }
-
-<OPTION VALUE="Refund">Refund
-</SELECT>
-
-<BR>Amount $<INPUT TYPE="text" NAME="amount" VALUE="<% $amount %>" SIZE=8 MAXLENGTH=8>
-
-<BR>
-<CENTER><INPUT TYPE="submit" VALUE="Apply"></CENTER>
-
-</FORM>
-
-<% include('/elements/footer.html') %>
-
+<% include('elements/ApplicationCommon.html',
+ 'form_action' => 'process/cust_bill_pay.cgi',
+ 'src_table' => 'cust_pay',
+ 'src_thing' => 'payment',
+ 'dst_table' => 'cust_bill',
+ 'dst_thing' => 'invoice',
+ )
+%>
<%init>
die "access denied"
unless $FS::CurrentUser::CurrentUser->access_right('Apply payment');
-my($paynum, $amount, $invnum);
-if ( $cgi->param('error') ) {
- $paynum = $cgi->param('paynum');
- $amount = $cgi->param('amount');
- $invnum = $cgi->param('invnum');
-} else {
- my($query) = $cgi->keywords;
- $query =~ /^(\d+)$/;
- $paynum = $1;
- $amount = '';
- $invnum = '';
-}
-
-my $otaker = getotaker;
-
-my $p1 = popurl(1);
-
-my $cust_pay = qsearchs('cust_pay', { 'paynum' => $paynum } );
-die "payment $paynum not found!" unless $cust_pay;
-
-my $unapplied = $cust_pay->unapplied;
-
-my @cust_bill = sort { $a->_date <=> $b->_date
- or $a->invnum <=> $b->invnum
- }
- grep { $_->owed != 0 }
- qsearch('cust_bill', { 'custnum' => $cust_pay->custnum } );
-
</%init>
diff --git a/httemplate/edit/cust_credit_bill.cgi b/httemplate/edit/cust_credit_bill.cgi
index 59a74b279..e3627ff37 100755
--- a/httemplate/edit/cust_credit_bill.cgi
+++ b/httemplate/edit/cust_credit_bill.cgi
@@ -1,93 +1,14 @@
-<% include('/elements/header-popup.html', 'Apply Credit') %>
-
-<% include('/elements/error.html') %>
-
-<FORM ACTION="<% $p1 %>process/cust_credit_bill.cgi" METHOD=POST>
-
-Credit #<B><% $crednum %></B>
-<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>
-
-<SCRIPT>
-function changed(what) {
- cust_bill = what.options[what.selectedIndex].value;
-
-% foreach my $cust_bill ( @cust_bill ) {
-
- if ( cust_bill == <% $cust_bill->invnum %> ) {
- what.form.amount.value = "<% min($cust_bill->owed, $credited) %>";
- }
-
-% }
-
- if ( cust_bill == "Refund" ) {
- what.form.amount.value = "<% $credited %>";
- }
-}
-</SCRIPT>
-
-<BR>Invoice #<SELECT NAME="invnum" SIZE=1 onChange="changed(this)">
-<OPTION VALUE="">
-
-% foreach my $cust_bill ( @cust_bill ) {
- <OPTION<% $cust_bill->invnum eq $invnum ? ' SELECTED' : '' %> VALUE="<% $cust_bill->invnum %>"><% $cust_bill->invnum %> - <% time2str("%D",$cust_bill->_date) %> - $<% $cust_bill->owed %>
-% }
-
-<OPTION VALUE="Refund">Refund
-</SELECT>
-
-<BR>Amount $<INPUT TYPE="text" NAME="amount" VALUE="<% $amount %>" SIZE=8 MAXLENGTH=8>
-
-<BR>
-<CENTER><INPUT TYPE="submit" VALUE="Apply"></CENTER>
-
-</FORM>
-</BODY>
-</HTML>
-
+<% include('elements/ApplicationCommon.html',
+ 'form_action' => 'process/cust_credit_bill.cgi',
+ 'src_table' => 'cust_credit',
+ 'src_thing' => 'credit',
+ 'dst_table' => 'cust_bill',
+ 'dst_thing' => 'invoice',
+ )
+%>
<%init>
die "access denied"
unless $FS::CurrentUser::CurrentUser->access_right('Apply credit');
-my($crednum, $amount, $invnum);
-if ( $cgi->param('error') ) {
- #$cust_credit_bill = new FS::cust_credit_bill ( {
- # map { $_, scalar($cgi->param($_)) } fields('cust_credit_bill')
- #} );
- $crednum = $cgi->param('crednum');
- $amount = $cgi->param('amount');
- #$refund = $cgi->param('refund');
- $invnum = $cgi->param('invnum');
-} else {
- my($query) = $cgi->keywords;
- $query =~ /^(\d+)$/;
- $crednum = $1;
- $amount = '';
- #$refund = 'yes';
- $invnum = '';
-}
-
-my $otaker = getotaker;
-
-my $p1 = popurl(1);
-
-my $cust_credit = qsearchs('cust_credit', { 'crednum' => $crednum } );
-die "credit $crednum not found!" unless $cust_credit;
-
-my $credited = $cust_credit->credited;
-
-my @cust_bill = sort { $a->_date <=> $b->_date
- or $a->invnum <=> $b->invnum
- }
- grep { $_->owed != 0 }
- qsearch('cust_bill', { 'custnum' => $cust_credit->custnum } );
-
</%init>
diff --git a/httemplate/edit/cust_credit_refund.cgi b/httemplate/edit/cust_credit_refund.cgi
new file mode 100755
index 000000000..f5bbb5633
--- /dev/null
+++ b/httemplate/edit/cust_credit_refund.cgi
@@ -0,0 +1,14 @@
+<% include('elements/ApplicationCommon.html',
+ 'form_action' => 'process/cust_credit_refund.cgi',
+ 'src_table' => 'cust_credit',
+ 'src_thing' => 'credit',
+ 'dst_table' => 'cust_refund',
+ 'dst_thing' => 'refund',
+ )
+%>
+<%init>
+
+die "access denied"
+ unless $FS::CurrentUser::CurrentUser->access_right('Apply credit');
+
+</%init>
diff --git a/httemplate/edit/cust_pay_refund.cgi b/httemplate/edit/cust_pay_refund.cgi
new file mode 100755
index 000000000..f82fe36fe
--- /dev/null
+++ b/httemplate/edit/cust_pay_refund.cgi
@@ -0,0 +1,14 @@
+<% include('elements/ApplicationCommon.html',
+ 'form_action' => 'process/cust_pay_refund.cgi',
+ 'src_table' => 'cust_pay',
+ 'src_thing' => 'payment',
+ 'dst_table' => 'cust_refund',
+ 'dst_thing' => 'refund',
+ )
+%>
+<%init>
+
+die "access denied"
+ unless $FS::CurrentUser::CurrentUser->access_right('Apply payment');
+
+</%init>
diff --git a/httemplate/edit/elements/ApplicationCommon.html b/httemplate/edit/elements/ApplicationCommon.html
new file mode 100644
index 000000000..0e6c49975
--- /dev/null
+++ b/httemplate/edit/elements/ApplicationCommon.html
@@ -0,0 +1,170 @@
+<%doc>
+
+Examples:
+
+ #cust_bill_pay
+ include('elements/ApplicationCommon.html',
+ 'form_action' => 'process/cust_bill_pay.cgi',
+ 'src_table' => 'cust_pay',
+ 'src_thing' => 'payment',
+ 'dst_table' => 'cust_bill',
+ 'dst_thing' => 'invoice',
+ )
+
+ #cust_credit_bill
+ include('elements/ApplicationCommon.html',
+ 'form_action' => 'process/cust_credit_bill.cgi',
+ 'src_table' => 'cust_credit',
+ 'src_thing' => 'credit',
+ 'dst_table' => 'cust_bill',
+ 'dst_thing' => 'invoice',
+ )
+
+ #cust_pay_refund
+ include('elements/ApplicationCommon.html',
+ 'form_action' => 'process/cust_pay_refund.cgi',
+ 'src_table' => 'cust_pay',
+ 'src_thing' => 'payment',
+ 'dst_table' => 'cust_refund',
+ 'dst_thing' => 'refund',
+ )
+
+ #cust_credit_refund
+ include('elements/ApplicationCommon.html',
+ 'form_action' => 'process/cust_credit_refund.cgi',
+ 'src_table' => 'cust_credit',
+ 'src_thing' => 'credit',
+ 'dst_table' => 'cust_refund',
+ 'dst_thing' => 'refund',
+ )
+
+</%doc>
+<% include('/elements/header-popup.html', "Apply $src_thing$to" ) %>
+
+<% include('/elements/error.html') %>
+
+<FORM ACTION="<% $p1. $opt{'form_action'} %>" METHOD=POST>
+
+<% $src_thing %> #<B><% $src_pkeyvalue %></B><BR>
+<INPUT TYPE="hidden" NAME="<% $src_pkey %>" VALUE="<% $src_pkeyvalue %>">
+
+<TABLE BGCOLOR="#cccccc" BORDER=0 CELLSPACING=0>
+
+<TR>
+ <TD ALIGN="right">Date: </TD>
+ <TD><B><% time2str("%D", $src->_date) %></B></TD>
+</TR>
+
+<TR>
+ <TD ALIGN="right">Amount: </TD>
+ <TD><B><% $money_char %><% $src->amount %></B></TD>
+</TR>
+
+<TR>
+ <TD ALIGN="right">Unapplied amount: </TD>
+ <TD><B><% $money_char %><% $unapplied %></B></TD>
+</TR>
+
+% if ( $src_table eq 'cust_credit' ) {
+ <TR>
+ <TD ALIGN="right">Reason: </TD>
+ <TD><B><% $src->reason %></B></TD>
+ </TR>
+% }
+
+</TABLE>
+<BR>
+
+<SCRIPT TYPE="text/javascript">
+function changed(what) {
+ dst = what.options[what.selectedIndex].value;
+
+% foreach my $dst ( @dst ) {
+
+ if ( dst == <% $dst->$dst_pkey %> ) {
+ what.form.amount.value = "<% min($dst->$dst_unapplied, $unapplied) %>";
+ }
+
+% }
+
+}
+</SCRIPT>
+
+Apply to:
+
+<TABLE BGCOLOR="#cccccc" BORDER=0 CELLSPACING=0>
+
+<TR>
+ <TD ALIGN="right"><% $dst_thing %>: </TD>
+ <TD><SELECT NAME="<% $dst_pkey %>" SIZE=1 onChange="changed(this)">
+<OPTION VALUE="">
+
+% foreach my $dst ( @dst ) {
+ <OPTION<% $dst->$dst_pkey eq $dst_pkeyvalue ? ' SELECTED' : '' %> VALUE="<% $dst->$dst_pkey %>">#<% $dst->$dst_pkey %> - <% time2str("%D", $dst->_date) %> - $<% $dst->$dst_unapplied %>
+% }
+
+</SELECT>
+ </TD>
+</TR>
+
+<TR>
+ <TD ALIGN="right">Amount: </TD>
+ <TD><% $money_char %><INPUT TYPE="text" NAME="amount" VALUE="<% $amount %>" SIZE=8 MAXLENGTH=8></TD>
+</TR>
+
+</TABLE>
+
+<BR>
+<CENTER><INPUT TYPE="submit" VALUE="Apply"></CENTER>
+
+</FORM>
+
+<% include('/elements/footer.html') %>
+
+<%init>
+
+my %opt = @_;
+
+my $conf = new FS::Conf;
+my $money_char = $conf->config('money_char') || '$';
+
+my $src_thing = ucfirst($opt{'src_thing'});
+my $src_table = $opt{'src_table'};
+my $src_pkey = dbdef->table($src_table)->primary_key;
+
+my $dst_thing = ucfirst($opt{'dst_thing'});
+my $dst_table = $opt{'dst_table'};
+my $dst_pkey = dbdef->table($dst_table)->primary_key;
+my $dst_unapplied = $dst_table eq 'cust_bill' ? 'owed' : 'unapplied';
+
+my $to = $dst_table eq 'cust_refund' ? ' to Refund' : '';
+
+my($src_pkeyvalue, $amount, $dst_pkeyvalue);
+if ( $cgi->param('error') ) {
+ $src_pkeyvalue = $cgi->param($src_pkey);
+ $amount = $cgi->param('amount');
+ $dst_pkeyvalue = $cgi->param($dst_pkey);
+} else {
+ my($query) = $cgi->keywords;
+ $query =~ /^(\d+)$/;
+ $src_pkeyvalue = $1;
+ $amount = '';
+ $dst_pkeyvalue = '';
+}
+
+my $otaker = getotaker;
+
+my $p1 = popurl(1);
+
+my $src = qsearchs($src_table, { $src_pkey => $src_pkeyvalue } );
+die "$src_thing $src_pkeyvalue not found!" unless $src;
+
+my $unapplied = $src->unapplied;
+
+my @dst = sort { $a->_date <=> $b->_date
+ or $a->$dst_pkey <=> $b->$dst_pkey
+ }
+ grep { $_->$dst_unapplied != 0 }
+ qsearch($dst_table, { 'custnum' => $src->custnum } );
+
+</%init>
diff --git a/httemplate/edit/process/cust_bill_pay.cgi b/httemplate/edit/process/cust_bill_pay.cgi
index e2f89f197..2845d3233 100755
--- a/httemplate/edit/process/cust_bill_pay.cgi
+++ b/httemplate/edit/process/cust_bill_pay.cgi
@@ -1,49 +1,13 @@
-%if ( $error ) {
-% $cgi->param('error', $error);
-<% $cgi->redirect(popurl(2). "cust_bill_pay.cgi?". $cgi->query_string ) %>
-%} else {
-<% header('Payment application sucessful') %>
- <SCRIPT TYPE="text/javascript">
- window.top.location.reload();
- </SCRIPT>
- </BODY>
- </HTML>
-% }
+<% include('elements/ApplicationCommon.html',
+ 'error_redirect' => 'cust_bill_pay.cgi',
+ 'src_table' => 'cust_pay',
+ 'src_thing' => 'payment',
+ 'link_table' => 'cust_bill_pay',
+ )
+%>
<%init>
die "access denied"
unless $FS::CurrentUser::CurrentUser->access_right('Apply payment');
-$cgi->param('paynum') =~ /^(\d*)$/ or die "Illegal paynum!";
-my $paynum = $1;
-
-my $cust_pay = qsearchs('cust_pay', { 'paynum' => $paynum } )
- or die "No such paynum";
-
-my $cust_main = qsearchs('cust_main', { 'custnum' => $cust_pay->custnum } )
- or die "Bogus credit: not attached to customer";
-
-my $custnum = $cust_main->custnum;
-
-my $new;
-if ($cgi->param('invnum') =~ /^Refund$/) {
- $new = new FS::cust_refund ( {
- 'reason' => 'Refunding payment', #enter reason in UI
- 'refund' => $cgi->param('amount'),
- 'payby' => 'BILL',
- #'_date' => $cgi->param('_date'),
- 'payinfo' => 'Cash', #enter payinfo in UI
- 'paynum' => $paynum,
- } );
-} else {
- $new = new FS::cust_bill_pay ( {
- map {
- $_, scalar($cgi->param($_));
- #} qw(custnum _date amount invnum)
- } fields('cust_bill_pay')
- } );
-}
-
-my $error = $new->insert;
-
</%init>
diff --git a/httemplate/edit/process/cust_credit_bill.cgi b/httemplate/edit/process/cust_credit_bill.cgi
index 17f9fcb35..c0f34ae5b 100755
--- a/httemplate/edit/process/cust_credit_bill.cgi
+++ b/httemplate/edit/process/cust_credit_bill.cgi
@@ -1,50 +1,13 @@
-%if ( $error ) {
-% $cgi->param('error', $error);
-<% $cgi->redirect(popurl(2). "cust_credit_bill.cgi?". $cgi->query_string ) %>
-%} else {
-<% header('Credit application sucessful') %>
- <SCRIPT TYPE="text/javascript">
- window.top.location.reload();
- </SCRIPT>
- </BODY>
- </HTML>
-% }
+<% include('elements/ApplicationCommon.html',
+ 'error_redirect' => 'cust_credit_bill.cgi',
+ 'src_table' => 'cust_credit',
+ 'src_thing' => 'credit',
+ 'link_table' => 'cust_credit_bill',
+ )
+%>
<%init>
die "access denied"
unless $FS::CurrentUser::CurrentUser->access_right('Apply credit');
-$cgi->param('crednum') =~ /^(\d*)$/ or die "Illegal crednum!";
-my $crednum = $1;
-
-my $cust_credit = qsearchs('cust_credit', { 'crednum' => $crednum } )
- or die "No such crednum";
-
-my $cust_main = qsearchs('cust_main', { 'custnum' => $cust_credit->custnum } )
- or die "Bogus credit: not attached to customer";
-
-my $custnum = $cust_main->custnum;
-
-my $new;
-if ($cgi->param('invnum') =~ /^Refund$/) {
- $new = new FS::cust_refund ( {
- 'reason' => ( $cust_credit->reason || 'refund from credit' ),
- 'refund' => $cgi->param('amount'),
- 'payby' => 'BILL',
- #'_date' => $cgi->param('_date'),
- #'payinfo' => 'Cash',
- 'payinfo' => 'Refund',
- 'crednum' => $crednum,
- } );
-} else {
- $new = new FS::cust_credit_bill ( {
- map {
- $_, scalar($cgi->param($_));
- #} qw(custnum _date amount invnum)
- } fields('cust_credit_bill')
- } );
-}
-
-my $error = $new->insert;
-
</%init>
diff --git a/httemplate/edit/process/cust_credit_refund.cgi b/httemplate/edit/process/cust_credit_refund.cgi
new file mode 100755
index 000000000..d4fd9ff9e
--- /dev/null
+++ b/httemplate/edit/process/cust_credit_refund.cgi
@@ -0,0 +1,13 @@
+<% include('elements/ApplicationCommon.html',
+ 'error_redirect' => 'cust_credit_bill.cgi',
+ 'src_table' => 'cust_credit',
+ 'src_thing' => 'credit',
+ 'link_table' => 'cust_credit_refund',
+ )
+%>
+<%init>
+
+die "access denied"
+ unless $FS::CurrentUser::CurrentUser->access_right('Apply credit');
+
+</%init>
diff --git a/httemplate/edit/process/cust_pay_refund.cgi b/httemplate/edit/process/cust_pay_refund.cgi
new file mode 100755
index 000000000..ffe89ec64
--- /dev/null
+++ b/httemplate/edit/process/cust_pay_refund.cgi
@@ -0,0 +1,13 @@
+<% include('elements/ApplicationCommon.html',
+ 'error_redirect' => 'cust_bill_pay.cgi',
+ 'src_table' => 'cust_pay',
+ 'src_thing' => 'payment',
+ 'link_table' => 'cust_pay_refund',
+ )
+%>
+<%init>
+
+die "access denied"
+ unless $FS::CurrentUser::CurrentUser->access_right('Apply payment');
+
+</%init>
diff --git a/httemplate/edit/process/elements/ApplicationCommon.html b/httemplate/edit/process/elements/ApplicationCommon.html
new file mode 100644
index 000000000..2782dc231
--- /dev/null
+++ b/httemplate/edit/process/elements/ApplicationCommon.html
@@ -0,0 +1,77 @@
+<%doc>
+
+Examples:
+
+ #cust_bill_pay
+ include('elements/ApplicationCommon.html',
+ 'error_redirect' => 'cust_bill_pay.cgi',
+ 'src_table' => 'cust_pay',
+ 'src_thing' => 'payment',
+ 'link_table' => 'cust_bill_pay',
+ )
+
+ #cust_credit_bill
+ include('elements/ApplicationCommon.html',
+ 'error_redirect' => 'cust_credit_bill.cgi',
+ 'src_table' => 'cust_credit',
+ 'src_thing' => 'credit',
+ 'link_table' => 'cust_credit_bill',
+ )
+
+</%doc>
+%if ( $error ) {
+% $cgi->param('error', $error);
+<% $cgi->redirect(popurl(2). $opt{error_redirect}. '?'. $cgi->query_string ) %>
+%} else {
+<% header("$src_thing application$to sucessful") %>
+ <SCRIPT TYPE="text/javascript">
+ window.top.location.reload();
+ </SCRIPT>
+ </BODY>
+ </HTML>
+% }
+<%init>
+
+my %opt = @_;
+
+my $src_thing = ucfirst($opt{'src_thing'});
+my $src_table = $opt{'src_table'};
+my $src_pkey = dbdef->table($src_table)->primary_key;
+
+my $to = $opt{'link_table'} =~ /refund/ ? ' to Refund' : '';
+
+$cgi->param($src_pkey) =~ /^(\d+)$/ or die "Illegal $src_pkey!";
+my $src_pkeyvalue = $1;
+
+my $src = qsearchs($src_table, { $src_pkey => $src_pkeyvalue } )
+ or die "No such $src_pkey: $src_pkeyvalue";
+
+my $cust_main = qsearchs('cust_main', { 'custnum' => $src->custnum } )
+ or die "Bogus $src_thing: not attached to customer";
+
+my $custnum = $cust_main->custnum;
+
+my $new;
+# $new = new FS::cust_refund ( {
+# 'reason' => 'Refunding payment', #enter reason in UI
+# 'refund' => $cgi->param('amount'),
+# 'payby' => 'BILL',
+# #'_date' => $cgi->param('_date'),
+# 'payinfo' => 'Cash', #enter payinfo in UI
+# 'paynum' => $paynum,
+# } );
+#} else {
+
+ my $class = 'FS::'. $opt{link_table};
+
+ $new = $class->new( {
+ map {
+ $_ => scalar($cgi->param($_));
+ } fields($opt{link_table})
+ } );
+
+#}
+
+my $error = $new->insert;
+
+</%init>