RT# 83450 - added location to virtual ap and added script to force update of all...
[freeside.git] / httemplate / graph / cust_churn.html
1 <& elements/monthly.html,
2   'title'         => $agentname. 'Customer Churn',
3   'items'         => \@items,
4   'labels'        => \@labels,
5   'graph_labels'  => \@labels,
6   'colors'        => \@colors,
7   'links'         => \@links,
8   #'params'        => \@params,
9   'agentnum'      => $agentnum,
10   'sprintf'       => ( $normalize ? '%0.1f%%' : '%u'), 
11   'normalize'     => ( $normalize ? 0 : undef ),
12   'disable_money' => 1,
13   'remove_empty'  => 0,
14   'nototal'       => 1,
15   'no_graph'      => [ 1, 0, 0, 0, 0 ], # don't graph 'active'
16 &>
17 <%init>
18
19 my $curuser = $FS::CurrentUser::CurrentUser;
20 die "access denied"
21   unless $curuser->access_right('Customers: Customer churn report');
22
23 my( $agentnum, $agent ) = ('', '');
24 if ( $cgi->param('agentnum') =~ /^(\d+)$/ ) {
25   $agentnum = $1;
26   $agent = qsearchs('agent', { 'agentnum' => $agentnum } );
27 } else {
28   die "agentnum required"; # UI prevents this
29 }
30
31 my $agentname = $agent ? $agent->agent.' ' : '';
32
33 my @base_items = qw(active_cust    
34                     started_cust   
35                     suspended_cust 
36                     resumed_cust   
37                     cancelled_cust  );
38
39 my %base_labels = (
40   active_cust    => 'Active customers',
41   started_cust   => 'New',
42   suspended_cust => 'Suspended',
43   resumed_cust   => 'Resumed',
44   cancelled_cust => 'Cancelled',
45 );
46
47 my %base_colors = (
48   active_cust     => '000000', #black
49   started_cust    => '00cc00', #green
50   suspended_cust  => 'ff9900', #yellow
51   resumed_cust    => '4444ff', #light blue for some reason
52   cancelled_cust  => 'cc0000', #red 
53 );
54
55 my %base_links;
56 foreach my $status (qw(active started suspended resumed cancelled)) {
57   $base_links{$status.'_cust'} =
58     "${p}search/cust_main_churn.html?agentnum=$agentnum;status=$status;";
59 }
60
61 # indirection in case at some point we need to add breakdown options
62 my (@items, @labels, @colors, @links, @params);
63 @items = @base_items;
64 @labels = @base_labels{@base_items};
65 @colors = @base_colors{@base_items};
66 @links = @base_links{@base_items};
67
68 my $normalize = $cgi->param('normalize');
69
70 </%init>