1
0

Create Readouts controller

Move #readouts + #toggle_exposure from Measurements to Readouts
This commit is contained in:
cryptogopher 2021-05-08 01:02:57 +02:00
parent 40cce31bff
commit 7b2b855d56
13 changed files with 62 additions and 49 deletions

View File

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

View 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

View File

@ -22,6 +22,10 @@ module BodyTrackersHelper
t&.strftime("%R")
end
def format_datetime(dt)
dt.strftime("%F <small>%R&emsp;(~#{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)

View File

@ -1,10 +1,4 @@
module MeasurementsHelper
def format_datetime(m)
m.taken_at
.strftime("%F <small>%R&emsp;(~#{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"}) +

View File

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

View File

@ -1 +0,0 @@
$('#readouts').html('<%= j render partial: 'measurements/readouts' %>');

View File

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

View File

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

View File

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

View File

@ -0,0 +1 @@
$('#readouts').html('<%= j render partial: 'readouts/index' %>');

View File

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

View File

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

View File

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