class Ucert::GoTracker

Attributes

go_2_ad_user[R]
go_contact[RW]
go_contact_0[RW]
go_contact_1[RW]
go_dptm[R]
org_chart[RW]
verbose[RW]

Public Class Methods

new(params ={}) click to toggle source

Instance default variables

# File lib/ucert/go_contact_tracker.rb, line 21
def initialize (params ={})
  @cmbny_contact_sheet = File.dirname(__FILE__) + '/../../data/go_contact/go_contact.xlsx'
  @verbose = params.fetch(:verbose, false)
  # Go to AD user map file
  @file_go_user_map = File.dirname(__FILE__) + '/../../data/go_contact/go_user_map.txt'
  @dn_title_level_map = File.dirname(__FILE__) + '/../../data/go_contact/title_level_map.txt'
  # Load user map from the local cache file
  @go_2_ad_user = load_known_user_map_from_file(@file_go_user_map)
  @go_contact = parse_go_contact(@cmbny_contact_sheet)
  # Procedure to add DN foreign key to the @go_contact, by performing the AD search
  insert_dn(@go_contact)
  insert_title_and_level(@go_contact)
  @go_contact_0 = @go_contact[0]
  @go_contact_1 = @go_contact[1]
  org_chart
  @go_dptm = go_dptm_list
  # Save the user map to local cache file
  save!
  #save_title_level_map
end

Public Instance Methods

