diff --git a/app/helpers/measurements_helper.rb b/app/helpers/measurements_helper.rb index 5bff5b0..56bde80 100644 --- a/app/helpers/measurements_helper.rb +++ b/app/helpers/measurements_helper.rb @@ -5,12 +5,6 @@ module MeasurementsHelper .html_safe end - def source_options - @project.sources.map do |s| - [s.name, s.id] - end - end - def action_links(m) link_to(l(:button_retake), retake_measurement_path(m, @view_params), {remote: true, class: "icon icon-reload"}) + diff --git a/app/models/readout.rb b/app/models/readout.rb index c84405b..c7107c8 100644 --- a/app/models/readout.rb +++ b/app/models/readout.rb @@ -1,10 +1,11 @@ class Readout < QuantityValue + DOMAIN = "measurement" + # Need to specify polymorphic association so :registry_type gets written (see # QuantityValue for explanation why it's needed) belongs_to :measurement, inverse_of: :readouts, polymorphic: true, required: true, foreign_key: 'registry_id', foreign_type: 'registry_type' - # Readout uniqueness NOT validated here, see Value for explanation validates :value, numericality: true delegate :completed_at, to: :measurement diff --git a/app/views/measurements/_edit_form.html.erb b/app/views/measurements/_edit_form.html.erb index f731f20..1b8a092 100644 --- a/app/views/measurements/_edit_form.html.erb +++ b/app/views/measurements/_edit_form.html.erb @@ -1,15 +1,17 @@ -<%= labelled_form_for @measurement, - url: measurement_path(@measurement, @view_params), +<%= labelled_form_for @measurement, url: measurement_path(@measurement, @view_params), method: :patch, remote: true, - html: {id: 'edit-measurement-form', name: 'edit-measurement-form'} do |f| %> + html: {id: 'edit-measurement-form', name: 'edit-measurement-form'} do |measurement_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;' %> + onclick: '$(this).closest("tr").nextUntil("tr.measurement", "tr.details").show() + .addBack().first().remove(); return false;' %>
- <%= f.date_field :taken_at_date, required: true %> - <%= f.time_field :taken_at_time, value: format_time(@measurement.taken_at), - required: true, label: '' %> -
-<%= f.select :source_id, source_options, - {required: false, include_blank: t('.null_source')} %>
-<%= f.text_area :notes, cols: 40, rows: 1, style: "width: 95%;" %>
- <% @measurement.readouts.each_with_index do |r, index| %> - <%= f.fields_for 'readouts_attributes', r, index: '' do |ff| %> -- <%= ff.hidden_field :id %> - <%= ff.select :quantity_id, quantity_options(:measurement), - {include_blank: true, required: true, label: (index > 0 ? '' : :field_readouts)} %> - <%= ff.number_field :value, {size: 8, step: :any, label: ''} %> - <%= ff.select :unit_id, unit_options, {label: ''} %> - <%= ff.hidden_field :_destroy %> - <%= link_to t(".button_delete_readout"), '#', class: 'icon icon-del', - style: (@measurement.readouts.many? ? "" : "display:none"), - onclick: "deleteReadout(); return false;" %> -
- <% end %> - <% end %> +- <%= link_to t(".button_new_readout"), '#', class: 'icon icon-add', - onclick: 'newReadout(); return false;' %> + <%= measurement_f.date_field :taken_at_date, required: true %> + <%= measurement_f.time_field :taken_at_time, value: format_time(@measurement.taken_at), + required: true, no_label: true %>
<%= measurement_f.collection_select :source_id, @project.sources, :id, :name, + {required: false, include_blank: t('.null_source')} %>
+<%= measurement_f.text_area :notes, cols: 40, rows: 1, style: "width: 95%;" %>
+ +<%= measurement_f.fields_for :readouts, index: '', child_index: '' do |readout_f| %> + <%# byebug %> ++ <%= readout_f.hidden_field :id %> + <%= readout_f.hidden_field :_destroy %> + <% required = readout_f.object == @measurement.readouts.first %> + <%= readout_f.select :quantity_id, quantity_options(:measurement), + {include_blank: true, required: required, label: (required ? :field_readouts : '')} %> + <%= readout_f.number_field :value, {size: 8, step: :any, no_label: true} %> + <%= readout_f.collection_select :unit_id, @project.units, :id, :shortname, + {no_label: true} %> + + <%= link_to t(".button_delete_readout"), '#', class: 'icon icon-del', + style: (@measurement.readouts.many? ? '' : 'display:none'), + onclick: 'deleteReadout(event); return false;' %> +
+<% end %> + ++<%= link_to t(".button_new_readout"), '#', class: 'icon icon-add', + onclick: 'newReadout(event); return false;' %> +
+ <%= javascript_tag do %> - function newReadout() { + function newReadout(event) { 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(''); - new_row.find('label:first').hide(); + var readout = form.find('p.readout:visible:last'); + var new_readout = readout.clone().insertAfter(readout); + new_readout.find('label:first').hide(); + new_readout.find('input, select:first').val(''); form.find('p.readout:visible a.icon-del').show(); } - function deleteReadout() { + function deleteReadout(event) { 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('1'); + var readout = $(event.target).closest('p.readout'); + if (readout.find('input[id$=__id]').val()) { + readout.hide(); + readout.find('input[id$=__destroy]').val('1'); } else { - row.remove(); + readout.remove(); } form.find('p.readout:visible:first label:first').show(); if (form.find('p.readout:visible').length <= 1) { diff --git a/app/views/measurements/_new_form.html.erb b/app/views/measurements/_new_form.html.erb index 078a560..a2dcd28 100644 --- a/app/views/measurements/_new_form.html.erb +++ b/app/views/measurements/_new_form.html.erb @@ -1,11 +1,12 @@diff --git a/app/views/targets/_form.html.erb b/app/views/targets/_form.html.erb index ba14be6..0c8ec08 100644 --- a/app/views/targets/_form.html.erb +++ b/app/views/targets/_form.html.erb @@ -1,7 +1,5 @@ <% if goal_f.object.is_binding? %> -
- <%= goal_f.date_field :effective_from, value: @effective_from, required: true %> -
+<%= goal_f.date_field :effective_from, value: @effective_from, required: true %>
<% end %> <%= goal_f.fields_for :targets, @targets, index: '', child_index: '' do |target_f| %> @@ -21,10 +19,11 @@ last_quantity: target_f.object.thresholds.last.quantity} %> <%= link_to t(".button_delete_target"), '#', class: 'icon icon-del', - style: (@targets.many? ? "" : "display:none"), - onclick: "deleteTarget(event); return false;" %> + style: (@targets.many? ? '' : 'display:none'), + onclick: 'deleteTarget(event); return false;' %> <% end %> +<%= link_to t(".button_new_target"), '#', class: 'icon icon-add', onclick: 'newTarget(event); return false;' %> @@ -46,7 +45,7 @@ new_target.find('em').text('<%= t ".choose_quantity" %>'); new_target.find('label:first').hide(); new_target.find('input, select:first').val(''); - new_target.find('input, select.threshold:first').change(); + new_target.find('select.threshold:first').change(); form.find('p.target:visible a.icon-del').show(); } diff --git a/app/views/targets/_new_form.html.erb b/app/views/targets/_new_form.html.erb index ae1c955..8d3ea1e 100644 --- a/app/views/targets/_new_form.html.erb +++ b/app/views/targets/_new_form.html.erb @@ -1,6 +1,5 @@