1
0

Added measurement filtering

This commit is contained in:
cryptogopher 2019-12-27 21:46:35 +01:00
parent 056d3b150d
commit 4d48e86728
8 changed files with 61 additions and 6 deletions

View File

@ -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?

View File

@ -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("#{'&ensp;' * q.level}#{q.name}") raw("#{'&ensp;' * q.level}#{q.name}")

View 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>

View File

@ -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>

View File

@ -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 %>

View File

@ -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 %>

View File

@ -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

View File

@ -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],