diff --git a/app/assets/stylesheets/events/new/index.scss b/app/assets/stylesheets/events/new/index.scss
index 87ae7a364f..f62a82b3c5 100644
--- a/app/assets/stylesheets/events/new/index.scss
+++ b/app/assets/stylesheets/events/new/index.scss
@@ -8,4 +8,9 @@
max-width: 270px;
}
+.timezone-select {
+ margin: 0 auto;
+ max-width: 350px;
+}
+
.location-step .fieldsLayout--two { margin: 0 30px; }
diff --git a/app/controllers/events_controller.rb b/app/controllers/events_controller.rb
index cc9a132215..e78e0fd9be 100644
--- a/app/controllers/events_controller.rb
+++ b/app/controllers/events_controller.rb
@@ -29,19 +29,21 @@ def show
end
def create
+ Time.use_zone(params[:event][:timezone] || current_nonprofit.timezone) do
+ params[:event][:start_datetime] = Chronic.parse(params[:event][:start_datetime]) if params[:event][:start_datetime].present?
+ params[:event][:end_datetime] = Chronic.parse(params[:event][:end_datetime]) if params[:event][:end_datetime].present?
+ end
+ event = current_nonprofit.events.create(params[:event])
+
render_json do
- Time.use_zone(current_nonprofit.timezone || "UTC") do
- params[:event][:start_datetime] = Chronic.parse(params[:event][:start_datetime]) if params[:event][:start_datetime].present?
- params[:event][:end_datetime] = Chronic.parse(params[:event][:end_datetime]) if params[:event][:end_datetime].present?
- end
- flash[:notice] = "Your draft event has been created! Well done."
- ev = current_nonprofit.events.create(params[:event])
- {url: "/events/#{ev.slug}", event: ev}
+ flash[:notice] = "Your draft event has been created! Well done." if event.persisted?
+
+ { url: "/events/#{event.slug}", event: }
end
end
def update
- Time.use_zone(current_nonprofit.timezone || "UTC") do
+ Time.use_zone(current_event.timezone) do
params[:event][:start_datetime] = Chronic.parse(params[:event][:start_datetime]) if params[:event][:start_datetime].present?
params[:event][:end_datetime] = Chronic.parse(params[:event][:end_datetime]) if params[:event][:end_datetime].present?
end
@@ -75,6 +77,6 @@ def stats
end
def name_and_id
- @events = current_nonprofit.events.not_deleted.order("events.name ASC")
+ @events = current_nonprofit.events.not_deleted.order("events.name ASC").select(:name, :id)
end
end
diff --git a/app/legacy_lib/format/date.rb b/app/legacy_lib/format/date.rb
index 181b9444bb..fa36b48d40 100644
--- a/app/legacy_lib/format/date.rb
+++ b/app/legacy_lib/format/date.rb
@@ -41,5 +41,9 @@ def self.time(datetime, timezone = nil)
datetime = datetime.in_time_zone(timezone) if timezone
datetime.strftime("%l:%M%P")
end
+
+ def self.timezone(timezone)
+ Time.now.in_time_zone(timezone).strftime('%Z')
+ end
end
end
diff --git a/app/legacy_lib/query_event_metrics.rb b/app/legacy_lib/query_event_metrics.rb
index 0a9450c5c4..d742302428 100644
--- a/app/legacy_lib/query_event_metrics.rb
+++ b/app/legacy_lib/query_event_metrics.rb
@@ -55,7 +55,8 @@ def self.for_listings(id_type, id, params)
"events.start_datetime",
"events.end_datetime",
"events.organizer_email",
- "events.in_person_or_virtual"
+ "events.in_person_or_virtual",
+ "events.timezone"
]
exp = QueryEventMetrics.expression(selects)
diff --git a/app/models/event.rb b/app/models/event.rb
index 17e906acdf..40613d7cbf 100644
--- a/app/models/event.rb
+++ b/app/models/event.rb
@@ -33,7 +33,8 @@ class Event < ApplicationRecord
:organizer_email, # string
:receipt_message, # text
:nonprofit,
- :in_person_or_virtual
+ :in_person_or_virtual,
+ :timezone # string (timezone): event time zone if different from nonprofit timezone
enum :in_person_or_virtual, %w[in_person virtual].index_by(&:itself), validate: true
@@ -87,6 +88,8 @@ class Event < ApplicationRecord
end
self.published = false if published.nil?
self.total_raised ||= 0
+ self.timezone = nonprofit_timezone || "UTC"
+
self
end
@@ -123,4 +126,8 @@ def fee_coverage_option
def get_tickets_button_label
misc_event_info&.custom_get_tickets_button_label || "Get Tickets"
end
+
+ def timezone_with_fallback
+ timezone.presence || nonprofit_timezone
+ end
end
diff --git a/app/views/events/_date_time.html.erb b/app/views/events/_date_time.html.erb
index 0d621f16e0..3c0be84390 100644
--- a/app/views/events/_date_time.html.erb
+++ b/app/views/events/_date_time.html.erb
@@ -3,7 +3,7 @@
<%= Format::Date.full_range(event.start_datetime, event.end_datetime, event.nonprofit_timezone) %>
++ <%= Format::Date.full_range(event.start_datetime, event.end_datetime, event.timezone_with_fallback) %> <%= Format::Date.timezone(event.timezone_with_fallback) %> +