diff --git a/app/controllers/measurements_controller.rb b/app/controllers/measurements_controller.rb
index 01b1466..1a6804e 100644
--- a/app/controllers/measurements_controller.rb
+++ b/app/controllers/measurements_controller.rb
@@ -1,33 +1,31 @@
class MeasurementsController < ApplicationController
menu_item :body_trackers
- before_action :find_project_by_project_id, only: [:index, :create]
+ before_action :find_project_by_project_id, only: [:index, :new, :create]
before_action :find_measurement, only: [:edit, :update, :destroy, :retake]
before_action :authorize
def index
+ prepare_measurements
+ end
+
+ def new
@measurement = @project.measurements.new
@measurement.readouts.new
-
- prepare_measurements
- @measurements << @measurement
end
def create
@measurement = @project.measurements.new(measurement_params)
if @measurement.save
flash[:notice] = 'Created new measurement'
- redirect_to :back
- else
prepare_measurements
+ else
@measurement.readouts.new if @measurement.readouts.empty?
- render :index
+ render :new
end
end
def edit
- prepare_measurements
- render :index
end
def update
diff --git a/app/models/measurement.rb b/app/models/measurement.rb
index ab08170..2501968 100644
--- a/app/models/measurement.rb
+++ b/app/models/measurement.rb
@@ -10,7 +10,9 @@ class Measurement < ActiveRecord::Base
# Readout quantity_id + unit_id uniqueness validation. Cannot be effectively
# checked on Readout model level.
validate do
- quantities = self.readouts.map { |r| [r.quantity_id, r.unit_id] }
+ quantities = self.readouts.map do |r|
+ [r.quantity_id, r.unit_id] unless r.marked_for_destruction?
+ end
if quantities.length != quantities.uniq.length
errors.add(:readouts, :duplicated_quantity_unit_pair)
end
@@ -31,14 +33,14 @@ class Measurement < ActiveRecord::Base
end
def taken_at_date
- self.taken_at
+ self.taken_at.getlocal
end
def taken_at_date=(value)
self.taken_at = Time.parse(value, self.taken_at)
end
def taken_at_time
- self.taken_at
+ self.taken_at.getlocal
end
def taken_at_time=(value)
self.taken_at = Time.parse(value, self.taken_at)
diff --git a/app/views/measurements/_edit_form.html.erb b/app/views/measurements/_edit_form.html.erb
new file mode 100644
index 0000000..392e8bb
--- /dev/null
+++ b/app/views/measurements/_edit_form.html.erb
@@ -0,0 +1,15 @@
+<%= labelled_form_for @measurement,
+ url: measurement_path(@measurement),
+ method: :patch, remote: true,
+ html: {id: 'measurement-edit-form', name: 'measurement-edit-form'} do |f| %>
+
+ <%= render partial: 'measurements/form', locals: {f: f} %>
+
+
+
+ <%= submit_tag l(:button_save) %>
+ <%= link_to l(:button_cancel), "#",
+ onclick: '$(this).closest("tr").remove(); return false;' %>
+
+
+<% end %>
diff --git a/app/views/measurements/_form.html.erb b/app/views/measurements/_form.html.erb
index 370d39c..647777e 100644
--- a/app/views/measurements/_form.html.erb
+++ b/app/views/measurements/_form.html.erb
@@ -6,7 +6,7 @@
<%= f.text_field :name, size: 40, required: true %>
<%= f.date_field :taken_at_date, required: true %>
- <%= f.time_field :taken_at_time, value: @measurement.taken_at.strftime("%H:%M"),
+ <%= f.time_field :taken_at_time, value: @measurement.taken_at.getlocal.strftime("%R"),
required: true, label: '' %>
<% @measurement.readouts.each_with_index do |r, index| %>
@@ -26,35 +26,35 @@
<% end %>
<% end %>
- <%= link_to t(".button_add_readout"), '#', class: 'icon icon-add',
- onclick: 'addReadout(); return false;' %>
+ <%= link_to t(".button_new_readout"), '#', class: 'icon icon-add',
+ onclick: 'newReadout(); return false;' %>
<%= javascript_tag do %>
- function addReadout() {
- var row = $('p.readout:visible:last');
+ function newReadout() {
+ var form = $(event.target).closest('form');
+ var row = form.find('p.readout:visible:last');
var new_row = row.clone().insertAfter(row);
new_row.find('input[id$=__id], input[id$=__value], select[id$=_quantity__id]').val('');
new_row.find('select[id$=__unit_id]').val(row.find('select[id$=__unit_id]').val());
- new_row.find('input[id$=__destroy]').val('false');
- new_row.find('label:first').text('');
- if ($('p.readout:visible').length > 1) {
- $('p.readout a.icon-del').show();
- }
+ new_row.find('input[id$=__destroy]').val('');
+ new_row.find('label:first').hide();
+ form.find('p.readout:visible a.icon-del').show();
}
function deleteReadout() {
+ var form = $(event.target).closest('form');
var row = $(event.target).closest('p.readout');
if (row.find('input[id$=__id]').val()) {
row.hide();
- row.find('input[id$=__destroy]').val('true');
+ row.find('input[id$=__destroy]').val('1');
} else {
row.remove();
}
- $('p.readout:visible:first label:first').text('<%= t "field_readouts" %>');
- if ($('p.readout:visible').length <= 1) {
- $('p.readout a.icon-del').hide();
+ form.find('p.readout:visible:first label:first').show();
+ if (form.find('p.readout:visible').length <= 1) {
+ form.find('p.readout:visible a.icon-del').hide();
}
}
<% end %>
diff --git a/app/views/measurements/_index.html.erb b/app/views/measurements/_index.html.erb
index e40c4e0..6d8a3b4 100644
--- a/app/views/measurements/_index.html.erb
+++ b/app/views/measurements/_index.html.erb
@@ -12,7 +12,7 @@
<% @measurements.each do |m| %>
<% next if m.new_record? %>
- <%= m.taken_at.strftime("%F %R") %> |
+ <%= m.taken_at.getlocal.strftime("%F %R") %> |
<%= m.name %>
@@ -32,30 +32,15 @@
<%= delete_link measurement_path(m), {remote: true, data: {}} %>
|
- <% next unless (m == @measurement) &&
- ((action_name == "edit") ||
- (action_name == "update" && @measurement.errors.present?)) %>
-
-
-
- <%= labelled_form_for @measurement,
- url: measurement_path(@measurement),
- method: :patch, remote: true,
- html: {id: 'measurement-edit-form', name: 'measurement-edit-form'} do |f| %>
-
- <%= render partial: 'measurements/form', locals: {f: f} %>
-
-
-
- <%= submit_tag l(:button_save) %>
- <%= link_to l(:button_cancel), "#",
- onclick: '$(this).closest("tr").remove(); return false;' %>
-
-
- <% end %>
-
- |
-
+ <% if (m == @measurement) && @measurement.errors.present? %>
+
+
+
+ <%= render partial: 'measurements/edit_form' %>
+
+ |
+
+ <% end %>
<% end %>
diff --git a/app/views/measurements/_new_form.html.erb b/app/views/measurements/_new_form.html.erb
new file mode 100644
index 0000000..b698d03
--- /dev/null
+++ b/app/views/measurements/_new_form.html.erb
@@ -0,0 +1,18 @@
+<%= t ".heading_new_measurement" %>
+
+<%= labelled_form_for @measurement,
+ url: project_measurements_path(@project),
+ remote: true,
+ html: {id: 'new-measurement-form', name: 'new-measurement-form'} do |f| %>
+
+ <%= render partial: 'measurements/form', locals: {f: f} %>
+
+
+
+ <%= submit_tag l(:button_create) %>
+ <%= link_to l(:button_cancel), "#",
+ onclick: '$("#new-measurement").empty(); return false;' %>
+
+
+<% end %>
+
diff --git a/app/views/measurements/create.js.erb b/app/views/measurements/create.js.erb
new file mode 100644
index 0000000..a931874
--- /dev/null
+++ b/app/views/measurements/create.js.erb
@@ -0,0 +1,4 @@
+$('div[id^=flash_]').remove();
+$('#content').prepend('<%= j render_flash_messages %>');
+$('#new-measurement').empty();
+$('#measurements').html('<%= j render partial: 'measurements/index' %>');
diff --git a/app/views/measurements/edit.js.erb b/app/views/measurements/edit.js.erb
new file mode 100644
index 0000000..25e3e76
--- /dev/null
+++ b/app/views/measurements/edit.js.erb
@@ -0,0 +1,3 @@
+$('div[id^=flash_]').remove();
+$('#content').prepend('<%= j render_flash_messages %>');
+$('tr[id=measurement-<%= @measurement.id %>]').after('<%= j render partial: "measurements/edit_form" %> |
');
diff --git a/app/views/measurements/index.html.erb b/app/views/measurements/index.html.erb
index 8e8786e..dd10925 100644
--- a/app/views/measurements/index.html.erb
+++ b/app/views/measurements/index.html.erb
@@ -4,31 +4,14 @@
<% if User.current.allowed_to?(:manage_common, @project) %>
- <%= link_to t(".link_new_measurement"), '#', class: 'icon icon-add',
- onclick: '$("#add-measurement").toggle(); $("#measurement_name").focus(); return false;'
- %>
+ <%= link_to t(".link_new_measurement"), new_project_measurement_path(@project), {
+ remote: true,
+ class: 'icon icon-add'
+ } %>
<% end %>
-<% hide_add_form = @measurement.errors.empty? && (action_name != "retake") %>
->
-
<%= t ".heading_new_measurement" %>
-
- <%= labelled_form_for @measurement,
- url: project_measurements_path(@project),
- html: {id: 'measurement-add-form', name: 'measurement-add-form'} do |f| %>
-
- <%= render partial: 'measurements/form', locals: {f: f} %>
-
-
-
- <%= submit_tag l(:button_create) %>
- <%= link_to l(:button_cancel), "#",
- onclick: '$("#add-measurement").hide(); return false;' %>
-
-
- <% end %>
-
+
<%= t ".heading" %>
diff --git a/app/views/measurements/index.js.erb b/app/views/measurements/index.js.erb
index caed350..35c5b94 100644
--- a/app/views/measurements/index.js.erb
+++ b/app/views/measurements/index.js.erb
@@ -1,3 +1,3 @@
$('div[id^=flash_]').remove();
-$('#content').prepend('<%= escape_javascript(render_flash_messages) %>');
-$('#measurements').html('<%= escape_javascript(render partial: 'measurements/index') %>');
+$('#content').prepend('<%= j render_flash_messages %>');
+$('#measurements').html('<%= j render partial: 'measurements/index' %>');
diff --git a/app/views/measurements/new.js.erb b/app/views/measurements/new.js.erb
new file mode 100644
index 0000000..cd159ab
--- /dev/null
+++ b/app/views/measurements/new.js.erb
@@ -0,0 +1,3 @@
+$('div[id^=flash_]').remove();
+$('#content').prepend('<%= j render_flash_messages %>');
+$('#new-measurement').html('<%= j render partial: 'measurements/new_form' %>');
diff --git a/config/locales/en.yml b/config/locales/en.yml
index b932913..56f2b80 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -59,12 +59,13 @@ en:
confirm_defaults: 'This will load default quantities and units. Continue?'
measurements:
form:
- button_add_readout: 'Add readout'
+ button_new_readout: 'Add readout'
button_delete_readout: 'Delete'
null_source: '- unspecified -'
+ new_form:
+ heading_new_measurement: 'New measurement'
index:
heading: 'Measurements'
- heading_new_measurement: 'New measurement'
link_new_measurement: 'New measurement'
ingredients:
contextual:
diff --git a/config/routes.rb b/config/routes.rb
index 021c487..9e23d26 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -5,7 +5,7 @@ resources :projects, shallow: true do
resources :body_trackers, only: [:index] do
collection do
post 'defaults'
- resources :measurements, only: [:index, :create, :edit, :update, :destroy] do
+ resources :measurements, only: [:index, :new, :create, :edit, :update, :destroy] do
get 'retake', on: :member
end
resources :ingredients, only: [:index, :create, :destroy] do
diff --git a/init.rb b/init.rb
index 94120c8..0e840f7 100644
--- a/init.rb
+++ b/init.rb
@@ -24,7 +24,7 @@ Redmine::Plugin.register :body_tracking do
}, read: true
permission :manage_common, {
body_trackers: [:defaults],
- measurements: [:create, :edit, :update, :destroy, :retake],
+ measurements: [:new, :create, :edit, :update, :destroy, :retake],
ingredients: [:create, :destroy, :toggle, :import, :toggle_nutrient_column],
sources: [:create, :destroy],
quantities: [:create, :edit, :update, :destroy, :toggle, :move],