Commit Graph

62 Commits

Author SHA1 Message Date
0daf413b47 Prevent sole admin from deleting their account
Without this guard, the last admin in the system could delete their own
account, making the application unmanageable. This adds a model method
`User#sole_admin?`, a controller guard in `RegistrationsController#destroy`,
and disables the delete button in the profile edit view when the current
user is the only remaining admin.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-01 06:52:14 +00:00
7904ff3ef9 Add web-based installation wizard
Replace the CLI-only setup (db:seed + manual application.rb edits)
with a web wizard shown automatically on first visit when no admin
account exists yet.

SetupController (GET/POST /setup) collects the admin e-mail and
password, a "skip e-mail confirmation" toggle, and an option to
seed the built-in default units.  Once submitted it creates the
admin User, persists the chosen options as Setting records, and
redirects to the sign-in page.

ApplicationController gains a redirect_to_setup_if_needed
before_action that catches every request (including Devise routes)
when no admin exists, so a fresh installation always lands on the
wizard rather than an empty sign-in form.

A new Setting model provides a lightweight key-value store for
runtime options that were previously hard-coded in application.rb
(e.g. skip_email_confirmation).  RegistrationsController now reads
that flag from the database instead of from the application config.

Seeds.rb is kept for headless / automated deployments and skips
admin creation when an admin already exists (idempotent), with a
comment pointing to the web wizard as the preferred path.

Also extends the SQLite nil-limit fix (|| Float::INFINITY) to the
Quantity model, which suffered the same ArgumentError as Unit.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-28 17:19:24 +00:00
84945fa4b4 Simplify and improve labeled form 2026-02-22 00:53:18 +01:00
bd1a664caa Measurement form based on select-styled <details> 2026-01-31 17:22:09 +01:00
ef3484dfdf Update Measurements#new form pathnames on actions 2025-05-07 00:24:05 +02:00
c48bf290fd Implement Measurements#new 2025-02-18 11:25:32 +01:00
9d60eee16b Add Measurements tab and #new form 2025-01-25 16:34:04 +01:00
201359de3e Allow to reparent Quantity everywhere
Closes #61
2025-01-14 21:13:35 +01:00
644d1f4b9a Add Quantity #reparent action 2025-01-14 15:02:38 +01:00
0652d4a89b Disallow self- and descendant-reference for base/parent 2025-01-12 19:15:43 +01:00
d5e7ccacf5 Add Quantity #edit and #update 2025-01-11 22:51:49 +01:00
57f10c94a4 Add Quantity #new, #create, #destroy actions 2025-01-11 17:01:34 +01:00
aa862f0e90 Quantities index WIP 2025-01-05 20:47:49 +01:00
b3aea97087 Add Quantities tab 2025-01-05 03:18:39 +01:00
b133b2be7c Add seperate 'no items' message for defaults
Closes #53
2025-01-03 18:47:56 +01:00
fd4c7259b0 Move navigation tab labels 2025-01-02 02:48:33 +01:00
8552571526 Disable Unit destuction for base units with subunits
Closes #40
2024-12-28 23:57:47 +01:00
0659c1e1c1 Don't render index on Unit actions 2024-12-22 01:31:14 +01:00
d726e92445 Allow opening multiple new/edit forms
Closes #30
2024-12-21 17:52:45 +01:00
15a5515c99 Extend NumericalityValidator to check precision and scale
Use new checks on Unit.multiplier
Closes #28
2024-12-07 20:41:19 +01:00
d31ff5442a Update messages for empty Unit/default Unit indexes
Closes #26
2024-12-06 15:29:03 +01:00
b38d72e9b0 Return to per-action permission filters 2024-11-30 20:15:30 +01:00
13685aa476 Update error handling according to new rules 2024-11-30 16:28:43 +01:00
2cbae12fa2 Implement Units default destroy 2024-11-30 16:11:31 +01:00
f4ca1e91fa Mark redirecting buttons with trailing '...'
Closes #2
2024-11-23 23:26:08 +01:00
76ce2eeedd Display Unit name using #to_s 2024-11-23 02:24:08 +01:00
4c09989788 Add translation 2024-11-11 15:43:20 +01:00
9a02f0b0ae Fix quotes and translations 2024-11-10 21:46:00 +01:00
51011951f9 Default Units index 2024-11-10 21:30:19 +01:00
537cd18336 Change namespace for defaults controllers
To allow proper path prefix for view partials when using
config.action_view.prefix_partial_path_with_controller_namespace
2024-11-09 21:50:50 +01:00
07b4f89d1c Update /profile/edit layout to grid
Closes #29
2024-05-16 21:02:04 +02:00
927a8330bc Add souce code and issue tracker links
Closes #3
2024-05-12 23:21:30 +02:00
b4212298df Add Unit defaults import link 2024-05-04 01:47:53 +02:00
175ccf6eae Allow Unit rebase to top-level
Outline base Unit row during drag
Closes #25
2024-04-05 02:18:05 +02:00
a5a75233c7 Validate Unit base user 2024-04-02 22:20:45 +02:00
1966c782bc Unit rebase as a separate action 2024-04-02 22:16:27 +02:00
05b0c66216 Change unit base with drag and drop 2024-03-24 17:38:56 +01:00
f298acd726 Display errors for table-embedeed forms 2024-03-15 02:40:17 +01:00
0e8bc18620 Enable creation of subunits 2024-01-22 02:09:46 +01:00
dec3af27bf Migrate Users views to grid layout + turbo_stream
Closes #7
2024-01-17 03:30:04 +01:00
5047d4909f Render units from collection, without redirects 2024-01-15 18:45:30 +01:00
9a9a139aa7 Handle exceptions during TURBO_STREAM requests 2024-01-15 01:59:30 +01:00
0801e8059c Close form on Esc key. Localize submit button. 2024-01-06 18:06:36 +01:00
6d9f4918f1 Change 'Add unit' link to turbo_stream 2024-01-04 23:11:33 +01:00
a4745c9cb8 Add Units 2023-07-06 18:34:16 +02:00
e4f595a329 Fix translations and enable i18n testing 2023-05-14 16:37:53 +02:00
459836ca38 Add Users#disguise/#revert 2023-05-13 23:38:07 +02:00
a7fce807c5 Add Users#show 2023-05-05 18:29:11 +02:00
74965c5c0e Only user can delete his profile 2023-05-03 16:48:47 +02:00
23b8c82602 Add user profile editing 2023-05-02 18:55:38 +02:00