),
'exp' => $options{paydate} || $cust_payby->paydate,
'payname' => $options{payname} || $cust_payby->payname,
- 'paytype' => $options{paytype} || $cust_payby->paytype,
+ 'paytype' => $options{paytype} || $cust_payby->{'Hash'}->{'paytype'},
'amount' => $amount, # consolidating
'paycode' => $options{paycode} || '',
} );
if ( $error ) {
return "error approving paybatchnum $paybatchnum: $error\n";
}
+
+ return if $new->paycode eq "C";
+
my $cust_pay = new FS::cust_pay ( {
'custnum' => $new->custnum,
'payby' => $new->payby,
my $error = $pay_batch->insert;
if ( $error ) {
$dbh->rollback if $oldAutoCommit;
- warn "error creating a credit batch: $error\n";
+ warn "error creating a check credit batch: $error\n";
+ }
+ }
+
+ my %card_pay_batch = (
+ 'status' => 'O',
+ 'payby' => 'CARD',
+ 'type' => 'CREDIT',
+ );
+
+ my $card_pay_batch = qsearchs( 'pay_batch', \%card_pay_batch );
+
+ unless ( $card_pay_batch ) {
+ $card_pay_batch = new FS::pay_batch \%card_pay_batch;
+ my $error = $card_pay_batch->insert;
+ if ( $error ) {
+ $dbh->rollback if $oldAutoCommit;
+ warn "error creating a card credit batch: $error\n";
}
}
my $replace_error;
foreach my $cust_pay_batch (@batch_refunds) {
- $cust_pay_batch->batchnum($pay_batch->batchnum);
+ if ($cust_pay_batch->payby eq "CARD") { $cust_pay_batch->batchnum($card_pay_batch->batchnum); }
+ else { $cust_pay_batch->batchnum($pay_batch->batchnum); }
$replace_error = $cust_pay_batch->replace();
if ( $replace_error ) {
$dbh->rollback if $oldAutoCommit;
warn "Unable o move credit to a credit batch: $replace_error";
}
else {
- warn "Moved cust pay credit ".$cust_pay_batch->paybatchnum." to credit batch ".$cust_pay_batch->batchnum."\n";
+ warn "Moved cust pay credit ".$cust_pay_batch->paybatchnum." to ".$cust_pay_batch->payby." credit batch ".$cust_pay_batch->batchnum."\n";
}
}
if($opt_a) {
my %criteria = (status => 'O');
$criteria{'payby'} = uc($opt_p) if $opt_p;
- $criteria{'type'} = 'DEBIT' unless FS::pay_batch->can_handle_electronic_refunds('paymentech');
- @batches = qsearch('pay_batch', \%criteria);
+
+ my $extra_sql;
+ $extra_sql = " AND ((payby = 'CHEK' AND type != 'CREDIT') OR (payby != 'CHEK'))" unless FS::pay_batch->can_handle_electronic_refunds('paymentech');
+
+ my %hash = (
+ table => 'pay_batch',
+ hashref => \%criteria,
+ extra_sql => $extra_sql,
+ );
+
+ @batches = qsearch(\%hash);
log_and_die("No open batches found".($opt_p ? " of type '$opt_p'" : '').".\n")
if !@batches;
}
if($opt_a) {
my %criteria = (status => 'O');
$criteria{'payby'} = uc($opt_p) if $opt_p;
- $criteria{'type'} = 'DEBIT' unless FS::pay_batch->can_handle_electronic_refunds('RBC');
- @batches = qsearch('pay_batch', \%criteria);
+
+ my $extra_sql;
+ $extra_sql = " AND ((payby = 'CHEK' AND type != 'CREDIT') OR (payby != 'CHEK'))" unless FS::pay_batch->can_handle_electronic_refunds('RBC');
+
+ my %hash = (
+ table => 'pay_batch',
+ hashref => \%criteria,
+ extra_sql => $extra_sql,
+ );
+
+ @batches = qsearch(\%hash);
die "No open batches found".($opt_p ? " of type '$opt_p'" : '').".\n"
if !@batches;
}
die "Can't find payment batch '$batchnum'\n" if !@batches;
if ($batches[0]->type eq "CREDIT") {
warn "running credit\n";
- log_and_die( "Batch number $batchnum is a credit (batch refund) batch, and this format can not handle batch refunds.\n" )
+ die( "Batch number $batchnum is a credit (batch refund) batch, and this format can not handle batch refunds.\n" )
unless FS::pay_batch->can_handle_electronic_refunds('RBC');
}
}
'CHEK' => 'electronic check (ACH)',
);
-my( $cust_pay, $cust_payby, $payinfo, $paycvv, $month, $year, $payname );
+my( $cust_pay, $cust_payby, $payinfo, $paycvv, $month, $year, $payname, $paycardtype );
my $paymask = '';
## get cust pay info if paynum exists
} elsif ( $cgi->param('paynum') > 0) {
$payinfo = $cust_pay->payinfo;
+ $paycardtype = $cust_pay->paycardtype;
$payname = $cust_pay->payname;
} else {
$_, scalar($cgi->param($_))
} fields('cust_refund');
+ $hash{'payinfo'} = $payinfo;
+ $hash{'paymask'} = $paymask;
+ $hash{'paycardtype'} = $paycardtype;
+
## unapply payment before creating refund.
while ( $cust_pay && $cust_pay->unapplied < $refund ) {
my @cust_bill_pay = $cust_pay->cust_bill_pay;
});
die "Batch not found: '$batchnum'" if !$pay_batch;
-if ($pay_batch->{Hash}->{arecredits}) {
- my $export_format = "FS::pay_batch::".$opt{'format'};
- die "You are trying to download a credit (batch refund) batch and The format ".$opt{'format'}." can not handle refunds.\n" unless $export_format->can('can_handle_credits');
-}
-
my $exporttext = $pay_batch->export_batch(%opt);
unless ($exporttext) {
http_header('Content-Type' => 'text/html' );
delete $upload_formats{'td_eft1464'};
$upload_formats{'PAP'} = '264 byte results for TD Canada Trust PAP Batch';
-if ($pay_batch->type eq "CREDIT") {
+if ($pay_batch->type eq "CREDIT" && $pay_batch->payby eq "CHEK") {
foreach my $key (keys %download_formats) {
delete $download_formats{$key} unless FS::pay_batch->can_handle_electronic_refunds($key);
## remove default format if unable to handle electronic refunds