Update Measurements form based on Targets
This commit is contained in:
parent
e301665b6a
commit
74b4dabf86
@ -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"}) +
|
||||
|
@ -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
|
||||
|
@ -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} %>
|
||||
<div class="box tabular">
|
||||
<%= render partial: 'measurements/form', locals: {measurement_f: measurement_f} %>
|
||||
</div>
|
||||
|
||||
<div class="tabular">
|
||||
<p>
|
||||
<%= 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;' %>
|
||||
</p>
|
||||
</div>
|
||||
<% end %>
|
||||
|
@ -1,73 +1,74 @@
|
||||
<%= error_messages_for @measurement %>
|
||||
|
||||
<div class="box">
|
||||
<div id='measurement-routine-form' class="tabular">
|
||||
<% if @measurement.routine.persisted? %>
|
||||
<%= render partial: 'measurement_routines/show_form',
|
||||
locals: {routine: @measurement.routine} %>
|
||||
<% else %>
|
||||
<%= render partial: 'measurement_routines/form',
|
||||
locals: {routine: @measurement.routine} %>
|
||||
<% end %>
|
||||
</div>
|
||||
<hr style="width: 95%;">
|
||||
<div class="tabular">
|
||||
<div class="splitcontent">
|
||||
<div class="splitcontentleft">
|
||||
<p>
|
||||
<%= f.date_field :taken_at_date, required: true %>
|
||||
<%= f.time_field :taken_at_time, value: format_time(@measurement.taken_at),
|
||||
required: true, label: '' %>
|
||||
</p>
|
||||
</div>
|
||||
<div class="splitcontentright">
|
||||
<p><%= f.select :source_id, source_options,
|
||||
{required: false, include_blank: t('.null_source')} %></p>
|
||||
</div>
|
||||
</div>
|
||||
<p><%= f.text_area :notes, cols: 40, rows: 1, style: "width: 95%;" %></p>
|
||||
<% @measurement.readouts.each_with_index do |r, index| %>
|
||||
<%= f.fields_for 'readouts_attributes', r, index: '' do |ff| %>
|
||||
<p class="readout">
|
||||
<%= 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;" %>
|
||||
</p>
|
||||
<% end %>
|
||||
<% end %>
|
||||
<div id='measurement-routine-form'>
|
||||
<% if @measurement.routine.persisted? %>
|
||||
<%= render partial: 'measurement_routines/show_form',
|
||||
locals: {routine: @measurement.routine} %>
|
||||
<% else %>
|
||||
<%= render partial: 'measurement_routines/form',
|
||||
locals: {routine: @measurement.routine} %>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
<hr style="width: 95%;">
|
||||
|
||||
<div class="splitcontent">
|
||||
<div class="splitcontentleft">
|
||||
<p>
|
||||
<%= 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 %>
|
||||
</p>
|
||||
</div>
|
||||
<div class="splitcontentright">
|
||||
<p><%= measurement_f.collection_select :source_id, @project.sources, :id, :name,
|
||||
{required: false, include_blank: t('.null_source')} %></p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p><%= measurement_f.text_area :notes, cols: 40, rows: 1, style: "width: 95%;" %></p>
|
||||
|
||||
<%= measurement_f.fields_for :readouts, index: '', child_index: '' do |readout_f| %>
|
||||
<%# byebug %>
|
||||
<p class="readout">
|
||||
<%= 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;' %>
|
||||
</p>
|
||||
<% end %>
|
||||
|
||||
<p>
|
||||
<%= link_to t(".button_new_readout"), '#', class: 'icon icon-add',
|
||||
onclick: 'newReadout(event); return false;' %>
|
||||
</p>
|
||||
|
||||
<%= 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) {
|
||||
|
@ -1,11 +1,12 @@
|
||||
<h2><%= t ".heading_new_measurement" %></h2>
|
||||
|
||||
<%= labelled_form_for @measurement,
|
||||
url: project_measurements_path(@project, @view_params),
|
||||
<%= labelled_form_for @measurement, url: project_measurements_path(@project, @view_params),
|
||||
remote: true,
|
||||
html: {id: 'new-measurement-form', name: 'new-measurement-form'} do |f| %>
|
||||
html: {id: 'new-measurement-form', name: 'new-measurement-form'} do |measurement_f| %>
|
||||
|
||||
<%= render partial: 'measurements/form', locals: {f: f} %>
|
||||
<div class="box tabular">
|
||||
<%= render partial: 'measurements/form', locals: {measurement_f: measurement_f} %>
|
||||
</div>
|
||||
|
||||
<div class="tabular">
|
||||
<p>
|
||||
|
@ -1,7 +1,5 @@
|
||||
<% if goal_f.object.is_binding? %>
|
||||
<p>
|
||||
<%= goal_f.date_field :effective_from, value: @effective_from, required: true %>
|
||||
</p>
|
||||
<p><%= goal_f.date_field :effective_from, value: @effective_from, required: true %></p>
|
||||
<% 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;' %>
|
||||
</p>
|
||||
<% end %>
|
||||
|
||||
<p>
|
||||
<%= 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();
|
||||
}
|
||||
|
||||
|
@ -1,6 +1,5 @@
|
||||
<h2><%= t ".heading_new_target" %></h2>
|
||||
|
||||
<%# url: project_targets_path(@project, @view_params), %>
|
||||
<%= labelled_form_for @goal, url: goal_targets_path(@goal), method: :post, remote: true,
|
||||
html: {id: 'new-target-form', name: 'new-target-form'} do |goal_f| %>
|
||||
|
||||
|
Reference in New Issue
Block a user