export_go_contact_sheet(output_full_time, output_non_fte) click to toggle source
# File lib/ucert/go_contact_tracker.rb, line 284
def export_go_contact_sheet(output_full_time, output_non_fte)
  workbook = RubyXL::Workbook.new
  workbook.worksheets[0].sheet_name = 'FTE'
  workbook.add_worksheet('Non_FTE')
  workbook.worksheets.each_with_index do |worksheet, index|
    if index==0
      @full_time = output_full_time
    else
      @full_time = output_non_fte
    end
    record=0
    begin0=2
    worksheet.merge_cells(0, 0, 0, 8)
    worksheet.add_cell(0, 0, "China Merchants Bank New York Branch Contact Sheet #{Time.now.year}")
    worksheet.change_row_height(0,40.5)
    worksheet.sheet_data[0][0].change_font_size(font_size = 28)
    worksheet.sheet_data[0][0].change_font_name(font_name = 'Arial')
    worksheet.sheet_data[0][0].change_font_bold(true)
    worksheet.sheet_data[0][0].change_horizontal_alignment('center')
    worksheet.sheet_data[0][0].change_vertical_alignment('center')
    worksheet.change_column_width(0, 34.29)
    worksheet.change_column_width(1, 3.14)
    worksheet.change_column_width(2, 25.86)
    worksheet.change_column_width(3, 19.71)
    worksheet.change_column_width(4, 15.71)
    worksheet.change_column_width(5, 16.29)
    worksheet.change_column_width(6, 7.57)
    worksheet.change_column_width(7, 15.57)
    worksheet.change_column_width(8, 38.29)
    worksheet.add_cell(1, 0, 'Department')
    worksheet.add_cell(1, 1, 'Title')
    worksheet.add_cell(1, 2, 'English Name')
    worksheet.add_cell(1, 3, 'Chinese Name')
    worksheet.add_cell(1, 4, 'Chinese Name')
    worksheet.add_cell(1, 5, 'Work Phone')
    worksheet.add_cell(1, 6, 'Ext.')
    worksheet.add_cell(1, 7, 'Cell Number')
    worksheet.add_cell(1, 8, 'E-mail Address')
    for i in 0..8
      worksheet.sheet_data[1][i].change_font_bold(true)
      worksheet.sheet_data[1][i].change_horizontal_alignment('center')
      worksheet.sheet_data[1][i].change_font_size(font_size = 11)
      worksheet.sheet_data[1][i].change_font_name('Arial')
    end
    while @full_time[record] do
      if record % 2 != 0
        worksheet.change_row_fill(record, 'D7E4BC')
      end
      worksheet.change_row_border(record, :top, 'thin')
      worksheet.change_row_border(record, :bottom, 'thin')
      worksheet.change_row_border(record, :left, 'thin')
      worksheet.change_row_border(record, :right, 'thin')
      for i in 0..8
        worksheet.add_cell(begin0, i, @full_time[record][@@column_name[i]])
        #worksheet.sheet_data[begin0][i].change_font_bold(true) if (1...7) === @full_time[record]['level'].to_i
        worksheet.sheet_data[begin0][i].change_horizontal_alignment('center')
        worksheet.sheet_data[begin0][i].change_font_size(font_size = 11)
        worksheet.sheet_data[begin0][i].change_font_name('Arial')
      end
      record += 1
      begin0 += 1
    end
    worksheet.change_row_fill(record, 'D7E4BC')
    worksheet.change_row_border(record, :top, 'thin')
    worksheet.change_row_border(record, :bottom, 'thin')
    worksheet.change_row_border(record, :left, 'thin')
    worksheet.change_row_border(record, :right, 'thin')
    worksheet.change_row_border(record + 1, :top, 'thin')
    worksheet.change_row_border(record + 1, :bottom, 'thin')
    worksheet.change_row_border(record + 1, :left, 'thin')
    worksheet.change_row_border(record + 1, :right, 'thin')

    worksheet.merge_cells(record + 2, 0, record + 7, 0)
    worksheet.add_cell(record + 2, 0, 'CMBNY IT Dept. Disaster Recovery Lines')
    worksheet.sheet_data[record + 2][0].change_vertical_alignment('center')
    worksheet.add_cell(record + 8, 0, 'CMBNY IT Help Desk Line:')
    worksheet.add_cell(record + 9, 0, 'Human Resources Office Fax:')
    worksheet.add_cell(record + 3, 0, '')
    worksheet.add_cell(record + 4, 0, '')
    worksheet.add_cell(record + 5, 0, '')
    worksheet.add_cell(record + 6, 0, '')
    worksheet.add_cell(record + 7, 0, '')
    worksheet.add_cell(record + 2, 1, '')
    worksheet.add_cell(record + 3, 1, '')
    worksheet.add_cell(record + 4, 1, '')
    worksheet.add_cell(record + 5, 1, '')
    worksheet.add_cell(record + 6, 1, '')
    worksheet.add_cell(record + 7, 1, '')
    worksheet.add_cell(record + 8, 1, '')
    worksheet.add_cell(record + 9, 1, '')
    worksheet.sheet_data[record + 2][0].change_font_bold(true)
    worksheet.sheet_data[record + 2][0].change_font_name('Arial')
    worksheet.sheet_data[record + 2][0].change_font_size(font_size = 11)
    worksheet.sheet_data[record + 8][0].change_font_bold(true)
    worksheet.sheet_data[record + 8][0].change_font_name('Arial')
    worksheet.sheet_data[record + 8][0].change_font_size(font_size = 11)
    worksheet.sheet_data[record + 9][0].change_font_bold(true)
    worksheet.sheet_data[record + 9][0].change_font_name('Arial')
    worksheet.sheet_data[record + 9][0].change_font_size(font_size = 11)
    worksheet.merge_cells(record + 2, 1, record + 7, 1)
    worksheet.add_cell(record + 2, 2, '646 843-6811')
    worksheet.add_cell(record + 3, 2, '646 843-6812')
    worksheet.add_cell(record + 4, 2, '646 843-6813')
    worksheet.add_cell(record + 5, 2, '646 843-6814')
    worksheet.add_cell(record + 6, 2, '646 843-6815')
    worksheet.add_cell(record + 7, 2, '646 843-6816')
    worksheet.add_cell(record + 8, 2, '6999')
    worksheet.add_cell(record + 9, 2, '212 355-5147')
    for i in 2..9
      worksheet.sheet_data[record + i][2].change_horizontal_alignment('center')
      worksheet.sheet_data[record + i][2].change_font_name('Arial')
      worksheet.sheet_data[record + i][2].change_font_size(font_size = 11)
      for j in 0..2
        worksheet.sheet_data[record + i][j].change_border(:top, 'thin')
        worksheet.sheet_data[record + i][j].change_border(:bottom, 'thin')
        worksheet.sheet_data[record + i][j].change_border(:left, 'thin')
        worksheet.sheet_data[record + i][j].change_border(:right, 'thin')
      end
    end
    worksheet.merge_cells(record + 2, 4, record + 13, 4)
    worksheet.add_cell(record + 2, 4, 'Main Office Lines')
    for i in 3..13
      worksheet.add_cell(record + i, 4, '')
    end
    worksheet.sheet_data[record + 2][4].change_font_bold(true)
    worksheet.sheet_data[record + 2][4].change_font_name('Arial')
    worksheet.sheet_data[record + 2][4].change_horizontal_alignment('center')
    worksheet.sheet_data[record + 2][4].change_vertical_alignment('center')
    worksheet.sheet_data[record + 2][4].change_font_size(font_size = 11)
    for i in 2..13
      worksheet.merge_cells(record + i, 5, record + i, 8)
    end
    worksheet.add_cell(record + 2, 5, '18 Fl Main number: 212 750-4810')
    worksheet.add_cell(record + 3, 5, '18 Fl Large Conference Room: 646 843-6801 ')
    worksheet.add_cell(record + 4, 5, '18 FL Small Conference Room: 646 843-6858')
    worksheet.add_cell(record + 5, 5, '18 Fl Copier Room: 646 843-6874                      18th FL FAX: 212 753-1319')
    worksheet.add_cell(record + 6, 5, '27 Fl Large Conference Room: 212 980-7141   ')
    worksheet.add_cell(record + 7, 5, '23 FI Main number: 212 753-1801       ')
    worksheet.add_cell(record + 8, 5, '23 FL Large Conference Room: 212 355-5930   23rd FL FAX: 212-355-3934')
    worksheet.add_cell(record + 9, 5, '17 FL Main number: 212 758-3273                      17th FL FAX: 212 223-0219')
    worksheet.add_cell(record + 10, 5, 'Building Lobby: 212 308-4177                              Mail Room: 212 888-1146')
    worksheet.add_cell(record + 11, 5, 'Calling Card (new): Access # 800 858-9414     Pin Number:1477320752')
    worksheet.add_cell(record + 12, 5, 'Calling Card (new): Access # 800 858-9414     Pin Number: 8337314307')
    worksheet.add_cell(record + 13, 5, 'Calling Card (new): Access # 800 858-9414     Pin Number: 3056429452')
    for j in 6..8
      for i in 2..13
        worksheet.add_cell(record + i, j, '')
      end
    end
    for i in 2..13
      worksheet.sheet_data[record + i][5].change_font_name('Arial')
      worksheet.sheet_data[record + i][5].change_font_size(font_size = 11)
      worksheet.sheet_data[record + i][4].change_border(:top, 'thin')
      worksheet.sheet_data[record + i][4].change_border(:bottom, 'thin')
      worksheet.sheet_data[record + i][4].change_border(:left, 'thin')
      worksheet.sheet_data[record + i][4].change_border(:right, 'thin')
      for j in 5..8
        worksheet.sheet_data[record + i][j].change_border(:top, 'thin')
        worksheet.sheet_data[record + i][j].change_border(:bottom, 'thin')
        worksheet.sheet_data[record + i][j].change_border(:left, 'thin')
        worksheet.sheet_data[record + i][j].change_border(:right, 'thin')
      end
    end
    worksheet.cols[1].hidden = true     # hiding the 'Title' column
    # refer to source: https://github.com/weshatheleopard/rubyXL/blob/master/lib/rubyXL/objects/worksheet.rb
    # legal size paper, refer to http://xlsxwriter.readthedocs.io/page_setup.html
    # worksheet.page_setup(fitToWidth: 1, fitToHeight: 1, paperSize: 4)
  end
  return workbook
