<& /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 $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('pricing')) { my $setup_fee_increase = $cgi->param('setup_fee_increase'); my $recurring_fee_increase = $cgi->param('recurring_fee_increase'); 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;