summaryrefslogtreecommitdiff
path: root/FS/FS/part_pkg.pm
diff options
context:
space:
mode:
authorC.J. Adams-Collier <cjac@colliertech.org>2014-09-16 16:48:22 -0700
committerC.J. Adams-Collier <cjac@colliertech.org>2014-09-16 16:49:58 -0700
commitfb385e8010a75583e7994433e2733cb9c2d2c486 (patch)
tree3e65c89cc14c021c40fd34c3cbf9de94367ce1a2 /FS/FS/part_pkg.pm
parentedea94b6bd41a3fceac47267a3df3dc7fcf7c565 (diff)
FS RT #28105 - alter payment plan options at upgrade - multiply dollars by 1k, divide totals and caps by 1k
Diffstat (limited to 'FS/FS/part_pkg.pm')
-rw-r--r--FS/FS/part_pkg.pm52
1 files changed, 51 insertions, 1 deletions
diff --git a/FS/FS/part_pkg.pm b/FS/FS/part_pkg.pm
index 59bc051..005d69d 100644
--- a/FS/FS/part_pkg.pm
+++ b/FS/FS/part_pkg.pm
@@ -1771,7 +1771,7 @@ sub parse {
# Used by FS::Upgrade to migrate to a new database.
sub _upgrade_data { # class method
- my($class, %opts) = @_;
+ my($class, %opts) = @_;
warn "[FS::part_pkg] upgrading $class\n" if $DEBUG;
@@ -1791,6 +1791,56 @@ sub _upgrade_data { # class method
$part_pkg->replace;
}
+
+ # Convert RADIUS accounting usage metrics from megabytes to gigabytes
+ # (FS RT#28105)
+ my $upgrade = 'part_pkg_gigabyte_usage';
+ if (!FS::upgrade_journal->is_done($upgrade)) {
+ foreach my $part_pkg (qsearch('part_pkg',
+ { plan => 'sqlradacct_hour' })
+ ){
+
+ my $pkgpart = $part_pkg->pkgpart;
+
+ foreach my $opt (qsearch('part_pkg_option',
+ { 'optionname' => { op => 'LIKE',
+ value => 'recur_included_%',
+ },
+ pkgpart => $pkgpart,
+ })){
+
+ next if $opt->optionname eq 'recur_included_hours'; # unfortunately named field
+ next if $opt->optionvalue == 0;
+
+ $opt->optionvalue($opt->optionvalue / 1024);
+
+ my $error = $opt->replace;
+ die $error if $error;
+ }
+
+ foreach my $optionname( qw(
+ recur_hourly_%
+ recur_input_%
+ recur_output_%
+ recur_total_%
+ ) ){
+ foreach my $opt (qsearch('part_pkg_option',
+ { 'optionname' => { op => 'LIKE',
+ value => $optionname,
+ },
+ pkgpart => $pkgpart,
+ })){
+ $opt->optionvalue($opt->optionvalue * 1024);
+
+ my $error = $opt->replace;
+ die $error if $error;
+ }
+ }
+
+ }
+ FS::upgrade_journal->set_done($upgrade);
+ }
+
# the rest can be done asynchronously
}