[freeside-commits] branch master updated. 9cfa3648407dc2333fb549460fed278311c5393a

Christopher Burger burgerc at freeside.biz
Thu May 9 10:23:04 PDT 2019


The branch, master has been updated
       via  9cfa3648407dc2333fb549460fed278311c5393a (commit)
      from  68bbe026eecdd3deb072496993fd26e208f9b571 (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 9cfa3648407dc2333fb549460fed278311c5393a
Author: Christopher Burger <burgerc at freeside.biz>
Date:   Thu May 9 13:22:09 2019 -0400

    RT# 82949 - added the ability to bulk increase package fees (setup and/or recurring) by a percentage

diff --git a/httemplate/browse/part_pkg.cgi b/httemplate/browse/part_pkg.cgi
index cb74bed66..cda189756 100755
--- a/httemplate/browse/part_pkg.cgi
+++ b/httemplate/browse/part_pkg.cgi
@@ -38,6 +38,9 @@
 $().ready(function() {
   $('.taxproduct_desc').tooltip({});
 });
+$(document).ready(function(){
+    $(this).scrollTop(0);
+});
 </SCRIPT>
 </%def>
 <%init>
@@ -801,8 +804,18 @@ if ( $acl_edit_bulk ) {
   $html_form = qq!<FORM ACTION="${p}edit/bulk-part_pkg.html" METHOD="POST">!;
   $html_foot = include('/search/elements/checkbox-foot.html',
                  actions => [
-                   { submit => 'edit report classes', },
-                   { label  => 'change customer packages',
+                   { label  => 'edit packages',
+                     onclick=> include('/elements/popup_link_onclick.html',
+                                 'label'       => 'edit',
+                                 'js_action'   => qq{
+                                   '${p}edit/bulk-part_pkg.html?' + \$('input[name=pkgpart]').serialize()
+                                 },
+                                 'actionlabel' => 'Bulk edit packages',
+                                 'width'       => 960,
+                                 'height'      => 420,
+                               )
+                   },
+                   { label  => 'change customers packages',
                      onclick=> include('/elements/popup_link_onclick.html',
                                  'label'       => 'change',
                                  'js_action'   => qq{
diff --git a/httemplate/edit/bulk-part_pkg.html b/httemplate/edit/bulk-part_pkg.html
index 4665c9f95..3225392be 100644
--- a/httemplate/edit/bulk-part_pkg.html
+++ b/httemplate/edit/bulk-part_pkg.html
@@ -1,5 +1,4 @@
-<& /elements/header.html, 'Edit package report classes' &>
-%# change that title if we add any other editing controls
+<% include('/elements/header-popup.html', 'Bulk edit packages') %>
 
 %# this should be centralized somewhere
 <STYLE TYPE="text/css">
@@ -8,36 +7,83 @@
 </STYLE>
 <& /elements/error.html &>
 
+<SCRIPT>
+  function areyousure() {
+    var warning = 'Edit these packages?';
+    if(confirm(warning)) { process(); }
+  }
+
+  function toggle_section(what) {
+    var id = what.id;
+    var isDisabled;
+    if (document.getElementById(id).checked == true)  { isDisabled = false; }
+    else { isDisabled = true; }
+
+    var whatDiv = document.getElementById(id+'_div');
+    if (isDisabled) { whatDiv.style.display = "none"; }
+    else { whatDiv.style.display = "block"; }
+
+  }
+</SCRIPT>
+
 <FORM ACTION="process/bulk-part_pkg.html" METHOD="POST">
-<DIV>
-The following packages will be changed:<BR>
-% foreach my $pkgpart (sort keys(%part_pkg)) {
-<INPUT TYPE="hidden" NAME="pkgpart" VALUE="<% $pkgpart %>">
-<% $part_pkg{$pkgpart}->pkg_comment |h %><BR>
-% }
-</DIV>
+<TABLE>
+  <TR>
+    <TD VALIGN="top">
+<B>Select the package information to change</B><BR>
+<INPUT TYPE="checkbox" ID="report_class" NAME="report_class" VALUE="1" onChange='toggle_section(this);'>
+Edit report classes
 <BR>
-<& /elements/table-grid.html &>\
-<& /elements/tr-justtitle.html, value => mt('Report classes') &>
+<DIV ID="report_class_div" STYLE="display: none;">
+ <& /elements/table-grid.html &>\
+  <& /elements/tr-justtitle.html, value => mt('Report classes') &>
 % my $row = 0;
 % foreach my $num (sort keys %report_class) {
-  <TR CLASS="row<%$row % 2%>">
-    <TD>
+    <TR CLASS="row<%$row % 2%>">
+     <TD>
 %   if ( $initial_state{$num} == -1 ) {
 %     # needs to be a tristate so that you can say "don't change it"
       <& /elements/checkbox-tristate.html, field => 'report_option_'.$num &>
 %   } else {
 %# for visual consistency
-      <INPUT TYPE="checkbox" CLASS="partial" NAME="report_option_<%$num%>" VALUE="1" <% $initial_state{$num} ? 'CHECKED':'' %>><LABEL />
+      <INPUT TYPE="checkbox" CLASS="partial" ID="report_option_<%$num%>" NAME="report_option_<%$num%>" VALUE="1" <% $initial_state{$num} ? 'CHECKED':'' %>><LABEL />
 %   }
-    </TD>
-    <TD><% $report_class{$num}->name %></TD>
-  </TR>
+     </TD>
+      <TD><% $report_class{$num}->name %></TD>
+    </TR>
 %   $row++;
 % }
-</TABLE>
+  </TABLE>
+</DIV>
+<BR>
+<INPUT TYPE="checkbox" ID="package_fees" NAME="package_fees" VALUE="1" onChange='toggle_section(this);'>
+Edit package fees.
+<BR>
+<DIV ID="package_fees_div" STYLE="display: none;">
+ <& /elements/table-grid.html &>\
+  <& /elements/tr-justtitle.html, value => mt('Package fees') &>
+  <TR>
+    <TD>Percentage of setup fee increase </TD>
+    <TD><INPUT TYPE="text" ID="setup_fee_increase" NAME="setup_fee_increase">%</TD>
+  </TR>
+    <TD>Percentage of recurring fee increase </TD>
+    <TD><INPUT TYPE="text" ID="recurring_fee_increase" NAME="recurring_fee_increase">%</TD>
+  </TR>
+ </TABLE>
+</DIV>
 <BR>
-<INPUT TYPE="submit">
+<INPUT TYPE="submit" VALUE="Bulk change packages" onclick="areyousure()">
+    </TD>
+    <TD WIDTH="5"> </TD>
+    <TD VALIGN="top">
+      <B>The following packages will be changed:</B><BR>
+%     foreach my $pkgpart (sort keys(%part_pkg)) {
+        <INPUT TYPE="hidden" NAME="pkgpart" VALUE="<% $pkgpart %>">
+        <% $part_pkg{$pkgpart}->pkg_comment |h %><BR>
+%     }
+    </TD>
+  </TR>
+</TABLE>
 </FORM>
 <& /elements/footer.html &>
 <%init>
diff --git a/httemplate/edit/process/bulk-part_pkg.html b/httemplate/edit/process/bulk-part_pkg.html
index 59c914a5d..ac542cc14 100644
--- a/httemplate/edit/process/bulk-part_pkg.html
+++ b/httemplate/edit/process/bulk-part_pkg.html
@@ -1,35 +1,54 @@
-% if ( $error ) {
-%  $cgi->param('error', $error);
-<% $cgi->redirect(popurl(3).'/edit/bulk-part_pkg.html?'.$cgi->query_string) %>
-% } else {
-<% $cgi->redirect(popurl(3).'/browse/part_pkg.cgi') %>
-% }
+<& /elements/popup-topreload.html, emt($message) &>
+
 <%init>
 die "access denied" unless $FS::CurrentUser::CurrentUser->access_right('Bulk edit package definitions');
 
 my @pkgparts = $cgi->param('pkgpart')
   or die "no package definitions selected";
 
-my %delete = map { 'report_option_'.($_->num) => 1 }
-  qsearch('part_pkg_report_option', {});
-my %insert;
-
-foreach my $param (grep { /^report_option_\d+$/ } $cgi->param) {
-  if ( $cgi->param($param) == 1 ) {
-    $insert{$param} = 1;
-    delete $delete{$param};
-  } elsif ( $cgi->param($param) == -1 ) {
-    # leave it alone
-    delete $delete{$param};
-  } # else it's empty, so leave it on the delete list
+my $error;
+
+if ($cgi->param('report_class')) {
+  my %delete = map { 'report_option_'.($_->num) => 1 }
+    qsearch('part_pkg_report_option', {});
+  my %insert;
+
+  foreach my $param (grep { /^report_option_\d+$/ } $cgi->param) {
+    if ( $cgi->param($param) == 1 ) {
+      $insert{$param} = 1;
+      delete $delete{$param};
+    } elsif ( $cgi->param($param) == -1 ) {
+      # leave it alone
+      delete $delete{$param};
+    } # else it's empty, so leave it on the delete list
+  }
+
+  foreach my $pkgpart (@pkgparts) {
+    my $part_pkg = FS::part_pkg->by_key($pkgpart);
+    my %options = ( $part_pkg->options, %insert );
+    delete $options{$_} foreach keys(%delete);
+    $error ||= $part_pkg->replace( options => \%options );
+  }
 }
 
+if ($cgi->param('package_fees')) {
+  my $setup_fee_increase = $cgi->param('setup_fee_increase');
+  my $recurring_fee_increase = $cgi->param('recurring_fee_increase');
 
-my $error;
-foreach my $pkgpart (@pkgparts) {
-  my $part_pkg = FS::part_pkg->by_key($pkgpart);
-  my %options = ( $part_pkg->options, %insert );
-  delete $options{$_} foreach keys(%delete);
-  $error ||= $part_pkg->replace( options => \%options );
+  foreach my $pkgpart (@pkgparts) {
+    my $part_pkg = FS::part_pkg->by_key($pkgpart);
+    my %options = $part_pkg->options;
+    if ($recurring_fee_increase) {
+      $options{'recur_fee'} = $options{'recur_fee'} + ($options{'recur_fee'} * ($recurring_fee_increase / 100));
+    }
+    if ($setup_fee_increase) {
+      $options{'setup_fee'} = $options{'setup_fee'} + ($options{'setup_fee'} * ($setup_fee_increase / 100));
+    }
+    $error ||= $part_pkg->replace( options => \%options );
+  }
 }
+
+my $message = "Packages updated successfully";
+$message = $error."=error" if $error;
+
 </%init>
diff --git a/httemplate/elements/header-full.html b/httemplate/elements/header-full.html
index c73cf0463..5a5db9620 100644
--- a/httemplate/elements/header-full.html
+++ b/httemplate/elements/header-full.html
@@ -207,7 +207,7 @@ Example:
 %     my ($message, $type) = split /=/, $status_msg;
 %     $type ||= 'status';
       <TABLE CLASS="fsinnerbox" STYLE="background-color:<% $status_color{$type} %>"><TR>
-        <TD><IMG SRC="<% $fsurl %>images/tick.png"> <% $message |h %></TD>
+        <TD><IMG SRC="<% $fsurl %><% $status_image{$type} %>"> <% $message |h %></TD>
       </TR></TABLE>
 %   }
     <script src="<% $fsurl %>elements/js.cookie.js"></script>
@@ -274,5 +274,6 @@ if ( scalar(@agentnums) == 1 ) {
 
 ## status->green(#eeffee), warning->yellow(#fdfd96), error->red(#f97c7c)
 my %status_color = ( 'status' => '#eeffee', 'warning' => '#fefbd0', 'error' => '#f97c7c', );
+my %status_image = ( 'status' => 'images/tick.png', 'warning' => 'images/tick.png', 'error' => 'images/error.png', );
 
 </%init>

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

Summary of changes:
 httemplate/browse/part_pkg.cgi             | 17 +++++-
 httemplate/edit/bulk-part_pkg.html         | 84 +++++++++++++++++++++++-------
 httemplate/edit/process/bulk-part_pkg.html | 67 +++++++++++++++---------
 httemplate/elements/header-full.html       |  3 +-
 4 files changed, 125 insertions(+), 46 deletions(-)




More information about the freeside-commits mailing list