diff options
author | Ivan Kohler <ivan@freeside.biz> | 2017-04-27 15:28:59 -0700 |
---|---|---|
committer | Ivan Kohler <ivan@freeside.biz> | 2017-04-27 15:28:59 -0700 |
commit | 5a1e08844db8e4278105f0aad7aa3a48a433789c (patch) | |
tree | 1a0cda9553ddd23def6fbccfe85c55cfebf79d36 | |
parent | a989f40712bcbef325a566802118432063315240 (diff) |
add condition on number of referred customers, RT#75356
-rw-r--r-- | FS/FS/part_event/Condition/referred_cust.pm | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/FS/FS/part_event/Condition/referred_cust.pm b/FS/FS/part_event/Condition/referred_cust.pm new file mode 100644 index 000000000..7555bdeb9 --- /dev/null +++ b/FS/FS/part_event/Condition/referred_cust.pm @@ -0,0 +1,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; |