From 8b880b29eecb361cc232d57c494aa70788232b9e Mon Sep 17 00:00:00 2001 From: Mark Wells Date: Sat, 17 Mar 2012 17:02:50 -0700 Subject: [PATCH] add "stagger" event condition, #16827 --- FS/FS/part_event/Condition/stagger.pm | 45 +++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 FS/FS/part_event/Condition/stagger.pm 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; -- 2.20.1