X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fcust_main%2FStatus.pm;h=66ba33f7fdf87ac54b6de9cef45e2225624fcce0;hb=4fd1280540e2c9b90fa59c0c32d691f5222f65d4;hp=e5803e0db69e01d55db7d9e7e3b115b862e256f3;hpb=b5c4237a34aef94976bc343c8d9e138664fc3984;p=freeside.git diff --git a/FS/FS/cust_main/Status.pm b/FS/FS/cust_main/Status.pm index e5803e0db..66ba33f7f 100644 --- a/FS/FS/cust_main/Status.pm +++ b/FS/FS/cust_main/Status.pm @@ -1,20 +1,17 @@ package FS::cust_main::Status; use strict; -use vars qw( $conf ); # $module ); #$DEBUG $me ); +use vars qw( $conf $module ); #$DEBUG $me ); +use Tie::IxHash; use FS::UID; use FS::cust_pkg; -#use Tie::IxHash; - -use FS::UID qw( getotaker dbh driver_name ); - #$DEBUG = 0; #$me = '[FS::cust_main::Status]'; install_callback FS::UID sub { $conf = new FS::Conf; - #$module = $conf->config('cust_main-status_module') || 'Classic'; + $module = $conf->config('cust_main-status_module') || 'Classic'; }; =head1 NAME @@ -43,11 +40,9 @@ sub statuscolors { my %statuscolors; - my $module = $conf->config('cust_main-status_module') || 'Classic'; - if ( $module eq 'Classic' ) { tie %statuscolors, 'Tie::IxHash', - 'prospect' => '7e0079', #'000000', #black? naw, purple + 'prospect' => 'FF00F5', #'000000', #black? naw, purple 'active' => '00CC00', #green 'ordered' => '009999', #teal? cyan? 'inactive' => '0000CC', #blue @@ -56,7 +51,7 @@ sub statuscolors { ; } elsif ( $module eq 'Recurring' ) { tie %statuscolors, 'Tie::IxHash', - 'prospect' => '7e0079', #'000000', #black? naw, purple + 'prospect' => 'FF00F5', #'000000', #black? naw, purple 'active' => '00CC00', #green 'ordered' => '009999', #teal? cyan? 'suspended' => 'FF9900', #yellow @@ -71,6 +66,21 @@ sub statuscolors { } +sub statuslabels { + #my $self = shift; #i guess i'm a class method + + my %statuslabels = ( + 'prospect' => 'No packages', + 'active' => 'Active', + 'ordered' => 'Ordered', + 'inactive' => 'Inactive', + 'suspended' => 'Suspended', + 'cancelled' => 'Cancelled', + ); + + \%statuslabels; +} + =item cancelled_sql =cut @@ -90,8 +100,6 @@ sub cancelled_sql { AND 0 < ( $select_count_pkgs AND $cancelled_sql ) "; - my $module = $conf->config('cust_main-status_module') || 'Classic'; - if ( $module eq 'Classic' ) { $sql .= " AND 0 = ( $select_count_pkgs AND ". FS::cust_pkg->inactive_sql. " ) "; @@ -106,6 +114,42 @@ sub cancelled_sql { =back +=head1 CLASS METHODS + +=over 4 + +=item churn_sql START, END + +Returns an SQL statement for the customer churn status query. The columns +returned are the custnum and the number of active, suspended, and cancelled +packages (excluding one-time packages) at the start date ("s_active", +"s_suspended", and "s_cancelled") and the end date ("e_active", etc.). + +=cut + +# not sure this belongs here...FS::cust_main::Packages? + +sub churn_sql { + my $self = shift; + my ($speriod, $eperiod) = @_; + + my $s_sql = FS::h_cust_pkg->status_as_of_sql($speriod); + my $e_sql = FS::h_cust_pkg->status_as_of_sql($eperiod); + + my @select = ( + 'custnum', + 'COALESCE(SUM(s.is_active::int),0) as s_active', + 'COALESCE(SUM(s.is_suspended::int),0) as s_suspended', + 'COALESCE(SUM(s.is_cancelled::int),0) as s_cancelled', + 'COALESCE(SUM(e.is_active::int),0) as e_active', + 'COALESCE(SUM(e.is_suspended::int),0) as e_suspended', + 'COALESCE(SUM(e.is_cancelled::int),0) as e_cancelled', + ); + my $from = "($s_sql) AS s FULL JOIN ($e_sql) AS e USING (custnum)"; + + return "SELECT ".join(',', @select)." FROM $from GROUP BY custnum"; +} + =head1 BUGS =head1 SEE ALSO