end
find_lower_level_from_hash(dn) click to toggle source
# File lib/ucert/go_contact_tracker.rb, line 725
def find_lower_level_from_hash(dn)
  list = Array.new()
  if dn == @org_chart["GM"]["DGM"]["CBI"]["DN"]
    @dept = "Corporate Banking China Group"
  elsif dn == @org_chart["GM"]["DGM"]["CBII"]["DN"]
    @dept = "Corporate Banking US Group"
  elsif dn == @org_chart["GM"]["DGM"]["CPG"]["DN"]
    @dept = "Credit Product Group"
  elsif dn == @org_chart["GM"]["DGM"]["IB"]["DN"]
    @dept = "Investment Banking"
  elsif dn == @org_chart["GM"]["FI"]["DN"]
    @dept = "Financial Institution"
  elsif dn == @org_chart["GM"]["PB"]["DN"]
    @dept = "Private Banking"
  elsif dn == @org_chart["GM"]["AGM2"]["TB"]["DN"]
    @dept = "Transaction Banking"
  elsif dn == @org_chart["GM"]["AGM1"]["FA"]["DN"]
    @dept = "Finance & Accounting"
  elsif dn == @org_chart["GM"]["HRGO"]["DN"]
    @dept = "General Office"
  elsif dn == @org_chart["GM"]["HRGO"]["DN"]
    @dept = "Human Resources"
  elsif dn == @org_chart["GM"]["AGM2"]["IT"]["DN"]
    @dept = "Information Technology"
  elsif dn == @org_chart["GM"]["AGM1"]["LC"]["DN"]
    @dept = "Legal & Compliance"
  elsif dn == @org_chart["GM"]["AGM2"]["OPS"]["DN"]
    @dept = "Operations"
  elsif dn == @org_chart["GM"]["AGM1"]["Risk"]["DN"]
    @dept = "Risk Management"
  elsif dn == @org_chart["GM"]["SBD"]["DN"]
    @dept = "Strategy & Business Development"
  elsif dn == @org_chart["GM"]["TRE"]["DN"]
    @dept = "Treasury"
  else
    return nil
  end
    @go_contact_0.values.map do |entry|
      entry.values.map do |every|
        if every == @dept
          if entry["en_name"] != @org_chart["GM"]["DGM"]["CBI"]["Name"] && entry["en_name"] != @org_chart["GM"]["DGM"]["CBII"]["Name"] && entry["en_name"] != @org_chart["GM"]["DGM"]["CPG"]["Name"] &&
            entry["en_name"] != @org_chart["GM"]["DGM"]["IB"]["Name"] && entry["en_name"] != @org_chart["GM"]["FI"]["Name"] && entry["en_name"] != @org_chart["GM"]["PB"]["Name"] &&
            entry["en_name"] != @org_chart["GM"]["AGM2"]["TB"]["Name"] && entry["en_name"] != @org_chart["GM"]["AGM1"]["FA"]["Name"] && entry["en_name"] != @org_chart["GM"]["HRGO"]["Name"] &&
            entry["en_name"] != @org_chart["GM"]["AGM2"]["IT"]["Name"] && entry["en_name"] != @org_chart["GM"]["AGM1"]["LC"]["Name"] && entry["en_name"] != @org_chart["GM"]["AGM2"]["OPS"]["Name"] &&
            entry["en_name"] != @org_chart["GM"]["AGM1"]["Risk"]["Name"] && entry["en_name"] != @org_chart["GM"]["SBD"]["Name"] && entry["en_name"] != @org_chart["GM"]["TRE"]["Name"]
            list.push(entry["en_name"])
          end
        end
      end
    end
    return list
    list.clear
