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> )';
57 $cgi->param('showdisabled', 1);
58 $posttotal = '( <a href="'. $cgi->self_url. '">show disabled packages</a> )';
63 my $link = [ $p.'edit/part_pkg.cgi?', 'pkgpart' ];
65 my @header = ( '#', 'Package', 'Comment' );
66 my @fields = ( 'pkgpart', 'pkg', 'comment' );
68 my @links = ( $link, $link, '' );
69 my @style = ( '', '', '' );
71 unless ( $cgi->param('showdisabled') ) { #its been reversed already
72 push @header, 'Status';
73 push @fields, sub { shift->disabled
74 ? '<FONT COLOR="#FF0000">DISABLED</FONT>'
75 : '<FONT COLOR="#00CC00">Active</FONT>'
82 unless ( 0 ) { #already showing only one class or something?
83 push @header, 'Class';
84 push @fields, sub { shift->classname || '(none)'; };
88 #if ( $cgi->param('active') ) {
89 push @header, 'Customer<BR>packages';
92 'suspended' => 'FF9900',
93 'cancelled' => 'FF0000',
95 my $cust_pkg_link = $p. 'search/cust_pkg.cgi?pkgpart=';
96 push @fields, sub { my $part_pkg = shift;
101 'data' => '<B><FONT COLOR="#'. $col{$_}. '">'.
102 $part_pkg->get("num_$_").
109 'link' => ( $part_pkg->get("num_$_")
117 } (qw( active suspended cancelled ))
122 push @header, 'Frequency';
123 push @fields, sub { shift->freq_pretty; };
127 push @header, 'Taxclass';
128 push @fields, sub { shift->taxclass() || ' '; };
132 push @header, 'Plan',
135 #'Service', 'Quan', 'Primary';
137 push @fields, sub { shift->plan || '(legacy)' },
140 my $part_pkg = shift;
141 if ( $part_pkg->plan ) {
144 /^(\w+)=(.*)$/; #or something;
154 split(/\n/, $part_pkg->plandata)
164 'data' => $part_pkg->$_(),
177 my $part_pkg = shift;
181 my $part_svc = $pkg_svc->part_svc;
182 my $svc = $part_svc->svc;
183 if ( $pkg_svc->primary_svc =~ /^Y/i ) {
184 $svc = "<B>$svc (PRIMARY)</B>";
186 $svc =~ s/ +/ /g;
190 'data' => '<B>'. $pkg_svc->quantity. '</B>',
196 'link' => $p. 'edit/part_svc.cgi?'.
201 sort { $b->primary_svc =~ /^Y/i
202 <=> $a->primary_svc =~ /^Y/i
210 $align .= 'lrl'; #rr';
214 my $count_query = 'SELECT COUNT(*) FROM part_pkg';
215 $count_query .= " WHERE $search"
218 %><%= include( 'elements/browse.html',
219 'title' => 'Package Definitions',
220 'menubar' => [ 'Main Menu' => $p ],
221 'html_init' => $html_init,
222 'html_posttotal' => $posttotal,
223 'name' => 'package definitions',
224 'query' => { 'select' => $select,
225 'table' => 'part_pkg',
226 'hashref' => \%search,
227 'extra_sql' => "ORDER BY $orderby",
229 'count_query' => $count_query,
230 'header' => \@header,
231 'fields' => \@fields,