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 end
def prepare_foods def prepare_foods
@foods, @formula_q = @project.foods @foods, @filter_q = @project.foods
.includes(:ref_unit, :source) .includes(:ref_unit, :source)
.filter(session[:f_filters]) .filter(session[:f_filters])
end end
def prepare_nutrients def prepare_nutrients
@quantities = @project.nutrient_quantities.includes(:formula) @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) .filter(session[:f_filters], @quantities)
end end
end end

View File

@ -81,6 +81,7 @@ class MealsController < ApplicationController
end end
def prepare_meals 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
end end

View File

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

View File

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

View File

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

View File

@ -5,7 +5,7 @@
<%= render partial: 'foods/options' %> <%= render partial: 'foods/options' %>
<% formulas = @quantities.map { |q| q.formula } %> <% 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 %> <%= error_messages_for *formulas %>
<table class="nutrients list odd-even"> <table class="nutrients list odd-even">

View File

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

View File

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

View File

@ -5,7 +5,7 @@
<%= render partial: 'measurements/options' %> <%= render partial: 'measurements/options' %>
<% formulas = @quantities.map { |q| q.formula } %> <% 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 %> <%= error_messages_for *formulas %>
<table class="readouts list odd-even"> <table class="readouts list odd-even">

View File

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

View File

@ -17,6 +17,9 @@ module BodyTracking::ProjectPatch
extend: BodyTracking::ItemsWithQuantities, through: :measurement_routines extend: BodyTracking::ItemsWithQuantities, through: :measurement_routines
has_many :meals, -> { order "eaten_at DESC" }, dependent: :destroy 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, has_many :meal_exposures, -> { where view_type: "Meal" }, dependent: :destroy,
foreign_key: :view_id, foreign_type: :view_type, foreign_key: :view_id, foreign_type: :view_type,
class_name: 'Exposure', extend: BodyTracking::TogglableExposures class_name: 'Exposure', extend: BodyTracking::TogglableExposures