[freeside-commits] branch FREESIDE_2_3_BRANCH updated. b69b7d879e91a875b2166002712a6d05f63d4fc9

Mark Wells mark at 420.am
Wed Aug 29 15:50:27 PDT 2012


The branch, FREESIDE_2_3_BRANCH has been updated
       via  b69b7d879e91a875b2166002712a6d05f63d4fc9 (commit)
      from  6582619e75b10d84d739c9422413e9d0754ce37b (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit b69b7d879e91a875b2166002712a6d05f63d4fc9
Author: Mark Wells <mark at freeside.biz>
Date:   Wed Aug 29 15:50:12 2012 -0700

    after_event condition, #18687

diff --git a/FS/FS/part_event/Condition/after_event.pm b/FS/FS/part_event/Condition/after_event.pm
new file mode 100644
index 0000000..c59d847
--- /dev/null
+++ b/FS/FS/part_event/Condition/after_event.pm
@@ -0,0 +1,78 @@
+package FS::part_event::Condition::after_event;
+
+use strict;
+use FS::Record qw( qsearchs );
+use FS::part_event;
+use FS::cust_event;
+
+use base qw( FS::part_event::Condition );
+
+sub description { "After running another event" }
+
+# Runs the event at least X days after the most recent time another event
+# ran on the same object.
+
+sub option_fields {
+  (
+    'eventpart' => { label=>'Event', type=>'select-part_event', },
+    'run_delay' => { label=>'Delay', type=>'freq', value=>'1',  },
+  );
+}
+
+# Specification:
+# Given an event B that has this condition, where the "eventpart"
+# option is set to event A, and the "run_delay" option is set to 
+# X days.
+# This condition is TRUE if:
+# - Event A last ran X or more days in the past,
+# AND
+# - Event B has not run since the most recent occurrence of event A.
+
+sub condition {
+  # similar to "once_every", but with a different eventpart
+  my($self, $object, %opt) = @_;
+
+  my $obj_pkey = $object->primary_key;
+  my $tablenum = $object->$obj_pkey();
+
+  my $before = $self->option_age_from('run_delay',$opt{'time'});
+  my $eventpart = $self->option('eventpart');
+
+  my %hash = (
+    'eventpart' => $eventpart,
+    'tablenum'  => $tablenum,
+    'status'    => { op => '!=', value => 'failed' },
+  );
+
+  my $most_recent_other = qsearchs( {
+    'table'     => 'cust_event',
+    'hashref'   => \%hash,
+    'order_by'  => " ORDER BY _date DESC LIMIT 1",
+  } )
+    or return 0; # if it hasn't run at all, return false
+  
+  return 0 if $most_recent_other->_date > $before; # we're still in the delay
+
+  # now see if there's been an instance of this event since the one we're
+  # following...
+  $hash{'eventpart'} = $self->eventpart;
+  if ( $opt{'cust_event'} and $opt{'cust_event'}->eventnum =~ /^(\d+)$/ ) {
+    $hash{'eventnum'} = { op => '!=', value => $1 };
+  }
+
+  my $most_recent_self = qsearchs( {
+    'table'     => 'cust_event',
+    'hashref'   => \%hash,
+    'order_by'  => " ORDER BY _date DESC LIMIT 1",
+  } );
+
+  return 0 if defined($most_recent_self) 
+          and $most_recent_self->_date >= $most_recent_other->_date;
+  # the follower has already run
+  
+  1;
+}
+
+# condition_sql, maybe someday
+
+1;

-----------------------------------------------------------------------

Summary of changes:
 FS/FS/part_event/Condition/after_event.pm |   78 +++++++++++++++++++++++++++++
 1 files changed, 78 insertions(+), 0 deletions(-)
 create mode 100644 FS/FS/part_event/Condition/after_event.pm




More information about the freeside-commits mailing list