payment and credit applications have separate "apply to refund" choices now, and...
authorivan <ivan>
Thu, 5 Jun 2008 05:06:36 +0000 (05:06 +0000)
committerivan <ivan>
Thu, 5 Jun 2008 05:06:36 +0000 (05:06 +0000)
13 files changed:
FS/FS/cust_pay.pm
httemplate/edit/cust_bill_pay.cgi
httemplate/edit/cust_credit_bill.cgi
httemplate/edit/cust_credit_refund.cgi [new file with mode: 0755]
httemplate/edit/cust_pay_refund.cgi [new file with mode: 0755]
httemplate/edit/elements/ApplicationCommon.html [new file with mode: 0644]
httemplate/edit/process/cust_bill_pay.cgi
httemplate/edit/process/cust_credit_bill.cgi
httemplate/edit/process/cust_credit_refund.cgi [new file with mode: 0755]
httemplate/edit/process/cust_pay_refund.cgi [new file with mode: 0755]
httemplate/edit/process/elements/ApplicationCommon.html [new file with mode: 0644]
httemplate/view/cust_main/payment_history/credit.html
httemplate/view/cust_main/payment_history/payment.html

index 1568870..08699ac 100644 (file)
@@ -21,7 +21,7 @@ use FS::cust_pay_void;
 
 @ISA = qw( FS::payinfo_transaction_Mixin FS::cust_main_Mixin FS::Record );
 
-$DEBUG = 0;
+$DEBUG = 1;
 
 $me = '[FS::cust_pay]';
 
@@ -550,6 +550,17 @@ sub unrefunded {
   sprintf("%.2f", $amount );
 }
 
+=item amount
+
+Returns the "paid" field.
+
+=cut
+
+sub amount {
+  my $self = shift;
+  $self->paid();
+}
+
 =back
 
 =head1 CLASS METHODS
