1
0
mirror of https://github.com/LaCasemate/fab-manager.git synced 2025-01-29 18:52:22 +01:00

[not tested] send reminder notification every hours for upcoming reservations

This commit is contained in:
Sylvain 2016-08-17 17:39:12 +02:00
parent b166d6abc6
commit cc1d6e4f21
9 changed files with 67 additions and 0 deletions

View File

@ -41,5 +41,6 @@ class NotificationType
notify_admin_user_wallet_is_credited
notify_admin_export_complete
notify_member_about_coupon
notify_member_reservation_reminder
)
end

View File

@ -0,0 +1,5 @@
json.title notification.notification_type
json.description t('.reminder_you_have_a_reservation_RESERVABLE_to_be_held_on_DATE_html',
RESERVABLE: notification.attached_object.reservable.name,
DATE: I18n.l(notification.attached_object.slots.order(:start_at).first.start_at, format: :long))
json.url notification_url(notification, format: :json)

View File

@ -0,0 +1,18 @@
<%= render 'notifications_mailer/shared/hello', recipient: @recipient %>
<p>
<%= t('.body.this_is_a_reminder_about_your_reservation_RESERVABLE_to_be_held_on_DATE_html',
RESERVABLE: @attached_object.reservable.name,
DATE: I18n.l(@attached_object.slots.order(:start_at).first.start_at, format: :long)
)
%>
</p>
<p>
<%= t('.body.this_reservation_concerns_the_following_slots') %>
<ul>
<% @attached_object.slots.order(:start_at).each do |slot| %>
<li><%= "#{I18n.l slot.start_at, format: :long} - #{I18n.l slot.end_at, format: :hour_minute}" %></li>
<% end %>
</ul>
</p>

View File

@ -0,0 +1,22 @@
class ReservationReminderWorker
include Sidekiq::Worker
## In case the reminder is enabled but no delay were configured, we use this default value
DEFAULT_REMINDER_DELAY = 24.hours
def perform
enabled = Setting.find_by(name: 'reminder_enable').try(:value)
if enabled == 'true'
delay = Setting.find_by(name: 'reminder_delay').try(:value).try(:to_i).try(:hours) || DEFAULT_REMINDER_DELAY
starting = Time.now.beginning_of_hour + delay
ending = starting + 1.hour
Reservation.includes(:slots).where('slots.start_at >= ? AND slots.start_at <= ?', starting, ending).each do |r|
NotificationCenter.call type: 'notify_member_reservation_reminder',
receiver: r.user,
attached_object: r
end
end
end
end

View File

@ -213,6 +213,8 @@ en:
a_new_user_account_has_been_imported_from_PROVIDER_(UID)_html: "A new user account has been imported from: <strong><em>%{PROVIDER}</strong> (%{UID})</em>."
notify_member_create_reservation:
your_reservation_RESERVABLE_was_successfully_saved_html: "Your reservation <strong><em>%{RESERVABLE}</em></strong> was successfully saved."
notify_member_reservation_reminder:
reminder_you_have_a_reservation_RESERVABLE_to_be_held_on_DATE_html: "Reminder: You have a reservation <strong>%{RESERVABLE}</strong> to be held on <em>%{DATE}</em>"
notify_member_slot_is_canceled:
your_reservation_RESERVABLE_of_DATE_was_successfully_cancelled: "Your reservation %{RESERVABLE} of %{DATE} was successfully cancelled."
notify_member_slot_is_modified:

View File

@ -213,6 +213,8 @@ fr:
a_new_user_account_has_been_imported_from_PROVIDER_(UID)_html: "Un nouveau compte utilisateur vient d'être importé depuis : <strong><em>%{PROVIDER}</strong> (%{UID})</em>."
notify_member_create_reservation:
your_reservation_RESERVABLE_was_successfully_saved_html: "Votre réservation <strong><em>%{RESERVABLE}</em></strong> a bien été enregistrée."
notify_member_reservation_reminder:
reminder_you_have_a_reservation_RESERVABLE_to_be_held_on_DATE_html: "Rappel : Vous avez une réservation <strong>%{RESERVABLE}</strong> qui aura lieu le <em>%{DATE}</em>"
notify_member_slot_is_canceled:
your_reservation_RESERVABLE_of_DATE_was_successfully_cancelled: "Votre réservation %{RESERVABLE} du %{DATE} a bien été annulée."
notify_member_slot_is_modified:

View File

@ -131,6 +131,12 @@ en:
invoice_in_your_dashboard_html: "You can access your invoice in %{DASHBOARD} on the Fab Lab website."
your_dashboard: "your dashboard"
notify_member_reservation_reminder:
subject: "Reservation reminder"
body:
this_is_a_reminder_about_your_reservation_RESERVABLE_to_be_held_on_DATE_html: "This is a reminder about your reservation <strong>%{RESERVABLE}</strong> to be held on <em>%{DATE}</em>"
this_reservation_concerns_the_following_slots: "This reservation concerns the following slots:"
notify_member_avoir_ready:
subject: "Your FabLab's refund invoice"
body:

View File

@ -131,6 +131,12 @@ fr:
invoice_in_your_dashboard_html: "Vous pouvez à tout moment retrouver votre facture dans %{DASHBOARD} sur le site du Fab Lab."
your_dashboard: "votre tableau de bord"
notify_member_reservation_reminder:
subject: "Rappel de réservation"
body:
this_is_a_reminder_about_your_reservation_RESERVABLE_to_be_held_on_DATE_html: "Ceci est un rappel concernant votre réservation <strong>%{RESERVABLE}</strong> qui aura lieu le <em>%{DATE}</em>"
this_reservation_concerns_the_following_slots: "Cette réservation concerne les créneaux suivants :"
notify_member_avoir_ready:
subject: "Votre facture d'avoir du FabLab"
body:

View File

@ -19,4 +19,9 @@ open_api_trace_calls_count:
cron: "0 4 * * 0" # every sunday at 4am
class: "OpenAPITraceCallsCountWorker"
reservation_reminder:
cron: "1 * * * *"
class: "ReservationReminderWorker"
queue: default
<%= PluginRegistry.insert_code('yml.schedule') %>