Update Measurements form based on Targets
This commit is contained in:
parent
e301665b6a
commit
74b4dabf86
@ -5,12 +5,6 @@ module MeasurementsHelper
|
|||||||
.html_safe
|
.html_safe
|
||||||
end
|
end
|
||||||
|
|
||||||
def source_options
|
|
||||||
@project.sources.map do |s|
|
|
||||||
[s.name, s.id]
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def action_links(m)
|
def action_links(m)
|
||||||
link_to(l(:button_retake), retake_measurement_path(m, @view_params),
|
link_to(l(:button_retake), retake_measurement_path(m, @view_params),
|
||||||
{remote: true, class: "icon icon-reload"}) +
|
{remote: true, class: "icon icon-reload"}) +
|
||||||
|
@ -1,10 +1,11 @@
|
|||||||
class Readout < QuantityValue
|
class Readout < QuantityValue
|
||||||
|
DOMAIN = "measurement"
|
||||||
|
|
||||||
# Need to specify polymorphic association so :registry_type gets written (see
|
# Need to specify polymorphic association so :registry_type gets written (see
|
||||||
# QuantityValue for explanation why it's needed)
|
# QuantityValue for explanation why it's needed)
|
||||||
belongs_to :measurement, inverse_of: :readouts, polymorphic: true, required: true,
|
belongs_to :measurement, inverse_of: :readouts, polymorphic: true, required: true,
|
||||||
foreign_key: 'registry_id', foreign_type: 'registry_type'
|
foreign_key: 'registry_id', foreign_type: 'registry_type'
|
||||||
|
|
||||||
# Readout uniqueness NOT validated here, see Value for explanation
|
|
||||||
validates :value, numericality: true
|
validates :value, numericality: true
|
||||||
|
|
||||||
delegate :completed_at, to: :measurement
|
delegate :completed_at, to: :measurement
|
||||||
|
@ -1,15 +1,17 @@
|
|||||||
<%= labelled_form_for @measurement,
|
<%= labelled_form_for @measurement, url: measurement_path(@measurement, @view_params),
|
||||||
url: measurement_path(@measurement, @view_params),
|
|
||||||
method: :patch, remote: true,
|
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">
|
<div class="tabular">
|
||||||
<p>
|
<p>
|
||||||
<%= submit_tag l(:button_save) %>
|
<%= submit_tag l(:button_save) %>
|
||||||
<%= link_to l(:button_cancel), "#",
|
<%= 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>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
<%= error_messages_for @measurement %>
|
<%= error_messages_for @measurement %>
|
||||||
|
|
||||||
<div class="box">
|
<div id='measurement-routine-form'>
|
||||||
<div id='measurement-routine-form' class="tabular">
|
|
||||||
<% if @measurement.routine.persisted? %>
|
<% if @measurement.routine.persisted? %>
|
||||||
<%= render partial: 'measurement_routines/show_form',
|
<%= render partial: 'measurement_routines/show_form',
|
||||||
locals: {routine: @measurement.routine} %>
|
locals: {routine: @measurement.routine} %>
|
||||||
@ -9,65 +8,67 @@
|
|||||||
<%= render partial: 'measurement_routines/form',
|
<%= render partial: 'measurement_routines/form',
|
||||||
locals: {routine: @measurement.routine} %>
|
locals: {routine: @measurement.routine} %>
|
||||||
<% end %>
|
<% end %>
|
||||||
</div>
|
</div>
|
||||||
<hr style="width: 95%;">
|
|
||||||
<div class="tabular">
|
<hr style="width: 95%;">
|
||||||
<div class="splitcontent">
|
|
||||||
|
<div class="splitcontent">
|
||||||
<div class="splitcontentleft">
|
<div class="splitcontentleft">
|
||||||
<p>
|
<p>
|
||||||
<%= f.date_field :taken_at_date, required: true %>
|
<%= measurement_f.date_field :taken_at_date, required: true %>
|
||||||
<%= f.time_field :taken_at_time, value: format_time(@measurement.taken_at),
|
<%= measurement_f.time_field :taken_at_time, value: format_time(@measurement.taken_at),
|
||||||
required: true, label: '' %>
|
required: true, no_label: true %>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="splitcontentright">
|
<div class="splitcontentright">
|
||||||
<p><%= f.select :source_id, source_options,
|
<p><%= measurement_f.collection_select :source_id, @project.sources, :id, :name,
|
||||||
{required: false, include_blank: t('.null_source')} %></p>
|
{required: false, include_blank: t('.null_source')} %></p>
|
||||||
</div>
|
</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 %>
|
|
||||||
<p>
|
|
||||||
<%= link_to t(".button_new_readout"), '#', class: 'icon icon-add',
|
|
||||||
onclick: 'newReadout(); return false;' %>
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</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 %>
|
<%= javascript_tag do %>
|
||||||
function newReadout() {
|
function newReadout(event) {
|
||||||
var form = $(event.target).closest('form');
|
var form = $(event.target).closest('form');
|
||||||
var row = form.find('p.readout:visible:last');
|
var readout = form.find('p.readout:visible:last');
|
||||||
var new_row = row.clone().insertAfter(row);
|
var new_readout = readout.clone().insertAfter(readout);
|
||||||
new_row.find('input[id$=__id], input[id$=__value], select[id$=_quantity__id]').val('');
|
new_readout.find('label:first').hide();
|
||||||
new_row.find('select[id$=__unit_id]').val(row.find('select[id$=__unit_id]').val());
|
new_readout.find('input, select:first').val('');
|
||||||
new_row.find('input[id$=__destroy]').val('');
|
|
||||||
new_row.find('label:first').hide();
|
|
||||||
form.find('p.readout:visible a.icon-del').show();
|
form.find('p.readout:visible a.icon-del').show();
|
||||||
}
|
}
|
||||||
|
|
||||||
function deleteReadout() {
|
function deleteReadout(event) {
|
||||||
var form = $(event.target).closest('form');
|
var form = $(event.target).closest('form');
|
||||||
var row = $(event.target).closest('p.readout');
|
var readout = $(event.target).closest('p.readout');
|
||||||
if (row.find('input[id$=__id]').val()) {
|
if (readout.find('input[id$=__id]').val()) {
|
||||||
row.hide();
|
readout.hide();
|
||||||
row.find('input[id$=__destroy]').val('1');
|
readout.find('input[id$=__destroy]').val('1');
|
||||||
} else {
|
} else {
|
||||||
row.remove();
|
readout.remove();
|
||||||
}
|
}
|
||||||
form.find('p.readout:visible:first label:first').show();
|
form.find('p.readout:visible:first label:first').show();
|
||||||
if (form.find('p.readout:visible').length <= 1) {
|
if (form.find('p.readout:visible').length <= 1) {
|
||||||
|
@ -1,11 +1,12 @@
|
|||||||
<h2><%= t ".heading_new_measurement" %></h2>
|
<h2><%= t ".heading_new_measurement" %></h2>
|
||||||
|
|
||||||
<%= labelled_form_for @measurement,
|
<%= labelled_form_for @measurement, url: project_measurements_path(@project, @view_params),
|
||||||
url: project_measurements_path(@project, @view_params),
|
|
||||||
remote: true,
|
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">
|
<div class="tabular">
|
||||||
<p>
|
<p>
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
<% if goal_f.object.is_binding? %>
|
<% if goal_f.object.is_binding? %>
|
||||||
<p>
|
<p><%= goal_f.date_field :effective_from, value: @effective_from, required: true %></p>
|
||||||
<%= goal_f.date_field :effective_from, value: @effective_from, required: true %>
|
|
||||||
</p>
|
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<%= goal_f.fields_for :targets, @targets, index: '', child_index: '' do |target_f| %>
|
<%= goal_f.fields_for :targets, @targets, index: '', child_index: '' do |target_f| %>
|
||||||
@ -21,10 +19,11 @@
|
|||||||
last_quantity: target_f.object.thresholds.last.quantity} %>
|
last_quantity: target_f.object.thresholds.last.quantity} %>
|
||||||
|
|
||||||
<%= link_to t(".button_delete_target"), '#', class: 'icon icon-del',
|
<%= link_to t(".button_delete_target"), '#', class: 'icon icon-del',
|
||||||
style: (@targets.many? ? "" : "display:none"),
|
style: (@targets.many? ? '' : 'display:none'),
|
||||||
onclick: "deleteTarget(event); return false;" %>
|
onclick: 'deleteTarget(event); return false;' %>
|
||||||
</p>
|
</p>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
<%= link_to t(".button_new_target"), '#', class: 'icon icon-add',
|
<%= link_to t(".button_new_target"), '#', class: 'icon icon-add',
|
||||||
onclick: 'newTarget(event); return false;' %>
|
onclick: 'newTarget(event); return false;' %>
|
||||||
@ -46,7 +45,7 @@
|
|||||||
new_target.find('em').text('<%= t ".choose_quantity" %>');
|
new_target.find('em').text('<%= t ".choose_quantity" %>');
|
||||||
new_target.find('label:first').hide();
|
new_target.find('label:first').hide();
|
||||||
new_target.find('input, select:first').val('');
|
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();
|
form.find('p.target:visible a.icon-del').show();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
<h2><%= t ".heading_new_target" %></h2>
|
<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,
|
<%= 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| %>
|
html: {id: 'new-target-form', name: 'new-target-form'} do |goal_f| %>
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user