mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-24 20:36:49 +00:00
Inject taxons into BPE
This commit is contained in:
@@ -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'
|
||||
|
||||
@@ -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()
|
||||
@@ -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
|
||||
@@ -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)
|
||||
@@ -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
|
||||
|
||||
@@ -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}
|
||||
|
||||
3
app/serializers/api/admin/taxon_serializer.rb
Normal file
3
app/serializers/api/admin/taxon_serializer.rb
Normal file
@@ -0,0 +1,3 @@
|
||||
class Api::Admin::TaxonSerializer < ActiveModel::Serializer
|
||||
attributes :id, :name, :pretty_name
|
||||
end
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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 }}
|
||||
|
||||
@@ -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_) ->
|
||||
|
||||
Reference in New Issue
Block a user