diff options
| -rw-r--r-- | FS/FS/cust_main_Mixin.pm | 96 | ||||
| -rw-r--r-- | httemplate/elements/menubar.html | 7 | ||||
| -rw-r--r-- | httemplate/elements/select-agent.html | 3 | ||||
| -rwxr-xr-x | httemplate/search/cust_main.cgi | 4 | ||||
| -rwxr-xr-x | httemplate/search/cust_main.html | 9 | 
5 files changed, 117 insertions, 2 deletions
diff --git a/FS/FS/cust_main_Mixin.pm b/FS/FS/cust_main_Mixin.pm index 097111f38..88b1bd06d 100644 --- a/FS/FS/cust_main_Mixin.pm +++ b/FS/FS/cust_main_Mixin.pm @@ -577,6 +577,102 @@ sub process_email_search_result {  } +sub customer_agent_transfer_search_result { +  my($class, $param) = @_; + +  my $newagentnum = $param->{agentnum}; +  my $error = ''; +  my @customers; + +  my $job = delete $param->{'job'} +    or die "customer_agent_transfer_search_result must run from the job queue.\n"; + +  my $list = $param->{'list'}; + +  if ($param->{'search'}) { +    my $sql_query = $class->search($param->{'search'}); +    $sql_query->{'select'} = $sql_query->{'table'} . '.*'; +    @customers = qsearch($sql_query); +  } + +  @customers = @$list if !@customers && $list; +  my $num_cust = scalar(@customers); + +  my( $num, $last, $min_sec ) = (0, time, 5); #progresbar + +  # Transactionize +  my $oldAutoCommit = $FS::UID::AutoCommit; +  local $FS::UID::AutoCommit = 0; +  my $dbh = dbh; + +  foreach my $obj ( @customers ) { + +    #progressbar first, so that the count is right +    $num++; +    if ( time - $min_sec > $last ) { +      my $error = $job->update_statustext( +        int( 100 * $num / $num_cust ) +      ); +      die $error if $error; +      $last = time; +    } + +    my $cust_main = $obj->cust_main; +    if ( !$cust_main ) { +      next; # unlinked object nothing to do +    } + +    $cust_main->agentnum($newagentnum); +    $error = $cust_main->replace; + +    if ( $error ) { +      $dbh->rollback if $oldAutoCommit; +      return "transfering to new agent: $error"; +    } + +  } # foreach $obj + +  $dbh->commit if $oldAutoCommit; +  return ''; +} + +=item process_customer_agent_transfer_search_result + +Mass transfers customers to new agent. + +Is Transactionized so entire list transfers or none. + +excepts either a list of cust_main objects in the base64 encoded cgi param list +or a list of search fields in the base64 encoded  cgi param search. + +=cut + +sub process_customer_agent_transfer_search_result { +  my $job = shift; + +  my $param = shift; +  warn Dumper($param) if $DEBUG; + +  $param->{'job'} = $job; + +  $param->{'search'} = thaw(decode_base64($param->{'search'})) +    or die "process_customer_agent_transfer_search_result.\n" if $param->{'search'}; + +  $param->{'list'} = thaw(decode_base64($param->{'list'})) +    or die "process_customer_agent_transfer_search_result.\n" if $param->{'list'};; + +  my $table = $param->{'table'} +    or die "process_customer_agent_transfer_search_result.\n"; + +  eval "use FS::$table;"; +  die "error loading FS::$table: $@\n" if $@; + +  my $error = "FS::$table"->customer_agent_transfer_search_result( $param ); + +  die $error if $error; + +} +  =item conf  Returns a configuration handle (L<FS::Conf>) set to the customer's locale,  diff --git a/httemplate/elements/menubar.html b/httemplate/elements/menubar.html index c14904337..ffe83ec57 100644 --- a/httemplate/elements/menubar.html +++ b/httemplate/elements/menubar.html @@ -52,7 +52,12 @@ while (@_) {    } -  push @html, qq!<A HREF="$url_base$url" $style>$item</A>!; +  if ($item eq 'popup') { +   push @html, $url; +  } +  else { +    push @html, qq!<A HREF="$url_base$url" $style>$item</A>!; +  }  } diff --git a/httemplate/elements/select-agent.html b/httemplate/elements/select-agent.html index fd2c57eac..2bd0095da 100644 --- a/httemplate/elements/select-agent.html +++ b/httemplate/elements/select-agent.html @@ -3,7 +3,7 @@                   'name_col'      => 'agent',                   'value'         => $agentnum || '',                   'agent_virt'    => 1, -                 'empty_label'   => emt('all'), +                 'empty_label'   => $empty_label,                   'hashref'       => { 'disabled' => '' },                   'order_by'      => ' ORDER BY agent',                   'disable_empty' => $disable_empty, @@ -18,6 +18,7 @@ $opt{'records'} = delete $opt{'agents'}    if $opt{'agents'};  my $curuser = $FS::CurrentUser::CurrentUser; +my $empty_label = $opt{'empty_label'} ? $opt{'empty_label'} : 'all';  my $disable_empty = 0;  if ( $opt{'agent_null_right'} ) {    if ( $curuser->access_right($opt{'agent_null_right'}) ) { diff --git a/httemplate/search/cust_main.cgi b/httemplate/search/cust_main.cgi index 1bd228801..6b16252c8 100755 --- a/httemplate/search/cust_main.cgi +++ b/httemplate/search/cust_main.cgi @@ -37,6 +37,10 @@          ( <a href="<% $cgi->self_url %>"><% mt("$linklabel canceled customers") |h %></a> )  %  } +%  unless ($cgi->param('browse')) { +    <& /elements/agent_transfer_link.html, {'list' => \@cust_main} &> +%  } +  %  if ( $cgi->param('referral_custnum') ) {  %    $cgi->param('referral_custnum') =~ /^(\d+)$/  %      or errorpage(emt("Illegal referral_custnum")); diff --git a/httemplate/search/cust_main.html b/httemplate/search/cust_main.html index 7cfe5ec9b..62e4a2706 100755 --- a/httemplate/search/cust_main.html +++ b/httemplate/search/cust_main.html @@ -150,4 +150,13 @@ if ( $FS::CurrentUser::CurrentUser->access_right('Bulk send customer notices') )  } +### +# agent transfer link +### + +my $agent_transfer_link = include('/elements/agent_transfer_link.html', { +     'search' => \%search_hash, +}); +push @$menubar, emt('popup') => '<div style="display:inline-block">'.$agent_transfer_link.'</div>'; +  </%init>  | 