end
find_lower_level_from_org(hash, dn, list, flag) click to toggle source
# File lib/ucert/go_contact_tracker.rb, line 698
def find_lower_level_from_org(hash, dn, list, flag)
  hash.each do |key, value|
    if value.is_a? String
      if value == dn
        @flag = true
        break
      end
    else
      temp = Array.new
      value.each do |key1, value1|
        if key1 != "Name" && key1 != "DN"
          value1.each do |entry, every|
            if entry == "Name"
              temp.push(every)
            end
          end
        end
      end
      @list = temp
      find_lower_level_from_org(value, dn, list, flag)
      if @flag == true
        return @list
      end
    end
  end
end
find_upper_level_from_hash(dn) click to toggle source
# File lib/ucert/go_contact_tracker.rb, line 600
def find_upper_level_from_hash(dn)
  @go_contact_0.values.map do |entry|
    entry.values.map do |every|
      if every == dn
        @dept = entry["department"]
      end
    end
  end

  if @dept == "Corporate Banking China Group"
    return @org_chart["GM"]["DGM"]["CBI"]["Name"]
  elsif @dept == "Corporate Banking US Group"
    return @org_chart["GM"]["DGM"]["CBII"]["Name"]
  elsif @dept == "Credit Product Group"
    return @org_chart["GM"]["DGM"]["CPG"]["Name"]
  elsif @dept == "Investment Banking"
    return @org_chart["GM"]["DGM"]["IB"]["Name"]
  elsif @dept == "Financial Institution"
    return @org_chart["GM"]["FI"]["Name"]
  elsif @dept == "Private Banking"
    return @org_chart["GM"]["PB"]["Name"]
  elsif @dept == "Transaction Banking"
    return @org_chart["GM"]["AGM2"]["TB"]["Name"]
  elsif @dept == "Finance & Accounting"
    return @org_chart["GM"]["AGM1"]["FA"]["Name"]
  elsif @dept == "General Office"
    return @org_chart["GM"]["HRGO"]["Name"]
  elsif @dept == "Human Resources"
    return @org_chart["GM"]["HRGO"]["Name"]
  elsif @dept == "Information Technology"
    return @org_chart["GM"]["AGM2"]["IT"]["Name"]
  elsif @dept == "Legal & Compliance"
    return @org_chart["GM"]["AGM1"]["LC"]["Name"]
  elsif @dept == "Operations"
    return @org_chart["GM"]["AGM2"]["OPS"]["Name"]
  elsif @dept == "Risk Management"
    return @org_chart["GM"]["AGM1"]["Risk"]["Name"]
  elsif @dept == "Strategy & Business Development"
    return @org_chart["GM"]["SBD"]["Name"]
  elsif @dept == "Treasury"
    return @org_chart["GM"]["TRE"]["Name"]
  end

  return nil
