diff --git a/app/assets/javascripts/admin/order_cycle.js.erb.coffee b/app/assets/javascripts/admin/order_cycle.js.erb.coffee index e741794334..471ef3636b 100644 --- a/app/assets/javascripts/admin/order_cycle.js.erb.coffee +++ b/app/assets/javascripts/admin/order_cycle.js.erb.coffee @@ -15,6 +15,9 @@ app.controller 'AdminCreateOrderCycleCtrl', ($scope, OrderCycle, Enterprise) -> $scope.productSuppliedToOrderCycle = (product) -> OrderCycle.productSuppliedToOrderCycle(product) + $scope.variantSuppliedToOrderCycle = (variant) -> + OrderCycle.variantSuppliedToOrderCycle(variant) + $scope.toggleProducts = ($event, exchange) -> $event.preventDefault() OrderCycle.toggleProducts(exchange) @@ -47,6 +50,9 @@ app.controller 'AdminEditOrderCycleCtrl', ($scope, $location, OrderCycle, Enterp $scope.productSuppliedToOrderCycle = (product) -> OrderCycle.productSuppliedToOrderCycle(product) + $scope.variantSuppliedToOrderCycle = (variant) -> + OrderCycle.variantSuppliedToOrderCycle(variant) + $scope.toggleProducts = ($event, exchange) -> $event.preventDefault() OrderCycle.toggleProducts(exchange) @@ -103,6 +109,9 @@ app.factory 'OrderCycle', ($resource, $window) -> ids = (variant_id for variant_id in variant_ids when incomingExchangesVariants.indexOf(variant_id) != -1) ids.length > 0 + variantSuppliedToOrderCycle: (variant) -> + this.incomingExchangesVariants().indexOf(variant.id) != -1 + incomingExchangesVariants: -> variant_ids = [] diff --git a/app/views/admin/order_cycles/_exchange_distributed_products_form.html.haml b/app/views/admin/order_cycles/_exchange_distributed_products_form.html.haml index 821bb2ffec..b62f1111c0 100644 --- a/app/views/admin/order_cycles/_exchange_distributed_products_form.html.haml +++ b/app/views/admin/order_cycles/_exchange_distributed_products_form.html.haml @@ -4,6 +4,6 @@ = check_box_tag 'order_cycle_outgoing_exchange_{{ $parent.$index }}_variants_{{ product.master_id }}', 1, 1, 'ng-hide' => 'product.variants', 'ng-model' => 'exchange.variants[product.master_id]', 'id' => 'order_cycle_outgoing_exchange_{{ $parent.$index }}_variants_{{ product.master_id }}' %img{'ng-src' => '{{ product.image_url }}'} {{ product.name }} - .exchange-product-variant{'ng-repeat' => 'variant in product.variants'} + .exchange-product-variant{'ng-repeat' => 'variant in product.variants | filter:variantSuppliedToOrderCycle'} = check_box_tag 'order_cycle_outgoing_exchange_{{ $parent.$parent.$index }}_variants_{{ variant.id }}', 1, 1, 'ng-model' => 'exchange.variants[variant.id]', 'id' => 'order_cycle_outgoing_exchange_{{ $parent.$parent.$index }}_variants_{{ variant.id }}' {{ variant.label }} diff --git a/spec/javascripts/unit/order_cycle_spec.js.coffee b/spec/javascripts/unit/order_cycle_spec.js.coffee index a5106f78e6..8b138c1b10 100644 --- a/spec/javascripts/unit/order_cycle_spec.js.coffee +++ b/spec/javascripts/unit/order_cycle_spec.js.coffee @@ -15,6 +15,7 @@ describe 'OrderCycle controllers', -> order_cycle: 'my order cycle' exchangeSelectedVariants: jasmine.createSpy('exchangeSelectedVariants').andReturn('variants selected') productSuppliedToOrderCycle: jasmine.createSpy('productSuppliedToOrderCycle').andReturn('product supplied') + variantSuppliedToOrderCycle: jasmine.createSpy('variantSuppliedToOrderCycle').andReturn('variant supplied') toggleProducts: jasmine.createSpy('toggleProducts') addSupplier: jasmine.createSpy('addSupplier') addDistributor: jasmine.createSpy('addDistributor') @@ -49,6 +50,10 @@ describe 'OrderCycle controllers', -> expect(scope.productSuppliedToOrderCycle('product')).toEqual('product supplied') expect(OrderCycle.productSuppliedToOrderCycle).toHaveBeenCalledWith('product') + it 'Delegates variantSuppliedToOrderCycle to OrderCycle', -> + expect(scope.variantSuppliedToOrderCycle('variant')).toEqual('variant supplied') + expect(OrderCycle.variantSuppliedToOrderCycle).toHaveBeenCalledWith('variant') + it 'Delegates toggleProducts to OrderCycle', -> scope.toggleProducts(event, 'exchange') expect(event.preventDefault).toHaveBeenCalled() @@ -89,6 +94,7 @@ describe 'OrderCycle controllers', -> load: jasmine.createSpy('load') exchangeSelectedVariants: jasmine.createSpy('exchangeSelectedVariants').andReturn('variants selected') productSuppliedToOrderCycle: jasmine.createSpy('productSuppliedToOrderCycle').andReturn('product supplied') + variantSuppliedToOrderCycle: jasmine.createSpy('variantSuppliedToOrderCycle').andReturn('variant supplied') toggleProducts: jasmine.createSpy('toggleProducts') addSupplier: jasmine.createSpy('addSupplier') addDistributor: jasmine.createSpy('addDistributor') @@ -122,6 +128,10 @@ describe 'OrderCycle controllers', -> expect(scope.productSuppliedToOrderCycle('product')).toEqual('product supplied') expect(OrderCycle.productSuppliedToOrderCycle).toHaveBeenCalledWith('product') + it 'Delegates variantSuppliedToOrderCycle to OrderCycle', -> + expect(scope.variantSuppliedToOrderCycle('variant')).toEqual('variant supplied') + expect(OrderCycle.variantSuppliedToOrderCycle).toHaveBeenCalledWith('variant') + it 'Delegates toggleProducts to OrderCycle', -> scope.toggleProducts(event, 'exchange') expect(event.preventDefault).toHaveBeenCalled() @@ -300,6 +310,17 @@ describe 'OrderCycle services', -> expect(OrderCycle.productSuppliedToOrderCycle(product_variant_absent)).toBeFalsy() + describe 'checking whether a variant is supplied to the order cycle', -> + beforeEach -> + spyOn(OrderCycle, 'incomingExchangesVariants').andReturn([1, 3]) + + it 'returns true for variants that are supplied', -> + expect(OrderCycle.variantSuppliedToOrderCycle({id: 1})).toBeTruthy() + + it 'returns false for variants that are not supplied', -> + expect(OrderCycle.variantSuppliedToOrderCycle({id: 999})).toBeFalsy() + + describe 'loading an order cycle', -> beforeEach -> OrderCycle.load('123')