mirror of
https://github.com/fspc/BikeShed-1.git
synced 2025-02-28 08:43:23 -05:00
BikeCsvImporter: add "bike_brand_id", "bike_model_id", "model"
This commit is contained in:
parent
ae8b5cccd0
commit
c171598354
@ -9,6 +9,11 @@ class BikeCsvImporter
|
|||||||
|
|
||||||
def run
|
def run
|
||||||
result = {imported_count: 0, skipped_shop_ids: []}
|
result = {imported_count: 0, skipped_shop_ids: []}
|
||||||
|
|
||||||
|
@bike_purpose_cache = {}
|
||||||
|
@bike_brand_cache = {}
|
||||||
|
@bike_model_cache = {}
|
||||||
|
|
||||||
fetch do |bike_hash|
|
fetch do |bike_hash|
|
||||||
bike = import_bike bike_hash
|
bike = import_bike bike_hash
|
||||||
if bike.try :persisted?
|
if bike.try :persisted?
|
||||||
@ -17,6 +22,13 @@ class BikeCsvImporter
|
|||||||
result[:skipped_shop_ids].push bike.try(:shop_id) || bike_hash.values.first
|
result[:skipped_shop_ids].push bike.try(:shop_id) || bike_hash.values.first
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
missing_brands = @bike_brand_cache.select { |_, v| v.nil? }.map(&:first)
|
||||||
|
result[:missing_brands] = missing_brands if missing_brands.any?
|
||||||
|
|
||||||
|
missing_models = @bike_model_cache.select { |_, v| v.nil? }.map(&:first)
|
||||||
|
result[:missing_models] = missing_models if missing_models.any?
|
||||||
|
|
||||||
result
|
result
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -67,8 +79,8 @@ class BikeCsvImporter
|
|||||||
# Date In -> Create a bike log entry with start_date & end_date with same value as "Date In". Set action_id to "AQUIRED"
|
# Date In -> Create a bike log entry with start_date & end_date with same value as "Date In". Set action_id to "AQUIRED"
|
||||||
# Date Out -> Should be the start_date & end_date value for "Gone" column mentioned above.
|
# Date Out -> Should be the start_date & end_date value for "Gone" column mentioned above.
|
||||||
# + Price -> Bikes.value
|
# + Price -> Bikes.value
|
||||||
# Make -> Bikes.bike_brand_id
|
# + Make -> Bikes.bike_brand_id
|
||||||
# Model -> Bikes.bike_model_id
|
# + Model -> Bikes.bike_model_id
|
||||||
# + to Whom -> ignore
|
# + to Whom -> ignore
|
||||||
# + Zip Code -> ignore
|
# + Zip Code -> ignore
|
||||||
# Comment -> Create a bike log entry with action_id "NOTE". The log 'description' should be the value of 'Comment'.
|
# Comment -> Create a bike log entry with action_id "NOTE". The log 'description' should be the value of 'Comment'.
|
||||||
@ -82,7 +94,7 @@ class BikeCsvImporter
|
|||||||
end
|
end
|
||||||
|
|
||||||
def bike_attrs(bike_hash)
|
def bike_attrs(bike_hash)
|
||||||
%i{ shop_id bike_purpose_id value }.each_with_object({}) do |field, memo|
|
%i{ shop_id bike_purpose_id value bike_brand_id bike_model_id model }.each_with_object({}) do |field, memo|
|
||||||
memo[field] = send :"bike_attr_#{ field }", bike_hash
|
memo[field] = send :"bike_attr_#{ field }", bike_hash
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -115,6 +127,22 @@ class BikeCsvImporter
|
|||||||
clean_value(bike_hash['price']).try(:gsub, /[$]/, '').try :to_i
|
clean_value(bike_hash['price']).try(:gsub, /[$]/, '').try :to_i
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def bike_attr_bike_brand_id(bike_hash)
|
||||||
|
brand = clean_value(bike_hash['make'])
|
||||||
|
return unless brand
|
||||||
|
cached_bike_brand(brand).try :id
|
||||||
|
end
|
||||||
|
|
||||||
|
def bike_attr_bike_model_id(bike_hash)
|
||||||
|
model = clean_value(bike_hash['model'])
|
||||||
|
return unless model
|
||||||
|
cached_bike_model(model).try :id
|
||||||
|
end
|
||||||
|
|
||||||
|
def bike_attr_model(bike_hash)
|
||||||
|
clean_value bike_hash['model']
|
||||||
|
end
|
||||||
|
|
||||||
def clean_value(value)
|
def clean_value(value)
|
||||||
value_or_nil strip_value(value)
|
value_or_nil strip_value(value)
|
||||||
end
|
end
|
||||||
@ -128,7 +156,22 @@ class BikeCsvImporter
|
|||||||
end
|
end
|
||||||
|
|
||||||
def cached_bike_purpose(purpose)
|
def cached_bike_purpose(purpose)
|
||||||
@bike_purpose_cache ||= {}
|
@bike_purpose_cache[purpose] ||= BikePurpose.find_by_purpose purpose
|
||||||
@bike_purpose_cache[purpose] ||= BikePurpose.find_by_purpose purpose
|
end
|
||||||
|
|
||||||
|
def cached_bike_brand(brand)
|
||||||
|
if @bike_brand_cache.has_key? brand
|
||||||
|
@bike_brand_cache[brand]
|
||||||
|
else
|
||||||
|
@bike_brand_cache[brand] = BikeBrand.where('lower(brand) = ?', brand.downcase).first
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def cached_bike_model(model)
|
||||||
|
if @bike_model_cache.has_key? model
|
||||||
|
@bike_model_cache[model]
|
||||||
|
else
|
||||||
|
@bike_model_cache[model] = BikeModel.where('lower(model) = ?', model.downcase).first
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
Loading…
x
Reference in New Issue
Block a user