fix hourly cap for SQL overage charges
[freeside.git] / FS / bin / freeside-upgrade
index eb818ea..d143d92 100755 (executable)
@@ -11,6 +11,7 @@ use FS::Schema qw( dbdef dbdef_dist reload_dbdef );
 use FS::Misc::prune qw(prune_applications);
 use FS::Conf;
 use FS::Record qw(qsearch);
 use FS::Misc::prune qw(prune_applications);
 use FS::Conf;
 use FS::Record qw(qsearch);
+use FS::Upgrade qw(upgrade);
 
 die "Not running uid freeside!" unless checkeuid();
 
 
 die "Not running uid freeside!" unless checkeuid();
 
@@ -37,12 +38,34 @@ reload_dbdef($dbdef_file);
 
 $DBIx::DBSchema::DEBUG = $DEBUG;
 $DBIx::DBSchema::Table::DEBUG = $DEBUG;
 
 $DBIx::DBSchema::DEBUG = $DEBUG;
 $DBIx::DBSchema::Table::DEBUG = $DEBUG;
+$DBIx::DBSchema::Index::DEBUG = $DEBUG;
+
+my @bugfix = ();
+
+if (dbdef->table('cust_main')->column('agent_custid')) { 
+  push @bugfix,
+    "UPDATE cust_main SET agent_custid = NULL where agent_custid = ''";
+
+  push @bugfix,
+    "UPDATE h_cust_main SET agent_custid = NULL where agent_custid = ''"
+      if (dbdef->table('h_cust_main')); 
+}
+
+#you should have run fs-migrate-part_svc ages ago, when you upgraded
+#from 1.3 to 1.4... if not, it needs to be hooked into -upgrade here or
+#you'll lose all the part_svc settings it migrates to part_svc_column
 
 if ( $DRY_RUN ) {
 
 if ( $DRY_RUN ) {
-  print join(";\n", dbdef->sql_update_schema( dbdef_dist, $dbh ) ). ";\n";
+  print
+    join(";\n", @bugfix, dbdef->sql_update_schema( dbdef_dist(datasrc), $dbh ) ). ";\n";
   exit;
 } else {
   exit;
 } else {
-  dbdef->update_schema( dbdef_dist, $dbh );
+  foreach my $statement ( @bugfix ) {
+    $dbh->do( $statement )
+      or die "Error: ". $dbh->errstr. "\n executing: $statement";
+  }
+
+  dbdef->update_schema( dbdef_dist(datasrc), $dbh );
 }
 
 my $hashref = {};
 }
 
 my $hashref = {};
@@ -51,6 +74,24 @@ $hashref->{debug} = 1 if $DEBUG;
 print join "\n", prune_applications($hashref);
 print "\n" if $DRY_RUN;
 
 print join "\n", prune_applications($hashref);
 print "\n" if $DRY_RUN;
 
+if ( $dbh->{Driver}->{Name} =~ /^mysql/i ) {
+
+  my $sth = $dbh->prepare(
+    "SELECT COUNT(*) FROM duplicate_lock WHERE lockname = 'svc_acct'"
+  ) or die $dbh->errstr;
+
+  $sth->execute or die $sth->errstr;
+
+  unless ( $sth->fetchrow_arrayref->[0] ) {
+
+    $sth = $dbh->prepare(
+      "INSERT INTO duplicate_lock ( lockname ) VALUES ( 'svc_acct' )"
+    ) or die $dbh->errstr;
+
+    $sth->execute or die $sth->errstr;
+
+  }
+}
 
 $dbh->commit or die $dbh->errstr;
 
 
 $dbh->commit or die $dbh->errstr;
 
@@ -59,7 +100,7 @@ dbdef_create($dbh, $dbdef_file);
 $dbh->disconnect or die $dbh->errstr;
 
 delete $FS::Schema::dbdef_cache{$dbdef_file}; #force an actual reload
 $dbh->disconnect or die $dbh->errstr;
 
 delete $FS::Schema::dbdef_cache{$dbdef_file}; #force an actual reload
-$FS::UID::AutoCommit = 1;
+$FS::UID::AutoCommit = 0;
 $FS::UID::callback_hack = 1;
 $dbh = adminsuidsetup($user);
 $FS::UID::callback_hack = 0;
 $FS::UID::callback_hack = 1;
 $dbh = adminsuidsetup($user);
 $FS::UID::callback_hack = 0;
@@ -77,6 +118,14 @@ unless ( $DRY_RUN ) {
 $dbh->commit or die $dbh->errstr;
 $dbh->disconnect or die $dbh->errstr;
 
 $dbh->commit or die $dbh->errstr;
 $dbh->disconnect or die $dbh->errstr;
 
+$dbh = adminsuidsetup($user);
+
+upgrade()
+  unless $DRY_RUN;
+
+$dbh->commit or die $dbh->errstr;
+$dbh->disconnect or die $dbh->errstr;
+
 ###
 
 sub dbdef_create { # reverse engineer the schema from the DB and save to file
 ###
 
 sub dbdef_create { # reverse engineer the schema from the DB and save to file
@@ -102,6 +151,16 @@ freeside-upgrade - Upgrades database schema for new freeside verisons.
 Reads your existing database schema and updates it to match the current schema,
 adding any columns or tables necessary.
 
 Reads your existing database schema and updates it to match the current schema,
 adding any columns or tables necessary.
 
+Also performs other upgrade functions:
+
+=over 4
+
+=item Calls FS:: Misc::prune::prune_applications (probably unnecessary every upgrade, but simply won't find any records to change)
+
+=item If necessary, moves your configuration information from the filesystem in /usr/local/etc/freeside/conf.<datasrc> to the database.
+
+=back
+
   [ -d ]: Dry run; output SQL statements (to STDOUT) only, but do not execute
           them.
 
   [ -d ]: Dry run; output SQL statements (to STDOUT) only, but do not execute
           them.