Fix frontend sorting in "Bulk Order Management"

This commit is contained in:
Kristina Lim
2018-07-06 17:26:02 +08:00
committed by Maikel Linke
parent 822b2c929a
commit 2bba72c5a9
3 changed files with 47 additions and 10 deletions

View File

@@ -10,6 +10,9 @@ angular.module("admin.lineItems").controller 'LineItemsCtrl', ($scope, $timeout,
$scope.selectedUnitsVariant = {}
$scope.sharedResource = false
$scope.columns = Columns.columns
$scope.sorting =
predicate: ""
reverse: true
$scope.confirmRefresh = ->
LineItems.allSaved() || confirm(t("unsaved_changes_warning"))

View File

@@ -118,31 +118,31 @@
%th.bulk
%input{ :type => "checkbox", :name => 'toggle_bulk', 'ng-click' => 'toggleAllCheckboxes()', 'ng-checked' => "allBoxesChecked()" }
%th.order_no{ 'ng-show' => 'columns.order_no.visible' }
%a{ :href => '', 'ng-click' => "predicate = 'order.number'; reverse = !reverse" }
%a{ :href => '', 'ng-click' => "sorting.predicate = 'order.number'; sorting.reverse = !sorting.reverse" }
= t("admin.orders.bulk_management.order_no")
%th.full_name{ 'ng-show' => 'columns.full_name.visible' }
%a{ :href => '', 'ng-click' => "predicate = 'order.full_name'; reverse = !reverse" }
%a{ :href => '', 'ng-click' => "sorting.predicate = 'order.full_name'; sorting.reverse = !sorting.reverse" }
= t("admin.name")
%th.email{ 'ng-show' => 'columns.email.visible' }
%a{ :href => '', 'ng-click' => "predicate = 'order.email'; reverse = !reverse" }
%a{ :href => '', 'ng-click' => "sorting.predicate = 'order.email'; sorting.reverse = !sorting.reverse" }
= t("admin.email")
%th.phone{ 'ng-show' => 'columns.phone.visible' }
%a{ :href => '', 'ng-click' => "predicate = 'order.phone'; reverse = !reverse" }
%a{ :href => '', 'ng-click' => "sorting.predicate = 'order.phone'; sorting.reverse = !sorting.reverse" }
= t("admin.phone")
%th.date{ 'ng-show' => 'columns.order_date.visible' }
%a{ :href => '', 'ng-click' => "predicate = 'order.completed_at'; reverse = !reverse" }
%a{ :href => '', 'ng-click' => "sorting.predicate = 'order.completed_at'; sorting.reverse = !sorting.reverse" }
= t("admin.orders.bulk_management.order_date")
%th.producer{ 'ng-show' => 'columns.producer.visible' }
%a{ :href => '', 'ng-click' => "predicate = 'supplier.name'; reverse = !reverse" }
%a{ :href => '', 'ng-click' => "sorting.predicate = 'supplier.name'; sorting.reverse = !sorting.reverse" }
= t("admin.producer")
%th.order_cycle{ 'ng-show' => 'columns.order_cycle.visible' }
%a{ :href => '', 'ng-click' => "predicate = 'order.order_cycle.name'; reverse = !reverse" }
%a{ :href => '', 'ng-click' => "sorting.predicate = 'order.order_cycle.name'; sorting.reverse = !sorting.reverse" }
= t("admin.order_cycle")
%th.hub{ 'ng-show' => 'columns.hub.visible' }
%a{ :href => '', 'ng-click' => "predicate = 'order.distributor.name'; reverse = !reverse" }
%a{ :href => '', 'ng-click' => "sorting.predicate = 'order.distributor.name'; sorting.reverse = !sorting.reverse" }
= t("admin.shop")
%th.variant{ 'ng-show' => 'columns.variant.visible' }
%a{ :href => '', 'ng-click' => "predicate = 'units_variant.full_name'; reverse = !reverse" }
%a{ :href => '', 'ng-click' => "sorting.predicate = 'units_variant.full_name'; sorting.reverse = !sorting.reverse" }
= t("admin.orders.bulk_management.product_unit")
%th.quantity{ 'ng-show' => 'columns.quantity.visible' }
= t("admin.quantity")
@@ -157,7 +157,7 @@
= t("admin.orders.bulk_management.ask")
%input{ :type => 'checkbox', 'ng-model' => "confirmDelete" }
%tr.line_item{ 'ng-repeat' => "line_item in filteredLineItems = ( lineItems | filter:quickSearch | selectFilter:supplierFilter:distributorFilter:orderCycleFilter | variantFilter:selectedUnitsProduct:selectedUnitsVariant:sharedResource | orderBy:predicate:reverse )", 'ng-class-even' => "'even'", 'ng-class-odd' => "'odd'", :id => "li_{{line_item.id}}" }
%tr.line_item{ 'ng-repeat' => "line_item in filteredLineItems = ( lineItems | filter:quickSearch | selectFilter:supplierFilter:distributorFilter:orderCycleFilter | variantFilter:selectedUnitsProduct:selectedUnitsVariant:sharedResource | orderBy:sorting.predicate:sorting.reverse )", 'ng-class-even' => "'even'", 'ng-class-odd' => "'odd'", :id => "li_{{line_item.id}}" }
%td.bulk
%input{ :type => "checkbox", :name => 'bulk', 'ng-model' => 'line_item.checked', 'ignore-dirty' => true }
%td.order_no{ 'ng-show' => 'columns.order_no.visible' } {{ line_item.order.number }}

View File

@@ -82,6 +82,40 @@ feature %q{
expect(page).to have_selector "td.max", text: li2.max_quantity.to_s, :visible => true
end
end
describe "sorting of line items" do
let!(:o1) { create(:order_with_distributor, state: 'complete', completed_at: Time.zone.now) }
let!(:o2) { create(:order_with_distributor, state: 'complete', completed_at: Time.zone.now) }
let!(:li1) { create(:line_item, order: o1) }
let!(:li2) { create(:line_item, order: o2) }
before do
visit spree.admin_bulk_order_management_path
end
it "sorts by customer name when the customer name header is clicked" do
customer_names = [o1.name, o2.name].sort
within "#listing_orders thead" do
click_on "Name"
end
expect(page).to have_selector("#listing_orders .line_item:nth-child(1) .full_name", text: customer_names[0])
expect(page).to have_selector("#listing_orders .line_item:nth-child(2) .full_name", text: customer_names[1])
end
it "sorts by customer name in reverse when the customer name header is clicked twice" do
customer_names = [o1.name, o2.name].sort.reverse
within "#listing_orders thead" do
click_on "Name"
click_on "Name"
end
expect(page).to have_selector("#listing_orders .line_item:nth-child(1) .full_name", text: customer_names[1])
expect(page).to have_selector("#listing_orders .line_item:nth-child(2) .full_name", text: customer_names[0])
end
end
end
context "altering line item properties" do