5 unless ( $cgi->param('showdisabled') ) {
6 %search = ( 'disabled' => '' );
7 $search = "( disabled = '' OR disabled IS NULL )";
11 my $orderby = 'pkgpart';
12 if ( $cgi->param('active') ) {
14 $orderby = 'num_active DESC';
20 ( SELECT COUNT(*) FROM cust_pkg WHERE cust_pkg.pkgpart = part_pkg.pkgpart
21 AND ( cancel IS NULL OR cancel = 0 )
22 AND ( susp IS NULL OR susp = 0 )
25 ( SELECT COUNT(*) FROM cust_pkg WHERE cust_pkg.pkgpart = part_pkg.pkgpart
26 AND ( cancel IS NULL OR cancel = 0 )
27 AND susp IS NOT NULL AND susp != 0
30 ( SELECT COUNT(*) FROM cust_pkg WHERE cust_pkg.pkgpart = part_pkg.pkgpart
31 AND cancel IS NOT NULL AND cancel != 0
38 my $conf = new FS::Conf;
39 my $taxclasses = $conf->exists('enable_taxclasses');
42 #unless ( $cgi->param('active') ) {
44 One or more service definitions are grouped together into a package
45 definition and given pricing information. Customers purchase packages
46 rather than purchase services directly.<BR><BR>
47 <A HREF="${p}edit/part_pkg.cgi"><I>Add a new package definition</I></A>
53 if ( $cgi->param('showdisabled') ) {
54 $cgi->param('showdisabled', 0);
55 $posttotal = '( <a href="'. $cgi->self_url. '">hide disabled packages</a> )';
56 $cgi->param('showdisabled', 1);
58 $cgi->param('showdisabled', 1);
59 $posttotal = '( <a href="'. $cgi->self_url. '">show disabled packages</a> )';
60 $cgi->param('showdisabled', 0);
66 my $link = [ $p.'edit/part_pkg.cgi?', 'pkgpart' ];
68 my @header = ( '#', 'Package', 'Comment' );
69 my @fields = ( 'pkgpart', 'pkg', 'comment' );
71 my @links = ( $link, $link, '' );
72 my @style = ( '', '', '' );
74 #unless ( $cgi->param('showdisabled') ) { #its been reversed already
75 if ( $cgi->param('showdisabled') ) { #its been reversed already
76 push @header, 'Status';
77 push @fields, sub { shift->disabled
78 ? '<FONT COLOR="#FF0000">DISABLED</FONT>'
79 : '<FONT COLOR="#00CC00">Active</FONT>'
86 unless ( 0 ) { #already showing only one class or something?
87 push @header, 'Class';
88 push @fields, sub { shift->classname || '(none)'; };
92 #if ( $cgi->param('active') ) {
93 push @header, 'Customer<BR>packages';
96 'suspended' => 'FF9900',
97 'cancelled' => 'FF0000',
99 my $cust_pkg_link = $p. 'search/cust_pkg.cgi?pkgpart=';
100 push @fields, sub { my $part_pkg = shift;
105 'data' => '<B><FONT COLOR="#'. $col{$_}. '">'.
106 $part_pkg->get("num_$_").
113 'link' => ( $part_pkg->get("num_$_")
121 } (qw( active suspended cancelled ))
126 push @header, 'Frequency';
127 push @fields, sub { shift->freq_pretty; };
131 push @header, 'Taxclass';
132 push @fields, sub { shift->taxclass() || ' '; };
136 push @header, 'Plan',
139 #'Service', 'Quan', 'Primary';
141 push @fields, sub { shift->plan || '(legacy)' },
144 my $part_pkg = shift;
145 if ( $part_pkg->plan ) {
148 /^(\w+)=(.*)$/; #or something;
158 split(/\n/, $part_pkg->plandata)
168 'data' => $part_pkg->$_(),
181 my $part_pkg = shift;
185 my $part_svc = $pkg_svc->part_svc;
186 my $svc = $part_svc->svc;
187 if ( $pkg_svc->primary_svc =~ /^Y/i ) {
188 $svc = "<B>$svc (PRIMARY)</B>";
190 $svc =~ s/ +/ /g;
194 'data' => '<B>'. $pkg_svc->quantity. '</B>',
200 'link' => $p. 'edit/part_svc.cgi?'.
205 sort { $b->primary_svc =~ /^Y/i
206 <=> $a->primary_svc =~ /^Y/i
214 $align .= 'lrl'; #rr';
218 my $count_query = 'SELECT COUNT(*) FROM part_pkg';
219 $count_query .= " WHERE $search"
222 %><%= include( 'elements/browse.html',
223 'title' => 'Package Definitions',
224 'menubar' => [ 'Main Menu' => $p ],
225 'html_init' => $html_init,
226 'html_posttotal' => $posttotal,
227 'name' => 'package definitions',
228 'query' => { 'select' => $select,
229 'table' => 'part_pkg',
230 'hashref' => \%search,
231 'extra_sql' => "ORDER BY $orderby",
233 'count_query' => $count_query,
234 'header' => \@header,
235 'fields' => \@fields,