summaryrefslogtreecommitdiff
path: root/FS/FS/cust_main/Status.pm
blob: f84ff0f0edde3c3ae13c0aa37083cddbcc6f1040 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
package FS::cust_main::Status;

use strict;
use vars qw( $conf ); # $module ); #$DEBUG $me );
use Tie::IxHash;
use FS::UID;
use FS::cust_pkg;

#$DEBUG = 0;
#$me = '[FS::cust_main::Status]';

install_callback FS::UID sub { 
  $conf = new FS::Conf;
  #$module = $conf->config('cust_main-status_module') || 'Classic';
};

=head1 NAME

FS::cust_main::Status - Status mixin for cust_main

=head1 SYNOPSIS

=head1 DESCRIPTION

These methods are available on FS::cust_main objects:

=head1 METHODS

=over 4

=item statuscolors

Returns an (ordered with Tie::IxHash) hash reference of possible status
names and colors.

=cut

sub statuscolors {
  #my $self = shift; #i guess i'm a class method

  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
      'active'    => '00CC00', #green
      'ordered'   => '009999', #teal? cyan?
      'inactive'  => '0000CC', #blue
      'suspended' => 'FF9900', #yellow
      'cancelled' => 'FF0000', #red
    ;
  } elsif ( $module eq 'Recurring' ) {
    tie %statuscolors, 'Tie::IxHash',
      'prospect'  => '7e0079', #'000000', #black?  naw, purple
      'active'    => '00CC00', #green
      'ordered'   => '009999', #teal? cyan?
      'suspended' => 'FF9900', #yellow
      'cancelled' => 'FF0000', #red
      'inactive'  => '0000CC', #blue
    ;
  } else {
    die "unknown status module $module";
  }

  \%statuscolors;

}

=item cancelled_sql

=cut

sub cancelled_sql {
  my $self = shift;

  my $recurring_sql = FS::cust_pkg->recurring_sql;
  my $cancelled_sql = FS::cust_pkg->cancelled_sql;
  my $select_count_pkgs = $self->select_count_pkgs_sql;

  my $sql = "
        0 < ( $select_count_pkgs )
    AND 0 = ( $select_count_pkgs AND $recurring_sql
                  AND ( cust_pkg.cancel IS NULL OR cust_pkg.cancel = 0 )
            )
    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. " ) ";
  #} elsif ( $module eq 'Recurring' ) {
  #} else {
  #  die "unknown status module $module";
  }

  $sql;

}

=back

=head1 BUGS

=head1 SEE ALSO

L<FS::cust_main>

=cut

1;