From a4efd3d44cea8358fa02ccd3c4c6e2485e1c0083 Mon Sep 17 00:00:00 2001 From: Lynne Davis Date: Wed, 16 Mar 2016 11:35:31 +0000 Subject: [PATCH] Adding configurable Shop Trial Length in business model --- .../admin/business_model_configuration_controller.rb | 3 ++- app/helpers/enterprises_helper.rb | 6 +++--- app/models/enterprise.rb | 3 +-- app/models/spree/app_configuration_decorator.rb | 1 + .../admin/business_model_configuration/edit.html.haml | 6 ++++++ .../business_model_configuration_validator.rb | 3 ++- .../business_model_configuration_controller_spec.rb | 9 +++++++-- 7 files changed, 22 insertions(+), 9 deletions(-) diff --git a/app/controllers/admin/business_model_configuration_controller.rb b/app/controllers/admin/business_model_configuration_controller.rb index 312a2e3208..38506e8368 100644 --- a/app/controllers/admin/business_model_configuration_controller.rb +++ b/app/controllers/admin/business_model_configuration_controller.rb @@ -18,8 +18,9 @@ class Admin::BusinessModelConfigurationController < Spree::Admin::BaseController def load_settings @settings = OpenFoodNetwork::BusinessModelConfigurationValidator.new(params[:settings] || { + shop_trial_length_days: Spree::Config[:shop_trial_length_days], account_invoices_monthly_fixed: Spree::Config[:account_invoices_monthly_fixed], - account_invoices_monthly_rate: Spree::Config[:account_invoices_monthly_rate], + account_invoiceaccount_invoices_monthly_rates_monthly_rate: Spree::Config[:account_invoices_monthly_rate], account_invoices_monthly_cap: Spree::Config[:account_invoices_monthly_cap], account_invoices_tax_rate: Spree::Config[:account_invoices_tax_rate] }) diff --git a/app/helpers/enterprises_helper.rb b/app/helpers/enterprises_helper.rb index 85d1167ab7..9f6810f34f 100644 --- a/app/helpers/enterprises_helper.rb +++ b/app/helpers/enterprises_helper.rb @@ -48,17 +48,17 @@ module EnterprisesHelper def shop_trial_in_progress?(enterprise) !!enterprise.shop_trial_start_date && - (enterprise.shop_trial_start_date + Enterprise::SHOP_TRIAL_LENGTH.days > Time.zone.now) && + (enterprise.shop_trial_start_date + Spree::Config[:shop_trial_length_days].days > Time.zone.now) && %w(own any).include?(enterprise.sells) end def shop_trial_expired?(enterprise) !!enterprise.shop_trial_start_date && - (enterprise.shop_trial_start_date + Enterprise::SHOP_TRIAL_LENGTH.days <= Time.zone.now) && + (enterprise.shop_trial_start_date + Spree::Config[:shop_trial_length_days].days <= Time.zone.now) && %w(own any).include?(enterprise.sells) end def remaining_trial_days(enterprise) - distance_of_time_in_words(Time.zone.now, enterprise.shop_trial_start_date + Enterprise::SHOP_TRIAL_LENGTH.days) + distance_of_time_in_words(Time.zone.now, enterprise.shop_trial_start_date + Spree::Config[:shop_trial_length_days].days) end end diff --git a/app/models/enterprise.rb b/app/models/enterprise.rb index 34a5d22f5b..58f47c5ed1 100644 --- a/app/models/enterprise.rb +++ b/app/models/enterprise.rb @@ -1,6 +1,5 @@ class Enterprise < ActiveRecord::Base SELLS = %w(unspecified none own any) - SHOP_TRIAL_LENGTH = 30 ENTERPRISE_SEARCH_RADIUS = 100 preference :shopfront_message, :text, default: "" @@ -332,7 +331,7 @@ class Enterprise < ActiveRecord::Base end def shop_trial_expiry - shop_trial_start_date.andand + Enterprise::SHOP_TRIAL_LENGTH.days + shop_trial_start_date.andand + Spree::Config[:shop_trial_length_days].days end def can_invoice? diff --git a/app/models/spree/app_configuration_decorator.rb b/app/models/spree/app_configuration_decorator.rb index fc7a8171cc..235aa3e2f1 100644 --- a/app/models/spree/app_configuration_decorator.rb +++ b/app/models/spree/app_configuration_decorator.rb @@ -20,4 +20,5 @@ Spree::AppConfiguration.class_eval do preference :account_invoices_monthly_rate, :decimal, default: 0 preference :account_invoices_monthly_cap, :decimal, default: 0 preference :account_invoices_tax_rate, :decimal, default: 0 + preference :shop_trial_length_days, :integer, default: 30 end diff --git a/app/views/admin/business_model_configuration/edit.html.haml b/app/views/admin/business_model_configuration/edit.html.haml index 89345178f9..91c562c81b 100644 --- a/app/views/admin/business_model_configuration/edit.html.haml +++ b/app/views/admin/business_model_configuration/edit.html.haml @@ -17,6 +17,12 @@ Adjust the amount that enterprises will be billed each month for use of the OFN. %br = form_for @settings, as: :settings, url: main_app.admin_business_model_configuration_path, :method => :put do |f| + .row + .three.columns.alpha + = f.label :shop_trial_length_days, t(:shop_trial_length) + %span.icon-question-sign{'ofn-with-tip' => "The length of time (in days) that enterprises who are set up as shops can run as a trial period."} + .two.columns.omega + = f.number_field :shop_trial_length_days, min: 0.0, step: 1.0, class: "fullwidth", 'watch-value-as' => 'fixed' .row .three.columns.alpha = f.label :account_invoices_monthly_fixed, t(:fixed_monthly_charge) diff --git a/lib/open_food_network/business_model_configuration_validator.rb b/lib/open_food_network/business_model_configuration_validator.rb index d83d94ffc1..0d6b4d9f83 100644 --- a/lib/open_food_network/business_model_configuration_validator.rb +++ b/lib/open_food_network/business_model_configuration_validator.rb @@ -5,8 +5,9 @@ module OpenFoodNetwork class BusinessModelConfigurationValidator include ActiveModel::Validations - attr_accessor :account_invoices_monthly_fixed, :account_invoices_monthly_rate, :account_invoices_monthly_cap, :account_invoices_tax_rate + attr_accessor :shop_trial_length_days, :account_invoices_monthly_fixed, :account_invoices_monthly_rate, :account_invoices_monthly_cap, :account_invoices_tax_rate + validates :shop_trial_length_days, presence: true, numericality: { greater_than_or_equal_to: 0 } validates :account_invoices_monthly_fixed, presence: true, numericality: { greater_than_or_equal_to: 0 } validates :account_invoices_monthly_rate, presence: true, numericality: { greater_than_or_equal_to: 0, less_than_or_equal_to: 1 } validates :account_invoices_monthly_cap, presence: true, numericality: { greater_than_or_equal_to: 0 } diff --git a/spec/controllers/admin/business_model_configuration_controller_spec.rb b/spec/controllers/admin/business_model_configuration_controller_spec.rb index b0ae86d4ac..9c970c33f9 100644 --- a/spec/controllers/admin/business_model_configuration_controller_spec.rb +++ b/spec/controllers/admin/business_model_configuration_controller_spec.rb @@ -9,7 +9,8 @@ describe Admin::BusinessModelConfigurationController, type: :controller do account_invoices_monthly_fixed: 5, account_invoices_monthly_rate: 0.02, account_invoices_monthly_cap: 50, - account_invoices_tax_rate: 0.1 + account_invoices_tax_rate: 0.1, + shop_trial_length_days: 30 }) end @@ -53,16 +54,18 @@ describe Admin::BusinessModelConfigurationController, type: :controller do params[:settings][:account_invoices_monthly_rate] = '2' params[:settings][:account_invoices_monthly_cap] = '-1' params[:settings][:account_invoices_tax_rate] = '4' + params[:settings][:shop_trial_length_days] = '-30' spree_get :update, params end it "does not allow them to be set" do expect(response).to render_template :edit - expect(assigns(:settings).errors.count).to be 5 + expect(assigns(:settings).errors.count).to be 6 expect(Spree::Config.account_invoices_monthly_fixed).to eq 5 expect(Spree::Config.account_invoices_monthly_rate).to eq 0.02 expect(Spree::Config.account_invoices_monthly_cap).to eq 50 expect(Spree::Config.account_invoices_tax_rate).to eq 0.1 + expect(Spree::Config.shop_trial_length_days).to eq 30 end end @@ -72,6 +75,7 @@ describe Admin::BusinessModelConfigurationController, type: :controller do params[:settings][:account_invoices_monthly_rate] = '0.05' params[:settings][:account_invoices_monthly_cap] = '30' params[:settings][:account_invoices_tax_rate] = '0.15' + params[:settings][:shop_trial_length_days] = '20' end it "sets global config to the specified values" do @@ -81,6 +85,7 @@ describe Admin::BusinessModelConfigurationController, type: :controller do expect(Spree::Config.account_invoices_monthly_rate).to eq 0.05 expect(Spree::Config.account_invoices_monthly_cap).to eq 30 expect(Spree::Config.account_invoices_tax_rate).to eq 0.15 + expect(Spree::Config.shop_trial_length_days).to eq 20 end end end