Allow clearing default order schedule

This commit is contained in:
wvengen 2015-10-23 14:53:01 +02:00
parent 61a5314b95
commit c1413ff817
4 changed files with 14 additions and 7 deletions

View file

@ -41,9 +41,14 @@ class Admin::ConfigsController < Admin::BaseController
def parse_recurring_selects!(config) def parse_recurring_selects!(config)
if config if config
for k in [:pickup, :ends] do for k in [:pickup, :ends] do
if config[k] && config[k][:recurr] if config[k]
# allow clearing it using dummy value '{}' ('' would break recurring_select)
if config[k][:recurr].present? && config[k][:recurr] != '{}'
config[k][:recurr] = ActiveSupport::JSON.decode(config[k][:recurr]) config[k][:recurr] = ActiveSupport::JSON.decode(config[k][:recurr])
config[k][:recurr] = FoodsoftDateUtil.rule_from(config[k][:recurr]).to_ical if config[k][:recurr] config[k][:recurr] = FoodsoftDateUtil.rule_from(config[k][:recurr]).to_ical if config[k][:recurr]
else
config[k] = nil
end
end end
end end
end end

View file

@ -59,6 +59,7 @@ module Admin::ConfigsHelper
options[:value] = FoodsoftDateUtil.rule_from(options[:value]) options[:value] = FoodsoftDateUtil.rule_from(options[:value])
options[:rules] ||= [] options[:rules] ||= []
options[:rules].unshift options[:value] unless options[:value].blank? options[:rules].unshift options[:value] unless options[:value].blank?
options[:rules].push [I18n.t('recurring_select.not_recurring'), '{}'] if options.delete(:allow_blank) # blank after current value
form.select_recurring key, options.delete(:rules).uniq, options form.select_recurring key, options.delete(:rules).uniq, options
else else
form.input_field key, options form.input_field key, options

View file

@ -14,5 +14,5 @@
= form.simple_fields_for :order_schedule do |fields| = form.simple_fields_for :order_schedule do |fields|
= fields.simple_fields_for 'ends' do |fields| = fields.simple_fields_for 'ends' do |fields|
.fold-line .fold-line
= config_input fields, 'recurr', as: :select_recurring, input_html: {class: 'input-xlarge'} = config_input fields, 'recurr', as: :select_recurring, input_html: {class: 'input-xlarge'}, allow_blank: true
= config_input fields, 'time', input_html: {class: 'input-mini'} = config_input fields, 'time', input_html: {class: 'input-mini'}

View file

@ -1,13 +1,14 @@
module FoodsoftDateUtil module FoodsoftDateUtil
# find next occurence given a recurring ical string and time # find next occurence given a recurring ical string and time
def self.next_occurrence(start=Time.now, from=start, options={}) def self.next_occurrence(start=Time.now, from=start, options={})
if options[:recurr] occ = nil
if options && options[:recurr]
schedule = IceCube::Schedule.new(start) schedule = IceCube::Schedule.new(start)
schedule.add_recurrence_rule rule_from(options[:recurr]) schedule.add_recurrence_rule rule_from(options[:recurr])
# @todo handle ical parse errors # @todo handle ical parse errors
occ = (schedule.next_occurrence(from).to_time rescue nil) occ = (schedule.next_occurrence(from).to_time rescue nil)
end end
if occ && options[:time] if options && options[:time] && occ
occ = occ.beginning_of_day.advance(seconds: Time.parse(options[:time]).seconds_since_midnight) occ = occ.beginning_of_day.advance(seconds: Time.parse(options[:time]).seconds_since_midnight)
end end
occ occ