1
0

Added zero_nil to Ingredients filter formula

Displaying formulas errors for Nutrients view
Substituted onblur for Ingredients filters with hidden submit
This commit is contained in:
cryptogopher 2020-03-22 01:02:37 +01:00
parent c3b783e942
commit 10325c9c39
6 changed files with 30 additions and 24 deletions

View File

@ -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

View File

@ -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

View File

@ -9,20 +9,16 @@
<table class="filter">
<tr>
<td>
<%= 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' %>
</td>
<td>
<%= 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();' %>
</td>
<td style="width:100%;">
<%= 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%;' %>
</td>
<td>
<%= link_to l(:button_apply), '#', class: "icon icon-checked",
@ -34,7 +30,20 @@
$("#filters-form").submit(); return false;' %>
</td>
</tr>
<tr>
<td></td>
<td></td>
<td style="padding-top:4px;">
<%= label_tag do %>
<%= check_box_tag 'formula[zero_nil]', session[:i_filters][:formula][:zero_nil] %>
<%= t 'quantities.form.zero_nil' %>
<% end %>
</td>
<td></td>
<td></td>
</tr>
</table>
<%= submit_tag '', style: 'display:none;' %>
<% end %>
</div>
</fieldset>

View File

@ -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 } %>
<table class="nutrients list odd-even">
<thead>

View File

@ -9,14 +9,12 @@
<table class="filter">
<tr>
<td>
<%= 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' %>
</td>
<td style="width:100%;">
<%= 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%;' %>
</td>
<td>
<%= link_to l(:button_apply), '#', class: "icon icon-checked",
@ -32,8 +30,7 @@
<td></td>
<td style="padding-top:4px;">
<%= 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 %>
</td>
@ -41,6 +38,7 @@
<td></td>
</tr>
</table>
<%= submit_tag '', style: 'display:none;' %>
<% end %>
</div>
</fieldset>

View File

@ -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