Added measurement filtering
This commit is contained in:
parent
056d3b150d
commit
4d48e86728
@ -2,7 +2,7 @@ class MeasurementsController < ApplicationController
|
|||||||
menu_item :body_trackers
|
menu_item :body_trackers
|
||||||
|
|
||||||
before_action :init_session_filters
|
before_action :init_session_filters
|
||||||
before_action :find_project_by_project_id, only: [:index, :new, :create]
|
before_action :find_project_by_project_id, only: [:index, :new, :create, :filter]
|
||||||
before_action :find_quantity_by_quantity_id, only: [:toggle_column]
|
before_action :find_quantity_by_quantity_id, only: [:toggle_column]
|
||||||
before_action :find_measurement,
|
before_action :find_measurement,
|
||||||
only: [:edit, :update, :destroy, :retake, :readouts, :toggle_column]
|
only: [:edit, :update, :destroy, :retake, :readouts, :toggle_column]
|
||||||
@ -68,6 +68,13 @@ class MeasurementsController < ApplicationController
|
|||||||
render :index
|
render :index
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def filter
|
||||||
|
session[:m_filters][:name] = params[:filters][:name]
|
||||||
|
session[:m_filters][:formula] = params[:filters][:formula]
|
||||||
|
readouts_view? ? prepare_readouts : prepare_measurements
|
||||||
|
render :index
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def init_session_filters
|
def init_session_filters
|
||||||
@ -105,10 +112,14 @@ class MeasurementsController < ApplicationController
|
|||||||
end
|
end
|
||||||
|
|
||||||
def prepare_readouts
|
def prepare_readouts
|
||||||
@quantities = @measurement.column_view.quantities
|
@scoping_measurement = @project.measurements.where(session[:m_filters][:scope]).first!
|
||||||
|
@quantities = @scoping_measurement.column_view.quantities
|
||||||
@measurements, @requested_r, @extra_r, @formula_q = @project.measurements
|
@measurements, @requested_r, @extra_r, @formula_q = @project.measurements
|
||||||
.includes(:source)
|
.includes(:source)
|
||||||
.filter(session[:m_filters], @quantities)
|
.filter(session[:m_filters], @quantities)
|
||||||
|
rescue ActiveRecord::RecordNotFound
|
||||||
|
session[:m_filters][:scope] = {}
|
||||||
|
render_404
|
||||||
end
|
end
|
||||||
|
|
||||||
def readouts_view?
|
def readouts_view?
|
||||||
|
@ -16,7 +16,7 @@ module MeasurementsHelper
|
|||||||
|
|
||||||
def toggle_column_options
|
def toggle_column_options
|
||||||
disabled = []
|
disabled = []
|
||||||
enabled_columns = @measurement.column_view.quantities
|
enabled_columns = @scoping_measurement.column_view.quantities
|
||||||
options = nested_set_options(@project.quantities.measurement) do |q|
|
options = nested_set_options(@project.quantities.measurement) do |q|
|
||||||
disabled << q.id if enabled_columns.include?(q)
|
disabled << q.id if enabled_columns.include?(q)
|
||||||
raw("#{' ' * q.level}#{q.name}")
|
raw("#{' ' * q.level}#{q.name}")
|
||||||
|
34
app/views/measurements/_filters.html.erb
Normal file
34
app/views/measurements/_filters.html.erb
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
<fieldset id="filters" class="collapsible">
|
||||||
|
<legend onclick="toggleFieldset(this);"><%= l(:label_filter_plural) %></legend>
|
||||||
|
<div>
|
||||||
|
<%= error_messages_for @formula_q %>
|
||||||
|
|
||||||
|
<%= form_tag url, id: 'filters-form', name: 'filters-form',
|
||||||
|
method: :get, remote: true do %>
|
||||||
|
|
||||||
|
<table class="filter">
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<%= text_field_tag 'filters[name]', session[:m_filters][:name], placeholder: 'name',
|
||||||
|
onblur: '$("#filters-form").submit(); return false;' %>
|
||||||
|
</td>
|
||||||
|
<td style="width:100%;">
|
||||||
|
<%= text_field_tag 'filters[formula]', session[:m_filters][:formula],
|
||||||
|
placeholder: 'conditional expression including readouts', size: 40,
|
||||||
|
style: 'box-sizing:border-box; width:100%;',
|
||||||
|
onblur: '$("#filters-form").submit(); return false;' %>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<%= link_to l(:button_apply), '#', class: "icon icon-checked",
|
||||||
|
onclick: '$("#filters-form").submit(); return false;' %>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<%= link_to l(:button_clear), '#', class: "icon icon-reload",
|
||||||
|
onclick: '$("#filters-form input, #filters-form select").val("");
|
||||||
|
$("#filters-form").submit(); return false;' %>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<% end %>
|
||||||
|
</div>
|
||||||
|
</fieldset>
|
@ -1,3 +1,6 @@
|
|||||||
|
<%= render partial: 'measurements/filters',
|
||||||
|
locals: {url: filter_project_measurements_path(@project)} %>
|
||||||
|
|
||||||
<% if @measurements.any? { |m| m.persisted? } %>
|
<% if @measurements.any? { |m| m.persisted? } %>
|
||||||
<table class="list">
|
<table class="list">
|
||||||
<thead>
|
<thead>
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<fieldset id="options" class="collapsible">
|
<fieldset id="options" class="collapsible">
|
||||||
<legend onclick="toggleFieldset(this);"><%= l(:label_options) %></legend>
|
<legend onclick="toggleFieldset(this);"><%= l(:label_options) %></legend>
|
||||||
<div>
|
<div>
|
||||||
<%= form_tag toggle_column_measurement_path(@measurement),
|
<%= form_tag toggle_column_measurement_path(@scoping_measurement),
|
||||||
id: 'toggle-column-form', name: 'toggle-column-form',
|
id: 'toggle-column-form', name: 'toggle-column-form',
|
||||||
method: :post, remote: true do %>
|
method: :post, remote: true do %>
|
||||||
|
|
||||||
|
@ -1,3 +1,6 @@
|
|||||||
|
<%= render partial: 'measurements/filters',
|
||||||
|
locals: {url: filter_project_measurements_path(@project)} %>
|
||||||
|
|
||||||
<% if @measurements.any? %>
|
<% if @measurements.any? %>
|
||||||
<%= render partial: 'measurements/options' %>
|
<%= render partial: 'measurements/options' %>
|
||||||
|
|
||||||
@ -9,7 +12,8 @@
|
|||||||
<% @quantities.each do |q| %>
|
<% @quantities.each do |q| %>
|
||||||
<th style="width:<%= 100/total_width %>%" class="closable ellipsible">
|
<th style="width:<%= 100/total_width %>%" class="closable ellipsible">
|
||||||
<div style="float:right;position:relative;">
|
<div style="float:right;position:relative;">
|
||||||
<%= link_to '', toggle_column_measurement_path(@measurement, quantity_id: q.id),
|
<%= link_to '',
|
||||||
|
toggle_column_measurement_path(@scoping_measurement, quantity_id: q.id),
|
||||||
{class: "icon icon-close", method: :post, remote: true} %>
|
{class: "icon icon-close", method: :post, remote: true} %>
|
||||||
</div>
|
</div>
|
||||||
<%= q.name %>
|
<%= q.name %>
|
||||||
|
@ -11,6 +11,9 @@ resources :projects, shallow: true do
|
|||||||
get 'readouts'
|
get 'readouts'
|
||||||
post 'toggle_column'
|
post 'toggle_column'
|
||||||
end
|
end
|
||||||
|
collection do
|
||||||
|
get 'filter'
|
||||||
|
end
|
||||||
end
|
end
|
||||||
resources :ingredients, only: [:index, :create, :destroy] do
|
resources :ingredients, only: [:index, :create, :destroy] do
|
||||||
post 'toggle', on: :member
|
post 'toggle', on: :member
|
||||||
|
2
init.rb
2
init.rb
@ -16,7 +16,7 @@ Redmine::Plugin.register :body_tracking do
|
|||||||
project_module :body_tracking do
|
project_module :body_tracking do
|
||||||
permission :view_body_trackers, {
|
permission :view_body_trackers, {
|
||||||
body_trackers: [:index],
|
body_trackers: [:index],
|
||||||
measurements: [:index, :readouts],
|
measurements: [:index, :readouts, :filter],
|
||||||
ingredients: [:index, :nutrients, :filter, :filter_nutrients],
|
ingredients: [:index, :nutrients, :filter, :filter_nutrients],
|
||||||
sources: [:index],
|
sources: [:index],
|
||||||
quantities: [:index, :parents, :filter],
|
quantities: [:index, :parents, :filter],
|
||||||
|
Reference in New Issue
Block a user