X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2FUpgrade.pm;h=c2236742af95e5f4d27e1a17ffddad32b9a87058;hb=c545a57d21341c49674defed65a4243f07b5ebaf;hp=cb4823012f0bf3bc4bbfd758e8c56fc8756115dd;hpb=1d920e3661c29398763d05c82bbe3a493a19fbae;p=freeside.git diff --git a/FS/FS/Upgrade.pm b/FS/FS/Upgrade.pm index cb4823012..c2236742a 100644 --- a/FS/FS/Upgrade.pm +++ b/FS/FS/Upgrade.pm @@ -5,13 +5,14 @@ use vars qw( @ISA @EXPORT_OK ); use Exporter; use Tie::IxHash; use FS::UID qw( dbh driver_name ); -use FS::Record; +use FS::Conf; +use FS::Record qw(qsearchs str2time_sql); use FS::svc_domain; $FS::svc_domain::whois_hack = 1; @ISA = qw( Exporter ); -@EXPORT_OK = qw( upgrade ); +@EXPORT_OK = qw( upgrade upgrade_sqlradius ); =head1 NAME @@ -84,6 +85,9 @@ sub upgrade_data { 'reason_type' => [], 'reason' => [], + #need part_pkg before cust_credit... + 'part_pkg' => [], + #customer credits 'cust_credit' => [], @@ -96,12 +100,88 @@ sub upgrade_data { #populate part_pkg_taxclass for starters 'part_pkg_taxclass' => [], + #remove bad pending records + 'cust_pay_pending' => [], + ; \%hash; } +sub upgrade_sqlradius { + #my %opt = @_; + + my $conf = new FS::Conf; + + my @part_export = FS::part_export::sqlradius->all_sqlradius_withaccounting(); + + foreach my $part_export ( @part_export ) { + my $dbh = DBI->connect( + ( map $part_export->option($_), qw ( datasrc username password ) ), + { PrintError => 0, PrintWarn => 0 } + ); + + my $str2time = str2time_sql( $dbh->{Driver}->{Name} ); + my $group = "UserName"; + $group .= ",Realm" + if ( ref($part_export) =~ /withdomain/ ); + + my $sth_alter = $dbh->prepare( + "ALTER TABLE radacct ADD COLUMN FreesideStatus varchar(32) NULL" + ); + if ( $sth_alter && $sth_alter->execute ) { + my $sth_update = $dbh->prepare( + "UPDATE radacct SET FreesideStatus = 'done' WHERE FreesideStatus IS NULL" + ) or die $dbh->errstr; + $sth_update->execute or die $sth_update->errstr; + } + + my $sth_index = $dbh->prepare( + "CREATE INDEX FreesideStatus ON radacct ( FreesideStatus )" + ); + if ( $sth_index ) { + $sth_index->execute; + } + + my $sth = $dbh->prepare("SELECT UserName, + Realm, + $str2time max(AcctStartTime)), + $str2time max(AcctStopTime)) + FROM radacct + WHERE FreesideStatus = 'done' + AND AcctStartTime != 0 + AND AcctStopTime != 0 + GROUP BY $group + ") + or die $dbh->errstr; + $sth->execute() or die $sth->errstr; + + while (my $row = $sth->fetchrow_arrayref ) { + my ($username, $realm, $start, $stop) = @$row; + + $username = lc($username) unless $conf->exists('username-uppercase'); + my $extra_sql = ''; + if ( ref($part_export) =~ /withdomain/ ) { + $extra_sql = " And '$realm' = ( SELECT domain FROM svc_domain + WHERE svc_domain.svcnum = svc_acct.domsvc ) "; + } + + my $svc_acct = qsearchs( 'svc_acct', + { 'username' => $username }, + '', + $extra_sql, + ); + if ($svc_acct) { + $svc_acct->last_login($start) + if $start && (!$svc_acct->last_login || $start > $svc_acct->last_login); + $svc_acct->last_logout($stop) + if $stop && (!$svc_acct->last_logout || $stop > $svc_acct->last_logout); + } + } + } + +} =back