end
find_upper_level_from_org(hash, dn, firstLevelName, secondLevelName, nextLevelName, flag) click to toggle source
# File lib/ucert/go_contact_tracker.rb, line 646
def find_upper_level_from_org(hash, dn, firstLevelName, secondLevelName, nextLevelName, flag)
  hash.each do |key1, temp|
    if temp.is_a? String
      if temp == dn
        @flag = true
        break
      end
    else
      if key1 == "GM"
        temp.each do |tt, yy|
          if tt == "Name"
            @firstLevelName = yy
            @nextLevelName = @firstLevelName
            break
          end
        end
      elsif key1 == "DGM" || key1 == "AGM1" || key1 == "AGM2"
        @nextLevelName = @firstLevelName
        temp.each do |tt, yy|
          if tt == "Name"
            @secondLevelName = yy
            break
          end
        end
      elsif key1 == "TRE" || key1 == "FI" || key1 == "PB" || key1 == "SBD" || key1 == "HRGO"
        @nextLevelName = @firstLevelName
      else
        @nextLevelName = @secondLevelName
      end
      find_upper_level_from_org(temp, dn, @firstLevelName, @secondLevelName, @nextLevelName, @flag)
      if @flag == true
        return @nextLevelName
      end
    end
  end
end
go_dptm_list() click to toggle source

