my( $custnum, $prospectnum, $classnum ) = $cgi->param('arg');
-
my $agent;
my $cust_main;
if ( $custnum ) {
} #else -1, all classes, so don't set classnum
my @part_pkg = qsearch({
+ 'select' => 'part_pkg.*, setup_option.optionvalue AS _setup_fee,
+ recur_option.optionvalue AS _recur_fee',
'table' => 'part_pkg',
+ 'addl_from' => FS::part_pkg->join_options_sql,
'hashref' => \%hash,
'extra_sql' =>
' AND '. $FS::CurrentUser::CurrentUser->agentnums_sql( 'null'=>1 ).
'order_by' => 'ORDER BY pkg',
});
-my $date_format = FS::Conf->new->config('date_format') || '%m/%d/%Y';
+my $conf = new FS::Conf;
+
+my $date_format = $conf->config('date_format') || '%m/%d/%Y';
+
+my $default_start_date = $conf->exists('order_pkg-no_start_date')
+ ? ''
+ : $cust_main ? $cust_main->next_bill_date
+ : '';
+
+#num_billing_pkgs may be slightly better (will allow you to fill in a start
+# date in the weird edge case where you're using sync_next_bill and
+# prorate_defer_bill in flat.pm and there's one-time charges hanging around
+# for this customer but no active ones)
+#but we don't have an easy method for that, and definitely don't want to pull
+# all package objects
+my $num_ncancelled_pkgs = $cust_main ? $cust_main->num_ncancelled_pkgs : 0;
my @return = map {
- my $start_date = $_->default_start_date($cust_main);
+ my $start_date = $_->delay_start_date
+ || $default_start_date;
$start_date = time2str($date_format, $start_date)
if $start_date;
( $_->pkgpart,
$_->pkg_comment,
$_->can_discount,
- $_->can_start_date,
+ ($_->start_on_hold ? 1 : 0),
+ $_->can_start_date(
+ num_ncancelled_pkgs => $num_ncancelled_pkgs,
+ ),
$start_date,
)
}