<& elements/monthly.html, 'title' => $title, 'items' => \@items, 'labels' => \@labels, 'graph_labels' => \@labels, 'params' => \@params, 'colors' => \@colors, 'links' => \@links, 'agentnum' => $agentnum, 'sprintf' => '%u', 'disable_money' => 1, 'bottom_total' => (scalar @items > 1 && !$indirect ? 1 : 0), 'bottom_link' => $bottom_link, 'link_fromparam' => 'signupdate_begin', 'link_toparam' => 'signupdate_end', 'chart_options' => { precision => 0 }, &> <%init> #XXX use a different ACL for package churn? die "access denied" unless $FS::CurrentUser::CurrentUser->access_right('Financial reports'); #false laziness w/money_time.cgi, cust_bill_pkg.cgi my $title = 'Customer Signup', #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.' ' : ''; $title = "$agentname $title" if $agentname; my $link = $p.'search/cust_main.html?'; $link .= "agentnum=$agentnum;" if $agentnum; my %global_params; # cust_classnum my @classnums = grep /^\d+$/, $cgi->param('cust_classnum'); if (@classnums) { $global_params{'cust_classnum'} = [ @classnums ]; # classnum here, not cust_classnum, for cust_main.html $link .= "classnum=$_;" foreach @classnums; } # pkg_classnum @classnums = grep /^\d+$/, $cgi->param('pkg_classnum'); if (@classnums) { $global_params{'pkg_classnum'} = [ @classnums ]; $link .= "pkg_classnum=$_;" foreach @classnums; $link .= 'any_pkg_status=1;'; # because we report any customer that had the package at any time, not # only those for whom it's still active } my $bottom_link = $link; my @referral; my $all_referral = 0; if ( $cgi->param('refnum') eq 'all' ) { @referral = (''); $all_referral = 1; } elsif ( $cgi->param('refnum') =~ /^(\d*)$/ ) { if ( $1 ) { @referral = ( qsearchs('part_referral', { 'refnum' => $1 } ) ); die "refnum $1 not found!" unless @referral; $title .= ' - '.$referral[0]->referral; $bottom_link .= ";refnum=$1"; } else { #refnum = '' @referral = qsearch('part_referral', {}); $title .= ' by Advertising Source'; } } my $indirect = ($cgi->param('indirect') eq 'Y' ? 1 : 0); my (@items, @labels, @colors, @params, @links); my $hue = 0; my $hue_increment = 75; my @signup_colors; foreach my $referral (@referral) { my %params = %global_params; $params{'refnum'} = $referral->refnum unless $all_referral; push @items, 'signups'; push @labels, ( $all_referral ? 'Signups' : $referral->referral ); push @params, [ %params ]; push @links, $link . ($all_referral ? '' : "refnum=".$referral->refnum.';'); # rotate hue for each referral type @signup_colors = Color::Scheme->new->from_hue($hue)->colors; $hue += $hue_increment; push @colors, $signup_colors[0]; if ( $indirect ) { push @items, 'signups'; push @labels, $all_referral ? 'Referrals' : $referral->referral . ' referrals'; push @params, [ %params, 'indirect' => 1 ]; push @links, ''; push @colors, $signup_colors[1]; } }