Class: ACSConverter

Inherits:
Object
  • Object
show all
Defined in:
lib/updateagent/converters/acs_converter.rb

Instance Method Summary collapse

Constructor Details

#initialize(options) ⇒ ACSConverter

Returns a new instance of ACSConverter.



3
4
5
# File 'lib/updateagent/converters/acs_converter.rb', line 3

def initialize(options)
  @options = options
end

Instance Method Details

#convert(records) ⇒ Object



24
25
26
27
28
29
30
# File 'lib/updateagent/converters/acs_converter.rb', line 24

def convert(records)
  create_family_names(records)
  create_family_sequences(records)
  records.map do |record|
    convert_record(record)
  end
end

#convert_record(record) ⇒ Object



32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/updateagent/converters/acs_converter.rb', line 32

def convert_record(record)
  returning({}) do |new_record|
    record.each do |key, value|
      if new_key = straight[key]
        new_record[new_key] = value
      end
    end
    new_record['legacy_id'] = new_record['legacy_family_id'] + record['IndividualNumber']
    new_record['first_name'] = get_first_name(record)
    new_record['family_home_phone'] = get_phone(record, 'Home')
    new_record['work_phone'] = get_phone(record, 'Business')
    new_record['mobile_phone'] = get_phone(record, 'Cell')
    new_record['fax'] = get_phone(record, 'FAX')
    new_record['family_last_name'] = new_record['last_name']
    new_record['family_name'] = @family_names[new_record['legacy_family_id']]
    new_record['visible_to_everyone'] = @options['visible'].include?(record['MemberStatus'])
    new_record['visible_on_printed_directory'] = @options['visible_on_printed_directory'].include?(record['MemberStatus'])
    new_record['full_access'] = @options['full_access'].include?(record['MemberStatus'])
    new_record['can_sign_in'] = @options['full_access'].include?(record['MemberStatus'])
    new_record['email'] = record['HomeEmailAddr'].to_s.any? ? record['HomeEmailAddr'] : record['BusinessEmailAddr']
    new_record['child'] = new_record['birthday'].to_s.empty? ? record['FamilyPosition'] == 'Child' : nil
    new_record['sequence'] = @families_by_sequence[new_record['legacy_family_id']].index(record['IndividualNumber'].to_i) + 1
  end
end

#create_family_names(records) ⇒ Object



57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/updateagent/converters/acs_converter.rb', line 57

def create_family_names(records)
  # this could probably be less messy
  @families = {}
  records.each do |record|
    @families[record['FamilyNumber']] ||= {}
    @families[record['FamilyNumber']][record['FamilyPosition']] = record
  end
  @family_names = {}
  @families.each do |family_number, family|
    family['Head'] ||= family.delete('Spouse') || family.delete('Child')
    if family['Head']
      if family['Spouse']
        @family_names[family_number] = "#{get_first_name(family['Head'])} & #{get_first_name(family['Spouse'])} #{family['Head']['LastName']}"
      else
        @family_names[family_number] = "#{get_first_name(family['Head'])} #{family['Head']['LastName']}"
      end
    else
      @family_names[family_number] = "#{get_first_name(family['Other'])} #{family['Other']['LastName']}"
    end
  end
end

#create_family_sequences(records) ⇒ Object



79
80
81
82
83
84
85
86
# File 'lib/updateagent/converters/acs_converter.rb', line 79

def create_family_sequences(records)
  @families_by_sequence = {}
  records.each do |record|
    @families_by_sequence[record['FamilyNumber']] ||= []
    @families_by_sequence[record['FamilyNumber']] << record['IndividualNumber'].to_i
  end
  @families_by_sequence.each { |k, v| v.sort! }
end

#get_first_name(record) ⇒ Object



88
89
90
# File 'lib/updateagent/converters/acs_converter.rb', line 88

def get_first_name(record)
  record['GoesByName'].to_s.any? ? record['GoesByName'] : record['FirstName']
end

#get_phone(record, type) ⇒ Object



92
93
94
95
96
97
98
# File 'lib/updateagent/converters/acs_converter.rb', line 92

def get_phone(record, type)
  unless record[type + 'Unlisted'].to_s.downcase == 'true'
    phone = record[type + 'Phone'].to_s.scan(/\d/).join
    phone << ' ' + record[type + 'Extension'] if record[type + 'Extension'].to_s.any?
    phone
  end
end

#straightObject



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/updateagent/converters/acs_converter.rb', line 7

def straight
  {
    "FamilyNumber"     => "legacy_family_id",
    "LastName"         => "last_name",
    "Suffix"           => "suffix",
    "Address1"         => "family_address1",
    "Address2"         => "family_address2",
    "City"             => "family_city",
    "State"            => "family_state",
    "ZIPCode"          => "family_zip",
    "DateOfBirth"      => "birthday",
    "HomeEmailAddr"    => "email",
    "FamilyName"       => "family_name",
    "Gender"           => "gender"
  }
end