mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-02-08 22:56:06 +00:00
Merge pull request #12563 from abdulazizali77/bugfix/11326-incoming-exchange-per-item-calculator
Display only per_item fees for oc incoming exchange #11326
This commit is contained in:
@@ -3,6 +3,7 @@ angular.module('admin.orderCycles')
|
||||
$controller('AdminOrderCycleBasicCtrl', {$scope: $scope, ocInstance: ocInstance})
|
||||
|
||||
order_cycle_id = $location.absUrl().match(/\/admin\/order_cycles\/(\d+)/)[1]
|
||||
$scope.order_cycle_id = order_cycle_id
|
||||
$scope.order_cycle = OrderCycle.load(order_cycle_id)
|
||||
$scope.enterprises = Enterprise.index(order_cycle_id: order_cycle_id)
|
||||
$scope.enterprise_fees = EnterpriseFee.index(order_cycle_id: order_cycle_id)
|
||||
@@ -25,4 +26,4 @@ angular.module('admin.orderCycles')
|
||||
if $scope.order_cycle_form?.$dirty
|
||||
t('admin.unsaved_confirm_leave')
|
||||
|
||||
NavigationCheck.register(warnAboutUnsavedChanges)
|
||||
NavigationCheck.register(warnAboutUnsavedChanges)
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
angular.module('admin.orderCycles').controller 'AdminOrderCycleIncomingCtrl', ($scope, $rootScope, $controller, $location, Enterprise, OrderCycle, ExchangeProduct, ocInstance) ->
|
||||
angular.module('admin.orderCycles').controller 'AdminOrderCycleIncomingCtrl', ($scope, $rootScope, $controller, $location, Enterprise, EnterpriseFee, OrderCycle, ExchangeProduct, ocInstance) ->
|
||||
$controller('AdminOrderCycleExchangesCtrl', {$scope: $scope, ocInstance: ocInstance, $location: $location})
|
||||
|
||||
$scope.view = 'incoming'
|
||||
|
||||
# NB: weirdly at this next line $scope.order_cycle.id comes out undefined so we use $scope.order_cycle_id instead
|
||||
$scope.enterprise_fees = EnterpriseFee.index(order_cycle_id: $scope.order_cycle_id, per_item: true)
|
||||
$scope.exchangeTotalVariants = (exchange) ->
|
||||
return unless $scope.enterprises? && $scope.enterprises[exchange.enterprise_id]?
|
||||
|
||||
|
||||
@@ -6,6 +6,8 @@ angular.module('admin.orderCycles').factory('EnterpriseFee', ($resource) ->
|
||||
params:
|
||||
order_cycle_id: '@order_cycle_id'
|
||||
coordinator_id: '@coordinator_id'
|
||||
per_item: '@per_item'
|
||||
per_order: '@per_order'
|
||||
})
|
||||
|
||||
{
|
||||
|
||||
@@ -65,7 +65,9 @@ module Admin
|
||||
order_cycle ||= OrderCycle.new(coordinator:) if coordinator.present?
|
||||
enterprises = OpenFoodNetwork::OrderCyclePermissions.new(spree_current_user,
|
||||
order_cycle).visible_enterprises
|
||||
EnterpriseFee.for_enterprises(enterprises).order('enterprise_id', 'fee_type', 'name')
|
||||
|
||||
fees = EnterpriseFee.for_enterprises(enterprises).order('enterprise_id', 'fee_type', 'name')
|
||||
filter_fees(fees)
|
||||
else
|
||||
collection = EnterpriseFee.managed_by(spree_current_user).order('enterprise_id',
|
||||
'fee_type', 'name')
|
||||
@@ -74,6 +76,12 @@ module Admin
|
||||
end
|
||||
end
|
||||
|
||||
def filter_fees(fees)
|
||||
fees = fees.per_item if params[:per_item]
|
||||
fees = fees.per_order if params[:per_order]
|
||||
fees
|
||||
end
|
||||
|
||||
def collection_actions
|
||||
[:index, :for_order_cycle, :bulk_update]
|
||||
end
|
||||
|
||||
42
spec/controllers/admin/enterprise_fees_controller_spec.rb
Normal file
42
spec/controllers/admin/enterprise_fees_controller_spec.rb
Normal file
@@ -0,0 +1,42 @@
|
||||
# frozen_string_literal: false
|
||||
|
||||
require 'spec_helper'
|
||||
|
||||
RSpec.describe Admin::EnterpriseFeesController do
|
||||
before do
|
||||
allow(controller).to receive_messages spree_current_user: super_admin
|
||||
end
|
||||
|
||||
describe "for_order_cycle" do
|
||||
context "as super admin" do
|
||||
let(:super_admin) { create(:admin_user) }
|
||||
let!(:enterprise){ create(:distributor_enterprise_with_tax, name: 'Enterprise') }
|
||||
let!(:fee1) { create(:enterprise_fee, :flat_rate, enterprise:) }
|
||||
let!(:fee2) { create(:enterprise_fee, :per_item, enterprise:) }
|
||||
let!(:fee3) { create(:enterprise_fee, :flat_rate, enterprise:) }
|
||||
let!(:fee4) { create(:enterprise_fee, :per_item, enterprise:) }
|
||||
let!(:order_cycle){
|
||||
create(:simple_order_cycle, name: "oc1", suppliers: [enterprise],
|
||||
distributors: [enterprise])
|
||||
}
|
||||
|
||||
it 'returns only per item enterprise fees of enterprise' do
|
||||
get :for_order_cycle, format: :json,
|
||||
params: { for_order_cycle: true, order_cycle_id: order_cycle.id,
|
||||
per_item: true }
|
||||
expect(assigns(:collection)).to include fee2, fee4
|
||||
end
|
||||
it 'returns only per order enterprise fees of enterprise' do
|
||||
get :for_order_cycle, format: :json,
|
||||
params: { for_order_cycle: true, order_cycle_id: order_cycle.id,
|
||||
per_order: true }
|
||||
expect(assigns(:collection)).to include fee1, fee3
|
||||
end
|
||||
it 'returns all enterprise fees of enterprise' do
|
||||
get :for_order_cycle, format: :json,
|
||||
params: { for_order_cycle: true, order_cycle_id: order_cycle.id }
|
||||
expect(assigns(:collection)).to include fee1, fee2, fee3, fee4
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -17,6 +17,8 @@ describe 'AdminOrderCycleIncomingCtrl', ->
|
||||
preventDefault: jasmine.createSpy('preventDefault')
|
||||
OrderCycle =
|
||||
addSupplier: jasmine.createSpy('addSupplier')
|
||||
EnterpriseFee =
|
||||
index: jasmine.createSpy('index').and.returnValue('enterprise fees list')
|
||||
ocInstance = {}
|
||||
|
||||
module('admin.orderCycles')
|
||||
|
||||
@@ -138,6 +138,38 @@ RSpec.describe '
|
||||
let!(:distributor_managed_fee) {
|
||||
create(:enterprise_fee, enterprise: distributor_managed, name: 'Managed distributor fee')
|
||||
}
|
||||
let!(:supplier_permitted_fee1) {
|
||||
create(:enterprise_fee, :per_item, enterprise: supplier_permitted,
|
||||
name: 'Supplier distributor fee1')
|
||||
}
|
||||
let!(:supplier_permitted_fee2) {
|
||||
create(:enterprise_fee, :flat_rate, enterprise: supplier_permitted,
|
||||
name: 'Supplier distributor fee2')
|
||||
}
|
||||
let!(:supplier_permitted_fee3) {
|
||||
create(:enterprise_fee, :per_item, enterprise: supplier_permitted,
|
||||
name: 'Supplier distributor fee3')
|
||||
}
|
||||
let!(:supplier_permitted_fee4) {
|
||||
create(:enterprise_fee, :flat_rate, enterprise: supplier_permitted,
|
||||
name: 'Supplier distributor fee4')
|
||||
}
|
||||
let!(:distributor_permitted_fee1) {
|
||||
create(:enterprise_fee, :per_item, enterprise: distributor_permitted,
|
||||
name: 'Distributor distributor fee1')
|
||||
}
|
||||
let!(:distributor_permitted_fee2) {
|
||||
create(:enterprise_fee, :flat_rate, enterprise: distributor_permitted,
|
||||
name: 'Distributor distributor fee2')
|
||||
}
|
||||
let!(:distributor_permitted_fee3) {
|
||||
create(:enterprise_fee, :per_item, enterprise: distributor_permitted,
|
||||
name: 'Distributor distributor fee3')
|
||||
}
|
||||
let!(:distributor_permitted_fee4) {
|
||||
create(:enterprise_fee, :flat_rate, enterprise: distributor_permitted,
|
||||
name: 'Distributor distributor fee4')
|
||||
}
|
||||
let!(:shipping_method) {
|
||||
create(:shipping_method,
|
||||
distributors: [distributor_managed, distributor_unmanaged, distributor_permitted])
|
||||
@@ -256,6 +288,17 @@ RSpec.describe '
|
||||
click_button 'Add supplier'
|
||||
expect(page).to have_content "Permitted supplier"
|
||||
|
||||
within("tr.supplier-#{supplier_permitted.id}") { click_button 'Add fee' }
|
||||
expect(page).to have_select(
|
||||
"order_cycle_incoming_exchange_1_enterprise_fees_0_enterprise_id", minimum: 1
|
||||
)
|
||||
select "Permitted supplier",
|
||||
from: "order_cycle_incoming_exchange_1_enterprise_fees_0_enterprise_id"
|
||||
expect(page).to have_select(
|
||||
"order_cycle_incoming_exchange_1_enterprise_fees_0_enterprise_fee_id",
|
||||
options: ["", supplier_permitted_fee1.name, supplier_permitted_fee3.name]
|
||||
)
|
||||
|
||||
select_incoming_variant supplier_managed, 0, variant_managed
|
||||
select_incoming_variant supplier_permitted, 1, variant_permitted
|
||||
|
||||
@@ -272,6 +315,18 @@ RSpec.describe '
|
||||
click_button 'Add distributor'
|
||||
expect(page).to have_content "Permitted distributor"
|
||||
|
||||
within("tr.distributor-#{distributor_permitted.id}") { click_button 'Add fee' }
|
||||
expect(page).to have_select(
|
||||
"order_cycle_outgoing_exchange_1_enterprise_fees_0_enterprise_id", minimum: 1
|
||||
)
|
||||
select "Permitted distributor",
|
||||
from: "order_cycle_outgoing_exchange_1_enterprise_fees_0_enterprise_id"
|
||||
expect(page).to have_select(
|
||||
"order_cycle_outgoing_exchange_1_enterprise_fees_0_enterprise_fee_id",
|
||||
options: ["", distributor_permitted_fee1.name, distributor_permitted_fee2.name,
|
||||
distributor_permitted_fee3.name, distributor_permitted_fee4.name]
|
||||
)
|
||||
|
||||
expect(page).to have_input 'order_cycle_outgoing_exchange_0_pickup_time'
|
||||
fill_in 'order_cycle_outgoing_exchange_0_pickup_time', with: 'pickup time'
|
||||
fill_in 'order_cycle_outgoing_exchange_0_pickup_instructions', with: 'pickup instructions'
|
||||
|
||||
Reference in New Issue
Block a user