X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=httemplate%2Fgraph%2Fcust_pkg.cgi;fp=httemplate%2Fgraph%2Fcust_pkg.cgi;h=0000000000000000000000000000000000000000;hp=cdd95e10a680b74342c0ccfc1ba274e58e5b0929;hb=98ea15536afc6896cce08a41b877d6cb52444d14;hpb=83f29f7300305134cb0c2e680ca7346927d4e9fe diff --git a/httemplate/graph/cust_pkg.cgi b/httemplate/graph/cust_pkg.cgi deleted file mode 100644 index cdd95e10a..000000000 --- a/httemplate/graph/cust_pkg.cgi +++ /dev/null @@ -1,161 +0,0 @@ -<& elements/monthly.html, - 'title' => $agentname. 'Package Churn', - 'items' => \@items, - 'labels' => \@labels, - 'graph_labels' => \@labels, - 'colors' => \@colors, - 'links' => \@links, - 'params' => \@params, - 'agentnum' => $agentnum, - 'sprintf' => '%u', - 'disable_money' => 1, - 'remove_empty' => (scalar(@group_keys) > 1 ? 1 : 0), -&> -<%init> - -#XXX use a different ACL for package churn? -my $curuser = $FS::CurrentUser::CurrentUser; -die "access denied" - unless $curuser->access_right('Financial reports'); - -#false laziness w/money_time.cgi, cust_bill_pkg.cgi - -#XXX or virtual -my( $agentnum, $agent ) = ('', ''); -if ( $cgi->param('agentnum') =~ /^(\d+)$/ ) { - $agentnum = $1; - $agent = qsearchs('agent', { 'agentnum' => $agentnum } ); - die "agentnum $agentnum not found!" unless $agent; -} - -my $agentname = $agent ? $agent->agent.' ' : ''; - -my @base_items = qw( setup_pkg susp_pkg cancel_pkg ); - -my %base_labels = ( - 'setup_pkg' => 'New orders', - 'susp_pkg' => 'Suspensions', -# 'unsusp' => 'Unsuspensions', - 'cancel_pkg' => 'Cancellations', -); - -my %base_colors = ( - 'setup_pkg' => '00cc00', #green - 'susp_pkg' => 'ff9900', #yellow - #'unsusp' => '', #light green? - 'cancel_pkg' => 'cc0000', #red ? 'ff0000' -); - -my %base_links = ( - 'setup_pkg' => { 'link' => "${p}search/cust_pkg.cgi?agentnum=$agentnum;", - 'fromparam' => 'setup_begin', - 'toparam' => 'setup_end', - }, - 'susp_pkg' => { 'link' => "${p}search/cust_pkg.cgi?agentnum=$agentnum;", - 'fromparam' => 'susp_begin', - 'toparam' => 'susp_end', - }, - 'cancel_pkg' => { 'link' => "${p}search/cust_pkg.cgi?agentnum=$agentnum;", - 'fromparam' => 'cancel_begin', - 'toparam' => 'cancel_end', - }, -); - -my %filter_params = ( - # not agentnum, that's elsewhere - 'refnum' => [ $cgi->param('refnum') ], - 'classnum' => [ $cgi->param('classnum') ], - 'towernum' => [ $cgi->param('towernum') ], -); -if ( $cgi->param('zip') =~ /^(\w+)/ ) { - $filter_params{zip} = $1; -} -foreach my $link (values %base_links) { - foreach my $key (keys(%filter_params)) { - my $value = $filter_params{$key}; - if (ref($value)) { - $value = join(',', @$value); - } - $link->{'link'} .= "$key=$value;" if length($value); - } -} - - -# In order to keep this from being the same trainwreck as cust_bill_pkg.cgi, -# we allow ONE breakdown axis, besides the setup/susp/cancel inherent in -# the report. - -my $breakdown = $cgi->param('breakdown_by'); -my ($name_col, $table); -if ($breakdown eq 'classnum') { - $table = 'pkg_class'; - $name_col = 'classname'; -} elsif ($breakdown eq 'refnum') { - $table = 'part_referral'; - $name_col = 'referral'; -} elsif ($breakdown eq 'towernum') { - $table = 'tower'; - $name_col = 'towername'; -} elsif ($breakdown) { - die "unknown breakdown column '$breakdown'\n"; -} - -my @group_keys; -my @group_labels; -if ( $table ) { - my @groups; - if ( $cgi->param($breakdown) ) { - foreach my $key ($cgi->param($breakdown)) { - next if $key =~ /\D/; - push @groups, qsearch( $table, { $breakdown => $key }); - } - } else { - @groups = qsearch( $table ); - } - foreach (@groups) { - push @group_keys, $_->get($breakdown); - push @group_labels, $_->get($name_col); - } -} - -my (@items, @labels, @colors, @links, @params); -if (scalar(@group_keys) > 1) { - my $hue = 180; - foreach my $key (@group_keys) { - # this gives a decent level of contrast as long as there aren't too many - # result sets - my $scheme = Color::Scheme->new - ->scheme('triade') - ->from_hue($hue) - ->distance(0.5); - my $label = shift @group_labels; - my $i = 0; # item index - foreach (@base_items) { - # append the item - push @items, $_; - # and its parameters - push @params, [ - %filter_params, - $breakdown => $key - ]; - # and a label prefixed with the group label - push @labels, "$label - $base_labels{$_}"; - # and colors (?!) - push @colors, $scheme->colorset->[$i]->[1]; - # and links... - my %this_link = %{ $base_links{$_} }; - $this_link{link} .= "$breakdown=$key;"; - push @links, \%this_link; - $i++; - } #foreach (@base_items - $hue += 35; - } # foreach @group_keys -} else { - @items = @base_items; - @labels = @base_labels{@base_items}; - @colors = @base_colors{@base_items}; - @links = @base_links{@base_items}; - @params = map { [ %filter_params ] } @base_items; -} - -