my $cust_main = qsearchs('cust_main', $search )
or return { 'error' => "unknown custnum $custnum" };
+ my $status = $cust_main->status;
#false laziness w/ClientAPI/Signup.pm
my $cust_pkg = new FS::cust_pkg ( {
my $conf = new FS::Conf;
if ( $conf->exists('signup_server-realtime') ) {
- my $bill_error = _do_bop_realtime( $cust_main );
+ my $bill_error = _do_bop_realtime( $cust_main, $status );
if ($bill_error) {
$cust_pkg->cancel('quiet'=>1);
my $cust_main = qsearchs('cust_main', $search )
or return { 'error' => "unknown custnum $custnum" };
+ my $status = $cust_main->status;
my $cust_pkg = qsearchs('cust_pkg', { 'pkgnum' => $p->{pkgnum} } )
or return { 'error' => "unknown package $p->{pkgnum}" };
my $conf = new FS::Conf;
if ( $conf->exists('signup_server-realtime') ) {
- my $bill_error = _do_bop_realtime( $cust_main );
+ my $bill_error = _do_bop_realtime( $cust_main, $status );
if ($bill_error) {
$newpkg[0]->suspend;
my $cust_main = qsearchs('cust_main', $search )
or return { 'error' => "unknown custnum $custnum" };
+ my $status = $cust_main->status;
my $cust_svc = qsearchs( 'cust_svc', { 'svcnum' => $p->{'svcnum'} } )
or return { 'error' => "unknown service " . $p->{'svcnum'} };
my $conf = new FS::Conf;
if ( $conf->exists('signup_server-realtime') && !$bill_error ) {
- $bill_error = _do_bop_realtime( $cust_main );
+ $bill_error = _do_bop_realtime( $cust_main, $status );
if ($bill_error) {
return $bill_error;
}
sub _do_bop_realtime {
- my ($cust_main) = @_;
+ my ($cust_main, $status) = (shift, shift);
my $old_balance = $cust_main->balance;
if ( $cust_main->balance > $old_balance
&& $cust_main->balance > 0
- && $cust_main->payby !~ /^(BILL|DCRD|DCHK)$/ ) {
+ && ( $cust_main->payby !~ /^(BILL|DCRD|DCHK)$/ ?
+ 1 : $status eq 'suspended' ) ) {
#this makes sense. credit is "un-doing" the invoice
$cust_main->credit( sprintf("%.2f", $cust_main->balance - $old_balance ),
'self-service decline' );