summaryrefslogtreecommitdiff
path: root/FS/FS/part_event/Condition/referred_cust.pm
blob: 7555bdeb985535d7591893f2cc68f062e4d2b144 (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
package FS::part_event::Condition::referred_cust;
use base qw( FS::part_event::Condition );

sub description { 'Customer referred customers'; }

sub option_fields {
  (
    'number_referred' => { label => 'At least this many referred customers',
                           type  => 'text',
                           value => '1',
                         },
    'active'          => { label => 'Referred customers are active',
                           type  => 'checkbox',
                           value => 'Y',
                         },
    'if_pkg_class'    => { label    => 'Referred customers have an active package of class',
                           type     => 'select-pkg_class',
                           multiple => 1,
                         },
  );
}

sub condition {
  my($self, $object, %opt) = @_;

  my $cust_main = $self->cust_main($object);

  my @referral_cust_main = $cust_main->referral_cust_main;

  @referral_cust_main = grep $_->status eq 'active', @referral_cust_main
    if $self->option('active');

  my $if_pkg_class = $self->option('if_pkg_class') || {};
  if ( keys %$if_pkg_class ) {
    @referral_cust_main = grep {
      my $cust = $_;
      grep $if_pkg_class{$_->part_pkg->classnum}, $cust->active_pkgs;
    } @referral_cust_main;
  }

  scalar(@referral_cust_main) >= $self->option('number_referred');

}

#sub condition_sql {
#  my( $class, $table ) = @_;
#
#  #XXX TODO: this optimization
#}

1;