diff --git a/app/assets/javascripts/admin/order_cycles/controllers/create.js.coffee b/app/assets/javascripts/admin/order_cycles/controllers/create.js.coffee index 7e0cb5a336..bf7bad2774 100644 --- a/app/assets/javascripts/admin/order_cycles/controllers/create.js.coffee +++ b/app/assets/javascripts/admin/order_cycles/controllers/create.js.coffee @@ -5,7 +5,7 @@ angular.module('admin.orderCycles') $scope.distributor_enterprises = Enterprise.hub_enterprises $scope.supplied_products = Enterprise.supplied_products $scope.enterprise_fees = EnterpriseFee.index(coordinator_id: ocInstance.coordinator_id) - $scope.schedules = Schedules.index() + $scope.schedules = Schedules.index({enterprise_id: ocInstance.coordinator_id}) $scope.OrderCycle = OrderCycle $scope.order_cycle = OrderCycle.new({ coordinator_id: ocInstance.coordinator_id}) 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 581b414fb6..833614665d 100644 --- a/app/assets/javascripts/admin/order_cycles/controllers/edit.js.coffee +++ b/app/assets/javascripts/admin/order_cycles/controllers/edit.js.coffee @@ -1,12 +1,12 @@ angular.module('admin.orderCycles') - .controller 'AdminEditOrderCycleCtrl', ($scope, $filter, $location, $window, OrderCycle, Enterprise, EnterpriseFee, StatusMessage, Schedules, RequestMonitor) -> + .controller 'AdminEditOrderCycleCtrl', ($scope, $filter, $location, $window, OrderCycle, Enterprise, EnterpriseFee, StatusMessage, Schedules, RequestMonitor, ocInstance) -> order_cycle_id = $location.absUrl().match(/\/admin\/order_cycles\/(\d+)/)[1] $scope.enterprises = Enterprise.index(order_cycle_id: order_cycle_id) $scope.supplier_enterprises = Enterprise.producer_enterprises $scope.distributor_enterprises = Enterprise.hub_enterprises $scope.supplied_products = Enterprise.supplied_products $scope.enterprise_fees = EnterpriseFee.index(order_cycle_id: order_cycle_id) - $scope.schedules = Schedules.index() + $scope.schedules = Schedules.index({enterprise_id: ocInstance.coordinator_id}) $scope.OrderCycle = OrderCycle $scope.order_cycle = OrderCycle.load(order_cycle_id) diff --git a/app/assets/javascripts/admin/order_cycles/controllers/simple_create.js.coffee b/app/assets/javascripts/admin/order_cycles/controllers/simple_create.js.coffee index 2bf008b427..c0865990e5 100644 --- a/app/assets/javascripts/admin/order_cycles/controllers/simple_create.js.coffee +++ b/app/assets/javascripts/admin/order_cycles/controllers/simple_create.js.coffee @@ -1,7 +1,7 @@ angular.module('admin.orderCycles').controller "AdminSimpleCreateOrderCycleCtrl", ($scope, $window, OrderCycle, Enterprise, EnterpriseFee, StatusMessage, Schedules, RequestMonitor, ocInstance) -> $scope.StatusMessage = StatusMessage $scope.OrderCycle = OrderCycle - $scope.schedules = Schedules.index() + $scope.schedules = Schedules.index({enterprise_id: ocInstance.coordinator_id}) $scope.order_cycle = OrderCycle.new {coordinator_id: ocInstance.coordinator_id}, => # TODO: make this a get method, which only fetches one enterprise $scope.enterprises = Enterprise.index {coordinator_id: ocInstance.coordinator_id}, (enterprises) => diff --git a/app/assets/javascripts/admin/order_cycles/controllers/simple_edit.js.coffee b/app/assets/javascripts/admin/order_cycles/controllers/simple_edit.js.coffee index ba0f986407..6c6233e0fd 100644 --- a/app/assets/javascripts/admin/order_cycles/controllers/simple_edit.js.coffee +++ b/app/assets/javascripts/admin/order_cycles/controllers/simple_edit.js.coffee @@ -1,11 +1,11 @@ -angular.module('admin.orderCycles').controller "AdminSimpleEditOrderCycleCtrl", ($scope, $location, $window, OrderCycle, Enterprise, EnterpriseFee, Schedules, RequestMonitor, StatusMessage) -> +angular.module('admin.orderCycles').controller "AdminSimpleEditOrderCycleCtrl", ($scope, $location, $window, OrderCycle, Enterprise, EnterpriseFee, Schedules, RequestMonitor, StatusMessage, ocInstance) -> $scope.orderCycleId = -> $location.absUrl().match(/\/admin\/order_cycles\/(\d+)/)[1] $scope.StatusMessage = StatusMessage $scope.enterprises = Enterprise.index(order_cycle_id: $scope.orderCycleId()) $scope.enterprise_fees = EnterpriseFee.index(order_cycle_id: $scope.orderCycleId()) - $scope.schedules = Schedules.index() + $scope.schedules = Schedules.index({enterprise_id: ocInstance.coordinator_id}) $scope.OrderCycle = OrderCycle $scope.order_cycle = OrderCycle.load $scope.orderCycleId(), (order_cycle) => $scope.init() diff --git a/app/assets/javascripts/admin/resources/resources/schedule_resource.js.coffee b/app/assets/javascripts/admin/resources/resources/schedule_resource.js.coffee index e0204939ea..f28564a13f 100644 --- a/app/assets/javascripts/admin/resources/resources/schedule_resource.js.coffee +++ b/app/assets/javascripts/admin/resources/resources/schedule_resource.js.coffee @@ -3,6 +3,8 @@ angular.module("admin.resources").factory 'ScheduleResource', ($resource) -> 'index': method: 'GET' isArray: true + params: + enterprise_id: '@enterprise_id' 'create': method: 'POST' 'update': diff --git a/app/assets/javascripts/admin/resources/services/schedules.js.coffee b/app/assets/javascripts/admin/resources/services/schedules.js.coffee index e5baac2777..8c56956cad 100644 --- a/app/assets/javascripts/admin/resources/services/schedules.js.coffee +++ b/app/assets/javascripts/admin/resources/services/schedules.js.coffee @@ -40,7 +40,7 @@ angular.module("admin.resources").factory "Schedules", ($q, $injector, RequestMo delete @byID[schedule.id] StatusMessage.display 'success', "#{t('js.admin.order_cycles.schedules.deleted_schedule')}: '#{schedule.name}'" - index: -> - request = ScheduleResource.index (data) => @load(data) + index: (params) -> + request = ScheduleResource.index params, (data) => @load(data) RequestMonitor.load(request.$promise) request diff --git a/app/controllers/admin/schedules_controller.rb b/app/controllers/admin/schedules_controller.rb index 889169b0cc..23a97ad0e6 100644 --- a/app/controllers/admin/schedules_controller.rb +++ b/app/controllers/admin/schedules_controller.rb @@ -31,7 +31,11 @@ module Admin def collection return Schedule.where("1=0") unless json_request? - permissions.visible_schedules + if params[:enterprise_id] + permissions.visible_schedules.select { |schedule| schedule.coordinators.map(&:id).include? params[:enterprise_id].to_i } + else + permissions.visible_schedules + end end def collection_actions diff --git a/app/views/admin/order_cycles/edit.html.haml b/app/views/admin/order_cycles/edit.html.haml index ed7b93571a..9ae3f14792 100644 --- a/app/views/admin/order_cycles/edit.html.haml +++ b/app/views/admin/order_cycles/edit.html.haml @@ -25,6 +25,7 @@ = t :edit_order_cycle - ng_controller = order_cycles_simple_form ? 'AdminSimpleEditOrderCycleCtrl' : 'AdminEditOrderCycleCtrl' += admin_inject_order_cycle_instance = form_for [main_app, :admin, @order_cycle], :url => '', :html => {:class => 'ng order_cycle', 'ng-app' => 'admin.orderCycles', 'ng-controller' => ng_controller, name: 'order_cycle_form'} do |f| %save-bar{ dirty: "order_cycle_form.$dirty", persist: "true" } diff --git a/spec/controllers/admin/schedules_controller_spec.rb b/spec/controllers/admin/schedules_controller_spec.rb index 1f320125b1..db974df917 100644 --- a/spec/controllers/admin/schedules_controller_spec.rb +++ b/spec/controllers/admin/schedules_controller_spec.rb @@ -40,9 +40,21 @@ describe Admin::SchedulesController, type: :controller do expect(ActiveModel::ArraySerializer).to receive(:new) spree_get :index, params end + + context "and there is a schedule of an OC coordinated by _another_ enterprise I manage and the first enterprise is given" do + let!(:other_managed_coordinator) { create(:distributor_enterprise, owner: managed_coordinator.owner) } + let!(:other_coordinated_order_cycle) { create(:simple_order_cycle, coordinator: other_managed_coordinator) } + let!(:other_coordinated_schedule) { create(:schedule, order_cycles: [other_coordinated_order_cycle] ) } + let(:params) { { format: :json, enterprise_id: managed_coordinator.id } } + + it "scopes @collection to schedules containing order_cycles coordinated by the first enterprise" do + spree_get :index, params + expect(assigns(:collection)).to eq [coordinated_schedule] + end + end end - context "where I manage an order cycle coordinator" do + context "where I dont manage an order cycle coordinator" do it "returns an empty collection" do spree_get :index, format: :json expect(assigns(:collection)).to be_nil diff --git a/spec/features/admin/order_cycles_spec.rb b/spec/features/admin/order_cycles_spec.rb index 165e32d956..397ccec9cd 100644 --- a/spec/features/admin/order_cycles_spec.rb +++ b/spec/features/admin/order_cycles_spec.rb @@ -645,6 +645,7 @@ feature ' let!(:supplier_unmanaged) { create(:supplier_enterprise, name: 'Unmanaged supplier') } let!(:supplier_permitted) { create(:supplier_enterprise, name: 'Permitted supplier') } let!(:distributor_managed) { create(:distributor_enterprise, name: 'Managed distributor') } + let!(:other_distributor_managed) { create(:distributor_enterprise, name: 'Other Managed distributor') } let!(:distributor_unmanaged) { create(:distributor_enterprise, name: 'Unmanaged Distributor') } let!(:distributor_permitted) { create(:distributor_enterprise, name: 'Permitted distributor') } let!(:distributor_managed_fee) { create(:enterprise_fee, enterprise: distributor_managed, name: 'Managed distributor fee') } @@ -655,6 +656,7 @@ feature ' let!(:product_permitted) { create(:product, supplier: supplier_permitted) } let!(:variant_permitted) { product_permitted.variants.first } let!(:schedule) { create(:schedule, name: 'Schedule1', order_cycles: [create(:simple_order_cycle, coordinator: distributor_managed)]) } + let!(:schedule_of_other_managed_distributor) { create(:schedule, name: 'Other Schedule', order_cycles: [create(:simple_order_cycle, coordinator: other_distributor_managed)]) } before do # Relationships required for interface to work @@ -675,6 +677,7 @@ feature ' @new_user = create_enterprise_user @new_user.enterprise_roles.build(enterprise: supplier_managed).save @new_user.enterprise_roles.build(enterprise: distributor_managed).save + @new_user.enterprise_roles.build(enterprise: other_distributor_managed).save quick_login_as @new_user end @@ -704,9 +707,13 @@ feature ' visit admin_order_cycles_path click_link 'New Order Cycle' + select2_select 'Managed distributor', from: 'coordinator_id' + click_button "Continue >" + fill_in 'order_cycle_name', with: 'My order cycle' fill_in 'order_cycle_orders_open_at', with: '2040-11-06 06:00:00' fill_in 'order_cycle_orders_close_at', with: '2040-11-13 17:00:00' + expect(page).not_to have_select2 'schedule_ids', with_options: [schedule_of_other_managed_distributor.name] multi_select2_select schedule.name, from: 'schedule_ids' select 'Managed supplier', from: 'new_supplier_id' @@ -797,6 +804,7 @@ feature ' expect(page).to have_field 'order_cycle_name', with: oc.name multi_select2_select schedule.name, from: 'schedule_ids' + expect(page).not_to have_select2 'schedule_ids', with_options: [schedule_of_other_managed_distributor.name] # When I remove all the exchanges and save page.find("tr.supplier-#{supplier_managed.id} a.remove-exchange").click 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 2f2016f5c7..45024ef175 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 @@ -41,10 +41,11 @@ describe 'AdminEditOrderCycleCtrl', -> EnterpriseFee = index: jasmine.createSpy('index').and.returnValue('enterprise fees list') forEnterprise: jasmine.createSpy('forEnterprise').and.returnValue('enterprise fees for enterprise') + ocInstance = {} module('admin.orderCycles') inject ($controller) -> - ctrl = $controller 'AdminEditOrderCycleCtrl', {$scope: scope, $location: location, OrderCycle: OrderCycle, Enterprise: Enterprise, EnterpriseFee: EnterpriseFee} + ctrl = $controller 'AdminEditOrderCycleCtrl', {$scope: scope, $location: location, OrderCycle: OrderCycle, Enterprise: Enterprise, EnterpriseFee: EnterpriseFee, ocInstance: ocInstance} it 'Loads enterprises and supplied products', -> expect(Enterprise.index).toHaveBeenCalled() diff --git a/spec/javascripts/unit/admin/order_cycles/controllers/simple_edit.js.coffee b/spec/javascripts/unit/admin/order_cycles/controllers/simple_edit.js.coffee index f5ccd25aac..6249fed4d6 100644 --- a/spec/javascripts/unit/admin/order_cycles/controllers/simple_edit.js.coffee +++ b/spec/javascripts/unit/admin/order_cycles/controllers/simple_edit.js.coffee @@ -24,10 +24,11 @@ describe "AdminSimpleEditOrderCycleCtrl", -> index: jasmine.createSpy() EnterpriseFee = index: jasmine.createSpy() + ocInstance = {} module('admin.orderCycles') inject ($controller) -> - ctrl = $controller 'AdminSimpleEditOrderCycleCtrl', {$scope: scope, $location: location, OrderCycle: OrderCycle, Enterprise: Enterprise, EnterpriseFee: EnterpriseFee, StatusMessage: StatusMessage} + ctrl = $controller 'AdminSimpleEditOrderCycleCtrl', {$scope: scope, $location: location, OrderCycle: OrderCycle, Enterprise: Enterprise, EnterpriseFee: EnterpriseFee, StatusMessage: StatusMessage, ocInstance: ocInstance} describe "initialisation", -> enterprise = {id: 123}