1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
<% encode_json( \@return ) %>\
<%init>
my( $custnum, $prospectnum, $classnum ) = $cgi->param('arg');
my $agent;
my $cust_main;
if ( $custnum ) {
$cust_main = qsearchs('cust_main', { 'custnum' => $custnum } )
or die 'unknown custnum';
$agent = $cust_main->agent;
} else {
my $prospect_main = qsearchs('prospect_main', {'prospectnum'=>$prospectnum} )
or die 'unknown prospectnum';
$agent = $prospect_main->agent;
}
my %hash = ( 'disabled' => '' );
if ( $classnum > 0 ) {
$hash{'classnum'} = $classnum;
} elsif ( $classnum eq '' || $classnum == 0 ) {
$hash{'classnum'} = '';
} #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 ).
' AND '. FS::part_pkg->agent_pkgs_sql( $agent ),
'order_by' => 'ORDER BY pkg',
});
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 = $_->delay_start_date
|| $default_start_date;
$start_date = time2str($date_format, $start_date)
if $start_date;
( $_->pkgpart,
$_->pkg_comment,
$_->can_discount,
($_->start_on_hold ? 1 : 0),
$_->can_start_date(
num_ncancelled_pkgs => $num_ncancelled_pkgs,
),
$start_date,
)
}
#sort { $a->pkg_comment cmp $b->pkg_comment }
@part_pkg;
</%init>
|