Files
sure/app/models/account_order.rb
Aluisio Pereira 6d4a5dd743 Add customizable menu order for user accounts (#44)
* Add customizable menu order for user accounts

Introduces a MenuOrder model and concern to allow users to select their preferred account ordering (by name or balance, ascending or descending). Adds a default_order field to users, updates user preferences UI, and applies the selected order to balance sheet account listings.

* Rename MenuOrder to AccountOrder and update user order field

Refactors the MenuOrder model to AccountOrder and updates all references accordingly. Replaces the user's default_order field with default_account_order, including migration changes, validations, and form fields. Updates localization and schema to reflect the new naming.

* Update balance_sheet.rb

* Fix for nil Current.user when rake runs in balance_sheet model

---------

Signed-off-by: Aluisio Pereira <oaluiser@gmail.com>
Co-authored-by: Juan José Mata <juanjo.mata@gmail.com>
2025-08-11 22:58:44 +02:00

61 lines
1.1 KiB
Ruby

class AccountOrder
include ActiveModel::Model
include ActiveModel::Attributes
ORDERS = {
"name_asc" => {
label: "Name (A-Z)",
label_short: "Name ↑",
sql_order: "name ASC"
},
"name_desc" => {
label: "Name (Z-A)",
label_short: "Name ↓",
sql_order: "name DESC"
},
"balance_asc" => {
label: "Balance (Low to High)",
label_short: "Balance ↑",
sql_order: "balance ASC"
},
"balance_desc" => {
label: "Balance (High to Low)",
label_short: "Balance ↓",
sql_order: "balance DESC"
}
}.freeze
attr_accessor :key
def initialize(key)
@key = key.to_s
raise ArgumentError, "Invalid order key: #{@key}" unless ORDERS.key?(@key)
end
def label
ORDERS.dig(key, :label)
end
def label_short
ORDERS.dig(key, :label_short)
end
def sql_order
ORDERS.dig(key, :sql_order)
end
class << self
def all
ORDERS.keys.map { |key| new(key) }
end
def find(key)
new(key) if ORDERS.key?(key.to_s)
end
def default
new("name_asc")
end
end
end