diff --git a/.rubocop_manual_todo.yml b/.rubocop_manual_todo.yml index 6d4a4719e3..9826867220 100644 --- a/.rubocop_manual_todo.yml +++ b/.rubocop_manual_todo.yml @@ -123,7 +123,6 @@ Metrics/LineLength: - app/serializers/api/admin/subscription_serializer.rb - app/serializers/api/admin/tag_rule_serializer.rb - app/serializers/api/admin/variant_override_serializer.rb - - app/serializers/api/admin/variant_serializer.rb - app/services/cart_service.rb - app/services/default_stock_location.rb - app/services/embedded_page_service.rb diff --git a/app/assets/javascripts/admin/utils/directives/variant_autocomplete.js.coffee b/app/assets/javascripts/admin/utils/directives/variant_autocomplete.js.coffee index c8c462dadb..dd8c9247eb 100644 --- a/app/assets/javascripts/admin/utils/directives/variant_autocomplete.js.coffee +++ b/app/assets/javascripts/admin/utils/directives/variant_autocomplete.js.coffee @@ -27,8 +27,6 @@ angular.module("admin.utils").directive "variantAutocomplete", ($timeout) -> window.variants = data # this is how spree auto complete JS code picks up variants results: data formatResult: (variant) -> - if variant["images"][0] != undefined && variant["images"][0].image != undefined - variant.image = variant.images[0].image.mini_url variantTemplate variant: variant formatSelection: (variant) -> element.parent().children(".options_placeholder").html variant.options_text diff --git a/app/assets/stylesheets/admin/pages/subscription_line_items.css.scss b/app/assets/stylesheets/admin/pages/subscription_line_items.css.scss new file mode 100644 index 0000000000..80a29448bf --- /dev/null +++ b/app/assets/stylesheets/admin/pages/subscription_line_items.css.scss @@ -0,0 +1,11 @@ +.add-line-item { + fieldset { + .vertical-align-top { + vertical-align: top; + } + + .actions { + padding-top: 18px; + } + } +} diff --git a/app/controllers/spree/admin/variants_controller_decorator.rb b/app/controllers/spree/admin/variants_controller_decorator.rb index 7a519701f9..6577f6c6c6 100644 --- a/app/controllers/spree/admin/variants_controller_decorator.rb +++ b/app/controllers/spree/admin/variants_controller_decorator.rb @@ -18,6 +18,7 @@ Spree::Admin::VariantsController.class_eval do def search scoper = OpenFoodNetwork::ScopeVariantsForSearch.new(params) @variants = scoper.search + render json: @variants, each_serializer: Api::Admin::VariantSerializer end def destroy diff --git a/app/serializers/api/admin/variant_serializer.rb b/app/serializers/api/admin/variant_serializer.rb index 9be1b3662b..479780064f 100644 --- a/app/serializers/api/admin/variant_serializer.rb +++ b/app/serializers/api/admin/variant_serializer.rb @@ -1,15 +1,49 @@ class Api::Admin::VariantSerializer < ActiveModel::Serializer - attributes :id, :options_text, :unit_value, :unit_description, :unit_to_display, :on_demand, :display_as, :display_name, :name_to_display, :sku - attributes :on_hand, :price, :import_date + attributes :id, :name, :producer_name, :image, :sku, :import_date + attributes :options_text, :unit_value, :unit_description, :unit_to_display + attributes :display_as, :display_name, :name_to_display + attributes :price, :on_demand, :on_hand, :in_stock, :stock_location_id, :stock_location_name + has_many :variant_overrides + def name + if object.full_name.present? + "#{object.name} - #{object.full_name}" + else + object.name + end + end + def on_hand return 0 if object.on_hand.nil? object.on_hand end def price - # Decimals are passed to json as strings, we need to run parseFloat.toFixed(2) on the client side. + # Decimals are passed to json as strings, we need to run parseFloat.toFixed(2) on the client. object.price.nil? ? 0.to_f : object.price end + + def producer_name + object.product.supplier.name + end + + def image + return if object.product.images.empty? + object.product.images.first.mini_url + end + + def in_stock + object.in_stock? + end + + def stock_location_id + return if object.stock_items.empty? + object.stock_items.first.stock_location.id + end + + def stock_location_name + return if object.stock_items.empty? + object.stock_items.first.stock_location.name + end end diff --git a/app/views/admin/subscriptions/_autocomplete.html.haml b/app/views/admin/subscriptions/_autocomplete.html.haml index a9d5a75a7d..789f27104c 100644 --- a/app/views/admin/subscriptions/_autocomplete.html.haml +++ b/app/views/admin/subscriptions/_autocomplete.html.haml @@ -1,4 +1,4 @@ -#add-line-item +#add-line-item.add-line-item %fieldset %legend{ align: 'center'}= t(:products) %table.no-borders.layout @@ -6,15 +6,15 @@ %col{ width: '20%' } %col{ width: '20%' } %tr - %td{ style: "vertical-align:top" } + %td.vertical-align-top .field - = label_tag :add_variant_id, t(:name_or_sku) + = label_tag :add_variant_id, t('.name_or_sku') %input#add_variant_id.variant_autocomplete.fullwidth{ type: 'number', ng: { model: 'newItem.variant_id' } } - %td{ style: "vertical-align:top" } + %td.vertical-align-top .field - = label_tag :add_quantity, t(:qty) + = label_tag :add_quantity, t('.quantity') %input#add_quantity.fullwidth{ type: 'number', min: 1, ng: { model: 'newItem.quantity' } } - %td{ style: "vertical-align:top" } + %td .actions %a.icon-plus.button.fullwidth{ href: 'javascript:void(0)', method: :post, ng: { click: 'addSubscriptionLineItem()' } } - = t(:add) + = t('.add') diff --git a/app/views/spree/admin/variants/_autocomplete.js.erb b/app/views/spree/admin/variants/_autocomplete.js.erb index b49840725b..527b55568c 100644 --- a/app/views/spree/admin/variants/_autocomplete.js.erb +++ b/app/views/spree/admin/variants/_autocomplete.js.erb @@ -16,16 +16,13 @@