}
$si_db = new DBConn(DB_SERVER, DB_DATABASE, DB_USER, DB_PASSWORD);
assert_die($si_db->connect(TRUE), "Could not connect to sureinvoice database!\n" . $si_db->getLastError());
debug('Connected to sureinvoice database ' . DB_DATABASE);
$dt_db = new DBConn($phpdt_server, $phpdt_database, $phpdt_username, $phpdt_password);
assert_die($dt_db->connect(TRUE), "Could not connect to phpdt database!\n" . $dt_db->getLastError());
debug('Connected to phpdt database ' . $phpdt_database);
// Migrate companies
$companies = array();
$company_rates = array();
$company_sql = "\nSELECT `id`, `name`, `address1`, `address2`, `city`, `state`,\n`zip`, `phone`, `fax`, `hourly_rate`, `created_ts`, `updated_ts`\nFROM `companies`\n";
$company_result = $dt_db->query($company_sql, TRUE);
assert_die($company_result, "Could not get company list!\n" . $dt_db->getLastError());
debug('Got ' . $company_result->numRows() . ' company rows from phpdt.');
while ($row = $company_result->fetchArray(MYSQL_ASSOC)) {
    $company_insert_sql = "\nINSERT INTO companies (id, name, address1, address2, city,\nstate, zip, phone, fax, hourly_rate,created_ts, updated_ts)\nVALUES(" . $row['id'] . ", '" . $si_db->escapeString($row['name']) . "', '" . $row['address1'] . "', \n'" . $row['address2'] . "', '" . $row['city'] . "', '" . $row['state'] . "', \n'" . $row['zip'] . "', '" . $row['phone'] . "', '" . $row['fax'] . "', \n" . $row['hourly_rate'] . ", " . $row['created_ts'] . ", " . $row['updated_ts'] . ")\n\t";
    assert_die($si_db->query($company_insert_sql, TRUE), "Error adding company!\n" . $si_db->getLastError(), FALSE);
    debug('Added ' . $row['name'] . ' to sureinvoice');
    $company_rates[$row['id']] = $row['hourly_rate'];
    $companies[$row['id']] = $row;
}
$company_result->free();
// Migrate users
$users = array();
$user_sql = "\nSELECT `id`, `user_type_id`, `first_name`, `last_name`, `company_id`, \n`address1`, `address2`, `city`, `state`, `zip`, `email`, `password`, \n`hourly_rate`, `rate_type`, `active`, `created_ts`, `updated_ts`, \n`last_login_ts` \nFROM `users`";
$user_result = $dt_db->query($user_sql, TRUE);
assert_die($user_result, "Could not get user list!\n" . $dt_db->getLastError());
debug('Got ' . $user_result->numRows() . ' user rows from phpdt.');
while ($row = $user_result->fetchArray(MYSQL_ASSOC)) {
    $user_insert_sql = "\nINSERT INTO users (id, user_type_id, first_name, last_name, company_id, \naddress1, address2, city, state, zip, email, password, hourly_rate, \nrate_type, active, created_ts, updated_ts, last_login_ts)\nVALUES(" . $row['id'] . "," . $row['user_type_id'] . ", '" . $si_db->escapeString($row['first_name']) . "', \n'" . $si_db->escapeString($row['last_name']) . "', " . $row['company_id'] . ", \n'" . $si_db->escapeString($row['address1']) . "', '" . $si_db->escapeString($row['address2']) . "', \n'" . $si_db->escapeString($row['city']) . "', '" . $si_db->escapeString($row['state']) . "', \n'" . $si_db->escapeString($row['zip']) . "', '" . $si_db->escapeString($row['email']) . "', \n'" . $row['password'] . "', '" . $row['hourly_rate'] . "', '" . $row['rate_type'] . "', '" . $row['active'] . "', \n" . $row['created_ts'] . ", " . $row['updated_ts'] . ", " . $row['last_login_ts'] . ")\n\t";
    assert_die($si_db->query($user_insert_sql, TRUE), "Error adding user!\n" . $si_db->getLastError(), FALSE);