[freeside-commits] branch FREESIDE_3_BRANCH updated. f9a032ba3e9bc7eee997b529f6f51eae0d33b4c3

Christopher Burger burgerc at freeside.biz
Mon Apr 15 08:46:03 PDT 2019


The branch, FREESIDE_3_BRANCH has been updated
       via  f9a032ba3e9bc7eee997b529f6f51eae0d33b4c3 (commit)
       via  eceeb8f99451ce6a4b3fbd3093c37b80db3f1cd7 (commit)
       via  810f6c01aa6882f6893d4cbb061d1adafaf79638 (commit)
      from  f8846c87b3cbbc032c151ebf5dd2fd98fb47b237 (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 f9a032ba3e9bc7eee997b529f6f51eae0d33b4c3
Author: Christopher Burger <burgerc at freeside.biz>
Date:   Mon Apr 15 11:37:08 2019 -0400

    RT# 79913 - V3 fix for mass agent transfer

diff --git a/FS/FS/cust_main_Mixin.pm b/FS/FS/cust_main_Mixin.pm
index 88b1bd06d..be57017e0 100644
--- a/FS/FS/cust_main_Mixin.pm
+++ b/FS/FS/cust_main_Mixin.pm
@@ -650,7 +650,7 @@ or a list of search fields in the base64 encoded  cgi param search.
 sub process_customer_agent_transfer_search_result {
   my $job = shift;
 
-  my $param = shift;
+  my $param = thaw(decode_base64(shift));
   warn Dumper($param) if $DEBUG;
 
   $param->{'job'} = $job;

commit eceeb8f99451ce6a4b3fbd3093c37b80db3f1cd7
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 810f6c01aa6882f6893d4cbb061d1adafaf79638
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 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>

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

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