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