mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-24 20:36:49 +00:00
322 lines
14 KiB
Ruby
322 lines
14 KiB
Ruby
namespace :ofn do
|
|
namespace :dev do
|
|
desc 'load sample data'
|
|
task load_sample_data: :environment do
|
|
require_relative '../../spec/factories'
|
|
require_relative '../../spec/support/spree/init'
|
|
task_name = "openfoodnetwork:dev:load_sample_data"
|
|
|
|
country = Spree::Country.find_by_iso(ENV.fetch('DEFAULT_COUNTRY_CODE'))
|
|
state = country.states.first
|
|
|
|
# -- Shipping / payment information
|
|
unless Spree::Zone.find_by_name 'Australia'
|
|
puts "[#{task_name}] Seeding shipping / payment information"
|
|
|
|
zone = FactoryBot.create(:zone, name: 'Australia', zone_members: [])
|
|
Spree::ZoneMember.create(zone: zone, zoneable: country)
|
|
address = FactoryBot.create(
|
|
:address,
|
|
address1: "15/1 Ballantyne Street",
|
|
zipcode: "3153",
|
|
city: "Thornbury",
|
|
country: country,
|
|
state: state
|
|
)
|
|
enterprise = FactoryBot.create(:enterprise, address: address)
|
|
|
|
FactoryBot.create(:shipping_method, zone: zone, distributors: [enterprise])
|
|
end
|
|
|
|
# -- Taxonomies
|
|
unless Spree::Taxonomy.find_by_name 'Products'
|
|
puts "[#{task_name}] Seeding taxonomies"
|
|
taxonomy = Spree::Taxonomy.find_by_name('Products') || FactoryBot.create(:taxonomy,
|
|
name: 'Products')
|
|
taxonomy_root = taxonomy.root
|
|
|
|
taxons = ['Vegetables', 'Fruit', 'Oils', 'Preserves and Sauces', 'Dairy', 'Meat and Fish']
|
|
taxons.each do |taxon_name|
|
|
FactoryBot.create(:taxon,
|
|
name: taxon_name,
|
|
parent_id: taxonomy_root.id,
|
|
taxonomy_id: taxonomy.id)
|
|
end
|
|
end
|
|
|
|
# -- Addresses
|
|
unless Spree::Address.find_by_zipcode "3160"
|
|
puts "[#{task_name}] Seeding addresses"
|
|
|
|
FactoryBot.create(:address,
|
|
address1: "25 Myrtle Street",
|
|
zipcode: "3153",
|
|
city: "Bayswater",
|
|
country: country,
|
|
state: state)
|
|
FactoryBot.create(:address,
|
|
address1: "6 Rollings Road",
|
|
zipcode: "3156",
|
|
city: "Upper Ferntree Gully",
|
|
country: country,
|
|
state: state)
|
|
FactoryBot.create(:address,
|
|
address1: "72 Lake Road",
|
|
zipcode: "3130",
|
|
city: "Blackburn",
|
|
country: country,
|
|
state: state)
|
|
FactoryBot.create(:address,
|
|
address1: "7 Verbena Street",
|
|
zipcode: "3195",
|
|
city: "Mordialloc",
|
|
country: country,
|
|
state: state)
|
|
FactoryBot.create(:address,
|
|
address1: "20 Galvin Street",
|
|
zipcode: "3018",
|
|
city: "Altona",
|
|
country: country,
|
|
state: state)
|
|
FactoryBot.create(:address,
|
|
address1: "59 Websters Road",
|
|
zipcode: "3106",
|
|
city: "Templestowe",
|
|
country: country,
|
|
state: state)
|
|
FactoryBot.create(:address,
|
|
address1: "17 Torresdale Drive",
|
|
zipcode: "3155",
|
|
city: "Boronia",
|
|
country: country,
|
|
state: state)
|
|
FactoryBot.create(:address,
|
|
address1: "21 Robina CRT",
|
|
zipcode: "3764",
|
|
city: "Kilmore",
|
|
country: country,
|
|
state: state)
|
|
FactoryBot.create(:address,
|
|
address1: "25 Kendall Street",
|
|
zipcode: "3134",
|
|
city: "Ringwood",
|
|
country: country,
|
|
state: state)
|
|
FactoryBot.create(:address,
|
|
address1: "2 Mines Road",
|
|
zipcode: "3135",
|
|
city: "Ringwood East",
|
|
country: country,
|
|
state: state)
|
|
FactoryBot.create(:address,
|
|
address1: "183 Millers Road",
|
|
zipcode: "3025",
|
|
city: "Altona North",
|
|
country: country,
|
|
state: state)
|
|
FactoryBot.create(:address,
|
|
address1: "310 Pascoe Vale Road",
|
|
zipcode: "3040",
|
|
city: "Essendon",
|
|
country: country,
|
|
state: state)
|
|
FactoryBot.create(:address,
|
|
address1: "6 Martin Street",
|
|
zipcode: "3160",
|
|
city: "Belgrave",
|
|
country: country,
|
|
state: state)
|
|
end
|
|
|
|
# -- Enterprises
|
|
if Enterprise.count < 2
|
|
puts "[#{task_name}] Seeding enterprises"
|
|
|
|
3.times do
|
|
FactoryBot.create(:supplier_enterprise,
|
|
address: Spree::Address.find_by_zipcode("3160"))
|
|
end
|
|
|
|
FactoryBot.create(:distributor_enterprise,
|
|
name: "Green Grass",
|
|
address: Spree::Address.find_by_zipcode("3153"))
|
|
FactoryBot.create(:distributor_enterprise,
|
|
name: "AusFarmers United",
|
|
address: Spree::Address.find_by_zipcode("3156"))
|
|
FactoryBot.create(:distributor_enterprise,
|
|
name: "Blackburn FreeGrossers",
|
|
address: Spree::Address.find_by_zipcode("3130"))
|
|
FactoryBot.create(:distributor_enterprise,
|
|
name: "MegaFoods",
|
|
address: Spree::Address.find_by_zipcode("3195"))
|
|
FactoryBot.create(:distributor_enterprise,
|
|
name: "Eco Butchers",
|
|
address: Spree::Address.find_by_zipcode("3018"))
|
|
FactoryBot.create(:distributor_enterprise,
|
|
name: "Western Wines",
|
|
address: Spree::Address.find_by_zipcode("3106"))
|
|
FactoryBot.create(:distributor_enterprise,
|
|
name: "QuickFresh",
|
|
address: Spree::Address.find_by_zipcode("3155"))
|
|
FactoryBot.create(:distributor_enterprise,
|
|
name: "Fooderers",
|
|
address: Spree::Address.find_by_zipcode("3764"))
|
|
FactoryBot.create(:distributor_enterprise,
|
|
name: "Food Local",
|
|
address: Spree::Address.find_by_zipcode("3134"))
|
|
FactoryBot.create(:distributor_enterprise,
|
|
name: "Green Food Trading Corporation",
|
|
address: Spree::Address.find_by_zipcode("3135"))
|
|
FactoryBot.create(:distributor_enterprise,
|
|
name: "Better Food",
|
|
address: Spree::Address.find_by_zipcode("3025"))
|
|
FactoryBot.create(:distributor_enterprise,
|
|
name: "Gippsland Poultry",
|
|
address: Spree::Address.find_by_zipcode("3040"))
|
|
end
|
|
|
|
# -- Enterprise users
|
|
if Spree::User.count < 2
|
|
puts "[#{task_name}] Seeding enterprise users"
|
|
|
|
pw = "spree123"
|
|
|
|
u = FactoryBot.create(:user,
|
|
email: "sup@example.com",
|
|
password: pw,
|
|
password_confirmation: pw)
|
|
u.enterprises << Enterprise.is_primary_producer.first
|
|
u.enterprises << Enterprise.is_primary_producer.second
|
|
|
|
user_enterprises = u.enterprise_roles.map{ |er| er.enterprise.name }.join(", ")
|
|
puts " Supplier User created: #{u.email}/#{pw} (" + user_enterprises + ")"
|
|
|
|
u = FactoryBot.create(:user,
|
|
email: "dist@example.com",
|
|
password: pw,
|
|
password_confirmation: pw)
|
|
u.enterprises << Enterprise.is_distributor.first
|
|
u.enterprises << Enterprise.is_distributor.second
|
|
user_enterprises = u.enterprise_roles.map{ |er| er.enterprise.name }.join(", ")
|
|
puts " Distributor User created: #{u.email}/#{pw} (" + user_enterprises + ")"
|
|
end
|
|
|
|
# -- Enterprise fees
|
|
if EnterpriseFee.count < 2
|
|
Enterprise.is_distributor.each do |distributor|
|
|
FactoryBot.create(:enterprise_fee, enterprise: distributor)
|
|
end
|
|
end
|
|
|
|
# -- Enterprise Payment Methods
|
|
if Spree::PaymentMethod.count < 2
|
|
Enterprise.is_distributor.each do |distributor|
|
|
FactoryBot.create(:payment_method,
|
|
distributors: [distributor],
|
|
name: "Cheque (#{distributor.name})",
|
|
environment: 'development')
|
|
end
|
|
end
|
|
|
|
# -- Products
|
|
if Spree::Product.count < 1
|
|
puts "[#{task_name}] Seeding products"
|
|
|
|
distributors = Enterprise.is_distributor
|
|
|
|
prod1 = FactoryBot.create(:product,
|
|
name: 'Garlic',
|
|
price: 20.00,
|
|
supplier: Enterprise.is_primary_producer[0],
|
|
taxons: [Spree::Taxon.find_by_name('Vegetables')])
|
|
|
|
ProductDistribution.create(product: prod1,
|
|
distributor: distributors[0],
|
|
enterprise_fee: distributors[0].enterprise_fees.first)
|
|
|
|
prod2 = FactoryBot.create(:product,
|
|
name: 'Fuji Apple',
|
|
price: 5.00,
|
|
supplier: Enterprise.is_primary_producer[1],
|
|
taxons: [Spree::Taxon.find_by_name('Fruit')])
|
|
|
|
ProductDistribution.create(product: prod2,
|
|
distributor: distributors[1],
|
|
enterprise_fee: distributors[1].enterprise_fees.first)
|
|
|
|
prod3 = FactoryBot.create(:product,
|
|
name: 'Beef - 5kg Trays',
|
|
price: 50.00,
|
|
supplier: Enterprise.is_primary_producer[2],
|
|
taxons: [Spree::Taxon.find_by_name('Meat and Fish')])
|
|
|
|
ProductDistribution.create(product: prod3,
|
|
distributor: distributors[2],
|
|
enterprise_fee: distributors[2].enterprise_fees.first)
|
|
|
|
prod4 = FactoryBot.create(:product,
|
|
name: 'Carrots',
|
|
price: 3.00,
|
|
supplier: Enterprise.is_primary_producer[2],
|
|
taxons: [Spree::Taxon.find_by_name('Meat and Fish')])
|
|
|
|
ProductDistribution.create(product: prod4,
|
|
distributor: distributors[2],
|
|
enterprise_fee: distributors[2].enterprise_fees.first)
|
|
|
|
prod5 = FactoryBot.create(:product,
|
|
name: 'Potatoes',
|
|
price: 2.00,
|
|
supplier: Enterprise.is_primary_producer[2],
|
|
taxons: [Spree::Taxon.find_by_name('Meat and Fish')])
|
|
|
|
ProductDistribution.create(product: prod5,
|
|
distributor: distributors[2],
|
|
enterprise_fee: distributors[2].enterprise_fees.first)
|
|
|
|
prod6 = FactoryBot.create(:product,
|
|
name: 'Tomatoes',
|
|
price: 2.00,
|
|
supplier: Enterprise.is_primary_producer[2],
|
|
taxons: [Spree::Taxon.find_by_name('Meat and Fish')])
|
|
|
|
ProductDistribution.create(product: prod6,
|
|
distributor: distributors[2],
|
|
enterprise_fee: distributors[2].enterprise_fees.first)
|
|
|
|
prod7 = FactoryBot.create(:product,
|
|
name: 'Potatoes',
|
|
price: 2.00,
|
|
supplier: Enterprise.is_primary_producer[2],
|
|
taxons: [Spree::Taxon.find_by_name('Meat and Fish')])
|
|
|
|
ProductDistribution.create(product: prod7,
|
|
distributor: distributors[2],
|
|
enterprise_fee: distributors[2].enterprise_fees.first)
|
|
end
|
|
|
|
enterprise2 = Enterprise.find_by_name('Enterprise 2')
|
|
enterprise2.sells = 'any'
|
|
enterprise2.shipping_methods.build(
|
|
name: 'Pickup',
|
|
zone_id: 3,
|
|
require_ship_address: true,
|
|
calculator_type: 'Calculator::Weight',
|
|
distributor_ids: [enterprise2.id]
|
|
)
|
|
enterprise2.payment_methods << Spree::PaymentMethod.last
|
|
enterprise2.save!
|
|
|
|
variants = Spree::Variant
|
|
.joins(:product)
|
|
.where('spree_products.supplier_id = ?', enterprise2.id)
|
|
|
|
CreateOrderCycle.new(enterprise2, variants).call
|
|
|
|
if EnterpriseRole.count < 1
|
|
EnterpriseRole.create!(user: Spree::User.first, enterprise: enterprise2)
|
|
end
|
|
end
|
|
end
|
|
end
|