Inject taxons into BPE

This commit is contained in:
Rob H
2014-08-01 16:19:20 +10:00
parent aaddccfae4
commit 2f5b5e7ee5
11 changed files with 44 additions and 33 deletions

View File

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

View File

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

View File

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

View File

@@ -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
}
$filter('filter')(@taxons, term)

View File

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

View File

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

View File

@@ -0,0 +1,3 @@
class Api::Admin::TaxonSerializer < ActiveModel::Serializer
attributes :id, :name, :pretty_name
end

View File

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

View File

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

View File

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

View File

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