1
0

Renamed: formula_q -> filter_q

Added Meal related associations to Project
This commit is contained in:
cryptogopher 2020-04-25 22:49:48 +02:00
parent c029ba59c2
commit c24bdd6f45
11 changed files with 23 additions and 19 deletions

View File

@ -209,14 +209,14 @@ class FoodsController < ApplicationController
end
def prepare_foods
@foods, @formula_q = @project.foods
@foods, @filter_q = @project.foods
.includes(:ref_unit, :source)
.filter(session[:f_filters])
end
def prepare_nutrients
@quantities = @project.nutrient_quantities.includes(:formula)
@foods, @requested_n, @extra_n, @formula_q = @project.foods
@foods, @requested_n, @extra_n, @filter_q = @project.foods
.filter(session[:f_filters], @quantities)
end
end

View File

@ -81,6 +81,7 @@ class MealsController < ApplicationController
end
def prepare_meals
@meals = @project.meals.includes(:foods)
@quantities = @project.meal_quantities.includes(:formula)
@foods, @requested_n, * = @project.meal_foods.compute_quantities(@quantities)
end
end

View File

@ -130,14 +130,14 @@ class MeasurementsController < ApplicationController
end
def prepare_measurements
@measurements, @formula_q = @project.measurements
@measurements, @filter_q = @project.measurements
.includes(:routine, :source, :readouts)
.filter(session[:m_filters])
end
def prepare_readouts
@quantities = @routine.quantities.includes(:formula)
@measurements, @requested_r, @extra_r, @formula_q = @routine.measurements
@measurements, @requested_r, @extra_r, @filter_q = @routine.measurements
.includes(:routine, :source)
.filter(session[:m_filters], @quantities)
end

View File

@ -1,7 +1,7 @@
<fieldset id="filters" class="collapsible">
<legend onclick="toggleFieldset(this);"><%= l(:label_filter_plural) %></legend>
<div>
<%= error_messages_for @formula_q %>
<%= error_messages_for @filter_q %>
<%= form_tag url, id: 'filters-form', name: 'filters-form',
method: :get, remote: true do %>
@ -37,7 +37,7 @@
<%= label_tag do %>
<%= hidden_field_tag 'formula[zero_nil]', 0 %>
<%= check_box_tag 'formula[zero_nil]', 1,
@formula_q ? @formula_q.formula.zero_nil : Formula.new.zero_nil %>
@filter_q ? @filter_q.formula.zero_nil : Formula.new.zero_nil %>
<%= t 'quantities.form.zero_nil' %>
<% end %>
</td>

View File

@ -2,7 +2,7 @@
locals: {url: filter_project_foods_path(@project, view: :index)} %>
<% if @foods.any? { |f| f.persisted? } %>
<%= error_messages_for @formula_q.formula if @formula_q %>
<%= error_messages_for @filter_q.formula if @filter_q %>
<table class="list">
<thead>

View File

@ -5,7 +5,7 @@
<%= render partial: 'foods/options' %>
<% formulas = @quantities.map { |q| q.formula } %>
<% formulas.unshift(@formula_q.formula) if @formula_q %>
<% formulas.unshift(@filter_q.formula) if @filter_q %>
<%= error_messages_for *formulas %>
<table class="nutrients list odd-even">

View File

@ -1,7 +1,7 @@
<fieldset id="filters" class="collapsible">
<legend onclick="toggleFieldset(this);"><%= l(:label_filter_plural) %></legend>
<div>
<%= error_messages_for @formula_q %>
<%= error_messages_for @filter_q %>
<%= form_tag url, id: 'filters-form', name: 'filters-form',
method: :get, remote: true do %>
@ -32,7 +32,7 @@
<%= label_tag do %>
<%= hidden_field_tag 'formula[zero_nil]', 0 %>
<%= check_box_tag 'formula[zero_nil]', 1,
@formula_q ? @formula_q.formula.zero_nil : Formula.new.zero_nil %>
@filter_q ? @filter_q.formula.zero_nil : Formula.new.zero_nil %>
<%= t 'quantities.form.zero_nil' %>
<% end %>
</td>

View File

@ -2,7 +2,7 @@
locals: {url: filter_project_measurements_path(@project, view: :index)} %>
<% if @measurements.any? { |m| m.persisted? } %>
<%= error_messages_for @formula_q.formula if @formula_q %>
<%= error_messages_for @filter_q.formula if @filter_q %>
<table class="list">
<thead>

View File

@ -5,7 +5,7 @@
<%= render partial: 'measurements/options' %>
<% formulas = @quantities.map { |q| q.formula } %>
<% formulas.unshift(@formula_q.formula) if @formula_q %>
<% formulas.unshift(@filter_q.formula) if @filter_q %>
<%= error_messages_for *formulas %>
<table class="readouts list odd-even">

View File

@ -26,28 +26,28 @@ module BodyTracking
items = items.where(hidden: filters[:visibility] == "1" ? false : true)
end
formula_q =
filter_q =
if filters[:formula].present?
owner = proxy_association.owner
project = owner.is_a?(Project) ? owner : owner.project
domain = RELATIONS[proxy_association.klass.name][:domain]
formula_q_attrs = {
filter_q_attrs = {
name: 'Filter formula',
formula_attributes: filters[:formula],
domain: domain
}
project.quantities.new(formula_q_attrs)
project.quantities.new(filter_q_attrs)
end
apply_formula = formula_q.present? && formula_q.valid?
apply_formula = filter_q.present? && filter_q.valid?
result =
if requested_q || apply_formula
computed = items.compute_quantities(requested_q, apply_formula && formula_q)
computed = items.compute_quantities(requested_q, apply_formula && filter_q)
requested_q ? computed : [computed[0]]
else
[items]
end
result.push(formula_q)
result.push(filter_q)
end
def compute_quantities(requested_q, filter_q = nil)

View File

@ -17,6 +17,9 @@ module BodyTracking::ProjectPatch
extend: BodyTracking::ItemsWithQuantities, through: :measurement_routines
has_many :meals, -> { order "eaten_at DESC" }, dependent: :destroy
has_many :meal_ingredients, through: :meals, source: 'ingredients'
has_many :meal_foods, through: :meal_ingredients, source: 'food',
extend: BodyTracking::ItemsWithQuantities
has_many :meal_exposures, -> { where view_type: "Meal" }, dependent: :destroy,
foreign_key: :view_id, foreign_type: :view_type,
class_name: 'Exposure', extend: BodyTracking::TogglableExposures