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 :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]
|
||||
# @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,
|
||||
only: [:new, :create, :edit, :update, :retake, :filter],
|
||||
if: -> { params[:view] == 'readouts' }
|
||||
only: [:new, :create, :edit, :update, :retake, :filter]
|
||||
before_action :authorize
|
||||
before_action :set_view_params
|
||||
|
||||
@ -84,15 +80,6 @@ class MeasurementsController < ApplicationController
|
||||
render :new
|
||||
end
|
||||
|
||||
def readouts
|
||||
prepare_readouts
|
||||
end
|
||||
|
||||
def toggle_exposure
|
||||
@routine.readout_exposures.toggle!(@quantity)
|
||||
prepare_readouts
|
||||
end
|
||||
|
||||
def filter
|
||||
session[:m_filters] = params.permit(:name, formula: [:code, :zero_nil])
|
||||
prepare_items
|
||||
@ -141,12 +128,6 @@ class MeasurementsController < ApplicationController
|
||||
.filter(session[:m_filters])
|
||||
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
|
||||
@view_params =
|
||||
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")
|
||||
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)
|
||||
enabled = enabled.map { |q| [q.name, q.id] }
|
||||
enabled_ids = enabled.map(&:last)
|
||||
|
@ -1,10 +1,4 @@
|
||||
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)
|
||||
link_to(l(:button_retake), retake_measurement_path(m, @view_params),
|
||||
{remote: true, class: "icon icon-reload"}) +
|
||||
|
@ -18,10 +18,10 @@
|
||||
<% @measurements.each do |m| %>
|
||||
<% next if m.new_record? %>
|
||||
<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">
|
||||
<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 style="float:right;">
|
||||
<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)} %>
|
||||
|
||||
<% 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 %>
|
||||
<%= error_messages_for *formulas %>
|
||||
|
||||
<table class="readouts list odd-even">
|
||||
<table id="readouts" class="list odd-even">
|
||||
<thead>
|
||||
<tr>
|
||||
<% total_width = 3 + @quantities.length %>
|
||||
@ -17,7 +17,7 @@
|
||||
<th style="width:<%= 100/total_width %>%" class="closable ellipsible">
|
||||
<div style="float:right;position:relative;">
|
||||
<%= 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} %>
|
||||
</div>
|
||||
<%= q.name %>
|
||||
@ -34,7 +34,9 @@
|
||||
<tr id="measurement-<%= measurement.id %>" class="primary <%= row_class %>">
|
||||
<td class="topleft unwrappable" style="cursor: pointer;"
|
||||
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>
|
||||
<% @quantities.each do |q| %>
|
||||
<td class="primary right ellipsible"><%= format_value(readouts[q]) %></td>
|
||||
@ -50,7 +52,9 @@
|
||||
end %>
|
||||
<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;">
|
||||
<span class="icon icon-bullet-open"><%= format_datetime(measurement) %></span>
|
||||
<span class="icon icon-bullet-open">
|
||||
<%= format_datetime(measurement.taken_at) %>
|
||||
</span>
|
||||
</td>
|
||||
<% @quantities.each do |q| %>
|
||||
<td class="primary topleft ellipsible">
|
@ -1,7 +1,7 @@
|
||||
<fieldset id="options" class="collapsible">
|
||||
<legend onclick="toggleFieldset(this);"><%= l(:label_options) %></legend>
|
||||
<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',
|
||||
method: :post, remote: true do %>
|
||||
|
@ -7,6 +7,9 @@
|
||||
|
||||
<%= title [t("measurements.index.heading"), project_measurements_path(@project)],
|
||||
@routine.name %>
|
||||
<% if @routine.description? %>
|
||||
<p class="subtitle" style='white-space: pre-wrap;'><%= @routine.description %></p>
|
||||
<% end %>
|
||||
<div id='readouts'>
|
||||
<%= render partial: 'measurements/readouts' %>
|
||||
<%= render partial: 'readouts/index' %>
|
||||
</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? %>
|
||||
<%= render partial: 'targets/options' %>
|
||||
|
||||
<% formulas = @quantities.map { |q| q.formula } %>
|
||||
<%# formulas.unshift(@filter_q.formula) if @filter_q %>
|
||||
<% formulas = @quantities.collect(&:formula) %>
|
||||
<%= error_messages_for *formulas %>
|
||||
|
||||
<table id="targets" class="list odd-even">
|
||||
<thead>
|
||||
<% total_width = 3 + @quantities.length %>
|
||||
<% total_width = 2 + @quantities.length %>
|
||||
<% header = quantities_table_header(@quantities) %>
|
||||
<% header.each_with_index do |row, i| %>
|
||||
<tr class="header">
|
||||
|
@ -27,10 +27,8 @@ resources :projects, shallow: true do
|
||||
end
|
||||
|
||||
resources :measurement_routines, only: [:show, :edit] do
|
||||
member do
|
||||
get 'readouts', controller: :measurements
|
||||
post 'toggle_exposure', controller: :measurements
|
||||
end
|
||||
resources :readouts, only: [:index]
|
||||
post 'toggle_exposure', controller: :readouts
|
||||
end
|
||||
resources :measurements, except: [:show] do
|
||||
member do
|
||||
|
6
init.rb
6
init.rb
@ -19,7 +19,8 @@ Redmine::Plugin.register :body_tracking do
|
||||
targets: [:index, :show],
|
||||
meals: [:index],
|
||||
measurement_routines: [:show],
|
||||
measurements: [:index, :readouts, :filter],
|
||||
measurements: [:index, :filter],
|
||||
readouts: [:index],
|
||||
foods: [:index, :nutrients, :filter, :autocomplete],
|
||||
sources: [:index],
|
||||
quantities: [:index, :parents, :filter],
|
||||
@ -33,7 +34,8 @@ Redmine::Plugin.register :body_tracking do
|
||||
meals: [:new, :create, :edit, :update, :destroy, :edit_notes, :update_notes,
|
||||
:toggle_eaten, :toggle_exposure, :adjust],
|
||||
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,
|
||||
:import],
|
||||
sources: [:create, :destroy],
|
||||
|
Reference in New Issue
Block a user