summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristopher Burger <burgerc@freeside.biz>2019-05-09 13:22:09 -0400
committerChristopher Burger <burgerc@freeside.biz>2019-05-09 15:17:55 -0400
commit8c4f937a2160abb7d8aa96cdfbbd32e508faafee (patch)
treea8b3c73988bef4402483260253b52d9f78928e90
parente56a0099ed994ad0424943685d4236d6a52f3894 (diff)
RT# 82949 - added the ability to bulk increase package fees (setup and/or recurring) by a percentage
-rwxr-xr-xhttemplate/browse/part_pkg.cgi17
-rw-r--r--httemplate/edit/bulk-part_pkg.html84
-rw-r--r--httemplate/edit/process/bulk-part_pkg.html67
-rw-r--r--httemplate/elements/header-full.html3
4 files changed, 125 insertions, 46 deletions
diff --git a/httemplate/browse/part_pkg.cgi b/httemplate/browse/part_pkg.cgi
index 0737dcd..2143c24 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>
@@ -795,8 +798,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 4665c9f..3225392 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">&nbsp;</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 59c914a..ac542cc 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 c73cf04..5a5db96 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>