Merge pull request #8615 from jibees/8559-enable-sort-orders-by-order-full-name

Enable sorting orders by order full name
This commit is contained in:
Filipe
2022-01-11 11:27:36 +00:00
committed by GitHub
8 changed files with 43 additions and 37 deletions

View File

@@ -4,7 +4,7 @@ class BulkInvoiceJob < ActiveJob::Base
def perform(order_ids, filepath)
pdf = CombinePDF.new
orders_from(order_ids).each do |order|
sorted_orders(order_ids).each do |order|
invoice = renderer.render_to_string(order)
pdf << CombinePDF.parse(invoice)
@@ -15,8 +15,10 @@ class BulkInvoiceJob < ActiveJob::Base
private
def orders_from(order_ids)
Spree::Order.where(id: order_ids).order("completed_at DESC")
# Ensures the records are returned in the same order the ids were originally given in
def sorted_orders(order_ids)
orders_by_id = Spree::Order.where(id: order_ids).to_a.index_by(&:id)
order_ids.map { |id| orders_by_id[id] }
end
def renderer

View File

@@ -19,7 +19,7 @@ class SearchOrders
includes(:payments, :subscription, :shipments, :bill_address, :distributor, :order_cycle).
ransack(params[:q])
@search.result(distinct: true)
@search.result(distinct: true).joins(:bill_address)
end
def search_query

View File

@@ -41,7 +41,7 @@
%span{'ng-show' => "sorting == 'completed_at asc'"}= "&#x25B2;".html_safe
%span{'ng-show' => "sorting == 'completed_at desc' || sorting === undefined"}= "&#x25BC;".html_safe
- ['number', 'state', 'payment_state', 'shipment_state', 'email', 'total'].each do |column_name|
- ['number', 'state', 'payment_state', 'shipment_state', 'email', 'bill_address_lastname', 'total'].each do |column_name|
%th
= render partial: 'spree/admin/shared/sortable_header', locals: {column_name: column_name}
@@ -76,7 +76,7 @@
%td
%a{ ng: { href: "mailto:{{order.email}}" } }
{{order.email}}
%br
%td
{{order.full_name}}
%td.align-center
%span{'ng-bind-html' => 'order.display_total'}

View File

@@ -1,4 +1,4 @@
%a{'ng-click' => "sortOptions.toggle('#{column_name}')"}
= t(".#{column_name.to_s}")
%span{'ng-show' => "sorting == '#{column_name} asc'"}= "&#x25B2;".html_safe
%span{'ng-show' => "sorting == '#{column_name} desc'"}= "&#x25BC;".html_safe
%span{'ng-show' => "sorting == '#{column_name} desc'"}= "&#x25BC;".html_safe

View File

@@ -3904,6 +3904,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"
general_settings:
edit:
legal_settings: "Legal Settings"

View File

@@ -21,18 +21,19 @@ module Api
let!(:order_cycle2) { create(:simple_order_cycle, coordinator: coordinator2) }
let!(:order1) do
create(:order, order_cycle: order_cycle, state: 'complete', completed_at: Time.zone.now,
distributor: distributor, billing_address: create(:address), total: 5.0)
distributor: distributor, billing_address: create(:address, lastname: "c"), total: 5.0)
end
let!(:order2) do
create(:order, order_cycle: order_cycle, state: 'complete', completed_at: Time.zone.now,
distributor: distributor2, billing_address: create(:address), total: 10.0)
distributor: distributor2, billing_address: create(:address, lastname: "a"), total: 10.0)
end
let!(:order3) do
create(:order, order_cycle: order_cycle, state: 'complete', completed_at: Time.zone.now,
distributor: distributor, billing_address: create(:address), total: 1.0 )
distributor: distributor, billing_address: create(:address, lastname: "b"), total: 1.0 )
end
let!(:order4) do
create(:completed_order_with_fees, order_cycle: order_cycle2, distributor: distributor2, total: 15.0)
create(:completed_order_with_fees, order_cycle: order_cycle2, distributor: distributor2,
billing_address: create(:address, lastname: "d"), total: 15.0)
end
let!(:order5) { create(:order, state: 'cart', completed_at: nil) }
let!(:line_item1) do
@@ -134,6 +135,13 @@ module Api
expect(json_response['orders']).to eq serialized_orders([order4, order2, order1, order3])
end
it 'can sort orders by bill_address.lastname' do
get :index, params: { q: { completed_at_not_null: true, s: 'bill_address_lastname ASC' } },
as: :json
expect(json_response['orders'].map{ |o| o[:id] }).to eq serialized_orders([order2, order3, order1, order4]).map{ |o| o["id"] }
end
end
context 'with pagination' do

View File

@@ -0,0 +1,21 @@
# frozen_string_literal: true
require 'spec_helper'
describe BulkInvoiceJob do
let(:order1) { build(:order, id: 1) }
let(:order2) { build(:order, id: 2) }
let(:order3) { build(:order, id: 3) }
let(:order_ids) { [3, 1, 2] }
subject { BulkInvoiceJob.new(order_ids, "/tmp/file/path") }
describe "#sorted_orders" do
it "returns results in their original order" do
expect(Spree::Order).to receive(:where).and_return([order1, order2, order3])
expect(subject.__send__(:sorted_orders, order_ids)).to eq [order3, order1, order2]
end
end
end

View File

@@ -53,30 +53,4 @@ describe BulkInvoiceService do
expect(filepath).to eq 'tmp/invoices/1234567.pdf'
end
end
describe "#orders_from" do
let(:renderer) { InvoiceRenderer.new }
before do
allow(InvoiceRenderer).to receive(:new).and_return(renderer)
end
it "orders with completed desc" do
order_old = create(:order_with_distributor, :with_line_item, :completed,
completed_at: 2.minutes.ago)
order_oldest = create(:order_with_distributor, :with_line_item, :completed,
completed_at: 4.minutes.ago)
order_older = create(:order_with_distributor, :with_line_item, :completed,
completed_at: 3.minutes.ago)
expect(renderer).to receive(:render_to_string).with(order_old).ordered.and_return("")
expect(renderer).to receive(:render_to_string).with(order_older).ordered.and_return("")
expect(renderer).to receive(:render_to_string).with(order_oldest).ordered.and_return("")
order_ids = [order_oldest, order_old, order_older].map(&:id)
perform_enqueued_jobs do
service.start_pdf_job(order_ids)
end
end
end
end