3 #false laziness w/access_user.html
6 unless ( $cgi->param('showdisabled') ) {
7 %search = ( 'disabled' => '' );
8 $search = "( disabled = '' OR disabled IS NULL )";
12 my $orderby = 'pkgpart';
13 if ( $cgi->param('active') ) {
15 $orderby = 'num_active DESC';
21 ( SELECT COUNT(*) FROM cust_pkg WHERE cust_pkg.pkgpart = part_pkg.pkgpart
22 AND ( cancel IS NULL OR cancel = 0 )
23 AND ( susp IS NULL OR susp = 0 )
26 ( SELECT COUNT(*) FROM cust_pkg WHERE cust_pkg.pkgpart = part_pkg.pkgpart
27 AND ( cancel IS NULL OR cancel = 0 )
28 AND susp IS NOT NULL AND susp != 0
31 ( SELECT COUNT(*) FROM cust_pkg WHERE cust_pkg.pkgpart = part_pkg.pkgpart
32 AND cancel IS NOT NULL AND cancel != 0
39 my $conf = new FS::Conf;
40 my $taxclasses = $conf->exists('enable_taxclasses');
43 #unless ( $cgi->param('active') ) {
45 One or more service definitions are grouped together into a package
46 definition and given pricing information. Customers purchase packages
47 rather than purchase services directly.<BR><BR>
48 <A HREF="${p}edit/part_pkg.cgi"><I>Add a new package definition</I></A>
54 if ( $cgi->param('showdisabled') ) {
55 $cgi->param('showdisabled', 0);
56 $posttotal = '( <a href="'. $cgi->self_url. '">hide disabled packages</a> )';
57 $cgi->param('showdisabled', 1);
59 $cgi->param('showdisabled', 1);
60 $posttotal = '( <a href="'. $cgi->self_url. '">show disabled packages</a> )';
61 $cgi->param('showdisabled', 0);
67 my $link = [ $p.'edit/part_pkg.cgi?', 'pkgpart' ];
69 my @header = ( '#', 'Package', 'Comment' );
70 my @fields = ( 'pkgpart', 'pkg', 'comment' );
72 my @links = ( $link, $link, '' );
73 my @style = ( '', '', '' );
75 #false laziness w/access_user.html
76 #unless ( $cgi->param('showdisabled') ) { #its been reversed already
77 if ( $cgi->param('showdisabled') ) { #its been reversed already
78 push @header, 'Status';
79 push @fields, sub { shift->disabled
80 ? '<FONT COLOR="#FF0000">DISABLED</FONT>'
81 : '<FONT COLOR="#00CC00">Active</FONT>'
88 unless ( 0 ) { #already showing only one class or something?
89 push @header, 'Class';
90 push @fields, sub { shift->classname || '(none)'; };
94 #if ( $cgi->param('active') ) {
95 push @header, 'Customer<BR>packages';
98 'suspended' => 'FF9900',
99 'cancelled' => 'FF0000',
101 my $cust_pkg_link = $p. 'search/cust_pkg.cgi?pkgpart=';
102 push @fields, sub { my $part_pkg = shift;
107 'data' => '<B><FONT COLOR="#'. $col{$_}. '">'.
108 $part_pkg->get("num_$_").
115 'link' => ( $part_pkg->get("num_$_")
123 } (qw( active suspended cancelled ))
128 push @header, 'Frequency';
129 push @fields, sub { shift->freq_pretty; };
133 push @header, 'Taxclass';
134 push @fields, sub { shift->taxclass() || ' '; };
138 push @header, 'Plan',
141 #'Service', 'Quan', 'Primary';
143 push @fields, sub { shift->plan || '(legacy)' },
146 my $part_pkg = shift;
147 if ( $part_pkg->plan ) {
150 /^(\w+)=(.*)$/; #or something;
160 split(/\n/, $part_pkg->plandata)
170 'data' => $part_pkg->$_(),
183 my $part_pkg = shift;
187 my $part_svc = $pkg_svc->part_svc;
188 my $svc = $part_svc->svc;
189 if ( $pkg_svc->primary_svc =~ /^Y/i ) {
190 $svc = "<B>$svc (PRIMARY)</B>";
192 $svc =~ s/ +/ /g;
196 'data' => '<B>'. $pkg_svc->quantity. '</B>',
202 'link' => $p. 'edit/part_svc.cgi?'.
207 sort { $b->primary_svc =~ /^Y/i
208 <=> $a->primary_svc =~ /^Y/i
216 $align .= 'lrl'; #rr';
220 my $count_query = 'SELECT COUNT(*) FROM part_pkg';
221 $count_query .= " WHERE $search"
224 %><%= include( 'elements/browse.html',
225 'title' => 'Package Definitions',
226 'menubar' => [ 'Main Menu' => $p ],
227 'html_init' => $html_init,
228 'html_posttotal' => $posttotal,
229 'name' => 'package definitions',
230 'query' => { 'select' => $select,
231 'table' => 'part_pkg',
232 'hashref' => \%search,
233 'extra_sql' => "ORDER BY $orderby",
235 'count_query' => $count_query,
236 'header' => \@header,
237 'fields' => \@fields,