[freeside-commits] branch FREESIDE_4_BRANCH updated. 52181140b967f905e9fac6f7d33b16b93fa1c420

Christopher Burger burgerc at freeside.biz
Mon Apr 15 06:22:42 PDT 2019


The branch, FREESIDE_4_BRANCH has been updated
       via  52181140b967f905e9fac6f7d33b16b93fa1c420 (commit)
       via  6b9f3f22ef953190f3b29465879f35805dfcc457 (commit)
      from  088f2c57c91391ad6a01492286b36f786a185662 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 52181140b967f905e9fac6f7d33b16b93fa1c420
Author: Christopher Burger <burgerc at freeside.biz>
Date:   Mon Apr 15 08:05:48 2019 -0400

    RT# 79913 - Mass agent transfer files

diff --git a/httemplate/elements/agent_transfer_link.html b/httemplate/elements/agent_transfer_link.html
new file mode 100644
index 000000000..4256f07f0
--- /dev/null
+++ b/httemplate/elements/agent_transfer_link.html
@@ -0,0 +1,37 @@
+  <FORM NAME="agent_transfer_form">
+  <INPUT TYPE="hidden" NAME="search" VALUE="<% $search %>">
+  <INPUT TYPE="hidden" NAME="list" VALUE="<% $list %>">
+  <INPUT TYPE="hidden" NAME="table" VALUE="cust_main">
+  <& /elements/progress-init.html,
+                 'agent_transfer_form',
+                 [ qw( search list table agentnum) ],
+                 $process_url,
+                 $pdest,
+  &>  
+  <& /elements/select-agent.html, 'empty_label' => 'Transfer these customers to agent', 'onchange' => 'areyousure()' &>
+  </FORM>
+
+  <SCRIPT>
+      function areyousure(href) {
+        var sel = document.getElementById("agentnum");
+        if (sel.selectedIndex == 0) { alert("Please select a new agent to transfer to."); }
+        else if (confirm("Transfer these customers to agent " + sel.options[sel.selectedIndex].text )) {
+          process();
+          sel.selectedIndex = 0;
+        }
+        else {
+          sel.selectedIndex = 0;
+        }
+      }
+  </SCRIPT>
+
+<%init>
+
+my $opt = shift;
+my ($search, $list);
+$search = encode_base64(nfreeze($opt->{'search'})) if ref ($opt->{'search'}) eq 'HASH';
+$list = encode_base64(nfreeze($opt->{'list'})) if ref ($opt->{'list'}) eq 'ARRAY';
+my $process_url = "${p}misc/process/customers_transfer_to_agent.html";
+my $pdest = { 'message' => 'Transfer Complete' };
+
+</%init>
\ No newline at end of file
diff --git a/httemplate/misc/process/customers_transfer_to_agent.html b/httemplate/misc/process/customers_transfer_to_agent.html
new file mode 100644
index 000000000..8ee0d8846
--- /dev/null
+++ b/httemplate/misc/process/customers_transfer_to_agent.html
@@ -0,0 +1,6 @@
+<% $server->process %>
+<%init>
+
+my $server = new FS::UI::Web::JSRPC 'FS::cust_main_Mixin::process_customer_agent_transfer_search_result', $cgi; 
+
+</%init>
\ No newline at end of file

commit 6b9f3f22ef953190f3b29465879f35805dfcc457
Author: Christopher Burger <burgerc at freeside.biz>
Date:   Fri Apr 12 13:16:57 2019 -0400

    RT# 79913 - added ability to mass transfer customers to new agent

diff --git a/FS/FS/cust_main_Mixin.pm b/FS/FS/cust_main_Mixin.pm
index e31a31031..b5434e516 100644
--- a/FS/FS/cust_main_Mixin.pm
+++ b/FS/FS/cust_main_Mixin.pm
@@ -599,6 +599,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 cce4f0d7d..24d49c588 100755
--- a/httemplate/search/cust_main.cgi
+++ b/httemplate/search/cust_main.cgi
@@ -38,6 +38,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 1cc44d68a..d0d0f27ec 100755
--- a/httemplate/search/cust_main.html
+++ b/httemplate/search/cust_main.html
@@ -157,4 +157,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>

-----------------------------------------------------------------------

Summary of changes:
 FS/FS/cust_main_Mixin.pm                           | 96 ++++++++++++++++++++++
 httemplate/elements/agent_transfer_link.html       | 37 +++++++++
 httemplate/elements/menubar.html                   |  7 +-
 httemplate/elements/select-agent.html              |  3 +-
 .../misc/process/customers_transfer_to_agent.html  |  6 ++
 httemplate/search/cust_main.cgi                    |  4 +
 httemplate/search/cust_main.html                   |  9 ++
 7 files changed, 160 insertions(+), 2 deletions(-)
 create mode 100644 httemplate/elements/agent_transfer_link.html
 create mode 100644 httemplate/misc/process/customers_transfer_to_agent.html




More information about the freeside-commits mailing list