From 4300dd2e09cb0544c067a2d9a9fd92e534e49802 Mon Sep 17 00:00:00 2001 From: Jonathan Prykop Date: Mon, 25 Apr 2016 13:49:57 -0500 Subject: [PATCH] RT#37544 Prevent billing events from running on weekends --- FS/FS/part_event/Condition/day_of_week.pm | 49 +++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 FS/FS/part_event/Condition/day_of_week.pm diff --git a/FS/FS/part_event/Condition/day_of_week.pm b/FS/FS/part_event/Condition/day_of_week.pm new file mode 100644 index 000000000..6b8431097 --- /dev/null +++ b/FS/FS/part_event/Condition/day_of_week.pm @@ -0,0 +1,49 @@ +package FS::part_event::Condition::day_of_week; + +use strict; +use base qw( FS::part_event::Condition ); +use FS::Record qw( dbh ); + +tie my %dayofweek, 'Tie::IxHash', + 0 => 'Sunday', + 1 => 'Monday', + 2 => 'Tuesday', + 3 => 'Wednesday', + 4 => 'Thursday', + 5 => 'Friday', + 6 => 'Saturday', +; + +sub description { + "Run only on certain days of the week", +} + +sub option_fields { + ( + 'dayofweek' => { + label => 'Days to run', + type => 'checkbox-multiple', + options => [ values %dayofweek ], + option_labels => { map { $_ => $_ } values %dayofweek }, + }, + ); +} + +sub condition { # is this even necessary? condition_sql is exact. + my( $self, $object, %opt ) = @_; + + my $today = $dayofweek{(localtime($opt{'time'}))[6]}; + if (grep { $_ eq $today } (keys %{$self->option('dayofweek')})) { + return 1; + } + ''; +} + +sub condition_sql { + my( $class, $table, %opt ) = @_; + my $today = $dayofweek{(localtime($opt{'time'}))[6]}; + my $day = $class->condition_sql_option_option('dayofweek'); + return dbh->quote($today) . " IN $day"; +} + +1; -- 2.11.0