Adding ability to filter OC index by OC name or 'involved' enterprise

This commit is contained in:
Rob Harrington
2016-06-26 17:35:27 +10:00
parent 2a5f598fb0
commit fe9f147ff0
7 changed files with 78 additions and 23 deletions

View File

@@ -2,15 +2,17 @@ angular.module("admin.orderCycles").controller "OrderCyclesCtrl", ($scope, $q, S
$scope.RequestMonitor = RequestMonitor
$scope.saveAll = -> OrderCycles.saveChanges($scope.order_cycles_form)
$scope.ordersCloseAtLimit = -31 # days
$scope.involvingFilter = 0
compileDataFor = (orderCycles) ->
for orderCycle in orderCycles
OrderCycles.linkToEnterprises(orderCycle)
orderCycle.producerNames = orderCycle.producers.map((producer) -> producer.name).join(", ")
orderCycle.shopNames = orderCycle.shops.map((shop) -> shop.name).join(", ")
orderCycle.involvedEnterpriseIDs = [orderCycle.coordinator.id]
orderCycle.producerNames = orderCycle.producers.map((producer) -> orderCycle.involvedEnterpriseIDs.push(producer.id); producer.name).join(", ")
orderCycle.shopNames = orderCycle.shops.map((shop) -> orderCycle.involvedEnterpriseIDs.push(shop.id); shop.name).join(", ")
# NOTE: this is using the Enterprises service from the admin.enterprises module
RequestMonitor.load ($scope.enterprises = Enterprises.index(includeBlank: true, action: "visible", ams_prefix: "basic")).$promise
RequestMonitor.load ($scope.enterprises = Enterprises.index(action: "visible", ams_prefix: "basic")).$promise
RequestMonitor.load ($scope.orderCycles = OrderCycles.index(ams_prefix: "index", "q[orders_close_at_gt]": "#{daysFromToday($scope.ordersCloseAtLimit)}")).$promise
RequestMonitor.load $q.all([$scope.enterprises.$promise, $scope.orderCycles.$promise]).then -> compileDataFor($scope.orderCycles)

View File

@@ -0,0 +1,6 @@
angular.module("admin.orderCycles").filter "involving", ($filter) ->
return (orderCycles, enterpriseID) ->
return orderCycles if enterpriseID == 0
$filter('filter')(orderCycles, (orderCycle) ->
enterpriseID in orderCycle.involvedEnterpriseIDs
)

View File

@@ -0,0 +1,14 @@
.filters.sixteen.columns.alpha.omega
.filter.four.columns.alpha
%label{ :for => 'query' }=t('admin.quick_search')
%br
%input.fullwidth{ :type => "text", :id => 'query', ng: { model: 'query' }, placeholder: "Search by Order Cycle name..." }
.filter_select.four.columns
%label{ :for => 'involving_filter' }=t('.involving')
%br
%input.ofn-select2.fullwidth{ :id => 'involving_filter', type: 'number', blank: "{id: 0, name: 'Any Enterprise'}", data: 'enterprises', ng: { model: 'involvingFilter' } }
.six.columns  
.filter_clear.two.columns.omega
%label{ :for => 'clear_all_filters' }
%br
%input.red.fullwidth{ :type => 'button', :id => 'clear_all_filters', :value => "#{t('admin.clear_all')}", ng: { click: "resetSelectFilters()" } }

View File

@@ -1,4 +1,4 @@
%tr{ class: "order-cycle-{{orderCycle.id}} {{orderCycle.status}}", ng: { repeat: 'orderCycle in orderCycles track by orderCycle.id' } }
%tr{ class: "order-cycle-{{orderCycle.id}} {{orderCycle.status}}", ng: { repeat: 'orderCycle in orderCycles | involving:involvingFilter | filter:{name: query} track by orderCycle.id' } }
%td
%a{ ng: { href: '{{orderCycle.edit_path}}' } }
{{ orderCycle.name }}

View File

@@ -1,17 +1,22 @@
= content_for :page_title do
= t :admin_order_cycles
- content_for :app_wrapper_attrs do
= "ng-app='admin.orderCycles'"
= content_for :page_actions do
%li#new_order_cycle_link
= button_link_to t(:new_order_cycle), main_app.new_admin_order_cycle_path, icon: 'icon-plus', id: 'admin_new_order_cycle_link'
%div{ ng: { controller: 'OrderCyclesCtrl' } }
= render 'admin/order_cycles/filters'
%form{ name: 'order_cycles_form', ng: { app: "admin.orderCycles", controller: 'OrderCyclesCtrl' } }
%save-bar{ dirty: "order_cycles_form.$dirty", persist: "false" }
%input.red{ type: "button", value: t(:save_changes), ng: { click: "saveAll()", disabled: "!order_cycles_form.$dirty" } }
%table.index#listing_order_cycles{ ng: { show: 'orderCycles.length > 0' } }
= render 'admin/order_cycles/header' #, simple_index: simple_index
%tbody
= render 'admin/order_cycles/row' #, simple_index: simple_index
= render 'admin/order_cycles/loading_flash'
= render 'admin/order_cycles/show_more'
%form{ name: 'order_cycles_form' }
%save-bar{ dirty: "order_cycles_form.$dirty", persist: "false" }
%input.red{ type: "button", value: t(:save_changes), ng: { click: "saveAll()", disabled: "!order_cycles_form.$dirty" } }
%table.index#listing_order_cycles{ ng: { show: 'orderCycles.length > 0' } }
= render 'admin/order_cycles/header' #, simple_index: simple_index
%tbody
= render 'admin/order_cycles/row' #, simple_index: simple_index
= render 'admin/order_cycles/loading_flash'
= render 'admin/order_cycles/show_more'

View File

@@ -674,6 +674,8 @@ en:
add_a_tag: Add a tag
delivery_details: Pickup / Delivery details
debug_info: Debug information
index:
involving: Involving
name_and_timing_form:
name: Name
orders_open: Orders open at

View File

@@ -7,21 +7,21 @@ feature %q{
include AuthenticationWorkflow
include WebHelper
scenario "listing order cycles" do
scenario "listing and filtering order cycles" do
# Given some order cycles (created in an arbitrary order)
oc4 = create(:simple_order_cycle, name: '4',
oc4 = create(:simple_order_cycle, name: 'oc4',
orders_open_at: 2.day.from_now, orders_close_at: 1.month.from_now)
oc2 = create(:simple_order_cycle, name: '2', orders_close_at: 1.month.from_now)
oc6 = create(:simple_order_cycle, name: '6',
oc2 = create(:simple_order_cycle, name: 'oc2', orders_close_at: 1.month.from_now)
oc6 = create(:simple_order_cycle, name: 'oc6',
orders_open_at: 1.month.ago, orders_close_at: 3.weeks.ago)
oc3 = create(:simple_order_cycle, name: '3',
oc3 = create(:simple_order_cycle, name: 'oc3',
orders_open_at: 1.day.from_now, orders_close_at: 1.month.from_now)
oc5 = create(:simple_order_cycle, name: '5',
oc5 = create(:simple_order_cycle, name: 'oc5',
orders_open_at: 1.month.ago, orders_close_at: 2.weeks.ago)
oc1 = create(:order_cycle, name: '1')
oc0 = create(:simple_order_cycle, name: '0',
oc1 = create(:order_cycle, name: 'oc1')
oc0 = create(:simple_order_cycle, name: 'oc0',
orders_open_at: nil, orders_close_at: nil)
oc7 = create(:simple_order_cycle, name: '0',
oc7 = create(:simple_order_cycle, name: 'oc7',
orders_open_at: 2.months.ago, orders_close_at: 5.weeks.ago)
# When I go to the admin order cycles page
@@ -31,7 +31,7 @@ feature %q{
# Then the order cycles should be ordered correctly
expect(page).to have_selector "#listing_order_cycles tr td:first-child", count: 7
page.all('#listing_order_cycles tr td:first-child').map(&:text).should ==
['0', '1', '2', '3', '4', '5', '6']
['oc0', 'oc1', 'oc2', 'oc3', 'oc4', 'oc5', 'oc6']
# And the rows should have the correct classes
page.should have_selector "#listing_order_cycles tr.order-cycle-#{oc0.id}.undated"
@@ -63,6 +63,32 @@ feature %q{
page.should have_no_selector "#listing_order_cycles tr.order-cycle-#{oc7.id}"
click_button "Show 30 more days"
page.should have_selector "#listing_order_cycles tr.order-cycle-#{oc7.id}"
# I can filter order cycles by name
page.should have_selector "#listing_order_cycles tr.order-cycle-#{oc0.id}"
page.should have_selector "#listing_order_cycles tr.order-cycle-#{oc1.id}"
page.should have_selector "#listing_order_cycles tr.order-cycle-#{oc2.id}"
select2_select oc1.suppliers.first.name, from: "involving_filter"
page.should have_no_selector "#listing_order_cycles tr.order-cycle-#{oc0.id}"
page.should have_selector "#listing_order_cycles tr.order-cycle-#{oc1.id}"
page.should have_no_selector "#listing_order_cycles tr.order-cycle-#{oc2.id}"
select2_select "Any Enterprise", from: "involving_filter"
page.should have_selector "#listing_order_cycles tr.order-cycle-#{oc0.id}"
page.should have_selector "#listing_order_cycles tr.order-cycle-#{oc1.id}"
page.should have_selector "#listing_order_cycles tr.order-cycle-#{oc2.id}"
# I can filter order cycle by involved enterprises
page.should have_selector "#listing_order_cycles tr.order-cycle-#{oc0.id}"
page.should have_selector "#listing_order_cycles tr.order-cycle-#{oc1.id}"
page.should have_selector "#listing_order_cycles tr.order-cycle-#{oc2.id}"
fill_in "query", with: oc0.name
page.should have_selector "#listing_order_cycles tr.order-cycle-#{oc0.id}"
page.should have_no_selector "#listing_order_cycles tr.order-cycle-#{oc1.id}"
page.should have_no_selector "#listing_order_cycles tr.order-cycle-#{oc2.id}"
fill_in "query", with: ''
page.should have_selector "#listing_order_cycles tr.order-cycle-#{oc0.id}"
page.should have_selector "#listing_order_cycles tr.order-cycle-#{oc1.id}"
page.should have_selector "#listing_order_cycles tr.order-cycle-#{oc2.id}"
end
describe 'listing order cycles with other locales' do