diff --git a/app/controllers/ingredients_controller.rb b/app/controllers/ingredients_controller.rb index f9293b0..69340c0 100644 --- a/app/controllers/ingredients_controller.rb +++ b/app/controllers/ingredients_controller.rb @@ -69,7 +69,7 @@ class IngredientsController < BodyTrackingPluginController end def filter - session[:i_filters] = params[:filters] + session[:i_filters] = params.permit(:name, :visibility, formula: [:code, :zero_nil]) prepare_items render :index end @@ -178,7 +178,7 @@ class IngredientsController < BodyTrackingPluginController private def init_session_filters - session[:i_filters] ||= {} + session[:i_filters] ||= {formula: {}} end def ingredient_params diff --git a/app/controllers/measurements_controller.rb b/app/controllers/measurements_controller.rb index c8056a9..7562357 100644 --- a/app/controllers/measurements_controller.rb +++ b/app/controllers/measurements_controller.rb @@ -69,8 +69,7 @@ class MeasurementsController < BodyTrackingPluginController end def filter - session[:m_filters][:name] = params[:filters][:name] - session[:m_filters][:formula] = params[:filters][:formula] + session[:m_filters] = params.permit(:name, formula: [:code, :zero_nil]) readouts_view? ? prepare_readouts : prepare_measurements render :index end diff --git a/app/views/ingredients/_filters.html.erb b/app/views/ingredients/_filters.html.erb index 7f7be6a..a92637e 100644 --- a/app/views/ingredients/_filters.html.erb +++ b/app/views/ingredients/_filters.html.erb @@ -9,20 +9,16 @@ + + + + + + +
- <%= text_field_tag 'filters[name]', session[:i_filters][:name], placeholder: 'name', - onblur: '$("#filters-form").submit(); return false;' %> + <%= text_field_tag 'name', session[:i_filters][:name], placeholder: 'name' %> - <%= select_tag 'filters[visibility]', - visibility_options(session[:i_filters][:visibility]), - prompt: t('.visibility_prompt'), - onchange: '$("#filters-form").submit();' %> + <%= select_tag 'visibility', visibility_options(session[:i_filters][:visibility]), + prompt: t('.visibility_prompt'), onchange: '$("#filters-form").submit();' %> - <%= text_field_tag 'filters[formula]', session[:i_filters][:formula], + <%= text_field_tag 'formula[code]', session[:i_filters][:formula][:code], placeholder: 'conditional expression including nutrients', size: 40, - style: 'box-sizing:border-box; width:100%;', - onblur: '$("#filters-form").submit(); return false;' %> + style: 'box-sizing:border-box; width:100%;' %> <%= link_to l(:button_apply), '#', class: "icon icon-checked", @@ -34,7 +30,20 @@ $("#filters-form").submit(); return false;' %>
+ <%= label_tag do %> + <%= check_box_tag 'formula[zero_nil]', session[:i_filters][:formula][:zero_nil] %> + <%= t 'quantities.form.zero_nil' %> + <% end %> +
+ <%= submit_tag '', style: 'display:none;' %> <% end %> diff --git a/app/views/ingredients/_nutrients.html.erb b/app/views/ingredients/_nutrients.html.erb index a3f3582..befb575 100644 --- a/app/views/ingredients/_nutrients.html.erb +++ b/app/views/ingredients/_nutrients.html.erb @@ -4,7 +4,7 @@ <% if @ingredients.any? %> <%= render partial: 'ingredients/options' %> - <%= error_messages_for *@quantities.map { |q| q.formula } %> + <%= error_messages_for @formula_q.formula, *@quantities.map { |q| q.formula } %> diff --git a/app/views/measurements/_filters.html.erb b/app/views/measurements/_filters.html.erb index c33edc5..cbbe94a 100644 --- a/app/views/measurements/_filters.html.erb +++ b/app/views/measurements/_filters.html.erb @@ -9,14 +9,12 @@
@@ -41,6 +38,7 @@
- <%= text_field_tag 'filters[name]', session[:m_filters][:name], placeholder: 'name', - onblur: '$("#filters-form").submit(); return false;' %> + <%= text_field_tag 'name', session[:m_filters][:name], placeholder: 'name' %> - <%= text_field_tag 'filters[formula][code]', session[:m_filters][:formula][:code], + <%= text_field_tag 'formula[code]', session[:m_filters][:formula][:code], placeholder: 'conditional expression including readouts', size: 40, - style: 'box-sizing:border-box; width:100%;', - onblur: '$("#filters-form").submit(); return false;' %> + style: 'box-sizing:border-box; width:100%;' %> <%= link_to l(:button_apply), '#', class: "icon icon-checked", @@ -32,8 +30,7 @@ <%= label_tag do %> - <%= check_box_tag 'filters[formula][zero_nil]', - session[:m_filters][:formula][:zero_nil] %> + <%= check_box_tag 'formula[zero_nil]', session[:m_filters][:formula][:zero_nil] %> <%= t 'quantities.form.zero_nil' %> <% end %>
+ <%= submit_tag '', style: 'display:none;' %> <% end %> diff --git a/lib/body_tracking/items_with_quantities.rb b/lib/body_tracking/items_with_quantities.rb index c948047..36c17af 100644 --- a/lib/body_tracking/items_with_quantities.rb +++ b/lib/body_tracking/items_with_quantities.rb @@ -23,8 +23,8 @@ module BodyTracking project = proxy_association.owner domain = QUANTITY_DOMAINS[proxy_association.klass] formula_q = if filters[:formula].present? - project.quantities.new(name: '__internal_q', - formula: filters[:formula], + project.quantities.new(name: 'Filter formula', + formula_attributes: filters[:formula], domain: domain) end apply_formula = formula_q.present? && formula_q.valid? @@ -89,7 +89,7 @@ module BodyTracking begin calculated = q.formula.calculate(inputs.to_h) rescue Exception => e - output_ids.each { |oid| subitems[q.name][oid] = BigDecimal::NAN } + output_ids.each { |oid| subitems[q.name][oid] = [BigDecimal::NAN, nil] } q.formula.errors.add(:code, :computation_failed, {quantity: q.name, description: e.message, count: output_ids.size}) else