diff --git a/app/controllers/measurements_controller.rb b/app/controllers/measurements_controller.rb index ebe6622..42ff983 100644 --- a/app/controllers/measurements_controller.rb +++ b/app/controllers/measurements_controller.rb @@ -1,7 +1,13 @@ class MeasurementsController < ApplicationController + before_action except: :index do + raise AccessForbidden unless current_user.at_least(:active) + end + def index - @measurements = [] - #@measurements = current_user.units.ordered.includes(:base, :subunits) + readouts = current_user.readouts.includes(:quantity, :unit).order(created_at: :desc) + @measurements = readouts.group_by(&:created_at).map do |created_at, grouped| + Measurement.new(created_at: created_at, readouts: grouped) + end end def new @@ -9,8 +15,33 @@ class MeasurementsController < ApplicationController end def create + timestamp = Time.current + @readouts = readout_params.map do |rp| + r = current_user.readouts.new(rp) + r.created_at = timestamp + r + end + + if @readouts.all?(&:valid?) + Readout.transaction { @readouts.each(&:save!) } + @measurement = Measurement.new(readouts: @readouts, created_at: timestamp) + flash.now[:notice] = t('.success') + else + render :new, status: :unprocessable_entity + end end def destroy + @measurement = Measurement.new(id: params[:id].to_i, + created_at: Time.at(params[:id].to_i)) + current_user.readouts.where(created_at: @measurement.created_at).delete_all + @measurements_empty = current_user.readouts.empty? + flash.now[:notice] = t('.success') + end + + private + + def readout_params + params.require(:readouts).map { |r| r.permit(:quantity_id, :value, :unit_id) } end end diff --git a/app/models/measurement.rb b/app/models/measurement.rb index 7d19965..8ffabac 100644 --- a/app/models/measurement.rb +++ b/app/models/measurement.rb @@ -1,3 +1,17 @@ class Measurement include ActiveModel::Model + + attr_accessor :readouts, :created_at + + def id + created_at.to_i + end + + def to_param + id.to_s + end + + def persisted? + true + end end diff --git a/app/views/measurements/_measurement.html.erb b/app/views/measurements/_measurement.html.erb new file mode 100644 index 0000000..10d506f --- /dev/null +++ b/app/views/measurements/_measurement.html.erb @@ -0,0 +1,14 @@ +<%= tag.tr id: dom_id(measurement) do %> +