X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fcust_main%2FPackages.pm;h=9899bd0314323f23282b0433d003408e65a789af;hb=f8066fa6a33f4ac33beec675b17de96c8c0a274b;hp=41ef2289422a8d002fc57331ad962b03292f00ec;hpb=1daf1a670d3cdfb307271fb7c7c98c83fb1fb464;p=freeside.git diff --git a/FS/FS/cust_main/Packages.pm b/FS/FS/cust_main/Packages.pm index 41ef22894..9899bd031 100644 --- a/FS/FS/cust_main/Packages.pm +++ b/FS/FS/cust_main/Packages.pm @@ -1,7 +1,6 @@ package FS::cust_main::Packages; use strict; -use vars qw( $DEBUG $me ); use List::Util qw( min ); use FS::UID qw( dbh ); use FS::Record qw( qsearch qsearchs ); @@ -10,8 +9,7 @@ use FS::cust_svc; use FS::contact; # for attach_pkgs use FS::cust_location; # -$DEBUG = 0; -$me = '[FS::cust_main::Packages]'; +our ($DEBUG, $me) = (0, '[FS::cust_main::Packages]'); =head1 NAME @@ -130,13 +128,10 @@ sub order_pkg { } elsif ( $opt->{'cust_location'} ) { - if ( ! $opt->{'cust_location'}->locationnum ) { - # not inserted yet - my $error = $opt->{'cust_location'}->insert; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return "inserting cust_location (transaction rolled back): $error"; - } + my $error = $opt->{'cust_location'}->find_or_insert; + if ( $error ) { + $dbh->rollback if $oldAutoCommit; + return "inserting cust_location (transaction rolled back): $error"; } $cust_pkg->locationnum($opt->{'cust_location'}->locationnum); @@ -186,7 +181,6 @@ sub order_pkg { 'pkglinknum' => $link->pkglinknum, 'custnum' => $self->custnum, 'main_pkgnum' => $cust_pkg->pkgnum, - 'locationnum' => $cust_pkg->locationnum, # try to prevent as many surprises as possible 'pkgbatch' => $cust_pkg->pkgbatch, 'start_date' => $cust_pkg->start_date, @@ -199,7 +193,8 @@ sub order_pkg { 'waive_setup' => $cust_pkg->waive_setup, 'allow_pkgpart' => $opt->{'allow_pkgpart'}, }); - $error = $self->order_pkg('cust_pkg' => $pkg); + $error = $self->order_pkg('cust_pkg' => $pkg, + 'locationnum' => $cust_pkg->locationnum); if ( $error ) { $dbh->rollback if $oldAutoCommit; return "inserting supplemental package: $error"; @@ -231,7 +226,7 @@ Services can be new, in which case they are inserted, or existing unaudited services, in which case they are linked to the newly-created package. Currently available options are: I, I, I, -I, I, and I. +I, I, I, and I. If I is set, all provisioning jobs will have a dependancy on the supplied jobnum (they will not run until the specific job completes). @@ -248,6 +243,8 @@ If I, I, I, or I is provided, the scalars (provided by references) will be incremented by the values of the prepaid card.` +I is passed to L->insert. + =cut sub order_pkgs { @@ -280,7 +277,7 @@ sub order_pkgs { 'cust_pkg' => $cust_pkg, 'svcs' => $cust_pkgs->{$cust_pkg}, map { $_ => $options{$_} } - qw( seconds_ref upbytes_ref downbytes_ref totalbytes_ref depend_jobnum ) + qw( seconds_ref upbytes_ref downbytes_ref totalbytes_ref depend_jobnum allow_pkgpart ) ); if ( $error ) { $dbh->rollback if $oldAutoCommit; @@ -504,8 +501,9 @@ sub sort_packages { return 0 if !$a_num_cust_svc && !$b_num_cust_svc; return -1 if $a_num_cust_svc && !$b_num_cust_svc; return 1 if !$a_num_cust_svc && $b_num_cust_svc; - my @a_cust_svc = $a->cust_svc; - my @b_cust_svc = $b->cust_svc; + return 0 if $a_num_cust_svc + $b_num_cust_svc > 20; #for perf, just give up + my @a_cust_svc = $a->cust_svc_unsorted; + my @b_cust_svc = $b->cust_svc_unsorted; return 0 if !scalar(@a_cust_svc) && !scalar(@b_cust_svc); return -1 if scalar(@a_cust_svc) && !scalar(@b_cust_svc); return 1 if !scalar(@a_cust_svc) && scalar(@b_cust_svc);