<% my %search = (); my $search = ''; unless ( $cgi->param('showdisabled') ) { %search = ( 'disabled' => '' ); $search = "( disabled = '' OR disabled IS NULL )"; } my $select = '*'; my $orderby = 'pkgpart'; if ( $cgi->param('active') ) { $orderby = 'num_active'; $select = " *, ( SELECT COUNT(*) FROM cust_pkg WHERE cust_pkg.pkgpart = part_pkg.pkgpart AND ( cancel IS NULL OR cancel = 0 ) AND ( susp IS NULL OR susp = 0 ) ) AS num_active, ( SELECT COUNT(*) FROM cust_pkg WHERE cust_pkg.pkgpart = part_pkg.pkgpart AND ( cancel IS NULL OR cancel = 0 ) AND susp IS NOT NULL AND susp != 0 ) AS num_suspended, ( SELECT COUNT(*) FROM cust_pkg WHERE cust_pkg.pkgpart = part_pkg.pkgpart AND cancel IS NOT NULL AND cancel != 0 ) AS num_cancelled "; } my $conf = new FS::Conf; my $taxclasses = $conf->exists('enable_taxclasses'); my $html_init; unless ( $cgi->param('active') ) { $html_init = qq! One or more service definitions are grouped together into a package definition and given pricing information. Customers purchase packages rather than purchase services directly.

Add a new package definition

!; } my $posttotal; if ( $cgi->param('showdisabled') ) { $cgi->param('showdisabled', 0); $posttotal = '( hide disabled packages )'; } else { $cgi->param('showdisabled', 1); $posttotal = '( show disabled packages )'; } # ------ my $link = [ $p.'edit/part_pkg.cgi?', 'pkgpart' ]; my @header = ( '#', 'Package', 'Comment' ); my @fields = ( 'pkgpart', 'pkg', 'comment' ); my $align = 'rll'; my @links = ( $link, $link, '' ); my @style = ( '', '', '' ); unless ( $cgi->param('showdisabled') ) { #its been reversed already push @header, 'Status'; push @fields, sub { shift->disabled ? 'DISABLED' : 'Active' }; push @links, ''; $align .= 'c'; push @style, 'b'; } unless ( 0 ) { #already showing only one class or something? push @header, 'Class'; push @fields, sub { shift->classname || '(none)'; }; $align .= 'l'; } if ( $cgi->param('active') ) { push @header, 'Customer
packages'; my %col = ( 'active' => '00CC00', 'suspended' => 'FF9900', 'cancelled' => 'FF0000', ); my $cust_pkg_link = $p. 'search/cust_pkg.cgi?pkgpart='; push @fields, sub { my $part_pkg = shift; [ map { [ { 'data' => ''. $part_pkg->get("num_$_"). '', 'align' => 'right', }, { 'data' => $_, 'align' => 'left', 'link' => ( $part_pkg->get("num_$_") ? $cust_pkg_link. $part_pkg->pkgpart. ";magic=$_" : '' ), }, ], } (qw( active suspended cancelled )) ]; }; $align .= 'r'; } push @header, 'Frequency'; push @fields, sub { shift->freq_pretty; }; $align .= 'l'; if ( $taxclasses ) { push @header, 'Taxclass'; push @fields, sub { shift->taxclass() || ' '; }; $align .= 'l'; } push @header, 'Plan', 'Data', 'Services'; #'Service', 'Quan', 'Primary'; push @fields, sub { shift->plan || '(legacy)' }, sub { my $part_pkg = shift; if ( $part_pkg->plan ) { [ map { /^(\w+)=(.*)$/; #or something; [ { 'data' => $1, 'align' => 'right', }, { 'data' => $2, 'align' => 'left', }, ]; } split(/\n/, $part_pkg->plandata) ]; } else { [ map { [ { 'data' => uc($_), 'align' => 'right', }, { 'data' => $part_pkg->$_(), 'align' => 'left', }, ]; } (qw(setup recur)) ]; } }, sub { my $part_pkg = shift; [ map { my $pkg_svc = $_; my $part_svc = $pkg_svc->part_svc; my $svc = $part_svc->svc; if ( $pkg_svc->primary_svc =~ /^Y/i ) { $svc = "$svc (PRIMARY)"; } $svc =~ s/ +/ /g; [ { 'data' => ''. $pkg_svc->quantity. '', 'align' => 'right' }, { 'data' => $svc, 'align' => 'left', 'link' => $p. 'edit/part_svc.cgi?'. $part_svc->svcpart, }, ]; } sort { $b->primary_svc =~ /^Y/i <=> $a->primary_svc =~ /^Y/i } $part_pkg->pkg_svc ]; }; $align .= 'lrl'; #rr'; # -------- my $count_query = 'SELECT COUNT(*) FROM part_pkg'; $count_query .= " WHERE $search" if $search; %><%= include( 'elements/browse.html', 'title' => 'Package Definitions', 'menubar' => [ 'Main Menu' => $p ], 'html_init' => $html_init, 'html_posttotal' => $posttotal, 'name' => 'package definitions', 'query' => { 'select' => $select, 'table' => 'part_pkg', 'hashref' => \%search, 'extra_sql' => "ORDER BY $orderby", }, 'count_query' => $count_query, 'header' => \@header, 'fields' => \@fields, 'links' => \@links, 'align' => $align, 'style' => \@style, ) %>