X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fcust_bill_event.pm;h=36afed04043eac3abc75fce6d52d12b996331d4e;hb=72deba42ac5847c2a6bdeea20157035b8f9df7ae;hp=128e5a53d2933adb40c1ff603bf6078bbffbd91c;hpb=08662d58e7b9a13cf841e9c89daa39b28655724e;p=freeside.git diff --git a/FS/FS/cust_bill_event.pm b/FS/FS/cust_bill_event.pm index 128e5a53d..36afed040 100644 --- a/FS/FS/cust_bill_event.pm +++ b/FS/FS/cust_bill_event.pm @@ -38,18 +38,30 @@ currently supported: =over 4 -=item eventnum - primary key +=item eventnum -=item invnum - invoice (see L) +Primary key -=item eventpart - event definition (see L) +=item invnum -=item _date - specified as a UNIX timestamp; see L. Also see +Invoice (see L) + +=item eventpart + +Event definition (see L) + +=item _date + +Specified as a UNIX timestamp; see L. Also see L and L for conversion functions. -=item status - event status: B or B +=item status -=item statustext - additional status detail (i.e. error message) +Event status: B or B + +=item statustext + +Additional status detail (i.e. error message) =back @@ -123,15 +135,16 @@ sub check { || $self->ut_number('eventpart') || $self->ut_number('_date') || $self->ut_enum('status', [qw( done failed )]) - || $self->ut_textn('statustext') + || $self->ut_anything('statustext') ; + return "Unknown eventpart ". $self->eventpart + unless my $part_bill_event = + qsearchs( 'part_bill_event' ,{ 'eventpart' => $self->eventpart } ); + return "Unknown invnum ". $self->invnum unless qsearchs( 'cust_bill' ,{ 'invnum' => $self->invnum } ); - return "Unknown eventpart ". $self->eventpart - unless qsearchs( 'part_bill_event' ,{ 'eventpart' => $self->eventpart } ); - $self->SUPER::check; } @@ -173,6 +186,94 @@ sub retry { $self->replace($old); } +=item retryable + +Changes the statustext of this event to B, rendering it +retriable (should retry be called). + +=cut + +sub retriable { + my $self = shift; + return '' unless $self->status eq 'done'; + my $old = ref($self)->new( { $self->hash } ); + $self->statustext('retriable'); + $self->replace($old); +} + +=item search_sql_where HASHREF + +Class method which returns an SQL WHERE fragment to search for parameters +specified in HASHREF. Valid parameters are + +=over 4 + +=item agentnum + +=item beginning + +An epoch date setting a lower bound for _date values + +=item ending + +An epoch date setting a upper bound for _date values + +=item failed + +Limits the search to failed events if true + +=item payby + +Requires that the search be JOIN'd to part_bill_event # Bug? + +=item invnum + +=item currentuser + +Specifies the user for agent virtualization + +=back + +=cut + +sub search_sql_where { + my ($class, $params) = @_; + my @search = (); + + push @search, "agentnum = ". $params->{agentnum} if $params->{agentnum}; + + push @search, "cust_bill_event._date >= ". $params->{beginning} + if $params->{beginning}; + push @search, "cust_bill_event._date <= ". $params->{ending} + if $params->{ending}; + + push @search, "statustext != ''", + "statustext IS NOT NULL", + "statustext != 'N/A'" + if $params->{failed}; + + push @search, "part_bill_event.payby = '". $params->{payby}. "'" + if $params->{payby}; + + push @search, "cust_bill_event.invnum = '". $params->{invnum}. "'" + if $params->{invnum}; + + my $currentuser = $params->{currentuser} || $params->{CurrentUser}; + if ($currentuser) { + my $access_user = qsearchs('access_user', { username => $currentuser }); + if ($access_user) { + push @search, $access_user->agentnums_sql; + }else{ + push @search, "1=0"; + } + }else{ + push @search, $FS::CurrentUser::CurrentUser->agentnums_sql; + } + + join(' AND ', @search ); + +} + =back =head1 SUBROUTINES @@ -214,24 +315,21 @@ sub process_re_X { re_X( $method, - $param->{'beginning'}, - $param->{'ending'}, - $param->{'failed'}, + $param, $job, ); } sub re_X { - my($method, $beginning, $ending, $failed, $job) = @_; + my($method, $param, $job) = @_; - my $where = " WHERE plan LIKE 'send%'". - " AND cust_bill_event._date >= $beginning". - " AND cust_bill_event._date <= $ending"; - $where .= " AND statustext != '' AND statustext IS NOT NULL" - if $failed; + my $where = FS::cust_bill_event->search_sql_where($param); + $where = " WHERE plan LIKE 'send%'". ( $where ? " AND $where" : "" ); - my $from = 'LEFT JOIN part_bill_event USING ( eventpart )'; + my $from = 'LEFT JOIN part_bill_event USING ( eventpart )'. + 'LEFT JOIN cust_bill USING ( invnum )'. + 'LEFT JOIN cust_main USING ( custnum )'; my @cust_bill_event = qsearch( 'cust_bill_event', {}, '', $where, '', $from );