From 1b17847c0c6b1da6cbb548731c828e5c55faff4b Mon Sep 17 00:00:00 2001 From: ivan Date: Wed, 23 Mar 2011 05:59:17 +0000 Subject: [PATCH] add new conditions: package balances and N times, RT#11834 --- FS/FS/part_event/Condition/pkg_balance.pm | 36 ++++++++++++++++ FS/FS/part_event/Condition/pkg_balance_under.pm | 35 ++++++++++++++++ FS/FS/part_event/Condition/times.pm | 56 +++++++++++++++++++++++++ 3 files changed, 127 insertions(+) create mode 100644 FS/FS/part_event/Condition/pkg_balance.pm create mode 100644 FS/FS/part_event/Condition/pkg_balance_under.pm create mode 100644 FS/FS/part_event/Condition/times.pm diff --git a/FS/FS/part_event/Condition/pkg_balance.pm b/FS/FS/part_event/Condition/pkg_balance.pm new file mode 100644 index 000000000..2d4a89c84 --- /dev/null +++ b/FS/FS/part_event/Condition/pkg_balance.pm @@ -0,0 +1,36 @@ +package FS::part_event::Condition::pkg_balance; + +use strict; +use FS::cust_main; + +use base qw( FS::part_event::Condition ); + +sub description { 'Package balance'; } + + +sub option_fields { + ( + 'balance' => { 'label' => 'Balance over', + 'type' => 'money', + 'value' => '0.00', #default + }, + ); +} + +sub eventtable_hashref { + { 'cust_pkg' => 1, }; +} + +sub condition { + my($self, $cust_pkg) = @_; + + my $cust_main = $self->cust_main($cust_pkg); + + my $over = $self->option('balance'); + $over = 0 unless length($over); + + $cust_main->balance_pkgnum($cust_pkg->pkgnum) > $over; +} + +1; + diff --git a/FS/FS/part_event/Condition/pkg_balance_under.pm b/FS/FS/part_event/Condition/pkg_balance_under.pm new file mode 100644 index 000000000..6f46dd658 --- /dev/null +++ b/FS/FS/part_event/Condition/pkg_balance_under.pm @@ -0,0 +1,35 @@ +package FS::part_event::Condition::pkg_balance_under; + +use strict; +use FS::cust_main; + +use base qw( FS::part_event::Condition ); + +sub description { 'Package balance (under)'; } + +sub option_fields { + ( + 'balance' => { 'label' => 'Balance under (or equal to)', + 'type' => 'money', + 'value' => '0.00', #default + }, + ); +} + +sub eventtable_hashref { + { 'cust_pkg' => 1, }; +} + +sub condition { + my($self, $cust_pkg) = @_; + + my $cust_main = $self->cust_main($cust_pkg); + + my $under = $self->option('balance'); + $under = 0 unless length($under); + + $cust_main->balance_pkgnum($cust_pkg->pkgnum) <= $under; +} + +1; + diff --git a/FS/FS/part_event/Condition/times.pm b/FS/FS/part_event/Condition/times.pm new file mode 100644 index 000000000..e4410bb99 --- /dev/null +++ b/FS/FS/part_event/Condition/times.pm @@ -0,0 +1,56 @@ +package FS::part_event::Condition::times; + +use strict; +use FS::Record qw( qsearch ); +use FS::part_event; +use FS::cust_event; + +use base qw( FS::part_event::Condition ); + +sub description { "Run this event the specified number of times"; } + +sub option_fields { + ( + 'run_times' => { label=>'Interval', type=>'text', value=>'1', }, + ); +} + +sub condition { + my($self, $object, %opt) = @_; + + my $obj_pkey = $object->primary_key; + my $tablenum = $object->$obj_pkey(); + + my @existing = qsearch( { + 'table' => 'cust_event', + 'hashref' => { + 'eventpart' => $self->eventpart, + 'tablenum' => $tablenum, + 'status' => { op=>'!=', value=>'failed' }, + }, + 'extra_sql' => ( $opt{'cust_event'}->eventnum =~ /^(\d+)$/ + ? " AND eventnum != $1 " + : '' + ), + } ); + + scalar(@existing) <= $self->option('run_times'); + +} + +sub condition_sql { + my( $class, $table ) = @_; + + my %tablenum = %{ FS::part_event->eventtable_pkey_sql }; + + my $existing = "( SELECT COUNT(*) FROM cust_event + WHERE cust_event.eventpart = part_event.eventpart + AND cust_event.tablenum = $tablenum{$table} + AND status != 'failed' + )"; + + "$existing <= ". $class->condition_sql_option('run_times'); + +} + +1; -- 2.11.0