- $options{'paydate'} = $paydate if $paydate =~ /^\d{2,4}-\d{1,2}-01$/;
- $error = $cust_main->realtime_refund_bop( $bop, 'amount' => $refund,
+
+ if ( $cgi->param('batch') ) {
+ $paydate = "2037-12-01" unless $paydate;
+ $error ||= $cust_main->batch_card(
+ 'payby' => $payby,
+ 'amount' => $refund,
+ #'payinfo' => $payinfo,
+ #'paydate' => $paydate,
+ #'payname' => $payname,
+ 'paycode' => 'C',
+ map { $_ => scalar($cgi->param($_)) }
+ @{$payby2fields{$payby}}
+ );
+ errorpage($error) if $error;
+
+ my %hash = map {
+ $_, scalar($cgi->param($_))
+ } fields('cust_refund');
+
+ ## unapply payment before creating refund.
+ while ( $cust_pay && $cust_pay->unapplied < $refund ) {
+ my @cust_bill_pay = $cust_pay->cust_bill_pay;
+ last unless @cust_bill_pay;
+ my $cust_bill_pay = pop @cust_bill_pay;
+ my $error = $cust_bill_pay->delete;
+ last if $error;
+ }
+
+ my $new = new FS::cust_refund ( { 'paynum' => $paynum,
+ %hash,
+ } );
+ $error = $new->insert;
+
+ # if not a batch refund run realtime.
+ } else {
+ $options{'paydate'} = $paydate if $paydate =~ /^\d{2,4}-\d{1,2}-01$/;
+ $error = $cust_main->realtime_refund_bop( $bop, 'amount' => $refund,