module EntriesHelper def entries_by_date(entries, totals: false) transfer_groups = entries.group_by do |entry| # Only check for transfer if it's a transaction next nil unless entry.entryable_type == "Transaction" entry.entryable.transfer&.id end # For a more intuitive UX, we do not want to show the same transfer twice in the list deduped_entries = transfer_groups.flat_map do |transfer_id, grouped_entries| if transfer_id.nil? || grouped_entries.size == 1 grouped_entries else grouped_entries.reject do |e| e.entryable_type == "Transaction" && e.entryable.transfer_as_inflow.present? end end end deduped_entries.group_by(&:date).sort.reverse_each.map do |date, grouped_entries| content = capture do yield grouped_entries end next if content.blank? render partial: "entries/entry_group", locals: { date:, entries: grouped_entries, content:, totals: } end.compact.join.html_safe end def entry_name_detailed(entry) [ entry.date, format_money(entry.amount_money), entry.account.name, entry.name ].join(" • ") end end