X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fcust_event.pm;h=1ef511a3dd2977ca473db2709ddea485aab9ced7;hb=653545aa57687de24286d0955a047cb20f6e0c54;hp=1407f43c82880bbef7476c3bfaedcf16abcddf6d;hpb=f718e73a14165820f32cefdc2dde1be1734e5055;p=freeside.git diff --git a/FS/FS/cust_event.pm b/FS/FS/cust_event.pm index 1407f43c8..1ef511a3d 100644 --- a/FS/FS/cust_event.pm +++ b/FS/FS/cust_event.pm @@ -10,6 +10,8 @@ use FS::part_event; use FS::cust_main; use FS::cust_pkg; use FS::cust_bill; +use FS::cust_pay; +use FS::svc_acct; $DEBUG = 0; $me = '[FS::cust_event]'; @@ -138,7 +140,7 @@ sub check { $dbdef_eventtable->primary_key ) || $self->ut_number('_date') - || $self->ut_enum('status', [qw( new locked done failed )]) + || $self->ut_enum('status', [qw( new locked done failed initial)]) || $self->ut_anything('statustext') ; return $error if $error; @@ -190,6 +192,11 @@ sub test_conditions { my $object = $self->cust_X; my @conditions = $part_event->part_event_condition; $opt{'cust_event'} = $self; + $opt{'time'} = $self->_date + or die "test_conditions called without cust_event._date\n"; + # this MUST be set, or all hell breaks loose in event conditions. + # it MUST be in the same time as in the cust_event object, or + # future time-dependent events will trigger incorrectly. #no unsatisfied conditions #! grep ! $_->condition( $object, %opt ), @conditions; @@ -212,6 +219,8 @@ Runs the event action. sub do_event { my $self = shift; + my %opt = @_; # currently only 'time' + my $time = $opt{'time'} || time; my $part_event = $self->part_event; @@ -242,7 +251,7 @@ sub do_event { } #replace or add myself - $self->_date(time); + $self->_date($time); $self->status($status); $self->statustext($statustext); @@ -291,7 +300,7 @@ sub retriable { $self->replace($old); } -=item join_cust_sql +=item join_sql =cut @@ -302,10 +311,16 @@ sub join_sql { JOIN part_event USING ( eventpart ) LEFT JOIN cust_bill ON ( eventtable = 'cust_bill' AND tablenum = invnum ) LEFT JOIN cust_pkg ON ( eventtable = 'cust_pkg' AND tablenum = pkgnum ) - LEFT JOIN cust_main ON ( ( eventtable = 'cust_main' AND tablenum = cust_main.custnum ) - OR ( eventtable = 'cust_bill' AND cust_bill.custnum = cust_main.custnum ) - OR ( eventtable = 'cust_pkg' AND cust_pkg.custnum = cust_main.custnum ) - ) + LEFT JOIN cust_pay ON ( eventtable = 'cust_pay' AND tablenum = paynum ) + LEFT JOIN cust_svc ON ( eventtable = 'svc_acct' AND tablenum = svcnum ) + LEFT JOIN cust_pkg AS cust_pkg_for_svc ON ( cust_svc.pkgnum = cust_pkg_for_svc.pkgnum ) + LEFT JOIN cust_main ON ( + ( eventtable = 'cust_main' AND tablenum = cust_main.custnum ) + OR ( eventtable = 'cust_bill' AND cust_bill.custnum = cust_main.custnum ) + OR ( eventtable = 'cust_pkg' AND cust_pkg.custnum = cust_main.custnum ) + OR ( eventtable = 'cust_pay' AND cust_pay.custnum = cust_main.custnum ) + OR ( eventtable = 'svc_acct' AND cust_pkg_for_svc.custnum = cust_main.custnum ) + ) "; } @@ -325,6 +340,8 @@ specified in HASHREF. Valid parameters are =item pkgnum +=item svcnum + =item failed =item beginning @@ -387,6 +404,16 @@ sub search_sql_where { "tablenum = '$1'"; } + if ( $param->{'paynum'} =~ /^(\d+)$/ ) { + push @search, "part_event.eventtable = 'cust_pay'", + "tablenum = '$1'"; + } + + if ( $param->{'svcnum'} =~ /^(\d+)$/ ) { + push @search, "part_event.eventtable = 'svc_acct'", + "tablenum = '$1'"; + } + my $where = 'WHERE '. join(' AND ', @search ); join(' AND ', @search ); @@ -468,9 +495,16 @@ sub re_X { my $cust_X = $cust_event->cust_X; # cust_bill next unless $cust_X->can($method); - $cust_X->$method( $cust_event->part_event->templatename - || $cust_X->agent_template - ); + my $part_event = $cust_event->part_event; + my $template = $part_event->templatename + || $cust_X->agent_template; + my $modenum = $part_event->option('modenum') || ''; + my $invoice_from = $part_event->option('agent_invoice_from') || ''; + $cust_X->set('mode' => $modenum); + $cust_X->$method( { template => $template, + modenum => $modenum, + from => $invoice_from, + } ); if ( $job ) { #progressbar foo $num++;