Create Readouts controller
Move #readouts + #toggle_exposure from Measurements to Readouts
This commit is contained in:
parent
40cce31bff
commit
7b2b855d56
@ -7,13 +7,9 @@ class MeasurementsController < ApplicationController
|
|||||||
|
|
||||||
before_action :init_session_filters
|
before_action :init_session_filters
|
||||||
before_action :find_project_by_project_id, only: [:index, :new, :create, :filter]
|
before_action :find_project_by_project_id, only: [:index, :new, :create, :filter]
|
||||||
before_action :find_quantity_by_quantity_id, only: [:toggle_exposure]
|
|
||||||
before_action :find_measurement, only: [:edit, :update, :destroy, :retake]
|
before_action :find_measurement, only: [:edit, :update, :destroy, :retake]
|
||||||
# @routine is set for :readouts view ONLY
|
|
||||||
before_action :find_measurement_routine, only: [:readouts, :toggle_exposure]
|
|
||||||
before_action :find_measurement_routine_by_measurement_routine_id,
|
before_action :find_measurement_routine_by_measurement_routine_id,
|
||||||
only: [:new, :create, :edit, :update, :retake, :filter],
|
only: [:new, :create, :edit, :update, :retake, :filter]
|
||||||
if: -> { params[:view] == 'readouts' }
|
|
||||||
before_action :authorize
|
before_action :authorize
|
||||||
before_action :set_view_params
|
before_action :set_view_params
|
||||||
|
|
||||||
@ -84,15 +80,6 @@ class MeasurementsController < ApplicationController
|
|||||||
render :new
|
render :new
|
||||||
end
|
end
|
||||||
|
|
||||||
def readouts
|
|
||||||
prepare_readouts
|
|
||||||
end
|
|
||||||
|
|
||||||
def toggle_exposure
|
|
||||||
@routine.readout_exposures.toggle!(@quantity)
|
|
||||||
prepare_readouts
|
|
||||||
end
|
|
||||||
|
|
||||||
def filter
|
def filter
|
||||||
session[:m_filters] = params.permit(:name, formula: [:code, :zero_nil])
|
session[:m_filters] = params.permit(:name, formula: [:code, :zero_nil])
|
||||||
prepare_items
|
prepare_items
|
||||||
@ -141,12 +128,6 @@ class MeasurementsController < ApplicationController
|
|||||||
.filter(session[:m_filters])
|
.filter(session[:m_filters])
|
||||||
end
|
end
|
||||||
|
|
||||||
def prepare_readouts
|
|
||||||
@quantities = @routine.quantities.includes(:formula)
|
|
||||||
@measurements, @filter_q = @routine.measurements.includes(:routine, :source)
|
|
||||||
.filter(session[:m_filters], @quantities)
|
|
||||||
end
|
|
||||||
|
|
||||||
def set_view_params
|
def set_view_params
|
||||||
@view_params =
|
@view_params =
|
||||||
if @routine
|
if @routine
|
||||||
|
31
app/controllers/readouts_controller.rb
Normal file
31
app/controllers/readouts_controller.rb
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
class ReadoutsController < ApplicationController
|
||||||
|
layout 'body_tracking'
|
||||||
|
menu_item :body_trackers
|
||||||
|
helper :body_trackers
|
||||||
|
helper :measurements
|
||||||
|
|
||||||
|
include Concerns::Finders
|
||||||
|
|
||||||
|
before_action :find_measurement_routine_by_measurement_routine_id,
|
||||||
|
only: [:index, :toggle_exposure]
|
||||||
|
before_action :find_quantity_by_quantity_id, only: [:toggle_exposure]
|
||||||
|
before_action :authorize
|
||||||
|
|
||||||
|
def index
|
||||||
|
prepare_readouts
|
||||||
|
end
|
||||||
|
|
||||||
|
def toggle_exposure
|
||||||
|
@routine.readout_exposures.toggle!(@quantity)
|
||||||
|
prepare_readouts
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def prepare_readouts
|
||||||
|
@quantities = @routine.quantities.includes(:formula)
|
||||||
|
|
||||||
|
@measurements, @filter_q = @routine.measurements.includes(:routine, :source)
|
||||||
|
.filter(session[:m_filters], @quantities)
|
||||||
|
end
|
||||||
|
end
|
@ -22,6 +22,10 @@ module BodyTrackersHelper
|
|||||||
t&.strftime("%R")
|
t&.strftime("%R")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def format_datetime(dt)
|
||||||
|
dt.strftime("%F <small>%R (~#{time_ago_in_words(dt)} ago)</small>").html_safe
|
||||||
|
end
|
||||||
|
|
||||||
def toggle_exposure_options(enabled, domain = :all)
|
def toggle_exposure_options(enabled, domain = :all)
|
||||||
enabled = enabled.map { |q| [q.name, q.id] }
|
enabled = enabled.map { |q| [q.name, q.id] }
|
||||||
enabled_ids = enabled.map(&:last)
|
enabled_ids = enabled.map(&:last)
|
||||||
|
@ -1,10 +1,4 @@
|
|||||||
module MeasurementsHelper
|
module MeasurementsHelper
|
||||||
def format_datetime(m)
|
|
||||||
m.taken_at
|
|
||||||
.strftime("%F <small>%R (~#{time_ago_in_words(m.taken_at)} ago)</small>")
|
|
||||||
.html_safe
|
|
||||||
end
|
|
||||||
|
|
||||||
def action_links(m)
|
def action_links(m)
|
||||||
link_to(l(:button_retake), retake_measurement_path(m, @view_params),
|
link_to(l(:button_retake), retake_measurement_path(m, @view_params),
|
||||||
{remote: true, class: "icon icon-reload"}) +
|
{remote: true, class: "icon icon-reload"}) +
|
||||||
|
@ -18,10 +18,10 @@
|
|||||||
<% @measurements.each do |m| %>
|
<% @measurements.each do |m| %>
|
||||||
<% next if m.new_record? %>
|
<% next if m.new_record? %>
|
||||||
<tr id="measurement-<%= m.id %>" class="primary measurement">
|
<tr id="measurement-<%= m.id %>" class="primary measurement">
|
||||||
<td class="topleft unwrappable"><%= format_datetime(m) %></td>
|
<td class="topleft unwrappable"><%= format_datetime(m.taken_at) %></td>
|
||||||
<td class="topleft">
|
<td class="topleft">
|
||||||
<div style="float:left;">
|
<div style="float:left;">
|
||||||
<%= link_to m.routine.name, readouts_measurement_routine_path(m.routine) %>
|
<%= link_to m.routine.name, measurement_routine_readouts_path(m.routine) %>
|
||||||
</div>
|
</div>
|
||||||
<div style="float:right;">
|
<div style="float:right;">
|
||||||
<small><%= " (#{pluralize(m.readouts.size, 'readout')})" %></small>
|
<small><%= " (#{pluralize(m.readouts.size, 'readout')})" %></small>
|
||||||
|
@ -1 +0,0 @@
|
|||||||
$('#readouts').html('<%= j render partial: 'measurements/readouts' %>');
|
|
@ -2,13 +2,13 @@
|
|||||||
locals: {url: filter_project_measurements_path(@project, @view_params)} %>
|
locals: {url: filter_project_measurements_path(@project, @view_params)} %>
|
||||||
|
|
||||||
<% if @measurements.any? %>
|
<% if @measurements.any? %>
|
||||||
<%= render partial: 'measurements/options' %>
|
<%= render partial: 'readouts/options' %>
|
||||||
|
|
||||||
<% formulas = @quantities.map { |q| q.formula } %>
|
<% formulas = @quantities.collect(&:formula) %>
|
||||||
<% formulas.unshift(@filter_q.formula) if @filter_q %>
|
<% formulas.unshift(@filter_q.formula) if @filter_q %>
|
||||||
<%= error_messages_for *formulas %>
|
<%= error_messages_for *formulas %>
|
||||||
|
|
||||||
<table class="readouts list odd-even">
|
<table id="readouts" class="list odd-even">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<% total_width = 3 + @quantities.length %>
|
<% total_width = 3 + @quantities.length %>
|
||||||
@ -17,7 +17,7 @@
|
|||||||
<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 '',
|
<%= link_to '',
|
||||||
toggle_exposure_measurement_routine_path(@routine, quantity_id: q.id),
|
measurement_routine_toggle_exposure_path(@routine, 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 %>
|
||||||
@ -34,7 +34,9 @@
|
|||||||
<tr id="measurement-<%= measurement.id %>" class="primary <%= row_class %>">
|
<tr id="measurement-<%= measurement.id %>" class="primary <%= row_class %>">
|
||||||
<td class="topleft unwrappable" style="cursor: pointer;"
|
<td class="topleft unwrappable" style="cursor: pointer;"
|
||||||
onclick="$(this).closest('tr').toggle(); $(this).closest('tr').nextUntil('tr.primary', '.measurement').toggle(); return false;">
|
onclick="$(this).closest('tr').toggle(); $(this).closest('tr').nextUntil('tr.primary', '.measurement').toggle(); return false;">
|
||||||
<span class="icon icon-bullet-closed"><%= format_datetime(measurement) %></span>
|
<span class="icon icon-bullet-closed">
|
||||||
|
<%= format_datetime(measurement.taken_at) %>
|
||||||
|
</span>
|
||||||
</td>
|
</td>
|
||||||
<% @quantities.each do |q| %>
|
<% @quantities.each do |q| %>
|
||||||
<td class="primary right ellipsible"><%= format_value(readouts[q]) %></td>
|
<td class="primary right ellipsible"><%= format_value(readouts[q]) %></td>
|
||||||
@ -50,7 +52,9 @@
|
|||||||
end %>
|
end %>
|
||||||
<td rowspan="<%= rows %>" class="topleft unwrappable" style="cursor: pointer;"
|
<td rowspan="<%= rows %>" class="topleft unwrappable" style="cursor: pointer;"
|
||||||
onclick="$(this).closest('tr').prev('tr.primary').toggle(); $(this).closest('tr').prev('tr.primary').nextUntil('tr.primary', '.measurement').toggle(); return false;">
|
onclick="$(this).closest('tr').prev('tr.primary').toggle(); $(this).closest('tr').prev('tr.primary').nextUntil('tr.primary', '.measurement').toggle(); return false;">
|
||||||
<span class="icon icon-bullet-open"><%= format_datetime(measurement) %></span>
|
<span class="icon icon-bullet-open">
|
||||||
|
<%= format_datetime(measurement.taken_at) %>
|
||||||
|
</span>
|
||||||
</td>
|
</td>
|
||||||
<% @quantities.each do |q| %>
|
<% @quantities.each do |q| %>
|
||||||
<td class="primary topleft ellipsible">
|
<td class="primary topleft ellipsible">
|
@ -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_exposure_measurement_routine_path(@routine, @view_params),
|
<%= form_tag measurement_routine_toggle_exposure_path(@routine, @view_params),
|
||||||
id: 'toggle-exposure-form', name: 'toggle-exposure-form',
|
id: 'toggle-exposure-form', name: 'toggle-exposure-form',
|
||||||
method: :post, remote: true do %>
|
method: :post, remote: true do %>
|
||||||
|
|
@ -7,6 +7,9 @@
|
|||||||
|
|
||||||
<%= title [t("measurements.index.heading"), project_measurements_path(@project)],
|
<%= title [t("measurements.index.heading"), project_measurements_path(@project)],
|
||||||
@routine.name %>
|
@routine.name %>
|
||||||
|
<% if @routine.description? %>
|
||||||
|
<p class="subtitle" style='white-space: pre-wrap;'><%= @routine.description %></p>
|
||||||
|
<% end %>
|
||||||
<div id='readouts'>
|
<div id='readouts'>
|
||||||
<%= render partial: 'measurements/readouts' %>
|
<%= render partial: 'readouts/index' %>
|
||||||
</div>
|
</div>
|
1
app/views/readouts/toggle_exposure.js.erb
Normal file
1
app/views/readouts/toggle_exposure.js.erb
Normal file
@ -0,0 +1 @@
|
|||||||
|
$('#readouts').html('<%= j render partial: 'readouts/index' %>');
|
@ -1,16 +1,12 @@
|
|||||||
<%#= render partial: 'measurements/filters',
|
|
||||||
locals: {url: filter_project_measurements_path(@project, @view_params)} %>
|
|
||||||
|
|
||||||
<% if @targets_by_date.any? %>
|
<% if @targets_by_date.any? %>
|
||||||
<%= render partial: 'targets/options' %>
|
<%= render partial: 'targets/options' %>
|
||||||
|
|
||||||
<% formulas = @quantities.map { |q| q.formula } %>
|
<% formulas = @quantities.collect(&:formula) %>
|
||||||
<%# formulas.unshift(@filter_q.formula) if @filter_q %>
|
|
||||||
<%= error_messages_for *formulas %>
|
<%= error_messages_for *formulas %>
|
||||||
|
|
||||||
<table id="targets" class="list odd-even">
|
<table id="targets" class="list odd-even">
|
||||||
<thead>
|
<thead>
|
||||||
<% total_width = 3 + @quantities.length %>
|
<% total_width = 2 + @quantities.length %>
|
||||||
<% header = quantities_table_header(@quantities) %>
|
<% header = quantities_table_header(@quantities) %>
|
||||||
<% header.each_with_index do |row, i| %>
|
<% header.each_with_index do |row, i| %>
|
||||||
<tr class="header">
|
<tr class="header">
|
||||||
|
@ -27,10 +27,8 @@ resources :projects, shallow: true do
|
|||||||
end
|
end
|
||||||
|
|
||||||
resources :measurement_routines, only: [:show, :edit] do
|
resources :measurement_routines, only: [:show, :edit] do
|
||||||
member do
|
resources :readouts, only: [:index]
|
||||||
get 'readouts', controller: :measurements
|
post 'toggle_exposure', controller: :readouts
|
||||||
post 'toggle_exposure', controller: :measurements
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
resources :measurements, except: [:show] do
|
resources :measurements, except: [:show] do
|
||||||
member do
|
member do
|
||||||
|
6
init.rb
6
init.rb
@ -19,7 +19,8 @@ Redmine::Plugin.register :body_tracking do
|
|||||||
targets: [:index, :show],
|
targets: [:index, :show],
|
||||||
meals: [:index],
|
meals: [:index],
|
||||||
measurement_routines: [:show],
|
measurement_routines: [:show],
|
||||||
measurements: [:index, :readouts, :filter],
|
measurements: [:index, :filter],
|
||||||
|
readouts: [:index],
|
||||||
foods: [:index, :nutrients, :filter, :autocomplete],
|
foods: [:index, :nutrients, :filter, :autocomplete],
|
||||||
sources: [:index],
|
sources: [:index],
|
||||||
quantities: [:index, :parents, :filter],
|
quantities: [:index, :parents, :filter],
|
||||||
@ -33,7 +34,8 @@ Redmine::Plugin.register :body_tracking do
|
|||||||
meals: [:new, :create, :edit, :update, :destroy, :edit_notes, :update_notes,
|
meals: [:new, :create, :edit, :update, :destroy, :edit_notes, :update_notes,
|
||||||
:toggle_eaten, :toggle_exposure, :adjust],
|
:toggle_eaten, :toggle_exposure, :adjust],
|
||||||
measurement_routines: [:edit],
|
measurement_routines: [:edit],
|
||||||
measurements: [:new, :create, :edit, :update, :destroy, :retake, :toggle_exposure],
|
measurements: [:new, :create, :edit, :update, :destroy, :retake],
|
||||||
|
readouts: [:toggle_exposure],
|
||||||
foods: [:new, :create, :edit, :update, :destroy, :toggle, :toggle_exposure,
|
foods: [:new, :create, :edit, :update, :destroy, :toggle, :toggle_exposure,
|
||||||
:import],
|
:import],
|
||||||
sources: [:create, :destroy],
|
sources: [:create, :destroy],
|
||||||
|
Reference in New Issue
Block a user