Merge feature/quantity-default-unit-and-taken-at

# Conflicts:
#	config/locales/en.yml
This commit is contained in:
2026-04-03 22:49:45 +00:00
17 changed files with 178 additions and 7 deletions

View File

@@ -8,6 +8,10 @@ class QuantitiesController < ApplicationController
raise AccessForbidden unless current_user.at_least(:active)
end
before_action only: [:new, :edit, :create, :update] do
@user_units = current_user.units.ordered
end
def index
@quantities = current_user.quantities.ordered.includes(:parent, :subquantities)
end

View File

@@ -86,6 +86,7 @@ module ApplicationHelper
def initialize(...)
super(...)
@default_options.merge!(@options.slice(:form))
@default_html_options.merge!(@options.slice(:form))
end
[:text_field, :password_field, :text_area].each do |selector|

View File

@@ -1,9 +1,10 @@
class Quantity < ApplicationRecord
ATTRIBUTES = [:name, :description, :parent_id]
ATTRIBUTES = [:name, :description, :parent_id, :default_unit_id]
attr_cached :depth, :pathname
belongs_to :user, optional: true
belongs_to :parent, optional: true, class_name: "Quantity"
belongs_to :default_unit, optional: true, class_name: "Unit"
has_many :subquantities, ->{ order(:name) }, class_name: "Quantity",
inverse_of: :parent, dependent: :restrict_with_error

View File

@@ -1,5 +1,5 @@
class Readout < ApplicationRecord
ATTRIBUTES = [:quantity_id, :value, :unit_id]
ATTRIBUTES = [:quantity_id, :value, :unit_id, :taken_at]
belongs_to :user
belongs_to :quantity

View File

@@ -8,7 +8,7 @@
<tr class="italic">
<td class="hexpand hmin50"><%= t '.taken_at_html' %></td>
<td colspan="3" class="ralign">
<%= form.datetime_field :taken_at, required: true %>
<%= form.datetime_field :taken_at, required: true, value: Time.current.strftime('%Y-%m-%dT%H:%M') %>
</td>
</tr>
<% end %>

View File

@@ -8,6 +8,11 @@
<td>
<%= form.text_area :description, cols: 30, rows: 1, escape: false %>
</td>
<td>
<%= form.collection_select :default_unit_id, @user_units, :id,
->(u){ sanitize('&emsp;' * (u.base_id? ? 1 : 0) + u.symbol) },
{include_blank: true}, onchange: "this.dataset.changed = ''" %>
</td>
<td class="flex">
<%= form.button %>

View File

@@ -10,6 +10,7 @@
onclick: 'this.blur();', data: {turbo_stream: true} %>
</td>
<td><%= quantity.description %></td>
<td><%= quantity.default_unit&.symbol %></td>
<% if current_user.at_least(:active) %>
<td class="flex">

View File

@@ -16,6 +16,7 @@
<tr>
<th><%= Quantity.human_attribute_name(:name) %></th>
<th class="hexpand"><%= Quantity.human_attribute_name(:description) %></th>
<th><%= Quantity.human_attribute_name(:default_unit) %></th>
<% if current_user.at_least(:active) %>
<th><%= t :actions %></th>
<th></th>
@@ -25,7 +26,7 @@
ondragover: "dragOver(event)", ondrop: "drop(event)",
ondragenter: "dragEnter(event)", ondragleave: "dragLeave(event)",
data: {drop_id: "quantity_", drop_id_param: "quantity[parent_id]"} do %>
<th colspan="4"><%= t '.top_level_drop' %></th>
<th colspan="5"><%= t '.top_level_drop' %></th>
<% end %>
</thead>
<tbody id="quantities">

View File

@@ -12,10 +12,17 @@
<td>
<%= form.collection_select :unit_id, @user_units, :id,
->(u){ sanitize('&emsp;' * (u.base_id ? 1 : 0) + u.symbol) },
{prompt: '', disabled: '', selected: ''}, required: true %>
{prompt: '', disabled: '', selected: readout.quantity.default_unit_id || ''}, required: true,
data: {default_unit_id: readout.quantity.default_unit_id || ''},
onchange: "readoutUnitChanged(this)" %>
</td>
<td class="flex">
<%# TODO: change to _link_ after giving up displaying relative paths %>
<%= image_button_tag '', 'check-circle-outline',
class: 'set-default-unit', name: nil, type: 'button', disabled: true,
title: t('readouts.form.set_default_unit'),
data: {path: quantity_path(readout.quantity)},
onclick: 'setDefaultUnit(this)' %>
<%= image_button_tag '', 'delete-outline', class: 'dangerous', name: nil,
formaction: discard_readouts_path(readout.quantity),
formmethod: :get, formnovalidate: true, data: {turbo_stream: true} %>