Create bulk orders cancellation feature

This commit is contained in:
binarygit
2022-09-12 12:34:17 +05:45
committed by Konrad
parent 4b6aced962
commit 25ae10dbe8
7 changed files with 78 additions and 2 deletions

View File

@@ -0,0 +1,14 @@
angular.module("admin.orders").controller "bulkCancelCtrl", ($scope, $http, $timeout) ->
$scope.cancelOrder = (orderIds, sendEmailCancellation, restock_items) ->
$http(
method: 'post'
url: "/admin/orders/bulk_cancel?order_ids=#{orderIds}&send_cancellation_email=#{sendEmailCancellation}&restock_items=#{restock_items}" ).then(->
window.location.reload()
)
$scope.cancelSelectedOrders = ->
ofnCancelOrderAlert((confirm, sendEmailCancellation, restock_items) ->
if confirm
$scope.cancelOrder $scope.selected_orders, sendEmailCancellation, restock_items
)

View File

@@ -67,6 +67,18 @@ module Spree
load_spree_api_key
end
def bulk_cancel
order_ids = params[:order_ids].split(',')
Spree::Order.where(id: order_ids).find_each do |order|
order.send_cancellation_email = params[:send_cancellation_email] != "false"
order.restock_items = params.fetch(:restock_items, "true") == "true"
order.cancel
end
flash[:success] = Spree.t(:order_updated)
end
def fire
event = params[:e]
@order.send_cancellation_email = params[:send_cancellation_email] != "false"

View File

@@ -99,7 +99,7 @@ module Spree
item.order.changes_allowed?
end
can [:cancel], Spree::Order do |order|
can [:cancel, :bulk_cancel], Spree::Order do |order|
order.user == user
end

View File

@@ -33,6 +33,9 @@
%div.menu_item
%span.name.invoices-modal{'ng-controller' => 'bulkInvoiceCtrl', 'ng-click' => 'createBulkInvoice()' }
= t('.print_invoices')
%div.menu_item
%span.name{'ng-controller' => 'bulkCancelCtrl', 'ng-click' => 'cancelSelectedOrders()' }
= t('.cancel_orders')
= render partial: 'per_page_controls', locals: { position: "right" }
@@ -43,7 +46,7 @@
%thead
%tr
%th
%input{type: 'checkbox', 'ng-change' => 'toggleAll()', 'ng-model' => 'select_all'}
%input#selectAll{type: 'checkbox', 'ng-change' => 'toggleAll()', 'ng-model' => 'select_all'}
%th
= t(:products_distributor)
%th
@@ -113,3 +116,5 @@
.no-objects-found{'ng-show' => "!RequestMonitor.loading && orders.length == 0"}
= t('.no_orders_found')
= render 'spree/admin/shared/custom-confirm'

View File

@@ -3810,6 +3810,7 @@ See the %{link} to find out more about %{sitename}'s features and to start using
results_found: "%{number} Results found."
viewing: "Viewing %{start} to %{end}."
print_invoices: "Print Invoices"
cancel_orders: "Cancel Orders"
selected:
zero: "No order selected"
one: "1 order selected"

View File

@@ -31,6 +31,7 @@ Spree::Core::Engine.routes.draw do
end
resource :account, :controller => 'users'
match '/admin/orders/bulk_cancel' => 'admin/orders#bulk_cancel', :as => "admin_bulk_cancel", via: :post
match '/admin/orders/bulk_management' => 'admin/orders#bulk_management', :as => "admin_bulk_order_management", via: :get
match '/admin/payment_methods/show_provider_preferences' => 'admin/payment_methods#show_provider_preferences', :via => :get

View File

@@ -0,0 +1,43 @@
# frozen_string_literal: true
require 'system_helper'
describe '
As an Administrator
I want to be able to delete orders in bulk
' do
include AdminHelper
include AuthenticationHelper
include WebHelper
context "deleting orders" do
let!(:o1) {
create(:order_with_distributor, state: 'complete', shipment_state: 'ready',
completed_at: Time.zone.now )
}
let!(:o2) {
create(:order_with_distributor, state: 'complete', shipment_state: 'ready',
completed_at: Time.zone.now )
}
before :each do
login_as_admin_and_visit spree.admin_orders_path
end
it "deletes orders" do
# Verify that the orders have a STATE of COMPLETE
expect(page).to have_selector('span', text: 'COMPLETE', count: 2)
page.check('selectAll')
page.find('.ofn-drop-down').click
page.find('.menu').find('span', text: 'Cancel Orders').click
within '.modal' do
click_on "OK"
end
# Verify that the orders have a STATE of CANCELLED
expect(page).to have_selector('span', text: 'CANCELLED', count: 2)
end
end
end