1 <% include( 'elements/browse.html',
2 'title' => 'Package Definitions',
3 'menubar' => [ 'Main Menu' => $p ],
4 'html_init' => $html_init,
5 'html_posttotal' => $posttotal,
6 'name' => 'package definitions',
7 'query' => { 'select' => $select,
10 'extra_sql' => "ORDER BY $orderby",
12 'count_query' => $count_query,
23 unless $FS::CurrentUser::CurrentUser->access_right('Configuration');
25 #false laziness w/access_user.html
28 unless ( $cgi->param('showdisabled') ) {
29 %search = ( 'disabled' => '' );
30 $search = "( disabled = '' OR disabled IS NULL )";
34 my $orderby = 'pkgpart';
35 if ( $cgi->param('active') ) {
37 $orderby = 'num_active DESC';
43 ( SELECT COUNT(*) FROM cust_pkg WHERE cust_pkg.pkgpart = part_pkg.pkgpart
44 AND ( cancel IS NULL OR cancel = 0 )
45 AND ( susp IS NULL OR susp = 0 )
48 ( SELECT COUNT(*) FROM cust_pkg WHERE cust_pkg.pkgpart = part_pkg.pkgpart
49 AND ( cancel IS NULL OR cancel = 0 )
50 AND susp IS NOT NULL AND susp != 0
53 ( SELECT COUNT(*) FROM cust_pkg WHERE cust_pkg.pkgpart = part_pkg.pkgpart
54 AND cancel IS NOT NULL AND cancel != 0
61 my $conf = new FS::Conf;
62 my $taxclasses = $conf->exists('enable_taxclasses');
65 #unless ( $cgi->param('active') ) {
67 One or more service definitions are grouped together into a package
68 definition and given pricing information. Customers purchase packages
69 rather than purchase services directly.<BR><BR>
70 <A HREF="${p}edit/part_pkg.cgi"><I>Add a new package definition</I></A>
76 if ( $cgi->param('showdisabled') ) {
77 $cgi->param('showdisabled', 0);
78 $posttotal = '( <a href="'. $cgi->self_url. '">hide disabled packages</a> )';
79 $cgi->param('showdisabled', 1);
81 $cgi->param('showdisabled', 1);
82 $posttotal = '( <a href="'. $cgi->self_url. '">show disabled packages</a> )';
83 $cgi->param('showdisabled', 0);
89 my $link = [ $p.'edit/part_pkg.cgi?', 'pkgpart' ];
91 my @header = ( '#', 'Package', 'Comment' );
92 my @fields = ( 'pkgpart', 'pkg', 'comment' );
94 my @links = ( $link, $link, '' );
95 my @style = ( '', '', '' );
97 #false laziness w/access_user.html
98 #unless ( $cgi->param('showdisabled') ) { #its been reversed already
99 if ( $cgi->param('showdisabled') ) { #its been reversed already
100 push @header, 'Status';
101 push @fields, sub { shift->disabled
102 ? '<FONT COLOR="#FF0000">DISABLED</FONT>'
103 : '<FONT COLOR="#00CC00">Active</FONT>'
110 unless ( 0 ) { #already showing only one class or something?
111 push @header, 'Class';
112 push @fields, sub { shift->classname || '(none)'; };
116 #if ( $cgi->param('active') ) {
117 push @header, 'Customer<BR>packages';
119 'active' => '00CC00',
120 'suspended' => 'FF9900',
121 'cancelled' => 'FF0000',
122 #'one-time charge' => '000000',
123 'charge' => '000000',
125 my $cust_pkg_link = $p. 'search/cust_pkg.cgi?pkgpart=';
126 push @fields, sub { my $part_pkg = shift;
131 if ( $magic eq 'active' && $part_pkg->freq == 0 ) {
133 #$label = 'one-time charge',
139 'data' => '<B><FONT COLOR="#'. $col{$label}. '">'.
140 $part_pkg->get("num_$_").
146 ( $part_pkg->get("num_$_") != 1
147 && $label =~ /charge$/
152 'link' => ( $part_pkg->get("num_$_")
160 } (qw( active suspended cancelled ))
165 push @header, 'Frequency';
166 push @fields, sub { shift->freq_pretty; };
170 push @header, 'Taxclass';
171 push @fields, sub { shift->taxclass() || ' '; };
175 push @header, 'Plan',
178 #'Service', 'Quan', 'Primary';
180 push @fields, sub { shift->plan || '(legacy)' },
183 my $part_pkg = shift;
184 if ( $part_pkg->plan ) {
187 /^(\w+)=(.*)$/; #or something;
192 { 'data' => $part_pkg->format($1,$2),
197 split(/\n/, $part_pkg->plandata)
207 'data' => $part_pkg->$_(),
220 my $part_pkg = shift;
224 my $part_svc = $pkg_svc->part_svc;
225 my $svc = $part_svc->svc;
226 if ( $pkg_svc->primary_svc =~ /^Y/i ) {
227 $svc = "<B>$svc (PRIMARY)</B>";
229 $svc =~ s/ +/ /g;
233 'data' => '<B>'. $pkg_svc->quantity. '</B>',
239 'link' => $p. 'edit/part_svc.cgi?'.
244 sort { $b->primary_svc =~ /^Y/i
245 <=> $a->primary_svc =~ /^Y/i
253 $align .= 'lrl'; #rr';
257 my $count_query = 'SELECT COUNT(*) FROM part_pkg';
258 $count_query .= " WHERE $search"