Only import selected products

This commit is contained in:
David Cook
2025-02-06 17:10:01 +11:00
parent 447ff3cffd
commit 9f7000009d
4 changed files with 20 additions and 6 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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:

View File

@@ -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