Class: Port

Inherits:
Object
  • Object
show all
Defined in:
lib/jungle_path/app/ztools/zport_data.rb

Overview

notes: key_id lookup has been hardcoded to use @current_key. users will not be ported, but must be added as new users in new system.

Instance Method Summary collapse

Constructor Details

#initialize(source_db, target_db, target_db_postgresql, logger = nil, source_database_type = :sql_server) ⇒ Port

Returns a new instance of Port.



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/jungle_path/app/ztools/zport_data.rb', line 26

def initialize(source_db, target_db, target_db_postgresql, logger=nil, source_database_type=:sql_server)
  @user_params = {id: 0, user_name: "root"}
  @current_user = Schema::User.new(@user_params)
  @current_key = @current_user
  @logger = logger
  log "initialize"
  if source_database_type == :sql_server
    # sql server:
    @sql_true = "1"
    @sql_allow_order_bys_in_sub_select = "top 1000000000"
    @left_bracket = "["
    @right_bracket = "]"
    @convert_nvarchar_beg = "convert(nvarchar, "
    @convert_nvarchar_end = ")"
  else
    # postgresql:
    @sql_true = "true"
    @sql_allow_order_bys_in_sub_select = ""
    @left_bracket = ""
    @right_bracket = ""
    @convert_nvarchar_beg = ""
    @convert_nvarchar_end = "::text"
  end

  @source_db = source_db
  @target_db = target_db
  @target_db_postgresql = target_db_postgresql
  @lookup = Lookup.new(@target_db_postgresql)

  if @target_db.respond_to? :log_path
    Dir.mkdir @target_db.log_path unless Dir.exist? @target_db.log_path
    @error_log_file_name = "#{@target_db.log_path}/error_#{DateTime.now.strftime("%Y%m%d_%H%M%S")}.log"
  else
    Dir.mkdir "../logs" unless Dir.exist? "../logs"
    @error_log_file_name = "../logs/error_#{DateTime.now.strftime("%Y%m%d_%H%M%S")}.log"
  end
end

Instance Method Details

#create_db_and_schemaObject



81
82
83
84
# File 'lib/jungle_path/app/ztools/zport_data.rb', line 81

def create_db_and_schema
  log 'create_db_and_schema'
  ZCreateDb.run @target_db.postgresql
end

#create_log_tableObject



69
70
71
72
73
# File 'lib/jungle_path/app/ztools/zport_data.rb', line 69

def create_log_table
  drop_table Controller::Log
  create_table Controller::Log
  @log_id = -1
end

#db_log(msg, type, db) ⇒ Object



162
163
164
165
# File 'lib/jungle_path/app/ztools/zport_data.rb', line 162

def db_log(msg, type, db)
  @log_id += 1
  Controller::Log.new(@current_user, @current_key, {id: @log_id, name: "zport_data", type: type, item: msg, timestamp: Time.now.utc}, db).insert if db
end

#initial_dataObject



86
87
88
89
90
91
92
# File 'lib/jungle_path/app/ztools/zport_data.rb', line 86

def initial_data
  log 'initial_data', @target_db_postgresql
  reset_table Controller::User
  reset_table Controller::Role
  reset_table Controller::UserRole
  ZBootstrap.root_data(@target_db.postgresql)
end

#log(msg, db = nil) ⇒ Object



156
157
158
159
160
# File 'lib/jungle_path/app/ztools/zport_data.rb', line 156

def log(msg, db=nil)
  puts "log info: #{msg}"
  @logger.info(msg)
  db_log(msg, 'info', db) if db
end

#log_error(msg, db = nil) ⇒ Object



144
145
146
147
148
# File 'lib/jungle_path/app/ztools/zport_data.rb', line 144

def log_error(msg, db=nil)
  puts "log error: #{msg}"
  @logger.error(msg)
  db_log(msg, 'error', db) if db
end

#log_warn(msg, db = nil) ⇒ Object



150
151
152
153
154
# File 'lib/jungle_path/app/ztools/zport_data.rb', line 150

def log_warn(msg, db=nil)
  puts "log warn: #{msg}"
  @logger.warn(msg)
  db_log(msg, 'warn', db) if db
end

#reset_dbObject



64
65
66
67
# File 'lib/jungle_path/app/ztools/zport_data.rb', line 64

def reset_db
  log 'reset_db'
  JunglePath::Gen::DB.reset!(@target_db.postgresql)
end

#set_log_idObject



75
76
77
78
79
# File 'lib/jungle_path/app/ztools/zport_data.rb', line 75

def set_log_id
  log_id = @target_db_postgresql.get_max_id_for_table(:log)
  log_id = -1 if log_id == nil
  @log_id = log_id
end

#userObject



94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
# File 'lib/jungle_path/app/ztools/zport_data.rb', line 94

def user
  log 'user', @target_db_postgresql
  drop_table Controller::Contact
  create_table Controller::Contact
  sql = JunglePath::SQL::Helpers.sql("
    select
      a.ROW_ID as siebel_id,
      b.FST_NAME as first_name,
      b.LAST_NAME as last_name,
      lower(b.EMAIL_ADDR) as email,
      b.CELL_PH_NUM as phone,
      lower(a.LOGIN) as user_name,
      a.PASSWORD as password,
      a.CREATED as created_at,
      a.CREATED_BY as created_by_siebel_id,
      a.LAST_UPD as updated_at,
      a.LAST_UPD_BY as updated_by_siebel_id
    from dbo.S_USER a
    join dbo.S_CONTACT b on a.ROW_ID = b.ROW_ID
    order by a.ROW_ID
  ")
  ds = @source_db.base[sql]
  results = ds.all
  id = @target_db_postgresql.get_max_id_for_table(:user)
  results.each do |item|
    id += 1
    item[:user_id] = id
    item[:contact_id] = id
  end
  count = 0
  @target_db.transaction do
    results.each do |h|
      h = hash_values_nil_if_blank(h)
      count += 1
      puts "user: #{count} of #{results.length}."
      h[:email] = nil unless h[:email] and h[:email].include?('@')
      h[:password] = JunglePath::Authentication::Helpers.generate_api_key('generated_password_') #generate a random password for ported users. They will not have their password unless it is changed, so they will not be able to log on directly.
      #also, defaulting portal users to active for now...:
      hash = {id: h[:user_id], siebel_id: h[:siebel_id], user_name: h[:user_name], email: h[:email], first_name: h[:first_name], last_name: h[:last_name], password: h[:password], active: true}
      user = Controller::User.new(@current_user, @current_key, hash, @target_db).insert
      h[:password] = nil
      Controller::SiebelUser.new(@current_user, @current_key, h, @target_db).insert
      Controller::Contact.new(@current_user, @current_key, h, @target_db).insert
      Controller::SiebelContact.new(@current_user, @current_key, h, @target_db).insert
    end
  end
  @target_db_postgresql.reset_sequence_for_table(:user)
  log "user: processed #{results.length} rows.", @target_db_postgresql
end