diff --git a/app/assets/javascripts/admin/order_cycles/controllers/edit.js.coffee b/app/assets/javascripts/admin/order_cycles/controllers/edit.js.coffee index 73a6b3fcba..0730f1e0a3 100644 --- a/app/assets/javascripts/admin/order_cycles/controllers/edit.js.coffee +++ b/app/assets/javascripts/admin/order_cycles/controllers/edit.js.coffee @@ -3,7 +3,9 @@ angular.module('admin.orderCycles') $controller('AdminOrderCycleBasicCtrl', {$scope: $scope, ocInstance: ocInstance}) order_cycle_id = $location.absUrl().match(/\/admin\/order_cycles\/(\d+)/)[1] - $scope.order_cycle = OrderCycle.load(order_cycle_id) + $scope.order_cycle = OrderCycle.load order_cycle_id, -> + $scope.exchangeListChanged() if $scope.exchangeListChanged? + $scope.enterprises = Enterprise.index(order_cycle_id: order_cycle_id) $scope.enterprise_fees = EnterpriseFee.index(order_cycle_id: order_cycle_id) diff --git a/app/assets/javascripts/admin/order_cycles/controllers/incoming_controller.js.coffee b/app/assets/javascripts/admin/order_cycles/controllers/incoming_controller.js.coffee index 266e03f569..f092dfe18c 100644 --- a/app/assets/javascripts/admin/order_cycles/controllers/incoming_controller.js.coffee +++ b/app/assets/javascripts/admin/order_cycles/controllers/incoming_controller.js.coffee @@ -1,4 +1,4 @@ -angular.module('admin.orderCycles').controller 'AdminOrderCycleIncomingCtrl', ($scope, $controller, $location, Enterprise, ocInstance) -> +angular.module('admin.orderCycles').controller 'AdminOrderCycleIncomingCtrl', ($scope, $controller, $location, Enterprise, OrderCycle, ocInstance) -> $controller('AdminOrderCycleExchangesCtrl', {$scope: $scope, ocInstance: ocInstance, $location: $location}) $scope.view = 'incoming' @@ -21,3 +21,7 @@ angular.module('admin.orderCycles').controller 'AdminOrderCycleIncomingCtrl', ($ for product in products numVariants += product.variants.length numVariants + + $scope.addSupplier = ($event) -> + $event.preventDefault() + OrderCycle.addSupplier $scope.new_supplier_id, $scope.exchangeListChanged diff --git a/app/assets/javascripts/admin/order_cycles/controllers/order_cycle_exchanges_controller.js.coffee b/app/assets/javascripts/admin/order_cycles/controllers/order_cycle_exchanges_controller.js.coffee index 821bb8dc07..b3e2690732 100644 --- a/app/assets/javascripts/admin/order_cycles/controllers/order_cycle_exchanges_controller.js.coffee +++ b/app/assets/javascripts/admin/order_cycles/controllers/order_cycle_exchanges_controller.js.coffee @@ -1,5 +1,5 @@ angular.module('admin.orderCycles') - .controller 'AdminOrderCycleExchangesCtrl', ($scope, $controller, $filter, $window, $location, $timeout, OrderCycle, Product, Enterprise, EnterpriseFee, Schedules, RequestMonitor, ocInstance, StatusMessage) -> + .controller 'AdminOrderCycleExchangesCtrl', ($scope, $controller, $filter, $window, $location, OrderCycle, Product, Enterprise, EnterpriseFee, Schedules, RequestMonitor, ocInstance, StatusMessage) -> $controller('AdminEditOrderCycleCtrl', {$scope: $scope, ocInstance: ocInstance, $location: $location}) $scope.supplier_enterprises = Enterprise.producer_enterprises @@ -28,14 +28,6 @@ angular.module('admin.orderCycles') OrderCycle.removeExchangeFee(exchange, index) $scope.order_cycle_form.$dirty = true - $scope.addSupplier = ($event) -> - $event.preventDefault() - OrderCycle.addSupplier($scope.new_supplier_id) - - $scope.addDistributor = ($event) -> - $event.preventDefault() - OrderCycle.addDistributor($scope.new_distributor_id) - $scope.setPickupTimeFieldDirty = (index) -> $timeout -> pickup_time_field_name = "order_cycle_outgoing_exchange_" + index + "_pickup_time" @@ -44,7 +36,6 @@ angular.module('admin.orderCycles') $scope.removeDistributionOfVariant = (variant_id) -> OrderCycle.removeDistributionOfVariant(variant_id) - # Load exchange products $scope.loadExchangeProducts = (scope, exchange) -> return if scope.enterprises[exchange.enterprise_id].supplied_products_fetched? scope.enterprises[exchange.enterprise_id].supplied_products_fetched = true @@ -54,23 +45,17 @@ angular.module('admin.orderCycles') Product.index params, (products) -> scope.enterprises[exchange.enterprise_id].supplied_products = products - initPanel = (scope, exchange) -> - scope.loadExchangeProducts(scope, scope.exchange) - - # Register listener to capture first toggle open of the products panel - exchangeProdutsInitialized = [] - registerToggleListener = -> + # Register listeners to capture first toggle open of the products panel of the exchange + $scope.exchangeListChanged = -> panelRows = angular.element(".panel-row") - if panelRows.length == 0 - $timeout(registerToggleListener, 500) - return - for panelRow in panelRows panelCtrl = angular.element(panelRow).controller('panelCtrl') - panelCtrl.registerSelectionListener (selection, $element) -> - scope = $element.scope() - return if exchangeProdutsInitialized[scope.exchange.id] - initPanel(scope) - exchangeProdutsInitialized[scope.exchange.id] = true + panelCtrl.registerSelectionListener($scope.initializeExchangeProductsPanel) - $timeout(registerToggleListener, 500) + # initialize exchange products panel if not yet done + $scope.exchangeProdutsPanelInitialized = [] + $scope.initializeExchangeProductsPanel = (selection, $element) -> + scope = $element.scope() + return if $scope.exchangeProdutsPanelInitialized[scope.exchange.enterprise_id] + $scope.loadExchangeProducts(scope, scope.exchange) + $scope.exchangeProdutsPanelInitialized[scope.exchange.enterprise_id] = true diff --git a/app/assets/javascripts/admin/order_cycles/controllers/outgoing_controller.js.coffee b/app/assets/javascripts/admin/order_cycles/controllers/outgoing_controller.js.coffee index ce5e348d05..e7f193de47 100644 --- a/app/assets/javascripts/admin/order_cycles/controllers/outgoing_controller.js.coffee +++ b/app/assets/javascripts/admin/order_cycles/controllers/outgoing_controller.js.coffee @@ -9,6 +9,10 @@ angular.module('admin.orderCycles').controller 'AdminOrderCycleOutgoingCtrl', ($ $scope.incomingExchangeVariantsFor = (enterprise_id) -> $filter('filterExchangeVariants')(OrderCycle.incomingExchangesVariants(), $scope.order_cycle.visible_variants_for_outgoing_exchanges[enterprise_id]) + $scope.addDistributor = ($event) -> + $event.preventDefault() + OrderCycle.addDistributor $scope.new_distributor_id, $scope.exchangeListChanged + $scope.submit = ($event, destination) -> $event.preventDefault() StatusMessage.display 'progress', t('js.saving') diff --git a/app/assets/javascripts/admin/order_cycles/services/order_cycle.js.coffee b/app/assets/javascripts/admin/order_cycles/services/order_cycle.js.coffee index 98f9b81406..c3b5ec9b51 100644 --- a/app/assets/javascripts/admin/order_cycles/services/order_cycle.js.coffee +++ b/app/assets/javascripts/admin/order_cycles/services/order_cycle.js.coffee @@ -1,4 +1,4 @@ -angular.module('admin.orderCycles').factory 'OrderCycle', ($resource, $window, StatusMessage, Panels) -> +angular.module('admin.orderCycles').factory 'OrderCycle', ($resource, $window, $timeout, StatusMessage, Panels) -> OrderCycleResource = $resource '/admin/order_cycles/:action_name/:order_cycle_id.json', {}, { 'index': { method: 'GET', isArray: true} 'new' : { method: 'GET', params: { action_name: "new" } } @@ -44,11 +44,15 @@ angular.module('admin.orderCycles').factory 'OrderCycle', ($resource, $window, S @removeDistributionOfVariant(variant.id) if exchange.incoming - addSupplier: (new_supplier_id) -> - this.order_cycle.incoming_exchanges.push({enterprise_id: new_supplier_id, incoming: true, active: true, variants: {}, enterprise_fees: []}) + addSupplier: (new_supplier_id, callback) -> + this.order_cycle.incoming_exchanges.push({enterprise_id: new_supplier_id, incoming: true, active: true, variants: {}, enterprise_fees: []}) + $timeout -> + callback() - addDistributor: (new_distributor_id) -> - this.order_cycle.outgoing_exchanges.push({enterprise_id: new_distributor_id, incoming: false, active: true, variants: {}, enterprise_fees: []}) + addDistributor: (new_distributor_id, callback) -> + this.order_cycle.outgoing_exchanges.push({ enterprise_id: new_distributor_id, incoming: false, active: true, variants: {}, enterprise_fees: [] }) + $timeout -> + callback() removeExchange: (exchange) -> if exchange.incoming @@ -131,7 +135,8 @@ angular.module('admin.orderCycles').factory 'OrderCycle', ($resource, $window, S delete(service.order_cycle.exchanges) service.loaded = true - (callback || angular.noop)(service.order_cycle) + $timeout -> + (callback || angular.noop)(service.order_cycle) this.order_cycle diff --git a/spec/javascripts/unit/admin/order_cycles/controllers/edit_spec.js.coffee b/spec/javascripts/unit/admin/order_cycles/controllers/edit_spec.js.coffee index 2e762a17c9..8258dd248a 100644 --- a/spec/javascripts/unit/admin/order_cycles/controllers/edit_spec.js.coffee +++ b/spec/javascripts/unit/admin/order_cycles/controllers/edit_spec.js.coffee @@ -11,6 +11,7 @@ describe 'AdminEditOrderCycleCtrl', -> scope = order_cycle_form: jasmine.createSpyObj('order_cycle_form', ['$dirty', '$setPristine']) $watch: jasmine.createSpy('$watch') + exchangeListChanged: jasmine.createSpy('exchangeListChanged') event = preventDefault: jasmine.createSpy('preventDefault') location = @@ -38,9 +39,6 @@ describe 'AdminEditOrderCycleCtrl', -> expect(EnterpriseFee.index).toHaveBeenCalled() expect(scope.enterprise_fees).toEqual('enterprise fees list') - it 'Loads order cycles', -> - expect(OrderCycle.load).toHaveBeenCalledWith('27') - it 'Removes coordinator fees', -> scope.removeCoordinatorFee(event, 0) expect(event.preventDefault).toHaveBeenCalled() diff --git a/spec/javascripts/unit/admin/order_cycles/controllers/incoming_controller_spec.js.coffee b/spec/javascripts/unit/admin/order_cycles/controllers/incoming_controller_spec.js.coffee index 45f56fe75d..0543dfd2ac 100644 --- a/spec/javascripts/unit/admin/order_cycles/controllers/incoming_controller_spec.js.coffee +++ b/spec/javascripts/unit/admin/order_cycles/controllers/incoming_controller_spec.js.coffee @@ -10,9 +10,14 @@ describe 'AdminOrderCycleIncomingCtrl', -> beforeEach -> scope = $watch: jasmine.createSpy('$watch') + exchangeListChanged: jasmine.createSpy('exchangeListChanged') location = absUrl: -> 'example.com/admin/order_cycles/27/edit' + event = + preventDefault: jasmine.createSpy('preventDefault') + OrderCycle = + addSupplier: jasmine.createSpy('addSupplier') ocInstance = {} module('admin.orderCycles') @@ -33,3 +38,11 @@ describe 'AdminOrderCycleIncomingCtrl', -> it 'returns zero when products list is empty', -> expect(scope.countVariants([])).toEqual(0) + + it 'adds order cycle suppliers', -> + scope.new_supplier_id = 'new supplier id' + + scope.addSupplier(event) + + expect(event.preventDefault).toHaveBeenCalled() + expect(OrderCycle.addSupplier).toHaveBeenCalledWith('new supplier id', scope.exchangeListChanged) diff --git a/spec/javascripts/unit/admin/order_cycles/controllers/order_cycle_exchanges_controller_spec.js.coffee b/spec/javascripts/unit/admin/order_cycles/controllers/order_cycle_exchanges_controller_spec.js.coffee index 5f136a629b..f0e348ea31 100644 --- a/spec/javascripts/unit/admin/order_cycles/controllers/order_cycle_exchanges_controller_spec.js.coffee +++ b/spec/javascripts/unit/admin/order_cycles/controllers/order_cycle_exchanges_controller_spec.js.coffee @@ -19,8 +19,6 @@ describe 'AdminOrderCycleExchangesCtrl', -> OrderCycle = exchangeSelectedVariants: jasmine.createSpy('exchangeSelectedVariants').and.returnValue('variants selected') exchangeDirection: jasmine.createSpy('exchangeDirection').and.returnValue('exchange direction') - addSupplier: jasmine.createSpy('addSupplier') - addDistributor: jasmine.createSpy('addDistributor') removeExchange: jasmine.createSpy('removeExchange') addExchangeFee: jasmine.createSpy('addExchangeFee') removeExchangeFee: jasmine.createSpy('removeExchangeFee') @@ -73,18 +71,6 @@ describe 'AdminOrderCycleExchangesCtrl', -> expect(OrderCycle.removeExchangeFee).toHaveBeenCalledWith('exchange', 0) expect(scope.order_cycle_form.$dirty).toEqual true - it 'Adds order cycle suppliers', -> - scope.new_supplier_id = 'new supplier id' - scope.addSupplier(event) - expect(event.preventDefault).toHaveBeenCalled() - expect(OrderCycle.addSupplier).toHaveBeenCalledWith('new supplier id') - - it 'Adds order cycle distributors', -> - scope.new_distributor_id = 'new distributor id' - scope.addDistributor(event) - expect(event.preventDefault).toHaveBeenCalled() - expect(OrderCycle.addDistributor).toHaveBeenCalledWith('new distributor id') - it 'Removes distribution of a variant', -> scope.removeDistributionOfVariant('variant') expect(OrderCycle.removeDistributionOfVariant).toHaveBeenCalledWith('variant') diff --git a/spec/javascripts/unit/admin/order_cycles/controllers/outgoing_controller_spec.js.coffee b/spec/javascripts/unit/admin/order_cycles/controllers/outgoing_controller_spec.js.coffee index c8c138b17b..880ec2d928 100644 --- a/spec/javascripts/unit/admin/order_cycles/controllers/outgoing_controller_spec.js.coffee +++ b/spec/javascripts/unit/admin/order_cycles/controllers/outgoing_controller_spec.js.coffee @@ -10,11 +10,15 @@ describe 'AdminOrderCycleOutgoingCtrl', -> beforeEach -> scope = $watch: jasmine.createSpy('$watch') + exchangeListChanged: jasmine.createSpy('exchangeListChanged') location = absUrl: -> 'example.com/admin/order_cycles/27/edit' + event = + preventDefault: jasmine.createSpy('preventDefault') OrderCycle = variantSuppliedToOrderCycle: jasmine.createSpy('variantSuppliedToOrderCycle').and.returnValue('variant supplied') + addDistributor: jasmine.createSpy('addDistributor') ocInstance = {} module('admin.orderCycles') @@ -24,3 +28,11 @@ describe 'AdminOrderCycleOutgoingCtrl', -> it 'Delegates variantSuppliedToOrderCycle to OrderCycle', -> expect(scope.variantSuppliedToOrderCycle('variant')).toEqual('variant supplied') expect(OrderCycle.variantSuppliedToOrderCycle).toHaveBeenCalledWith('variant') + + it 'Adds order cycle distributors', -> + scope.new_distributor_id = 'new distributor id' + + scope.addDistributor(event) + + expect(event.preventDefault).toHaveBeenCalled() + expect(OrderCycle.addDistributor).toHaveBeenCalledWith('new distributor id', scope.exchangeListChanged)