From d1ddb8d2992dbf73a9a2469455b2936e47c2a795 Mon Sep 17 00:00:00 2001 From: Jason Zimdars Date: Tue, 4 Feb 2025 15:49:34 -0600 Subject: [PATCH] Track events on due dates --- app/assets/images/calendar.svg | 1 + app/helpers/events_helper.rb | 9 ++++++++- app/models/bubble.rb | 13 +++++++++++++ app/models/event_summary.rb | 6 ++++++ db/migrate/20250204211520_add_due_date_to_events.rb | 5 +++++ db/schema.rb | 3 ++- 6 files changed, 35 insertions(+), 2 deletions(-) create mode 100644 app/assets/images/calendar.svg create mode 100644 db/migrate/20250204211520_add_due_date_to_events.rb diff --git a/app/assets/images/calendar.svg b/app/assets/images/calendar.svg new file mode 100644 index 000000000..9e25f1564 --- /dev/null +++ b/app/assets/images/calendar.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/helpers/events_helper.rb b/app/helpers/events_helper.rb index 2f20a7bfe..b02523ae7 100644 --- a/app/helpers/events_helper.rb +++ b/app/helpers/events_helper.rb @@ -65,8 +65,13 @@ module EventsHelper "Popped by #{ event.creator.name }" when "staged" "#{event.creator.name} moved to #{event.stage_name}." + when "due_date_added" + "#{event.creator.name} set the date to #{event.particulars.dig('particulars', 'due_date').to_date.strftime('%B %-d')}" + when "due_date_changed" + "#{event.creator.name} changed the date to #{event.particulars.dig('particulars', 'due_date').to_date.strftime('%B %-d')}" + when "due_date_removed" + "#{event.creator.name} removed the date" end - # FIXME: Should track dates(added/changed) and perhaps "renamed" end def event_action_icon(event) @@ -79,6 +84,8 @@ module EventsHelper "bolt" when "unassigned" "remove-med" + when "due_date_added", "due_date_changed" + "calendar" else "check" end diff --git a/app/models/bubble.rb b/app/models/bubble.rb index 5313038ed..355703849 100644 --- a/app/models/bubble.rb +++ b/app/models/bubble.rb @@ -10,6 +10,7 @@ class Bubble < ApplicationRecord has_one_attached :image, dependent: :purge_later before_save :set_default_title + after_save :track_due_date_change, if: :saved_change_to_due_on? scope :reverse_chronologically, -> { order created_at: :desc, id: :desc } scope :chronologically, -> { order created_at: :asc, id: :asc } @@ -32,6 +33,18 @@ class Bubble < ApplicationRecord end private + def track_due_date_change + if due_on.present? + if due_on_before_last_save.nil? + track_event("due_date_added", particulars: { due_date: due_on }) + else + track_event("due_date_changed", particulars: { due_date: due_on }) + end + elsif due_on_before_last_save.present? + track_event("due_date_removed") + end + end + def set_default_title self.title = title.presence || "Untitled" end diff --git a/app/models/event_summary.rb b/app/models/event_summary.rb index b24818fac..4cfb3e9dc 100644 --- a/app/models/event_summary.rb +++ b/app/models/event_summary.rb @@ -27,6 +27,12 @@ class EventSummary < ApplicationRecord "#{event.creator.name} moved this to '#{event.stage_name}'." when "unstaged" "#{event.creator.name} removed this from '#{event.stage_name}'." + when "due_date_added" + "#{event.creator.name} set due date to #{event.particulars.dig('particulars', 'due_date').to_date.strftime('%B %-d')}." + when "due_date_changed" + "#{event.creator.name} changed due date to #{event.particulars.dig('particulars', 'due_date').to_date.strftime('%B %-d')}." + when "due_date_removed" + "#{event.creator.name} removed the date." end end diff --git a/db/migrate/20250204211520_add_due_date_to_events.rb b/db/migrate/20250204211520_add_due_date_to_events.rb new file mode 100644 index 000000000..635d74d8b --- /dev/null +++ b/db/migrate/20250204211520_add_due_date_to_events.rb @@ -0,0 +1,5 @@ +class AddDueDateToEvents < ActiveRecord::Migration[8.1] + def change + add_column :events, :due_date, :date + end +end diff --git a/db/schema.rb b/db/schema.rb index 3cf72d01e..e81962738 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[8.1].define(version: 2025_01_21_174109) do +ActiveRecord::Schema[8.1].define(version: 2025_02_04_211520) do create_table "accesses", force: :cascade do |t| t.integer "bucket_id", null: false t.integer "user_id", null: false @@ -148,6 +148,7 @@ ActiveRecord::Schema[8.1].define(version: 2025_01_21_174109) do t.datetime "updated_at", null: false t.integer "summary_id", null: false t.integer "bubble_id", null: false + t.date "due_date" t.index ["bubble_id"], name: "index_events_on_bubble_id" t.index ["creator_id"], name: "index_events_on_creator_id" t.index ["summary_id", "action"], name: "index_events_on_summary_id_and_action"