mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-24 20:36:49 +00:00
57 lines
1.5 KiB
Ruby
57 lines
1.5 KiB
Ruby
require "tasks/sample_data/addressing"
|
|
require "tasks/sample_data/logging"
|
|
|
|
class ShippingMethodFactory
|
|
include Logging
|
|
include Addressing
|
|
|
|
def create_samples(enterprises)
|
|
log "Creating shipping methods:"
|
|
distributors = enterprises.select(&:is_distributor)
|
|
distributors.each do |enterprise|
|
|
create_shipping_methods(enterprise)
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def create_shipping_methods(enterprise)
|
|
return if enterprise.shipping_methods.present?
|
|
|
|
log "- #{enterprise.name}"
|
|
create_pickup(enterprise)
|
|
create_delivery(enterprise)
|
|
end
|
|
|
|
def create_pickup(enterprise)
|
|
create_shipping_method(
|
|
enterprise,
|
|
name: "Pickup #{enterprise.name}",
|
|
description: "pick-up at your awesome hub gathering place",
|
|
require_ship_address: false,
|
|
calculator_type: "Calculator::Weight"
|
|
)
|
|
end
|
|
|
|
def create_delivery(enterprise)
|
|
delivery = create_shipping_method(
|
|
enterprise,
|
|
name: "Home delivery #{enterprise.name}",
|
|
description: "yummy food delivered at your door",
|
|
require_ship_address: true,
|
|
calculator_type: "Spree::Calculator::FlatRate"
|
|
)
|
|
delivery.calculator.preferred_amount = 2
|
|
delivery.calculator.save!
|
|
end
|
|
|
|
def create_shipping_method(enterprise, params)
|
|
params[:distributor_ids] = [enterprise.id]
|
|
method = enterprise.shipping_methods.new(params)
|
|
method.zones << zone
|
|
method.shipping_categories << Spree::ShippingCategory.find_or_create_by(name: 'Default')
|
|
method.save!
|
|
method
|
|
end
|
|
end
|