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:
Konrad
2024-08-02 03:11:27 +02:00
committed by GitHub
7 changed files with 115 additions and 4 deletions

View File

@@ -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)

View File

@@ -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]?

View File

@@ -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'
})
{

View File

@@ -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

View 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

View File

@@ -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')

View File

@@ -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'