fix show/hide disabled link interaction w/pager
[freeside.git] / httemplate / browse / part_pkg.cgi
1 <%
2
3 my %search = ();
4 my $search = '';
5 unless ( $cgi->param('showdisabled') ) {
6   %search = ( 'disabled' => '' );
7   $search = "( disabled = '' OR disabled IS NULL )";
8 }
9
10 my $select = '*';
11 my $orderby = 'pkgpart';
12 if ( $cgi->param('active') ) {
13
14   $orderby = 'num_active DESC';
15 }
16   $select = "
17
18     *,
19
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 )
23     ) AS num_active,
24
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
28     ) AS num_suspended,
29
30     ( SELECT COUNT(*) FROM cust_pkg WHERE cust_pkg.pkgpart = part_pkg.pkgpart
31         AND cancel IS NOT NULL AND cancel != 0
32     ) AS num_cancelled
33
34   ";
35
36 #}
37
38 my $conf = new FS::Conf;
39 my $taxclasses = $conf->exists('enable_taxclasses');
40
41 my $html_init;
42 #unless ( $cgi->param('active') ) {
43   $html_init = qq!
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>
48     <BR><BR>
49   !;
50 #}
51
52 my $posttotal;
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);
57 } else {
58   $cgi->param('showdisabled', 1);
59   $posttotal = '( <a href="'. $cgi->self_url. '">show disabled packages</a> )';
60   $cgi->param('showdisabled', 0);
61 }
62
63
64 # ------
65
66 my $link = [ $p.'edit/part_pkg.cgi?', 'pkgpart' ];
67
68 my @header = ( '#', 'Package', 'Comment' );
69 my @fields = ( 'pkgpart', 'pkg', 'comment' );
70 my $align = 'rll';
71 my @links = ( $link, $link, '' );
72 my @style = ( '', '', '' );
73
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>'
80                     };
81   push @links, '';
82   $align .= 'c';
83   push @style, 'b';
84 }
85
86 unless ( 0 ) { #already showing only one class or something?
87   push @header, 'Class';
88   push @fields, sub { shift->classname || '(none)'; };
89   $align .= 'l';
90 }
91
92 #if ( $cgi->param('active') ) {
93   push @header, 'Customer<BR>packages';
94   my %col = (
95     'active'      => '00CC00',
96     'suspended'   => 'FF9900',
97     'cancelled'   => 'FF0000',
98   );
99   my $cust_pkg_link = $p. 'search/cust_pkg.cgi?pkgpart=';
100   push @fields, sub { my $part_pkg = shift;
101                       [
102                         map {
103                               [
104                                 {
105                                  'data'  => '<B><FONT COLOR="#'. $col{$_}. '">'.
106                                             $part_pkg->get("num_$_").
107                                             '</FONT></B>',
108                                  'align' => 'right',
109                                 },
110                                 {
111                                  'data'  => $_,
112                                  'align' => 'left',
113                                  'link'  => ( $part_pkg->get("num_$_")
114                                                 ? $cust_pkg_link.
115                                                   $part_pkg->pkgpart.
116                                                   ";magic=$_"
117                                                 : ''
118                                             ),
119                                 },
120                               ],
121                             } (qw( active suspended cancelled ))
122                       ]; };
123   $align .= 'r';
124 #}
125
126 push @header, 'Frequency';
127 push @fields, sub { shift->freq_pretty; };
128 $align .= 'l';
129
130 if ( $taxclasses ) {
131   push @header, 'Taxclass';
132   push @fields, sub { shift->taxclass() || '&nbsp;'; };
133   $align .= 'l';
134 }
135
136 push @header, 'Plan',
137               'Data',
138               'Services';
139               #'Service', 'Quan', 'Primary';
140
141 push @fields, sub { shift->plan || '(legacy)' }, 
142
143               sub {
144                     my $part_pkg = shift;
145                     if ( $part_pkg->plan ) {
146
147                       [ map { 
148                               /^(\w+)=(.*)$/; #or something;
149                               [
150                                 { 'data'  => $1,
151                                   'align' => 'right',
152                                 },
153                                 { 'data'  => $2,
154                                   'align' => 'left',
155                                 },
156                               ];
157                             }
158                         split(/\n/, $part_pkg->plandata)
159                       ];
160
161                     } else {
162
163                       [ map { [
164                                 { 'data'  => uc($_),
165                                   'align' => 'right',
166                                 },
167                                 {
168                                   'data'  => $part_pkg->$_(),
169                                   'align' => 'left',
170                                 },
171                               ];
172                             }
173                         (qw(setup recur))
174                       ];
175
176                     }
177
178                   },
179
180               sub {
181                     my $part_pkg = shift;
182
183                     [ map  {
184                              my $pkg_svc = $_;
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>";
189                              }
190                              $svc =~ s/ +/&nbsp;/g;
191
192                              [
193                                {
194                                  'data'  => '<B>'. $pkg_svc->quantity. '</B>',
195                                  'align' => 'right'
196                                },
197                                {
198                                  'data'  => $svc,
199                                  'align' => 'left',
200                                  'link'  => $p. 'edit/part_svc.cgi?'.
201                                             $part_svc->svcpart,
202                                },
203                              ];
204                            }
205                       sort {     $b->primary_svc =~ /^Y/i
206                              <=> $a->primary_svc =~ /^Y/i
207                            }
208                            $part_pkg->pkg_svc
209
210                     ];
211
212                   };
213
214 $align .= 'lrl'; #rr';
215
216 # --------
217
218 my $count_query = 'SELECT COUNT(*) FROM part_pkg';
219 $count_query .= " WHERE $search"
220   if $search;
221
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",
232                                      },
233                  'count_query'    => $count_query,
234                  'header'         => \@header,
235                  'fields'         => \@fields,
236                  'links'          => \@links,
237                  'align'          => $align,
238                  'style'          => \@style,
239              )
240 %>