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 end
def filter def filter
session[:i_filters] = params[:filters] session[:i_filters] = params.permit(:name, :visibility, formula: [:code, :zero_nil])
prepare_items prepare_items
render :index render :index
end end
@ -178,7 +178,7 @@ class IngredientsController < BodyTrackingPluginController
private private
def init_session_filters def init_session_filters
session[:i_filters] ||= {} session[:i_filters] ||= {formula: {}}
end end
def ingredient_params def ingredient_params

View File

@ -69,8 +69,7 @@ class MeasurementsController < BodyTrackingPluginController
end end
def filter def filter
session[:m_filters][:name] = params[:filters][:name] session[:m_filters] = params.permit(:name, formula: [:code, :zero_nil])
session[:m_filters][:formula] = params[:filters][:formula]
readouts_view? ? prepare_readouts : prepare_measurements readouts_view? ? prepare_readouts : prepare_measurements
render :index render :index
end end

View File

@ -9,20 +9,16 @@
<table class="filter"> <table class="filter">
<tr> <tr>
<td> <td>
<%= text_field_tag 'filters[name]', session[:i_filters][:name], placeholder: 'name', <%= text_field_tag 'name', session[:i_filters][:name], placeholder: 'name' %>
onblur: '$("#filters-form").submit(); return false;' %>
</td> </td>
<td> <td>
<%= select_tag 'filters[visibility]', <%= select_tag 'visibility', visibility_options(session[:i_filters][:visibility]),
visibility_options(session[:i_filters][:visibility]), prompt: t('.visibility_prompt'), onchange: '$("#filters-form").submit();' %>
prompt: t('.visibility_prompt'),
onchange: '$("#filters-form").submit();' %>
</td> </td>
<td style="width:100%;"> <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, placeholder: 'conditional expression including nutrients', size: 40,
style: 'box-sizing:border-box; width:100%;', style: 'box-sizing:border-box; width:100%;' %>
onblur: '$("#filters-form").submit(); return false;' %>
</td> </td>
<td> <td>
<%= link_to l(:button_apply), '#', class: "icon icon-checked", <%= link_to l(:button_apply), '#', class: "icon icon-checked",
@ -34,7 +30,20 @@
$("#filters-form").submit(); return false;' %> $("#filters-form").submit(); return false;' %>
</td> </td>
</tr> </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> </table>
<%= submit_tag '', style: 'display:none;' %>
<% end %> <% end %>
</div> </div>
</fieldset> </fieldset>

View File

@ -4,7 +4,7 @@
<% if @ingredients.any? %> <% if @ingredients.any? %>
<%= render partial: 'ingredients/options' %> <%= 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"> <table class="nutrients list odd-even">
<thead> <thead>

View File

@ -9,14 +9,12 @@
<table class="filter"> <table class="filter">
<tr> <tr>
<td> <td>
<%= text_field_tag 'filters[name]', session[:m_filters][:name], placeholder: 'name', <%= text_field_tag 'name', session[:m_filters][:name], placeholder: 'name' %>
onblur: '$("#filters-form").submit(); return false;' %>
</td> </td>
<td style="width:100%;"> <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, placeholder: 'conditional expression including readouts', size: 40,
style: 'box-sizing:border-box; width:100%;', style: 'box-sizing:border-box; width:100%;' %>
onblur: '$("#filters-form").submit(); return false;' %>
</td> </td>
<td> <td>
<%= link_to l(:button_apply), '#', class: "icon icon-checked", <%= link_to l(:button_apply), '#', class: "icon icon-checked",
@ -32,8 +30,7 @@
<td></td> <td></td>
<td style="padding-top:4px;"> <td style="padding-top:4px;">
<%= label_tag do %> <%= label_tag do %>
<%= check_box_tag 'filters[formula][zero_nil]', <%= check_box_tag 'formula[zero_nil]', session[:m_filters][:formula][:zero_nil] %>
session[:m_filters][:formula][:zero_nil] %>
<%= t 'quantities.form.zero_nil' %> <%= t 'quantities.form.zero_nil' %>
<% end %> <% end %>
</td> </td>
@ -41,6 +38,7 @@
<td></td> <td></td>
</tr> </tr>
</table> </table>
<%= submit_tag '', style: 'display:none;' %>
<% end %> <% end %>
</div> </div>
</fieldset> </fieldset>

View File

@ -23,8 +23,8 @@ module BodyTracking
project = proxy_association.owner project = proxy_association.owner
domain = QUANTITY_DOMAINS[proxy_association.klass] domain = QUANTITY_DOMAINS[proxy_association.klass]
formula_q = if filters[:formula].present? formula_q = if filters[:formula].present?
project.quantities.new(name: '__internal_q', project.quantities.new(name: 'Filter formula',
formula: filters[:formula], formula_attributes: filters[:formula],
domain: domain) domain: domain)
end end
apply_formula = formula_q.present? && formula_q.valid? apply_formula = formula_q.present? && formula_q.valid?
@ -89,7 +89,7 @@ module BodyTracking
begin begin
calculated = q.formula.calculate(inputs.to_h) calculated = q.formula.calculate(inputs.to_h)
rescue Exception => e 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, q.formula.errors.add(:code, :computation_failed,
{quantity: q.name, description: e.message, count: output_ids.size}) {quantity: q.name, description: e.message, count: output_ids.size})
else else