Sort orders by last name, then first name i.e. the same way bulk order management works

This commit is contained in:
Cillian O'Ruanaidh
2023-07-28 14:20:29 +01:00
parent 774bb7a607
commit 276b94de5b
5 changed files with 20 additions and 11 deletions

View File

@@ -16,7 +16,8 @@ module Spree
searchable_attributes :number, :state, :shipment_state, :payment_state, :distributor_id,
:order_cycle_id, :email, :total, :customer_id
searchable_associations :shipping_method, :bill_address, :distributor
searchable_scopes :complete, :incomplete
searchable_scopes :complete, :incomplete, :sort_by_billing_address_name_asc,
:sort_by_billing_address_name_desc
checkout_flow do
go_to_state :address
@@ -145,6 +146,14 @@ module Spree
end
}
scope :sort_by_billing_address_name_asc, -> {
joins(:bill_address).order("spree_addresses.lastname ASC, spree_addresses.firstname ASC")
}
scope :sort_by_billing_address_name_desc, -> {
joins(:bill_address).order("spree_addresses.lastname DESC, spree_addresses.firstname DESC")
}
scope :with_line_items_variants_and_products_outer, lambda {
left_outer_joins(line_items: { variant: :product })
}

View File

@@ -14,7 +14,7 @@
%th
= t(:products_distributor)
- columns = ['completed_at', 'number', 'state', 'payment_state', 'shipment_state', 'email', 'bill_address_lastname', 'total']
- columns = ['completed_at', 'number', 'state', 'payment_state', 'shipment_state', 'email', 'billing_address_name', 'total']
= render partial: "spree/admin/shared/stimulus_sortable_header", collection: columns, as: :column,
locals: { sorted: params.dig(:q, :s), default: "completed_at desc" }

View File

@@ -33,7 +33,7 @@
%a{ href: "mailto:#{order.email}", target: "_blank" }
= order.email
%td
= order.bill_address.full_name
= order.bill_address.full_name_for_sorting
%td.align-center
%span
= order.display_total

View File

@@ -4346,7 +4346,7 @@ See the %{link} to find out more about %{sitename}'s features and to start using
shipment_state: "Shipment State"
email: "Email"
total: "Total"
bill_address_lastname: "Name"
billing_address_name: "Name"
general_settings:
edit:
legal_settings: "Legal Settings"

View File

@@ -410,22 +410,22 @@ describe '
context "orders with different billing addresses" do
before do
billing_address2.update!(lastname: "Mad Hatter")
billing_address3.update!(lastname: "Duchess")
billing_address4.update!(lastname: "Cheshire Cat")
billing_address5.update!(lastname: "Alice")
billing_address2.update!(firstname: "Mad", lastname: "Hatter")
billing_address3.update!(firstname: "Alice", lastname: "Smith")
billing_address4.update!(firstname: "Cheshire", lastname: "Cat")
billing_address5.update!(lastname: "Bob", lastname: "Smith")
login_as_admin
visit spree.admin_orders_path
end
it "orders by last name" do
it "orders by last name then first name" do
find("a", text: 'NAME').click # sets ascending ordering
expect(page).to have_content(
/#{order5.number}.*#{order4.number}.*#{order3.number}.*#{order2.number}/m
/#{order4.number}.*#{order2.number}.*#{order3.number}.*#{order5.number}/m
)
find("a", text: 'NAME').click # sets descending ordering
expect(page).to have_content(
/#{order2.number}.*#{order3.number}.*#{order4.number}.*#{order5.number}/m
/#{order5.number}.*#{order3.number}.*#{order2.number}.*#{order4.number}/m
)
end
end