diff options
| author | mark <mark> | 2012-02-15 01:31:31 +0000 |
|---|---|---|
| committer | mark <mark> | 2012-02-15 01:31:31 +0000 |
| commit | 7b4fd838d00a9a7ccff26b2f1d6e20c86535acfe (patch) | |
| tree | 645259aba81f26d962fd89033d9db24c3013b096 /FS | |
| parent | 40ecebc1be001360aad31c50d5c8fbcd147d2eda (diff) | |
query billing events to see affected objects, #15142
Diffstat (limited to 'FS')
| -rw-r--r-- | FS/FS/part_event.pm | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/FS/FS/part_event.pm b/FS/FS/part_event.pm index c98c3f87a..d48ecfcb2 100644 --- a/FS/FS/part_event.pm +++ b/FS/FS/part_event.pm @@ -252,6 +252,67 @@ sub templatename { } } +=item targets + +Returns all objects (of type C<FS::eventtable>, for this object's +C<eventtable>) eligible for processing under this event, as of right now. +The L<FS::cust_event> object used to test event conditions will be +included in each object as the 'cust_event' pseudo-field. + +This is not used in normal event processing (which is done on a +per-customer basis to control timing of pre- and post-billing events) +but can be useful when configuring events. + +=cut + +sub targets { + my $self = shift; + my $time = time; # $opt{'time'}? + + my $eventpart = $self->eventpart; + $eventpart =~ /^\d+$/ or die "bad eventpart $eventpart"; + my $eventtable = $self->eventtable; + + # find all objects that meet the conditions for this part_event + my $linkage = ''; + # this is the 'object' side of the FROM clause + if ( $eventtable ne 'cust_main' ) { + $linkage = + #($self->eventtables_cust_join->{$eventtable} || '') . #2.3 + ' LEFT JOIN cust_main USING (custnum) '; + } + + # this is the 'event' side + my $join = FS::part_event_condition->join_conditions_sql( $eventtable ); + my $where = FS::part_event_condition->where_conditions_sql( $eventtable, + 'time' => $time + ); + $join = $linkage . + " INNER JOIN part_event ON ( part_event.eventpart = $eventpart ) $join"; + + $where .= ' AND cust_main.agentnum = '.$self->agentnum + if $self->agentnum; + # don't enforce check_freq since this is a special, out-of-order check + # and don't enforce disabled because we want to be able to see targets + # for a disabled event + + my @objects = qsearch({ + table => $eventtable, + hashref => {}, + addl_from => $join, + extra_sql => "WHERE $where", + }); + my @tested_objects; + foreach my $object ( @objects ) { + my $cust_event = $self->new_cust_event($object, 'time' => $time); + next unless $cust_event->test_conditions; + + $object->set('cust_event', $cust_event); + push @tested_objects, $object; + } + @tested_objects; +} + =back =head1 CLASS METHODS |