@@ -602,7 +613,8 @@ sub _upgrade_data {  #class method
   my $sth = dbh->prepare($count_sql) or die dbh->errstr;
   $sth->execute or die $sth->errstr;
   my $total = $sth->fetchrow_arrayref->[0];
-
+  #warn "$total cust_pay records to update\n"
+  #  if $DEBUG;
   local($DEBUG) = 2 if $total > 1000; #could be a while, force progress info
 
   my $count = 0;
@@ -629,7 +641,7 @@ sub _upgrade_data {  #class method
     my $error = $cust_pay->replace;
 
     if ( $error ) {
-      warn " *** WARNING: Error updaating order taker for payment paynum".
+      warn " *** WARNING: Error updating order taker for payment paynum ".
            $cust_pay->paynun. ": $error\n";
       next;
     }
index b6a0647..532db6a 100755 (executable)
@@ -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>
index 59a74b2..e3627ff 100755 (executable)
@@ -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 (executable)
index 0000000..f5bbb56
--- /dev/null
@@ -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 (executable)
index 0000000..f82fe36
--- /dev/null
@@ -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 (file)
index 0000000..0e6c499
--- /dev/null
@@ -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>
index e2f89f1..2845d32 100755 (executable)
@@ -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>
index 17f9fcb..c0f34ae 100755 (executable)
@@ -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 (executable)
index 0000000..d4fd9ff
--- /dev/null
@@ -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 (executable)
index 0000000..ffe89ec
--- /dev/null
@@ -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 (file)
index 0000000..2782dc2
--- /dev/null
@@ -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>
index bf76945..fd43c1a 100644 (file)
@@ -25,6 +25,16 @@ if (    scalar(@cust_credit_bill)   == 0
                               #default# 'height' => 336,
                           ).
               ')';
+    #XXX if there are any open refunds
+    $apply.= ' ('. include( '/elements/popup_link.html',
+                              'label'    => 'apply to refund',
+                              'action'   => "${p}edit/cust_credit_refund.cgi?".
+                                            $cust_credit->crednum,
+                              'actionlabel' => 'Apply credit to refund',
+                              'width'    => 392,
+                              #default# 'height' => 336,
+                          ).
+              ')';
   }
 } elsif (    scalar(@cust_credit_bill)   == 1
           && scalar(@cust_credit_refund) == 0
@@ -60,15 +70,25 @@ if (    scalar(@cust_credit_bill)   == 0
     $desc .= '&nbsp;&nbsp;<B><FONT COLOR="#FF0000">$'.
              $cust_credit->credited. ' unapplied</FONT></B>';
     if ( $curuser->access_right('Apply credit') ) {
-      $desc = ' ('. include( '/elements/popup_link.html',
-                              'label'       => 'apply',
-                              'action'      => "${p}edit/cust_credit_bill.cgi?".
-                                               $cust_credit->crednum,
-                              'actionlabel' => 'Apply credit',
-                              'width'       => 392,
-                              #default# 'height' => 336,
-                          ).
-              ')';
+      $apply = ' ('. include( '/elements/popup_link.html',
+                                'label'       => 'apply',
+                                'action'      => "${p}edit/cust_credit_bill.cgi?".
+                                                 $cust_credit->crednum,
+                                'actionlabel' => 'Apply credit',
+                                'width'       => 392,
+                                #default# 'height' => 336,
+                            ).
+               ')';
+      #XXX if there are any open refunds
+      $apply.= ' ('. include( '/elements/popup_link.html',
+                                'label'       => 'apply to refund',
+                                'action'      => "${p}edit/cust_credit_refund.cgi?".
+                                                 $cust_credit->crednum,
+                                'actionlabel' => 'Apply credit to refund',
+                                'width'       => 392,
+                                #default# 'height' => 336,
+                            ).
+               ')';
     }
     $desc .= '<BR>';
   }
index 96fca7f..b9a0694 100644 (file)
@@ -49,6 +49,16 @@ if (    scalar(@cust_bill_pay)   == 0
                               #default# 'height' => 336,
                           ).
               ')';
+    #XXX if there are any open refunds
+    $apply.= ' ('. include( '/elements/popup_link.html',
+                              'label'       => 'apply to refund',
+                              'action'      => "${p}edit/cust_pay_refund.cgi?".
+                                               $cust_pay->paynum,
+                              'actionlabel' => 'Apply payment to refund',
+                              'width'       => 392,
+                              #default# 'height' => 336,
+                          ).
+              ')';
   }
 } elsif (    scalar(@cust_bill_pay)   == 1
           && scalar(@cust_pay_refund) == 0
@@ -85,15 +95,25 @@ if (    scalar(@cust_bill_pay)   == 0
              '<B><FONT COLOR="#FF0000">$'.
              $cust_pay->unapplied. ' unapplied</FONT></B>';
     if ( $curuser->access_right('Apply payment') ) {
-      $desc = ' ('. include( '/elements/popup_link.html',
-                               'label'      => 'apply',
-                               'action'     => "${p}edit/cust_bill_pay.cgi?".
-                                               $cust_pay->paynum,
-                               'actionlabel' => 'Apply payment',
-                               'width'      => 392,
-                               #default# 'height' => 336,
-                          ).
-              ')';
+      $apply = ' ('. include( '/elements/popup_link.html',
+                                'label'      => 'apply',
+                                'action'     => "${p}edit/cust_bill_pay.cgi?".
+                                                $cust_pay->paynum,
+                                'actionlabel' => 'Apply payment',
+                                'width'      => 392,
+                                #default# 'height' => 336,
+                           ).
+               ')';
+      #XXX if there are any open refunds
+      $apply.= ' ('. include( '/elements/popup_link.html',
+                                'label'      => 'apply to refund',
+                                'action'     => "${p}edit/cust_pay_refund.cgi?".
+                                                $cust_pay->paynum,
+                                'actionlabel' => 'Apply payment to refund',
+                                'width'      => 392,
+                                #default# 'height' => 336,
+                           ).
+               ')';
     }
     $desc .= '<BR>';
   }