Implementing standing order feature toggle on back-end interface

This commit is contained in:
Rob Harrington
2016-12-15 16:02:48 +11:00
parent e1f8af6d5b
commit 25639a822a
9 changed files with 51 additions and 29 deletions

View File

@@ -101,4 +101,8 @@ module EnterprisesHelper
def show_bought_items?
order_changes_allowed? && current_order.finalised_line_items.present?
end
def standing_orders_enabled?
spree_current_user.admin? || spree_current_user.enterprises.where(enable_standing_orders: true).any?
end
end

View File

@@ -21,6 +21,7 @@ class ColumnPreference < ActiveRecord::Base
def self.for(user, action_name)
stored_preferences = where(user_id: user.id, action_name: action_name)
default_preferences = send("#{action_name}_columns")
filter(default_preferences, user, action_name)
default_preferences.each_with_object([]) do |(column_name, default_attributes), preferences|
stored_preference = stored_preferences.find_by_column_name(column_name)
if stored_preference
@@ -43,4 +44,11 @@ class ColumnPreference < ActiveRecord::Base
OpenFoodNetwork::ColumnPreferenceDefaults.private_instance_methods
.select{|m| m.to_s.end_with?("_columns")}.map{ |m| m.to_s.sub /_columns$/, ''}
end
# Arbitrary filtering of default_preferences
def self.filter(default_preferences, user, action_name)
if action_name == 'order_cycles_index'
default_preferences.delete(:schedules) unless user.admin? || user.enterprises.where(enable_standing_orders: true).any?
end
end
end

View File

@@ -7,11 +7,14 @@
%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' } }
.filter_select.four.columns
%label{ :for => 'schedule_filter' }=t('admin.order_cycles.index.schedule')
%br
%input.ofn-select2.fullwidth{ :id => 'schedule_filter', type: 'number', blank: "{id: 0, name: 'Any Schedule'}", data: 'schedules', ng: { model: 'scheduleFilter' } }
.two.columns &nbsp;
- if standing_orders_enabled?
.filter_select.four.columns
%label{ :for => 'schedule_filter' }=t('admin.order_cycles.index.schedule')
%br
%input.ofn-select2.fullwidth{ :id => 'schedule_filter', type: 'number', blank: "{id: 0, name: 'Any Schedule'}", data: 'schedules', ng: { model: 'scheduleFilter' } }
.two.columns &nbsp;
- else
.six.columns &nbsp;
.filter_clear.two.columns.omega
%label{ :for => 'clear_all_filters' }
%br

View File

@@ -27,17 +27,19 @@
- else
{{ order_cycle.orders_close_at }}
.row
.two.columns.alpha
= f.label :schedule_ids, t('admin.order_cycles.schedules')
.twelve.columns
- if viewing_as_coordinator_of?(@order_cycle)
%input.fullwidth.ofn-select2#schedule_ids{ name: 'order_cycle[schedule_ids]',
data: 'schedules',
multiple: 'true',
filter: '{viewing_as_coordinator: true}',
ng: { model: 'order_cycle.schedule_ids' } }
- else
%schedule-list{ 'order-cycle' => 'order_cycle' }
.two.columns.omega
&nbsp;
- if standing_orders_enabled?
.row
.two.columns.alpha
= f.label :schedule_ids, t('admin.order_cycles.schedules')
.twelve.columns
- if viewing_as_coordinator_of?(@order_cycle)
%input.fullwidth.ofn-select2#schedule_ids{ name: 'order_cycle[schedule_ids]',
data: 'schedules',
multiple: 'true',
filter: '{viewing_as_coordinator: true}',
ng: { model: 'order_cycle.schedule_ids' } }
- else
%schedule-list{ 'order-cycle' => 'order_cycle' }
.two.columns.omega
&nbsp;

View File

@@ -5,9 +5,10 @@
= "ng-app='admin.orderCycles'"
= content_for :page_actions do
%li
%a.button.icon-plus#new-schedule{ "schedule-dialog" => true }
= t('admin.order_cycles.index.new_schedule')
- if standing_orders_enabled?
%li
%a.button.icon-plus#new-schedule{ "schedule-dialog" => true }
= t('admin.order_cycles.index.new_schedule')
%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'

View File

@@ -2,6 +2,8 @@
<ul id="sub_nav" data-hook="admin_order_sub_tabs" class="inline-menu">
<%= tab :orders, :match_path => '/orders' %>
<%= tab :bulk_order_management, :match_path => '/orders/bulk_management' %>
<%= tab :standing_orders, :match_path => '/standing_orders', url: main_app.admin_standing_orders_path %>
<% if standing_orders_enabled? %>
<%= tab :standing_orders, :match_path => '/standing_orders', url: main_app.admin_standing_orders_path %>
<% end %>
</ul>
<% end %>

View File

@@ -702,6 +702,7 @@ feature %q{
end
scenario "creating a new order cycle" do
distributor_managed.update_attribute(:enable_standing_orders, true)
# Make the page long enough to avoid the save bar overlaying the form
page.driver.resize(1280, 2000)
@@ -795,6 +796,7 @@ feature %q{
scenario "editing an order cycle" do
oc = create(:simple_order_cycle, { suppliers: [supplier_managed, supplier_permitted, supplier_unmanaged], coordinator: distributor_managed, distributors: [distributor_managed, distributor_permitted, distributor_unmanaged], name: 'Order Cycle 1' } )
distributor_managed.update_attribute(:enable_standing_orders, true)
visit edit_admin_order_cycle_path(oc)

View File

@@ -6,9 +6,9 @@ feature 'Schedules', js: true do
context "as an enterprise user" do
let(:user) { create(:user, enterprise_limit: 10) }
let(:managed_enterprise) { create(:distributor_enterprise, owner: user) }
let(:unmanaged_enterprise) { create(:distributor_enterprise) }
let(:managed_enterprise2) { create(:distributor_enterprise, owner: user) }
let(:managed_enterprise) { create(:distributor_enterprise, owner: user, enable_standing_orders: true) }
let(:unmanaged_enterprise) { create(:distributor_enterprise, enable_standing_orders: true) }
let(:managed_enterprise2) { create(:distributor_enterprise, owner: user, enable_standing_orders: true) }
let!(:oc1) { create(:simple_order_cycle, coordinator: managed_enterprise, name: 'oc1') }
let!(:oc2) { create(:simple_order_cycle, coordinator: managed_enterprise, name: 'oc2') }
let!(:oc3) { create(:simple_order_cycle, coordinator: managed_enterprise, name: 'oc3') }

View File

@@ -6,9 +6,9 @@ feature 'Standing Orders' do
context "as an enterprise user", js: true do
let!(:user) { create_enterprise_user(enterprise_limit: 10) }
let!(:shop) { create(:distributor_enterprise, owner: user) }
let!(:shop2) { create(:distributor_enterprise, owner: user) }
let!(:shop_unmanaged) { create(:distributor_enterprise) }
let!(:shop) { create(:distributor_enterprise, owner: user, enable_standing_orders: true) }
let!(:shop2) { create(:distributor_enterprise, owner: user, enable_standing_orders: true) }
let!(:shop_unmanaged) { create(:distributor_enterprise, enable_standing_orders: true) }
before { quick_login_as user }