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 );
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
} 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);
'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,
'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";
services, in which case they are linked to the newly-created package.
Currently available options are: I<depend_jobnum>, I<noexport>, I<seconds_ref>,
-I<upbytes_ref>, I<downbytes_ref>, and I<totalbytes_ref>.
+I<upbytes_ref>, I<downbytes_ref>, I<totalbytes_ref>, and I<allow_pkgpart>.
If I<depend_jobnum> is set, all provisioning jobs will have a dependancy
on the supplied jobnum (they will not run until the specific job completes).
provided, the scalars (provided by references) will be incremented by the
values of the prepaid card.`
+I<allow_pkgpart> is passed to L<FS::cust_pkg>->insert.
+
=cut
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;
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);