From 2f5b5e7ee53b5b1d8b36ce0c6df9f008eca7149e Mon Sep 17 00:00:00 2001 From: Rob H Date: Fri, 1 Aug 2014 16:19:20 +1000 Subject: [PATCH] Inject taxons into BPE --- .../admin/bulk_product_update.js.coffee | 13 ++++++------- .../directives/taxon_autocomplete.js.coffee | 10 ++++------ .../filters/taxons_term_filter.js.coffee | 7 +++++++ .../admin/services/taxons.js.coffee | 17 ++++++++--------- .../admin/products_controller_decorator.rb | 1 + app/helpers/admin/injection_helper.rb | 4 ++++ app/serializers/api/admin/taxon_serializer.rb | 3 +++ .../spree/api/product_serializer.rb | 1 - .../spree/api/variant_serializer.rb | 19 +++++++++---------- .../spree/admin/products/bulk_edit.html.haml | 1 + .../unit/bulk_product_update_spec.js.coffee | 1 + 11 files changed, 44 insertions(+), 33 deletions(-) create mode 100644 app/assets/javascripts/admin/filters/taxons_term_filter.js.coffee create mode 100644 app/serializers/api/admin/taxon_serializer.rb diff --git a/app/assets/javascripts/admin/bulk_product_update.js.coffee b/app/assets/javascripts/admin/bulk_product_update.js.coffee index f76a1c37cf..5159234615 100644 --- a/app/assets/javascripts/admin/bulk_product_update.js.coffee +++ b/app/assets/javascripts/admin/bulk_product_update.js.coffee @@ -1,12 +1,10 @@ angular.module("ofn.admin").controller "AdminProductEditCtrl", [ - "$scope", "$timeout", "$http", "dataFetcher", "DirtyProducts", "VariantUnitManager", "producers", - ($scope, $timeout, $http, dataFetcher, DirtyProducts, VariantUnitManager, producers) -> + "$scope", "$timeout", "$http", "dataFetcher", "DirtyProducts", "VariantUnitManager", "producers", "taxons", + ($scope, $timeout, $http, dataFetcher, DirtyProducts, VariantUnitManager, producers, Taxons) -> $scope.updateStatusMessage = text: "" style: {} - $scope.producers = producers - $scope.columns = producer: {name: "Producer", visible: true} name: {name: "Name", visible: true} @@ -31,6 +29,9 @@ angular.module("ofn.admin").controller "AdminProductEditCtrl", [ $scope.optionTabs = filters: { title: "Filter Products", visible: false } + + $scope.producers = producers + $scope.taxons = Taxons.taxons $scope.products = [] $scope.filteredProducts = [] $scope.currentFilters = [] @@ -87,13 +88,11 @@ angular.module("ofn.admin").controller "AdminProductEditCtrl", [ $scope.matchProducer = (product) -> - for i of $scope.producers - producer = $scope.producers[i] + for producer in $scope.producers if angular.equals(producer.id, product.producer) product.producer = producer break - $scope.loadVariantUnit = (product) -> product.variant_unit_with_scale = if product.variant_unit && product.variant_unit_scale && product.variant_unit != 'items' diff --git a/app/assets/javascripts/admin/directives/taxon_autocomplete.js.coffee b/app/assets/javascripts/admin/directives/taxon_autocomplete.js.coffee index e5713274ef..0a1c01d38f 100644 --- a/app/assets/javascripts/admin/directives/taxon_autocomplete.js.coffee +++ b/app/assets/javascripts/admin/directives/taxon_autocomplete.js.coffee @@ -7,15 +7,13 @@ angular.module("ofn.admin").directive "ofnTaxonAutocomplete", (Taxons) -> placeholder: Spree.translations.taxon_placeholder multiple: true initSelection: (element, callback) -> - Taxons.findByIDs(element.val()).$promise.then (result) -> - callback Taxons.cleanTaxons(result) + callback Taxons.findByIDs(element.val()) query: (query) -> - Taxons.findByTerm(query.term).$promise.then (result) -> - query.callback { results: Taxons.cleanTaxons(result) } + query.callback { results: Taxons.findByTerm(query.term) } formatResult: (taxon) -> - taxon.pretty_name + taxon.name formatSelection: (taxon) -> - taxon.pretty_name + taxon.name element.on "change", -> scope.$apply -> ngModel.$setViewValue element.val() \ No newline at end of file diff --git a/app/assets/javascripts/admin/filters/taxons_term_filter.js.coffee b/app/assets/javascripts/admin/filters/taxons_term_filter.js.coffee new file mode 100644 index 0000000000..78a54175bf --- /dev/null +++ b/app/assets/javascripts/admin/filters/taxons_term_filter.js.coffee @@ -0,0 +1,7 @@ +angular.module("ofn.admin").filter "taxonsTermFilter", -> + return (lineItems,selectedSupplier,selectedDistributor,selectedOrderCycle) -> + filtered = [] + filtered.push lineItem for lineItem in lineItems when (angular.equals(selectedSupplier,"0") || lineItem.supplier.id == selectedSupplier) && + (angular.equals(selectedDistributor,"0") || lineItem.order.distributor.id == selectedDistributor) && + (angular.equals(selectedOrderCycle,"0") || lineItem.order.order_cycle.id == selectedOrderCycle) + filtered \ No newline at end of file diff --git a/app/assets/javascripts/admin/services/taxons.js.coffee b/app/assets/javascripts/admin/services/taxons.js.coffee index 1779ec3518..211ddb57a7 100644 --- a/app/assets/javascripts/admin/services/taxons.js.coffee +++ b/app/assets/javascripts/admin/services/taxons.js.coffee @@ -1,13 +1,12 @@ -angular.module("ofn.admin").factory "Taxons", ($resource) -> - resource = $resource "/admin/taxons/search" +angular.module("ofn.admin").factory "Taxons", (taxons, $filter) -> + new class Taxons + constructor: -> + @taxons = taxons - return { findByIDs: (ids) -> - resource.get { ids: ids } + taxons = [] + taxons.push taxon for taxon in @taxons when taxon.id.toString() in ids.split(",") + taxons findByTerm: (term) -> - resource.get { q: term } - - cleanTaxons: (data) -> - data['taxons'].map (result) -> result - } \ No newline at end of file + $filter('filter')(@taxons, term) \ No newline at end of file diff --git a/app/controllers/spree/admin/products_controller_decorator.rb b/app/controllers/spree/admin/products_controller_decorator.rb index c49b0aae97..289c85d443 100644 --- a/app/controllers/spree/admin/products_controller_decorator.rb +++ b/app/controllers/spree/admin/products_controller_decorator.rb @@ -82,5 +82,6 @@ Spree::Admin::ProductsController.class_eval do current_user.generate_spree_api_key! unless spree_current_user.spree_api_key @spree_api_key = spree_current_user.spree_api_key @producers = Enterprise.managed_by(spree_current_user).is_primary_producer + @taxons = Spree::Taxon.order(:name) end end diff --git a/app/helpers/admin/injection_helper.rb b/app/helpers/admin/injection_helper.rb index f6f8e05c6a..481e7912c6 100644 --- a/app/helpers/admin/injection_helper.rb +++ b/app/helpers/admin/injection_helper.rb @@ -16,6 +16,10 @@ module Admin admin_inject_json_ams_array "ofn.admin", "producers", @producers, Api::Admin::IdNameSerializer end + def admin_inject_taxons + admin_inject_json_ams_array "ofn.admin", "taxons", @taxons, Api::Admin::TaxonSerializer + end + def admin_inject_json_ams(ngModule, name, data, serializer, opts = {}) json = serializer.new(data).to_json render partial: "admin/json/injection_ams", locals: {ngModule: ngModule, name: name, json: json} diff --git a/app/serializers/api/admin/taxon_serializer.rb b/app/serializers/api/admin/taxon_serializer.rb new file mode 100644 index 0000000000..61766c87cf --- /dev/null +++ b/app/serializers/api/admin/taxon_serializer.rb @@ -0,0 +1,3 @@ +class Api::Admin::TaxonSerializer < ActiveModel::Serializer + attributes :id, :name, :pretty_name +end \ No newline at end of file diff --git a/app/serializers/spree/api/product_serializer.rb b/app/serializers/spree/api/product_serializer.rb index 8843cda3c5..eb72002dcc 100644 --- a/app/serializers/spree/api/product_serializer.rb +++ b/app/serializers/spree/api/product_serializer.rb @@ -7,7 +7,6 @@ class Spree::Api::ProductSerializer < ActiveModel::Serializer has_many :variants, key: :variants, serializer: Spree::Api::VariantSerializer # embed: ids has_one :master, serializer: Spree::Api::VariantSerializer - # Infinity is not a valid JSON object, but Rails encodes it anyway def taxon_ids object.taxons.map{ |t| t.id }.join(",") end diff --git a/app/serializers/spree/api/variant_serializer.rb b/app/serializers/spree/api/variant_serializer.rb index 67a696bdcc..f594a540ef 100644 --- a/app/serializers/spree/api/variant_serializer.rb +++ b/app/serializers/spree/api/variant_serializer.rb @@ -1,13 +1,12 @@ class Spree::Api::VariantSerializer < ActiveModel::Serializer attributes :id, :options_text, :unit_value, :unit_description, :on_demand, :display_as, :display_name - - attributes :on_hand, :price - - def on_hand - object.on_hand.nil? ? 0 : ( object.on_hand.to_f.finite? ? object.on_hand : "On demand" ) - end - - def price - object.price.nil? ? 0.to_f : object.price - end + attributes :on_hand, :price + + def on_hand + object.on_hand.nil? ? 0 : ( object.on_hand.to_f.finite? ? object.on_hand : "On demand" ) + end + + def price + object.price.nil? ? 0.to_f : object.price + end end \ No newline at end of file diff --git a/app/views/spree/admin/products/bulk_edit.html.haml b/app/views/spree/admin/products/bulk_edit.html.haml index d3ce04e12a..f78a53ba19 100644 --- a/app/views/spree/admin/products/bulk_edit.html.haml +++ b/app/views/spree/admin/products/bulk_edit.html.haml @@ -13,6 +13,7 @@ =admin_inject_producers +=admin_inject_taxons %div{ 'ng-app' => 'ofn.admin', 'ng-controller' => 'AdminProductEditCtrl', 'ng-init' => "initialise('#{@spree_api_key}');loading=true;" } %div{ 'ng-show' => '!spree_api_key_ok' } {{ api_error_msg }} diff --git a/spec/javascripts/unit/bulk_product_update_spec.js.coffee b/spec/javascripts/unit/bulk_product_update_spec.js.coffee index ee852893d2..99f53c5079 100644 --- a/spec/javascripts/unit/bulk_product_update_spec.js.coffee +++ b/spec/javascripts/unit/bulk_product_update_spec.js.coffee @@ -239,6 +239,7 @@ describe "AdminProductEditCtrl", -> module "ofn.admin" module ($provide)-> $provide.value "producers", [] + $provide.value "taxons", [] null beforeEach inject((_$controller_, _$timeout_, $rootScope, _$httpBackend_, _DirtyProducts_) ->