From 15c8b0fd8580afcd9c10d5816cbae43996c02ec0 Mon Sep 17 00:00:00 2001 From: ivan Date: Sat, 4 Jul 2009 00:47:53 +0000 Subject: [PATCH] add condition based on total customer payments as a multiplier of a specific package, RT#3983 --- FS/FS/part_event/Condition/cust_payments.pm | 2 +- FS/FS/part_event/Condition/cust_payments_pkg.pm | 68 +++++++++++++++++++++++++ 2 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 FS/FS/part_event/Condition/cust_payments_pkg.pm diff --git a/FS/FS/part_event/Condition/cust_payments.pm b/FS/FS/part_event/Condition/cust_payments.pm index 41ef6c74a..477ecdbb0 100644 --- a/FS/FS/part_event/Condition/cust_payments.pm +++ b/FS/FS/part_event/Condition/cust_payments.pm @@ -3,7 +3,7 @@ package FS::part_event::Condition::cust_payments; use strict; use base qw( FS::part_event::Condition ); -sub description { 'Customer total payments'; } +sub description { 'Customer total payments (amount)'; } sub option_fields { ( diff --git a/FS/FS/part_event/Condition/cust_payments_pkg.pm b/FS/FS/part_event/Condition/cust_payments_pkg.pm new file mode 100644 index 000000000..d6c493bd0 --- /dev/null +++ b/FS/FS/part_event/Condition/cust_payments_pkg.pm @@ -0,0 +1,68 @@ +package FS::part_event::Condition::cust_payments_pkg; + +use strict; +use base qw( FS::part_event::Condition ); + +sub description { 'Customer total payments (multiplier of package)'; } + +sub eventtable_hashref { + { 'cust_pkg' => 1 }; +} + +sub option_fields { + ( + 'over_times' => { 'label' => 'Customer total payments as least', + 'type' => 'text', + 'value' => '1', #default + }, + 'what' => { 'label' => 'Times', + 'type' => 'select', + #also add some way to specify in the package def, no? + 'options' => [ qw( base_recur_permonth ) ], + 'labels' => { 'base_recur_permonth' => 'Base monthly fee', }, + }, + ); +} + +sub condition { + my($self, $cust_pkg) = @_; + + my $cust_main = $self->cust_main($cust_pkg); + + my $part_pkg = $cust_pkg->part_pkg; + + my $over_times = $self->option('over_times'); + $over_times = 0 unless length($over_times); + + my $what = $self->option('what'); + + #false laziness w/Condition/cust_payments_pkg.pm + if ( $what eq 'base_recur_permonth' ) { #huh. yuck. + if ( $part_pkg->freq !~ /^\d+$/ ) { + die 'WARNING: Not crediting customer '. $cust_main->referral_custnum. + ' for package '. $cust_pkg->pkgnum. + ' ( customer '. $cust_pkg->custnum. ')'. + ' - Referral credits not (yet) available for '. + ' packages with '. $part_pkg->freq_pretty. ' frequency'; + } + } + + $cust_main->total_paid >= $over_times * $part_pkg->$what($cust_pkg); + +} + +#XXX add for efficiency. could use cust_main::total_paid_sql +#use FS::cust_main; +#sub condition_sql { +# my( $class, $table ) = @_; +# +# my $over = $class->condition_sql_option('balance'); +# +# my $balance_sql = FS::cust_main->balance_sql; +# +# "$balance_sql > $over"; +# +#} + +1; + -- 2.11.0