mirror of
https://codeberg.org/JasterV/spazio-solazzo.git
synced 2026-04-26 18:20:03 +00:00
180 lines
5.3 KiB
Elixir
180 lines
5.3 KiB
Elixir
defmodule SpazioSolazzo.BookingSystem.Booking.Email do
|
|
@moduledoc """
|
|
Sends booking confirmation emails to the customer and admin
|
|
"""
|
|
use Phoenix.Swoosh,
|
|
view: SpazioSolazzoWeb.EmailView,
|
|
layout: {SpazioSolazzoWeb.EmailView, :layout}
|
|
|
|
import Swoosh.Email
|
|
|
|
use SpazioSolazzoWeb, :verified_routes
|
|
alias SpazioSolazzo.BookingSystem.Booking.Token
|
|
|
|
def user_booking_request_confirmation(%{
|
|
booking_id: booking_id,
|
|
customer_name: customer_name,
|
|
customer_email: customer_email,
|
|
customer_phone: customer_phone,
|
|
customer_comment: customer_comment,
|
|
space_name: space_name,
|
|
date: date,
|
|
start_time: start_time,
|
|
end_time: end_time
|
|
}) do
|
|
cancel_token = Token.generate_customer_cancel_token(booking_id)
|
|
cancel_url = url(~p"/bookings/cancel?token=#{cancel_token}")
|
|
|
|
assigns = %{
|
|
customer_name: customer_name,
|
|
customer_email: customer_email,
|
|
customer_phone: customer_phone,
|
|
customer_comment: customer_comment,
|
|
space_name: space_name,
|
|
date: date,
|
|
start_time: start_time,
|
|
end_time: end_time,
|
|
cancel_url: cancel_url,
|
|
front_office_phone_number: front_office_phone_number(),
|
|
subject: "Request Received: #{date}"
|
|
}
|
|
|
|
new()
|
|
|> to({customer_name, customer_email})
|
|
|> from({"Spazio Solazzo", spazio_solazzo_email()})
|
|
|> subject(assigns.subject)
|
|
|> render_body("user_booking_request_confirmation.html", assigns)
|
|
end
|
|
|
|
def admin_incoming_booking_request(%{
|
|
customer_name: customer_name,
|
|
customer_email: customer_email,
|
|
customer_phone: customer_phone,
|
|
customer_comment: customer_comment,
|
|
space_name: space_name,
|
|
date: date,
|
|
start_time: start_time,
|
|
end_time: end_time,
|
|
admin_email: admin_email
|
|
}) do
|
|
dashboard_url = url(~p"/admin/bookings")
|
|
|
|
assigns = %{
|
|
customer_name: customer_name,
|
|
customer_email: customer_email,
|
|
customer_phone: customer_phone,
|
|
customer_comment: customer_comment,
|
|
space_name: space_name,
|
|
date: date,
|
|
start_time: start_time,
|
|
end_time: end_time,
|
|
dashboard_url: dashboard_url,
|
|
subject: "New Booking Request: #{customer_name}"
|
|
}
|
|
|
|
new()
|
|
|> to(admin_email)
|
|
|> from({"Spazio Solazzo", spazio_solazzo_email()})
|
|
|> subject(assigns.subject)
|
|
|> render_body("admin_incoming_booking_request.html", assigns)
|
|
end
|
|
|
|
def booking_cancelled(%{
|
|
customer_name: customer_name,
|
|
customer_email: customer_email,
|
|
customer_phone: customer_phone,
|
|
space_name: space_name,
|
|
date: date,
|
|
start_time: start_time,
|
|
end_time: end_time,
|
|
cancellation_reason: cancellation_reason,
|
|
admin_email: admin_email
|
|
}) do
|
|
assigns = %{
|
|
customer_name: customer_name,
|
|
customer_email: customer_email,
|
|
customer_phone: customer_phone,
|
|
space_name: space_name,
|
|
date: date,
|
|
start_time: start_time,
|
|
end_time: end_time,
|
|
cancellation_reason: cancellation_reason,
|
|
subject: "Booking Cancelled: #{customer_name}"
|
|
}
|
|
|
|
new()
|
|
|> to(admin_email)
|
|
|> from({"Spazio Solazzo", spazio_solazzo_email()})
|
|
|> subject(assigns.subject)
|
|
|> render_body("booking_cancelled.html", assigns)
|
|
end
|
|
|
|
def booking_request_approved(%{
|
|
booking_id: booking_id,
|
|
customer_name: customer_name,
|
|
customer_email: customer_email,
|
|
customer_phone: customer_phone,
|
|
space_name: space_name,
|
|
date: date,
|
|
start_time: start_time,
|
|
end_time: end_time
|
|
}) do
|
|
cancel_token = Token.generate_customer_cancel_token(booking_id)
|
|
cancel_url = url(~p"/bookings/cancel?token=#{cancel_token}")
|
|
|
|
assigns = %{
|
|
customer_name: customer_name,
|
|
customer_email: customer_email,
|
|
customer_phone: customer_phone,
|
|
space_name: space_name,
|
|
date: date,
|
|
start_time: start_time,
|
|
end_time: end_time,
|
|
cancel_url: cancel_url,
|
|
front_office_phone_number: front_office_phone_number(),
|
|
subject: "Booking Approved: #{date}"
|
|
}
|
|
|
|
new()
|
|
|> to({customer_name, customer_email})
|
|
|> from({"Spazio Solazzo", spazio_solazzo_email()})
|
|
|> subject(assigns.subject)
|
|
|> render_body("booking_request_approved.html", assigns)
|
|
end
|
|
|
|
def booking_request_rejected(%{
|
|
customer_name: customer_name,
|
|
customer_email: customer_email,
|
|
space_name: space_name,
|
|
date: date,
|
|
start_time: start_time,
|
|
end_time: end_time,
|
|
rejection_reason: rejection_reason
|
|
}) do
|
|
assigns = %{
|
|
customer_name: customer_name,
|
|
customer_email: customer_email,
|
|
space_name: space_name,
|
|
date: date,
|
|
start_time: start_time,
|
|
end_time: end_time,
|
|
rejection_reason: rejection_reason,
|
|
front_office_phone_number: front_office_phone_number(),
|
|
subject: "Booking Request Update: #{date}"
|
|
}
|
|
|
|
new()
|
|
|> to({customer_name, customer_email})
|
|
|> from({"Spazio Solazzo", spazio_solazzo_email()})
|
|
|> subject(assigns.subject)
|
|
|> render_body("booking_request_rejected.html", assigns)
|
|
end
|
|
|
|
defp spazio_solazzo_email do
|
|
Application.get_env(:spazio_solazzo, :spazio_solazzo_email)
|
|
end
|
|
|
|
defp front_office_phone_number do
|
|
Application.get_env(:spazio_solazzo, :front_office_phone_number)
|
|
end
|
|
end
|