This commit was generated by cvs2svn to compensate for changes in r11022,
[freeside.git] / FS / FS / part_event / Condition / times.pm
1 package FS::part_event::Condition::times;
2
3 use strict;
4 use FS::Record qw( qsearch );
5 use FS::part_event;
6 use FS::cust_event;
7
8 use base qw( FS::part_event::Condition );
9
10 sub description { "Run this event the specified number of times"; }
11
12 sub option_fields {
13   (
14     'run_times'  => { label=>'Number of times', type=>'text', value=>'1', },
15   );
16 }
17
18 sub condition {
19   my($self, $object, %opt) = @_;
20
21   my $obj_pkey = $object->primary_key;
22   my $tablenum = $object->$obj_pkey();
23  
24   my @existing = qsearch( {
25     'table'     => 'cust_event',
26     'hashref'   => {
27                      'eventpart' => $self->eventpart,
28                      'tablenum'  => $tablenum,
29                      'status'    => { op=>'!=', value=>'failed' },
30                    },
31     'extra_sql' => ( $opt{'cust_event'}->eventnum =~ /^(\d+)$/
32                        ? " AND eventnum != $1 "
33                        : ''
34                    ),
35   } );
36
37   scalar(@existing) < $self->option('run_times');
38
39 }
40
41 sub condition_sql {
42   my( $class, $table, %opt ) = @_;
43
44   my %tablenum = %{ FS::part_event->eventtable_pkey_sql };
45
46   my $run_times =
47     $class->condition_sql_option_integer('run_times', $opt{'driver_name'});
48
49   my $existing = "( SELECT COUNT(*) FROM cust_event
50                       WHERE cust_event.eventpart = part_event.eventpart
51                         AND cust_event.tablenum = $tablenum{$table}
52                         AND status != 'failed'
53                   )";
54
55   "$existing < $run_times";
56
57 }
58
59 1;