diff --git a/app/views/admin/product_import/_options_form.html.haml b/app/views/admin/product_import/_options_form.html.haml index 190967b664..5e4383de35 100644 --- a/app/views/admin/product_import/_options_form.html.haml +++ b/app/views/admin/product_import/_options_form.html.haml @@ -1,5 +1,5 @@ %table.import-settings{ng: {controller: 'ImportOptionsFormCtrl', init: "supplierId = #{supplier_id}; initForm()"}} - %tr + %tr.import-into %td.description Import Into: %td @@ -7,7 +7,7 @@ = select_tag "settings[#{supplier_id}][import_into]", options_for_select({"Product List" => :product_list, "Inventories" => :inventories}), {class: 'select2 fullwidth select2-no-search', 'ng-model' => "settings[#{supplier_id}]['import_into']", 'ng-change' => "updateImportInto()"} %td - %tr{ng: {show: 'import_into == "inventories"'}} + %tr.stock-level.inventory{ng: {show: 'import_into == "inventories"'}} %td.description = t('admin.product_import.import.default_stock') %td @@ -17,7 +17,7 @@ %td = number_field_tag "settings[#{supplier_id}][defaults][count_on_hand][value]", 0, 'ng-disabled' => "!settings[#{supplier_id}]['defaults']['count_on_hand']['active']", 'ng-model' => "settings[#{supplier_id}]['defaults']['count_on_hand']['value']" - %tr{ng: {show: 'import_into == "product_list"'}} + %tr.stock-level.productlist{ng: {show: 'import_into == "product_list"'}} %td.description = t('admin.product_import.import.default_stock') %td @@ -26,7 +26,8 @@ = select_tag "settings[#{supplier_id}][defaults][on_hand][mode]", options_for_select({"#{t('admin.product_import.import.overwrite_all')}" => :overwrite_all, "#{t('admin.product_import.import.overwrite_empty')}" => :overwrite_empty}), {class: 'select2 fullwidth select2-no-search', 'ng-model' => "settings[#{supplier_id}]['defaults']['on_hand']['mode']", 'ng-disabled' => "!settings[#{supplier_id}]['defaults']['on_hand']['active']"} %td = number_field_tag "settings[#{supplier_id}][defaults][on_hand][value]", 0, 'ng-model' => "settings[#{supplier_id}]['defaults']['on_hand']['value']", 'ng-disabled' => "!settings[#{supplier_id}]['defaults']['on_hand']['active']" - %tr{ng: {show: 'import_into == "product_list"'}} + + %tr.tax-category{ng: {show: 'import_into == "product_list"'}} %td.description = t('admin.product_import.import.default_tax_cat') %td @@ -35,7 +36,8 @@ = select_tag "settings[#{supplier_id}][defaults][tax_category_id][mode]", options_for_select({"#{t('admin.product_import.import.overwrite_all')}" => :overwrite_all, "#{t('admin.product_import.import.overwrite_empty')}" => :overwrite_empty}), {class: 'select2 fullwidth select2-no-search', 'ng-model' => "settings[#{supplier_id}]['defaults']['tax_category_id']['mode']", 'ng-disabled' => "!settings[#{supplier_id}]['defaults']['tax_category_id']['active']"} %td = select_tag "settings[#{supplier_id}][defaults][tax_category_id][value]", options_for_select(@tax_categories.map {|tc| [tc.name, tc.id]}), {prompt: 'None', class: 'select2 fullwidth select2-no-search', 'ng-model' => "settings[#{supplier_id}]['defaults']['tax_category_id']['value']", 'ng-disabled' => "!settings[#{supplier_id}]['defaults']['tax_category_id']['active']"} - %tr{ng: {show: 'import_into == "product_list"'}} + + %tr.shipping-category{ng: {show: 'import_into == "product_list"'}} %td.description = t('admin.product_import.import.default_shipping_cat') %td @@ -44,7 +46,8 @@ = select_tag "settings[#{supplier_id}][defaults][shipping_category_id][mode]", options_for_select({"#{t('admin.product_import.import.overwrite_all')}" => :overwrite_all, "#{t('admin.product_import.import.overwrite_empty')}" => :overwrite_empty}), {class: 'select2 fullwidth select2-no-search', 'ng-model' => "settings[#{supplier_id}]['defaults']['shipping_category_id']['mode']", 'ng-disabled' => "!settings[#{supplier_id}]['defaults']['shipping_category_id']['active']"} %td = select_tag "settings[#{supplier_id}][defaults][shipping_category_id][value]", options_for_select(@shipping_categories.map {|sc| [sc.name, sc.id]}), {prompt: 'None', class: 'select2 fullwidth select2-no-search', 'ng-model' => "settings[#{supplier_id}]['defaults']['shipping_category_id']['value']", 'ng-disabled' => "!settings[#{supplier_id}]['defaults']['shipping_category_id']['active']"} - %tr{ng: {show: 'import_into == "product_list"'}} + + %tr.available-date{ng: {show: 'import_into == "product_list"'}} %td.description = t('admin.product_import.import.default_available_date') %td @@ -54,7 +57,7 @@ %td = text_field_tag "settings[#{supplier_id}][defaults][available_on][value]", nil, {class: 'datepicker', placeholder: 'Today', 'ng-model' => "settings[#{supplier_id}]['defaults']['available_on']['value']", 'ng-disabled' => "!settings[#{supplier_id}]['defaults']['available_on']['active']"} - %tr + %tr.reset-absent %td.description = t('admin.product_import.import.reset_absent?') %td diff --git a/spec/features/admin/product_import_spec.rb b/spec/features/admin/product_import_spec.rb index d50f2dd57c..efca92374b 100644 --- a/spec/features/admin/product_import_spec.rb +++ b/spec/features/admin/product_import_spec.rb @@ -262,6 +262,79 @@ feature "Product Import", js: true do expect(page).to have_content 'Cabbage' end end + + it "can override import fields via the import settings tab" do + csv_data = CSV.generate do |csv| + csv << ["name", "supplier", "category", "on_hand", "price", "units", "unit_type", "tax_category", "shipping_category"] + csv << ["Carrots", "User Enterprise", "Vegetables", "5", "3.20", "500", "g", tax_category.name, shipping_category.name] + csv << ["Potatoes", "User Enterprise", "Vegetables", "6", "6.50", "1", "kg", "Unknown Tax Category", shipping_category.name] + csv << ["Peas", "User Enterprise", "Vegetables", "7", "2.50", "1", "kg", tax_category2.name, "Unknown Shipping Category"] + csv << ["Pumpkin", "User Enterprise", "Vegetables", "3", "3.50", "1", "kg", tax_category.name, ""] + csv << ["Spinach", "User Enterprise", "Vegetables", "7", "3.60", "1", "kg", "", shipping_category.name] + end + File.write('/tmp/test.csv', csv_data) + + visit main_app.admin_product_import_path + + expect(page).to have_content "Select a spreadsheet to upload" + attach_file 'file', '/tmp/test.csv' + click_button 'Upload' + + within 'div.import-settings' do + find('div.panel-header').click + + within 'tr.stock-level.productlist' do + find('input[type="checkbox"]').click + select 'Overwrite all', from: "settings_#{enterprise.id}_defaults_on_hand_mode", visible: false + fill_in "settings_#{enterprise.id}_defaults_on_hand_value", with: 9000 + end + + within 'tr.tax-category' do + find('input[type="checkbox"]').click + select 'Overwrite if empty', from: "settings_#{enterprise.id}_defaults_tax_category_id_mode", visible: false + select tax_category2.name, from: "settings_#{enterprise.id}_defaults_tax_category_id_value", visible: false + end + + within 'tr.shipping-category' do + find('input[type="checkbox"]').click + select 'Overwrite all', from: "settings_#{enterprise.id}_defaults_shipping_category_id_mode", visible: false + select shipping_category.name, from: "settings_#{enterprise.id}_defaults_shipping_category_id_value", visible: false + end + end + + expect(page).to have_selector 'a.button.proceed', visible: true + click_link 'Proceed' + + import_data + + expect(page).to have_selector '.item-count', text: "5" + expect(page).to have_selector '.invalid-count', text: "2" + expect(page).to have_selector '.create-count', text: "3" + expect(page).to_not have_selector '.update-count' + + expect(page).to have_selector 'a.button.proceed', visible: true + click_link 'Proceed' + + save_data + + expect(page).to have_selector '.created-count', text: '3' + expect(page).to_not have_selector '.updated-count' + + carrots = Spree::Product.find_by_name('Carrots') + expect(carrots.tax_category).to eq tax_category + expect(carrots.shipping_category).to eq shipping_category + expect(carrots.count_on_hand).to eq 9000 + + pumpkin = Spree::Product.find_by_name('Pumpkin') + expect(pumpkin.tax_category).to eq tax_category + expect(pumpkin.shipping_category).to eq shipping_category + expect(pumpkin.count_on_hand).to eq 9000 + + spinach = Spree::Product.find_by_name('Spinach') + expect(spinach.tax_category).to eq tax_category2 + expect(spinach.shipping_category).to eq shipping_category + expect(spinach.count_on_hand).to eq 9000 + end end describe "when dealing with uploaded files" do