diff --git a/app/controllers/admin/dfc_product_imports_controller.rb b/app/controllers/admin/dfc_product_imports_controller.rb index 0178d5518e8..58239786241 100644 --- a/app/controllers/admin/dfc_product_imports_controller.rb +++ b/app/controllers/admin/dfc_product_imports_controller.rb @@ -20,13 +20,11 @@ def index catalog_url = params.require(:catalog_url) catalog = DfcCatalog.load(spree_current_user, catalog_url) - broker = FdcOfferBroker.new(catalog) + catalog.apply_wholesale_values! # * First step: import all products for given enterprise. # * Second step: render table and let user decide which ones to import. imported = catalog.products.map do |subject| - adjust_to_wholesale_price(broker, subject) - existing_variant = enterprise.supplied_variants.linked_to(subject.semanticId) if existing_variant @@ -43,24 +41,5 @@ def index flash[:error] = e.message redirect_to admin_product_import_path end - - private - - def adjust_to_wholesale_price(broker, product) - transformation = broker.best_offer(product.semanticId) - - return if transformation.factor == 1 - - wholesale_variant_price = transformation.offer.price - - return unless wholesale_variant_price - - offer = product.catalogItems&.first&.offers&.first - - return unless offer - - offer.price = wholesale_variant_price.dup - offer.price.value = offer.price.value.to_f / transformation.factor - end end end diff --git a/engines/dfc_provider/app/services/dfc_catalog.rb b/engines/dfc_provider/app/services/dfc_catalog.rb index 42f0df63cf5..7e9fed7009b 100644 --- a/engines/dfc_provider/app/services/dfc_catalog.rb +++ b/engines/dfc_provider/app/services/dfc_catalog.rb @@ -27,4 +27,30 @@ def item(semantic_id) def select_type(semantic_type) @graph.select { |i| i.semanticType == semantic_type } end + + def apply_wholesale_values! + broker = FdcOfferBroker.new(self) + products.each do |product| + adjust_to_wholesale_price(broker, product) + end + end + + private + + def adjust_to_wholesale_price(broker, product) + transformation = broker.best_offer(product.semanticId) + + return if transformation.factor == 1 + + wholesale_variant_price = transformation.offer.price + + return unless wholesale_variant_price + + offer = product.catalogItems&.first&.offers&.first + + return unless offer + + offer.price = wholesale_variant_price.dup + offer.price.value = offer.price.value.to_f / transformation.factor + end end