package FS::cust_pkg;
use strict;
-use vars qw(@ISA $disable_agentcheck);
+use vars qw(@ISA $disable_agentcheck @SVCDB_CANCEL_SEQ $DEBUG);
use FS::UID qw( getotaker dbh );
use FS::Record qw( qsearch qsearchs );
use FS::Misc qw( send_email );
@ISA = qw( FS::Record );
+$DEBUG = 0;
+
$disable_agentcheck = 0;
+# The order in which to unprovision services.
+@SVCDB_CANCEL_SEQ = qw( svc_external
+ svc_www
+ svc_forward
+ svc_acct
+ svc_domain
+ svc_broadband );
+
sub _cache {
my $self = shift;
my ( $hashref, $cache ) = @_;
return $error if $error;
my $cust_main = $self->cust_main;
- return "Unknown customer ". $self->custnum unless $cust_main;
+ return "Unknown custnum: ". $self->custnum unless $cust_main;
unless ( $disable_agentcheck ) {
my $agent = qsearchs( 'agent', { 'agentnum' => $cust_main->agentnum } );
local $FS::UID::AutoCommit = 0;
my $dbh = dbh;
+ my %svc;
foreach my $cust_svc (
- qsearch( 'cust_svc', { 'pkgnum' => $self->pkgnum } )
+ qsearch( 'cust_svc', { 'pkgnum' => $self->pkgnum } )
) {
- my $error = $cust_svc->cancel;
+ push @{ $svc{$cust_svc->part_svc->svcdb} }, $cust_svc;
+ }
- if ( $error ) {
- $dbh->rollback if $oldAutoCommit;
- return "Error cancelling cust_svc: $error";
- }
+ foreach my $svcdb (@SVCDB_CANCEL_SEQ) {
+ foreach my $cust_svc (@{ $svc{$svcdb} }) {
+ my $error = $cust_svc->cancel;
+ if ( $error ) {
+ $dbh->rollback if $oldAutoCommit;
+ return "Error cancelling cust_svc: $error";
+ }
+ }
}
unless ( $self->getfield('cancel') ) {
Transfers as many services as possible from this package to another package.
The destination package must already exist. Services are moved only if
-the destination allows services with the correct I<svcnum> (not svcdb).
+the destination allows services with the correct I<svcpart> (not svcdb).
Any services that can't be moved remain in the original package.
Returns an error, if there is one; otherwise, returns the number of services
=item reexport
+This method is deprecated. See the I<depend_jobnum> option to the insert and
+order_pkgs methods in FS::cust_main for a better way to defer provisioning.
+
=cut
sub reexport {
=cut
sub order {
-
- # Rewritten to make use of the transfer() method, and in general
- # to not suck so badly.
-
my ($custnum, $pkgparts, $remove_pkgnum, $return_cust_pkg) = @_;
# Transactionize this whole mess
+ local $SIG{HUP} = 'IGNORE';
+ local $SIG{INT} = 'IGNORE';
+ local $SIG{QUIT} = 'IGNORE';
+ local $SIG{TERM} = 'IGNORE';
+ local $SIG{TSTP} = 'IGNORE';
+ local $SIG{PIPE} = 'IGNORE';
+
my $oldAutoCommit = $FS::UID::AutoCommit;
local $FS::UID::AutoCommit = 0;
my $dbh = dbh;