From 6cf705ea5546bcf2fe41fefcdf8c6dee7831d10f Mon Sep 17 00:00:00 2001 From: luisramos0 Date: Sun, 9 Jun 2019 23:15:44 +0100 Subject: [PATCH] In the order cycle pages (both create and edit, both simple and normal), add OC coordinator to schedules request to the server and make the controller filter schedules of order cycles coordinated by that enterprise id. --- .../order_cycles/controllers/create.js.coffee | 2 +- .../admin/order_cycles/controllers/edit.js.coffee | 4 ++-- .../controllers/simple_create.js.coffee | 2 +- .../order_cycles/controllers/simple_edit.js.coffee | 4 ++-- .../resources/schedule_resource.js.coffee | 2 ++ .../admin/resources/services/schedules.js.coffee | 4 ++-- app/controllers/admin/schedules_controller.rb | 6 +++++- app/views/admin/order_cycles/edit.html.haml | 1 + .../controllers/admin/schedules_controller_spec.rb | 14 +++++++++++++- spec/features/admin/order_cycles_spec.rb | 8 ++++++++ .../order_cycles/controllers/edit_spec.js.coffee | 3 ++- .../order_cycles/controllers/simple_edit.js.coffee | 3 ++- 12 files changed, 41 insertions(+), 12 deletions(-) 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}