Added measurement filtering
This commit is contained in:
parent
056d3b150d
commit
4d48e86728
@ -2,7 +2,7 @@ class MeasurementsController < ApplicationController
|
||||
menu_item :body_trackers
|
||||
|
||||
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_measurement,
|
||||
only: [:edit, :update, :destroy, :retake, :readouts, :toggle_column]
|
||||
@ -68,6 +68,13 @@ class MeasurementsController < ApplicationController
|
||||
render :index
|
||||
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
|
||||
|
||||
def init_session_filters
|
||||
@ -105,10 +112,14 @@ class MeasurementsController < ApplicationController
|
||||
end
|
||||
|
||||
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
|
||||
.includes(:source)
|
||||
.filter(session[:m_filters], @quantities)
|
||||
rescue ActiveRecord::RecordNotFound
|
||||
session[:m_filters][:scope] = {}
|
||||
render_404
|
||||
end
|
||||
|
||||
def readouts_view?
|
||||
|
@ -16,7 +16,7 @@ module MeasurementsHelper
|
||||
|
||||
def toggle_column_options
|
||||
disabled = []
|
||||
enabled_columns = @measurement.column_view.quantities
|
||||
enabled_columns = @scoping_measurement.column_view.quantities
|
||||
options = nested_set_options(@project.quantities.measurement) do |q|
|
||||
disabled << q.id if enabled_columns.include?(q)
|
||||
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? } %>
|
||||
<table class="list">
|
||||
<thead>
|
||||
|
@ -1,7 +1,7 @@
|
||||
<fieldset id="options" class="collapsible">
|
||||
<legend onclick="toggleFieldset(this);"><%= l(:label_options) %></legend>
|
||||
<div>
|
||||
<%= form_tag toggle_column_measurement_path(@measurement),
|
||||
<%= form_tag toggle_column_measurement_path(@scoping_measurement),
|
||||
id: 'toggle-column-form', name: 'toggle-column-form',
|
||||
method: :post, remote: true do %>
|
||||
|
||||
|
@ -1,3 +1,6 @@
|
||||
<%= render partial: 'measurements/filters',
|
||||
locals: {url: filter_project_measurements_path(@project)} %>
|
||||
|
||||
<% if @measurements.any? %>
|
||||
<%= render partial: 'measurements/options' %>
|
||||
|
||||
@ -9,7 +12,8 @@
|
||||
<% @quantities.each do |q| %>
|
||||
<th style="width:<%= 100/total_width %>%" class="closable ellipsible">
|
||||
<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} %>
|
||||
</div>
|
||||
<%= q.name %>
|
||||
|
@ -11,6 +11,9 @@ resources :projects, shallow: true do
|
||||
get 'readouts'
|
||||
post 'toggle_column'
|
||||
end
|
||||
collection do
|
||||
get 'filter'
|
||||
end
|
||||
end
|
||||
resources :ingredients, only: [:index, :create, :destroy] do
|
||||
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
|
||||
permission :view_body_trackers, {
|
||||
body_trackers: [:index],
|
||||
measurements: [:index, :readouts],
|
||||
measurements: [:index, :readouts, :filter],
|
||||
ingredients: [:index, :nutrients, :filter, :filter_nutrients],
|
||||
sources: [:index],
|
||||
quantities: [:index, :parents, :filter],
|
||||
|
Reference in New Issue
Block a user