22
23
24
25
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
|
# File 'app/sidekiq/income_limits/std_zipcode_import.rb', line 22
def perform
ActiveRecord::Base.transaction do
data = fetch_csv_data
if data
CSV.parse(data, headers: true) do |row|
created = DateTime.strptime(row['CREATED'], '%F %H:%M:%S %z').to_s
updated = DateTime.strptime(row['UPDATED'], '%F %H:%M:%S %z').to_s if row['UPDATED']
std_zipcode = StdZipcode.find_by(id: row['ID'].to_i)
if std_zipcode
std_zipcode.update(zip_code: row['ZIPCODE'].to_s) if std_zipcode.zip_code != row['ZIPCODE'].to_s
else
std_zipcode = StdZipcode.find_or_initialize_by(zip_code: row['ZIPCODE'].to_s)
std_zipcode.assign_attributes(
id: row['ID'].to_i,
zip_classification_id: row['ZIPCLASSIFICATION_ID']&.to_i,
preferred_zip_place_id: row['PREFERREDZIPPLACE_ID']&.to_i,
state_id: row['STATE_ID'].to_i,
county_number: row['COUNTYNUMBER'].to_i,
version: row['VERSION'].to_i,
created:,
updated:,
created_by: row['CREATEDBY'],
updated_by: row['UPDATEDBY']
)
std_zipcode.save!
end
end
else
raise 'Failed to fetch CSV data'
end
end
rescue => e
ActiveRecord::Base.rollback_transaction
raise "error: #{e}"
end
|