X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fcust_event.pm;h=53637c5628fe34a3fb9ac1c0377324506e3f6141;hb=d856e90f730f72d173c2eedde4c81bba20c583b8;hp=3edfaefde99bd6acab20684da942625a90e3e82e;hpb=11df448ba461eed4d33fded0f21ed15c155a7896;p=freeside.git diff --git a/FS/FS/cust_event.pm b/FS/FS/cust_event.pm index 3edfaefde..53637c562 100644 --- a/FS/FS/cust_event.pm +++ b/FS/FS/cust_event.pm @@ -245,7 +245,13 @@ sub do_event { $statustext = "Error running ". $part_event->action. " action: $@"; } elsif ( $error ) { $status = 'done'; - $statustext = $error; + if ( $error eq 'N/A' ) { + # archaic way to indicate no-op completion of spool_csv (and maybe + # other events)? + $self->no_action('Y'); + } else { + $statustext = $error; + } } else { $status = 'done'; } @@ -309,11 +315,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_pay ON ( eventtable = 'cust_pay' AND tablenum = paynum ) - LEFT JOIN cust_svc ON ( eventtable = 'svc_acct' AND tablenum = svcnum ) + + LEFT JOIN cust_bill ON ( eventtable = 'cust_bill' AND tablenum = cust_bill.invnum ) + LEFT JOIN cust_pkg ON ( eventtable = 'cust_pkg' AND tablenum = cust_pkg.pkgnum ) + LEFT JOIN cust_pay ON ( eventtable = 'cust_pay' AND tablenum = cust_pay.paynum ) + LEFT JOIN cust_pay_batch ON ( eventtable = 'cust_pay_batch' AND tablenum = cust_pay_batch.paybatchnum ) + LEFT JOIN cust_statement ON ( eventtable = 'cust_statement' AND tablenum = cust_statement.statementnum ) + + LEFT JOIN cust_svc ON ( eventtable = 'svc_acct' AND tablenum = cust_svc.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 ) @@ -387,20 +398,28 @@ sub search_sql_where { #} # huh? - if ( $param->{'event_status'} ) { - + my @event_status = ref($param->{'event_status'}) + ? @{ $param->{'event_status'} } + : split(',', $param->{'event_status'}); + if ( @event_status ) { my @status; - my ($done_Y, $done_N); - foreach (@{ $param->{'event_status'} }) { + + my ($done_Y, $done_N, $done_S); + # done_Y: action was taken + # done_N: action was not taken + # done_S: status message returned + foreach (@event_status) { if ($_ eq 'done_Y') { $done_Y = 1; } elsif ( $_ eq 'done_N' ) { $done_N = 1; + } elsif ( $_ eq 'done_S' ) { + $done_S = 1; } else { push @status, $_; } } - if ( $done_Y or $done_N ) { + if ( $done_Y or $done_N or $done_S ) { push @status, 'done'; } if ( @status ) { @@ -409,12 +428,23 @@ sub search_sql_where { ')'; } - if ( $done_Y and not $done_N ) { - push @search, "cust_event.no_action IS NULL"; - } elsif ( $done_N and not $done_Y ) { - push @search, "cust_event.no_action = 'Y'"; - } # else they're both true, so don't add a constraint, or both false, - # and it doesn't matter. + # done_S status should include only those where statustext is not null, + # and done_Y should include only those where it is. + if ( $done_Y and $done_N and $done_S ) { + # then not necessary + } else { + my @done_status; + if ( $done_Y ) { + push @done_status, "(cust_event.no_action IS NULL AND cust_event.statustext IS NULL)"; + } + if ( $done_N ) { + push @done_status, "(cust_event.no_action = 'Y')"; + } + if ( $done_S ) { + push @done_status, "(cust_event.no_action IS NULL AND cust_event.statustext IS NOT NULL)"; + } + push @search, join(' OR ', @done_status) if @done_status; + } } # event_status