Dump out list of departments

# File lib/ucert/go_contact_tracker.rb, line 251
def go_dptm_list
  @go_dptm = Hash.new unless @go_dptm
  @go_contact_0.values.map do |entry|
    my_dptm = entry['department']
    @go_dptm[my_dptm] = true unless @go_dptm.key?(my_dptm)
  end
  return @go_dptm
end
go_print() click to toggle source
# File lib/ucert/go_contact_tracker.rb, line 235
def go_print
  begin
    @go_contact.each do |index, table|
      table.values.map do |entry|
        entry.values.map do |every|
          print every, "|"
        end
        puts
      end
    end
  rescue => ee
    puts "Exception on method #{__method__}: #{ee}"
  end
end
go_search_by_dn(dn) click to toggle source
# File lib/ucert/go_contact_tracker.rb, line 215
def go_search_by_dn (dn)
  begin
    puts "Begin searches on the cache for: #{dn}" if @verbose
    go_contact_0_result = @go_contact_0.select{|key, hash| hash['DN'] == dn}
    #@go_contact_0.key({'dn' => dn})
    if go_contact_0_result.empty?
       go_contact_1_result = @go_contact_1.select{|key, hash| hash['DN'] == dn}
       go_contact_1_result.each do |key, value|
         return value
       end
    end
    go_contact_0_result.each do |key, value|
      return value
    end
  rescue => ee
    puts "Exception on method #{__method__}: #{ee}"
        end
end
Also aliased as: search_by_dn
go_search_lower_level(dn) click to toggle source
# File lib/ucert/go_contact_tracker.rb, line 683
def go_search_lower_level(dn)
  step1 = find_lower_level_from_org(@org_chart, dn, nil, false)
  if step1 == @org_chart || step1.empty?
    step2 = find_lower_level_from_hash(dn)
    if step2 == nil
      return nil
    else
      return step2
    end
  else
    return step1
  end

end
go_search_upper_level(dn) click to toggle source
# File lib/ucert/go_contact_tracker.rb, line 585
def go_search_upper_level(dn)
  step1 = find_upper_level_from_org(@org_chart, dn, "", "", "", false)
  if step1 == @org_chart
     step2 = find_upper_level_from_hash(dn)
     if step2 == nil
       return nil
     else
       return step2
     end
  else
    return step1
  end

end
go_searches_by_text(txt,max=10) click to toggle source

Primary keywords search method used to search related employee records

