mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-11 18:26:50 +00:00
Add example script for importing customers
This commit is contained in:
51
script/import-customers.rb
Normal file
51
script/import-customers.rb
Normal file
@@ -0,0 +1,51 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
# Read customer entries in CSV format from STDIN and create those records in
|
||||
# the database. Example:
|
||||
#
|
||||
# rails runner script/import-customers.rb 3359 < FND-customers-Emails.csv
|
||||
#
|
||||
# This script was written for a once-off import. If we want to perform this
|
||||
# task more often, we can make it more flexible and eventually add a
|
||||
# feature to the user interface.
|
||||
require 'csv'
|
||||
|
||||
enterprise_id = ARGV.first
|
||||
|
||||
def check_enterprise_exists(id)
|
||||
enterprise = Enterprise.find(id)
|
||||
puts "Importing customers for #{enterprise.name}:"
|
||||
end
|
||||
|
||||
def import_customer(row, enterprise_id)
|
||||
email = row["Email"].downcase
|
||||
tag = row["Tag"]
|
||||
|
||||
print email
|
||||
customer = find_or_create_customer(email, enterprise_id)
|
||||
add_tag(customer, tag)
|
||||
puts ""
|
||||
end
|
||||
|
||||
def find_or_create_customer(email, enterprise_id)
|
||||
Customer.find_or_create_by(
|
||||
email: email,
|
||||
enterprise_id: enterprise_id,
|
||||
) { print " - newly imported" }
|
||||
print " - user exists" if Spree::User.where(email: email).exists?
|
||||
end
|
||||
|
||||
def add_tag(customer, tag)
|
||||
return if tag.blank?
|
||||
|
||||
customer.tag_list.add(tag)
|
||||
customer.save!
|
||||
end
|
||||
|
||||
check_enterprise_exists(enterprise_id)
|
||||
|
||||
CSV($stdin, headers: true, row_sep: "\r\n") do |csv|
|
||||
csv.each do |row|
|
||||
import_customer(row, enterprise_id)
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user