mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-02-08 22:56:06 +00:00
Adding ability to filter OC index by OC name or 'involved' enterprise
This commit is contained in:
@@ -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)
|
||||
|
||||
|
||||
@@ -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
|
||||
)
|
||||
14
app/views/admin/order_cycles/_filters.html.haml
Normal file
14
app/views/admin/order_cycles/_filters.html.haml
Normal 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()" } }
|
||||
@@ -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 }}
|
||||
|
||||
@@ -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'
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user