X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fpart_pkg.pm;h=e4927a3895d2d761a53acf7ac0213ef55b39d54d;hb=933897259d1e64fdc12c612f924db3b039a9ffdf;hp=59bc0518256eb158667dce16459fe79461944f22;hpb=edea94b6bd41a3fceac47267a3df3dc7fcf7c565;p=freeside.git diff --git a/FS/FS/part_pkg.pm b/FS/FS/part_pkg.pm index 59bc05182..e4927a389 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,49 @@ 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 $opt (qsearch('part_pkg_option', + { 'optionname' => { op => 'LIKE', + value => 'recur_%_charge', + }, + 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 }