tyop
[freeside.git] / FS / FS / cust_main / Status.pm
1 package FS::cust_main::Status;
2
3 use strict;
4 use vars qw( $conf ); # $module ); #$DEBUG $me );
5 use Tie::IxHash;
6 use FS::UID;
7 use FS::cust_pkg;
8
9 #$DEBUG = 0;
10 #$me = '[FS::cust_main::Status]';
11
12 install_callback FS::UID sub { 
13   $conf = new FS::Conf;
14   #$module = $conf->config('cust_main-status_module') || 'Classic';
15 };
16
17 =head1 NAME
18
19 FS::cust_main::Status - Status mixin for cust_main
20
21 =head1 SYNOPSIS
22
23 =head1 DESCRIPTION
24
25 These methods are available on FS::cust_main objects:
26
27 =head1 METHODS
28
29 =over 4
30
31 =item statuscolors
32
33 Returns an (ordered with Tie::IxHash) hash reference of possible status
34 names and colors.
35
36 =cut
37
38 sub statuscolors {
39   #my $self = shift; #i guess i'm a class method
40
41   my %statuscolors;
42
43   my $module = $conf->config('cust_main-status_module') || 'Classic';
44
45   if ( $module eq 'Classic' ) {
46     tie %statuscolors, 'Tie::IxHash',
47       'prospect'  => '7e0079', #'000000', #black?  naw, purple
48       'active'    => '00CC00', #green
49       'ordered'   => '009999', #teal? cyan?
50       'inactive'  => '0000CC', #blue
51       'suspended' => 'FF9900', #yellow
52       'cancelled' => 'FF0000', #red
53     ;
54   } elsif ( $module eq 'Recurring' ) {
55     tie %statuscolors, 'Tie::IxHash',
56       'prospect'  => '7e0079', #'000000', #black?  naw, purple
57       'active'    => '00CC00', #green
58       'ordered'   => '009999', #teal? cyan?
59       'suspended' => 'FF9900', #yellow
60       'cancelled' => 'FF0000', #red
61       'inactive'  => '0000CC', #blue
62     ;
63   } else {
64     die "unknown status module $module";
65   }
66
67   \%statuscolors;
68
69 }
70
71 sub statuslabels {
72   #my $self = shift; #i guess i'm a class method
73
74   my %statuslabels = (
75       'prospect'  => 'No packages',
76       'active'    => 'Active',
77       'ordered'   => 'Ordered',
78       'inactive'  => 'Inactive',
79       'suspended' => 'Suspended',
80       'cancelled' => 'Cancelled',
81   );
82
83   \%statuslabels;
84 }
85
86 =item cancelled_sql
87
88 =cut
89
90 sub cancelled_sql {
91   my $self = shift;
92
93   my $recurring_sql = FS::cust_pkg->recurring_sql;
94   my $cancelled_sql = FS::cust_pkg->cancelled_sql;
95   my $select_count_pkgs = $self->select_count_pkgs_sql;
96
97   my $sql = "
98         0 < ( $select_count_pkgs )
99     AND 0 = ( $select_count_pkgs AND $recurring_sql
100                   AND ( cust_pkg.cancel IS NULL OR cust_pkg.cancel = 0 )
101             )
102     AND 0 < ( $select_count_pkgs AND $cancelled_sql   )
103   ";
104
105   my $module = $conf->config('cust_main-status_module') || 'Classic';
106
107   if ( $module eq 'Classic' ) {
108     $sql .=
109       " AND 0 = (  $select_count_pkgs AND ". FS::cust_pkg->inactive_sql. " ) ";
110   #} elsif ( $module eq 'Recurring' ) {
111   #} else {
112   #  die "unknown status module $module";
113   }
114
115   $sql;
116
117 }
118
119 =back
120
121 =head1 BUGS
122
123 =head1 SEE ALSO
124
125 L<FS::cust_main>
126
127 =cut
128
129 1;
130