diff options
author | Mark Wells <mark@freeside.biz> | 2012-03-17 17:03:25 -0700 |
---|---|---|
committer | Mark Wells <mark@freeside.biz> | 2012-03-17 17:03:25 -0700 |
commit | 821befdd93dff664debfdbeea7b25a724c91093c (patch) | |
tree | cbcb4f6b21a619677ceeedb8ba2bdc6fb8fa1d68 | |
parent | d05c6d1891149292d1cd87d0bf6ec843f54b4ff0 (diff) |
add "stagger" event condition, #16827
-rw-r--r-- | FS/FS/part_event/Condition/stagger.pm | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/FS/FS/part_event/Condition/stagger.pm b/FS/FS/part_event/Condition/stagger.pm new file mode 100644 index 000000000..1850c83e7 --- /dev/null +++ b/FS/FS/part_event/Condition/stagger.pm @@ -0,0 +1,45 @@ +package FS::part_event::Condition::stagger; + +use strict; +use FS::Record qw( qsearch ); +use FS::part_event; +use FS::cust_event; + +use base qw( FS::part_event::Condition ); + +sub description { "Stagger this event across the month" }; #could be clearer? + +sub option_fields { + # delay? it's supposed to be arbitrary anyway +} + +sub condition { + my($self, $object, %opt) = @_; + + my $obj_pkey = $object->primary_key; + my $tablenum = $object->$obj_pkey(); + + my ($today) = (localtime($opt{'time'}))[3]; + + $today - 1 == ($tablenum - 1) % 28; +} + +sub condition_sql { + my( $class, $table, %opt ) = @_; + + my %tablenum = %{ FS::part_event->eventtable_pkey_sql }; + + my $today; + if ( $opt{'driver_name'} eq 'Pg' ) { + $today = "EXTRACT( DAY FROM TO_TIMESTAMP(".$opt{'time'}.") )::INTEGER"; + } + elsif ( $opt{'driver_name'} eq 'mysql' ) { + $today = "DAY( FROM_UNIXTIME(".$opt{'time'}.") )"; + } + else { + return 'true'; + } + "($today - 1) = ($tablenum{$table} - 1) % 28"; +} + +1; |