From 73a81310f8e9e976fa84bdc6500a51a422cbb842 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Bellet Date: Mon, 17 Apr 2023 17:18:22 +0200 Subject: [PATCH] Create a new url `/orders/ORDER_ID/distribution` That handles the step when distributor and order_cycle must be selected --- app/controllers/spree/admin/orders_controller.rb | 9 ++++++--- app/models/spree/ability.rb | 2 +- config/routes/spree.rb | 1 + 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/app/controllers/spree/admin/orders_controller.rb b/app/controllers/spree/admin/orders_controller.rb index 8f8408ab42..e1f22068f3 100644 --- a/app/controllers/spree/admin/orders_controller.rb +++ b/app/controllers/spree/admin/orders_controller.rb @@ -9,8 +9,8 @@ module Spree helper CheckoutHelper before_action :load_order, only: [:edit, :update, :fire, :resend, - :invoice, :print] - before_action :load_distribution_choices, only: [:new, :edit, :update] + :invoice, :print, :set_distribution] + before_action :load_distribution_choices, only: [:new, :edit, :update, :set_distribution] # Ensure that the distributor is set for an order when before_action :ensure_distribution, only: :new @@ -21,10 +21,13 @@ module Spree def new @order = Order.create @order.created_by = spree_current_user + @order.generate_order_number @order.save - redirect_to spree.edit_admin_order_url(@order) + redirect_to spree.distribution_admin_order_path(@order) end + def set_distribution; end + def edit @order.shipments.map(&:refresh_rates) diff --git a/app/models/spree/ability.rb b/app/models/spree/ability.rb index dee02528e4..4ac5f8b399 100644 --- a/app/models/spree/ability.rb +++ b/app/models/spree/ability.rb @@ -274,7 +274,7 @@ module Spree # Enterprise User can access orders that are placed inside a OC they coordinate order.order_cycle&.coordinated_by?(user) end - can [:admin, :bulk_management, :managed], Spree::Order do + can [:admin, :bulk_management, :managed, :set_distribution], Spree::Order do user.admin? || user.enterprises.any?(&:is_distributor) end can [:admin, :create, :show, :poll], :invoice diff --git a/config/routes/spree.rb b/config/routes/spree.rb index 9844b800e5..c58d365606 100644 --- a/config/routes/spree.rb +++ b/config/routes/spree.rb @@ -89,6 +89,7 @@ Spree::Core::Engine.routes.draw do post :resend get :invoice get :print + get :distribution, to: 'orders#set_distribution' end collection do