From 2beb8b0c6b404765e1e061b77815dc9123114c94 Mon Sep 17 00:00:00 2001 From: Ivan Kohler Date: Thu, 27 Apr 2017 15:29:03 -0700 Subject: [PATCH] add condition on number of referred customers, RT#75356 --- FS/FS/part_event/Condition/referred_cust.pm | 51 +++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 FS/FS/part_event/Condition/referred_cust.pm 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; -- 2.11.0