mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-24 20:36:49 +00:00
Only import selected products
This commit is contained in:
@@ -35,13 +35,16 @@ module Admin
|
||||
end
|
||||
|
||||
def import
|
||||
ids = params.require(:semanticIds)
|
||||
|
||||
# Load DFC catalog JSON
|
||||
graph = DfcIo.import(params.require(:catalog_json))
|
||||
catalog = DfcCatalog.new(graph)
|
||||
catalog.apply_wholesale_values!
|
||||
|
||||
# Import all selected products for given enterprise.
|
||||
imported = catalog.products.map do |subject|
|
||||
imported = catalog.products.select{ |subject| ids.include?(subject.semanticId) }
|
||||
.map do |subject|
|
||||
existing_variant = @enterprise.supplied_variants.linked_to(subject.semanticId)
|
||||
|
||||
if existing_variant
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
= render partial: 'spree/admin/shared/product_sub_menu'
|
||||
|
||||
%p= t('.catalog_url', catalog_url: @catalog_url)
|
||||
%p= t('.catalog_url', count: @items.count, catalog_url: @catalog_url)
|
||||
%p= t('.enterprise', enterprise_name: @enterprise.name)
|
||||
%br
|
||||
|
||||
@@ -16,7 +16,10 @@
|
||||
%tbody
|
||||
- @items.each do |supplied_product, existing_product|
|
||||
%tr{id: supplied_product.semanticId }
|
||||
%td= supplied_product.name
|
||||
%td
|
||||
%label
|
||||
= form.check_box 'semanticIds[]', { checked: true }, supplied_product.semanticId, ""
|
||||
= supplied_product.name
|
||||
%td
|
||||
- if existing_product.present?
|
||||
Update
|
||||
|
||||
@@ -848,7 +848,7 @@ en:
|
||||
dfc_product_imports:
|
||||
index:
|
||||
title: "DFC product catalog"
|
||||
catalog_url: "Products to be imported from: %{catalog_url}"
|
||||
catalog_url: "%{count} products to be imported from: %{catalog_url}"
|
||||
enterprise: "Import to enterprise: %{enterprise_name}"
|
||||
import: Import
|
||||
import:
|
||||
|
||||
@@ -58,16 +58,20 @@ RSpec.describe "DFC Product Import" do
|
||||
select enterprise.name, from: "Enterprise"
|
||||
click_button "Preview"
|
||||
|
||||
expect(page).to have_content "4 products to be imported"
|
||||
expect(page).to have_content "Saucy preserves"
|
||||
expect(page).not_to have_content "Sauce - 1g" # Does not show other product
|
||||
expect(page).to have_content "Beans - Retail can, 400g (can) Update" # existing product
|
||||
expect(page).to have_content "Beans - Case, 12 x 400g (can) New"
|
||||
expect(page).to have_content "Chia Seed, Organic - Retail pack, 300g"
|
||||
|
||||
uncheck "Chia Seed, Organic - Case, 8 x 300g" # don't import this one
|
||||
|
||||
expect {
|
||||
click_button "Import"
|
||||
expect(page).to have_content "Imported products: 4"
|
||||
expect(page).to have_content "Imported products: 3"
|
||||
linked_variant.reload
|
||||
}.to change { enterprise.supplied_products.count }
|
||||
}.to change { enterprise.supplied_products.count }.by(2) # 1 updated, 2 new
|
||||
.and change { linked_variant.display_name }
|
||||
.and change { linked_variant.unit_value }
|
||||
# 18.85 wholesale variant price divided by 12 cans in the slab.
|
||||
@@ -78,6 +82,10 @@ RSpec.describe "DFC Product Import" do
|
||||
product = Spree::Product.last
|
||||
expect(product.variants[0].semantic_links).to be_present
|
||||
expect(product.image).to be_present
|
||||
|
||||
names = Spree::Product.pluck(:name)
|
||||
expect(names).to include "Baked British Beans - Case, 12 x 400g (can)"
|
||||
expect(names).not_to include "Chia Seed, Organic - Case, 8 x 300g"
|
||||
end
|
||||
|
||||
it "fails gracefully" do
|
||||
|
||||
Reference in New Issue
Block a user