mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-26 20:56:48 +00:00
These factories are not used in testing and this way we avoid collisions on the root namespace as it was happening already with OrderFactory
59 lines
1.6 KiB
Ruby
59 lines
1.6 KiB
Ruby
require "tasks/sample_data/addressing"
|
|
require "tasks/sample_data/logging"
|
|
|
|
module SampleData
|
|
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: "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
|
|
end
|