forked from fixin.me/fixin.me
48 lines
1.4 KiB
Ruby
48 lines
1.4 KiB
Ruby
class MeasurementsController < ApplicationController
|
|
before_action except: :index do
|
|
raise AccessForbidden unless current_user.at_least(:active)
|
|
end
|
|
|
|
def index
|
|
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
|
|
@quantities = current_user.quantities.ordered
|
|
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
|