# File lib/ucert/go_contact_tracker.rb, line 179
def go_searches_by_text (txt,max=10)
  begin
    puts "Begin searches on the cache for: #{txt}" if @verbose
    # Additional logic to deal with special characters in the user input string; and allow
    # first/last name input bi-direction
    keywords = txt.downcase.gsub(/\s+/," ").split(/(\,|\s|\;|\&|\!|\@|\#|\$|\%|\^|\*|\(|\)|\-|\=|\+|\=|\{|\}|\[|\]|\:|\~)/) \
      - ["", nil, ",", ";", "&", "!", "@", "#", "$", "%", "^", "*", "(", ")", "-", "+", "=", "{", "}", "[", "]", ":" "~"]
    puts "Search by structured keywords: #{keywords}" if @verbose
    search_result_dn = Array.new
    cnt=0
    @go_contact.each do |index, table|
      table.each do |key, val|
        break if cnt >= max
        puts "Searching person cache data." if @verbose
        val.map do |entry|
          every = entry.to_s.downcase
          puts "Inspecting record: #{entry}" if @verbose
          #if every.downcase.include?(txt)
          success=keywords.inject(true) {|found,word| break unless found; every.include?(word) && found; }
          if success
            puts "Match found: #{entry}" if @verbose
            search_result_dn.push(val['DN'])
            cnt+=1
            break
            next
          end
        end
      end
    end
    return search_result_dn
  rescue => ee
    puts "Exception on method #{__method__}: #{ee}"
  end
end
Also aliased as: searches
insert_dn(go_contact) click to toggle source

Procedures to add additonal field 'DN' into the data structure, by perform the AD search

# File lib/ucert/go_contact_tracker.rb, line 82
def insert_dn (go_contact)
                begin
                        tracker = Ucert::AdTracker.new(:verbose=>false)
go_contact.each do |num, table|
                         table.each do |index, record|
                                puts "\n\nPerform DN lookup for record: #{record}" if @verbose
                                key1 = record["email"]
  key2 = record["en_name"]
                                my_key = record["email"].upcase
                                puts "Perform 1st order search from the local cache: #{my_key}" if @verbose
                                if @go_2_ad_user.key?(my_key)
                                        dn=@go_2_ad_user[my_key]
                                        # additional logic to update the existing DN record
                                        unless tracker.ad_person_records.key?(dn)
                                                dn = update_dn(tracker, dn)
                                        end
                                        puts "Found in the local cache file: #{dn}" if @verbose
                                else
                                        if dn.nil? and !key1.nil?
                                                puts "Perform 2nd order search only if the 1st one fail, by using: #{key1}" if @verbose
                                                dn = tracker.ad_search_by_text(key1, "person")
                                                puts "Found: #{dn}" unless dn.nil? if @verbose
                                        end
      if dn.nil? and !key2.nil?
                                                puts "Perform 3nd order search only if the 1st one fail, by using: #{key2}" if @verbose
                                                dn = tracker.ad_search_by_text(key2, "person")
                                                puts "Found: #{dn}" unless dn.nil? if @verbobe
                                        end
                                end
                                table[index]['DN'] = dn
  end
                        end
                        tracker=nil
                rescue => ee
                        puts "Exception on method #{__method__}: #{ee}"
                end
end
insert_title_and_level(go_contact) click to toggle source

method to retrieve additional employee information beyond the contact workbook, which is stored in 'title_level_map.txt' title is employee title, level is the weighting factor when sorting the employee record in the workbook

# File lib/ucert/go_contact_tracker.rb, line 122
def insert_title_and_level(go_contact)
  dn_title_table = parse_title_level(@dn_title_level_map)
  go_contact.each do |_, contact|
    contact.each do |_, employee|
       if dn_title_table[employee['DN']].nil?
        employee['level'] = 110
        employee['title'] = nil
        employee['employment_status'] = nil
       else
        employee['level'] = dn_title_table[employee['DN']]['level'].to_i
        employee['title'] = dn_title_table[employee['DN']]['title']
        unless dn_title_table[employee['DN']]['employment_status'].nil?
          employee['employment_status'] = dn_title_table[employee['DN']]['employment_status'].strip
        end
       end
    end
  end
end
parse_go_contact(file) click to toggle source
# File lib/ucert/go_contact_tracker.rb, line 42
def parse_go_contact(file)
  begin
    workbook = RubyXL::Parser.parse(file)
    go_contact = {}
    for i in 0..1
      worksheet = workbook[i]
      worksheet.cols[1].hidden = false # unlock the 'title' column
      go_contact[i] = Hash.new
      record = 0
      worksheet.each do |row|
        puts "Start parsing on record number: #{record}" if @verbose
        index = row[0].value.to_s.strip.downcase
        next if index.include?"china merchants bank new york branch contact sheet" or index.empty?
        index = row[0].value.to_s.strip.downcase or index.empty?
        next if index == "department" or index.empty?
        break if index == "cmbny it dept. disaster recovery lines" or index.empty?
        go_contact[i][record] = Hash.new unless go_contact[i].key?(row)
        @@column_name.each_with_index do |name, index|
          #if name == 'employment_status'
            # if i==0
            #  go_contact[i][record]['title'].downcase.include?("temp") ? go_contact[i][record][name] = "temp" : go_contact[i][record][name] = "full time"
            # else
            #  go_contact[i][record][name] = "intern"
            # end
          #else
            puts "name: #{name}, index: #{index}" if @verbose
            go_contact[i][record][name] = row[index.to_i].value.to_s.strip
          #end
        end
          record += 1
      end
    end
    workbook = nil
    return go_contact
  rescue => ee
    puts "Exception on method #{__method__}: #{ee}"
  end
end
parse_title_level(file) click to toggle source

method to parse the 'title_level_map' file

# File lib/ucert/go_contact_tracker.rb, line 142
def parse_title_level(file)
  table = {}
  f = File.open(file, 'r')
  f.each_with_index do |line, index|
    next if index.zero?
    arr = line.split('|')
    table[arr[0]] = { 'title' => arr[1], 'level' => arr[2], 'employment_status' => arr[3]} unless arr.empty?
  end
  table
end
save!(file=@file_go_user_map, employee_contact=@go_contact)
Alias for: save_go_user_map!
save_go_user_map!(file=@file_go_user_map, employee_contact=@go_contact) click to toggle source

Save the GO contact to AD user mapping relation into the cache file

# File lib/ucert/go_contact_tracker.rb, line 261
  def save_go_user_map!(file=@file_go_user_map, employee_contact=@go_contact)
          puts "Saving the known Go Contact to AD user mapping relationship to file: #{file} ..." if @verbose
          begin
                  timestamp=Time.now
                  f=File.open(file, 'w')
                  f.write "# local Go Contact to AD user map file created by the #{self.class} class #{__method__} method at: #{timestamp}"
employee_contact.each do |index, table|
  table.each do |key, record|
    my_key = record['email'].upcase
    value = record['DN']
    next if my_key.nil?
    next if my_key.empty?
                            f.write "\n#{my_key}|#{value}"
                    end
end
                  f.close
                  puts "GO to AD user map file is successfully saved to: #{file}" if @verbose
          rescue => ee
                  puts "Exception on method #{__method__}: #{ee}" if @verbose
          end
  end
Also aliased as: save!
save_title_level_map(file=@dn_title_level_map, employee_contact=@go_contact) click to toggle source

Method to write the cache back to the title_level_map. Note this method's usage should be limited, as the cyber_idm web app has a similar procedure 'sync_go_level_map' to write database record back to title_level_map now

# File lib/ucert/go_contact_tracker.rb, line 155
def save_title_level_map(file=@dn_title_level_map, employee_contact=@go_contact)
  puts "Saving the known Go Contact to Title Level mapping relationship to file: #{file} ..." if @verbose
              timestamp = Time.now
              f = File.open(file, 'w')
              f.write "# local Go Contact to Title Level map file created by the #{self.class} class #{__method__} method at: #{timestamp}"
  employee_contact.each do |_, table|
    table.each do |_, record|
      puts record
      level = record['level']
      title = record['title']
      employment_status = record['employment_status']
      value = record['dn']
      next if value.nil?
      next if value.empty?
      f.write "\n#{value}|#{title}|#{level}|#{employment_status}"
    end
  end
              f.close
              puts "Title Level user map file is successfully saved to: #{file}" if @verbose
rescue => ee
  puts "Exception on method #{__method__}: #{ee}" if @verbose
end
search_by_dn(dn)
Alias for: go_search_by_dn
searches(txt,max=10)
Alias for: go_searches_by_text
write_wookbook(workbook,file=@cmbny_contact_sheet) click to toggle source
# File lib/ucert/go_contact_tracker.rb, line 455
def write_wookbook(workbook,file=@cmbny_contact_sheet)
  workbook.write(file)
end