X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fcust_main.pm;h=84426b4acab3fc3981d273b47c90db7bf4ce1b24;hb=7a486dea647f735a9a1d0381443218ad6affe6e1;hp=cbf95f5490aaafdfd59016a86abfbe4fc641d454;hpb=d883a843dcfce64caeddd2a4abb0982c16a17199;p=freeside.git diff --git a/FS/FS/cust_main.pm b/FS/FS/cust_main.pm index cbf95f549..84426b4ac 100644 --- a/FS/FS/cust_main.pm +++ b/FS/FS/cust_main.pm @@ -414,14 +414,9 @@ sub insert { # insert locations foreach my $l (qw(bill_location ship_location)) { - my $loc = delete $self->hashref->{$l}; - # XXX if we're moving a prospect's locations, do that here - if ( !$loc ) { - #return "$l not set"; - #location-less customer records are now permitted - next; - } - + + my $loc = delete $self->hashref->{$l} or next; + if ( !$loc->locationnum ) { # warn the location that we're going to insert it with no custnum $loc->set(custnum_pending => 1); @@ -433,8 +428,19 @@ sub insert { my $label = $l eq 'ship_location' ? 'service' : 'billing'; return "$error (in $label location)"; } - } - elsif ( ($loc->custnum || 0) > 0 or $loc->prospectnum ) { + + } elsif ( $loc->prospectnum ) { + + $loc->prospectnum(''); + $loc->set(custnum_pending => 1); + my $error = $loc->replace; + if ( $error ) { + $dbh->rollback if $oldAutoCommit; + my $label = $l eq 'ship_location' ? 'service' : 'billing'; + return "$error (moving $label location)"; + } + + } elsif ( ($loc->custnum || 0) > 0 ) { # then it somehow belongs to another customer--shouldn't happen $dbh->rollback if $oldAutoCommit; return "$l belongs to customer ".$loc->custnum; @@ -2165,14 +2171,27 @@ sub cust_payby { =item unsuspend Unsuspends all unflagged suspended packages (see L -and L) for this customer. Always returns a list: an empty list -on success or a list of errors. +and L) for this customer, except those on hold. + +Returns a list: an empty list on success or a list of errors. =cut sub unsuspend { my $self = shift; - grep { $_->unsuspend } $self->suspended_pkgs; + grep { ($_->get('setup')) && $_->unsuspend } $self->suspended_pkgs; +} + +=item release_hold + +Unsuspends all suspended packages in the on-hold state (those without setup +dates) for this customer. + +=cut + +sub release_hold { + my $self = shift; + grep { (!$_->setup) && $_->unsuspend } $self->suspended_pkgs; } =item suspend