This commit implements a complete email notifications system for purchase confirmations and event reminders as requested in the medium priority backlog tasks. ## Features Added ### Purchase Confirmation Emails - Automatically sent when orders are marked as paid - Supports both single tickets and multi-ticket orders - Includes PDF ticket attachments - Professional HTML and text templates in French ### Event Reminder Emails - Automated reminders sent 7 days, 1 day, and day of events - Only sent to users with active tickets - Smart messaging based on time until event - Venue details and ticket information included ### Background Jobs - EventReminderJob: Sends reminders to all users for a specific event - EventReminderSchedulerJob: Daily scheduler to queue reminder jobs - Proper error handling and logging ### Email Templates - Responsive HTML templates with ApéroNight branding - Text fallbacks for better email client compatibility - Dynamic content based on number of tickets and time until event ### Configuration & Testing - Environment-based SMTP configuration for production - Development setup with MailCatcher support - Comprehensive test suite with mocking for PDF generation - Integration tests for end-to-end functionality - Documentation with usage examples ## Technical Implementation - Enhanced TicketMailer with new notification methods - Background job scheduling via Rails initializer - Order model integration for automatic purchase confirmations - Proper associations handling for user/ticket relationships - Configurable via environment variables ## Files Added/Modified - Enhanced app/mailers/ticket_mailer.rb with order support - Added app/jobs/event_reminder_*.rb for background processing - Updated email templates in app/views/ticket_mailer/ - Added automatic scheduling in config/initializers/ - Comprehensive test coverage in test/ directory - Complete documentation in docs/email-notifications.md 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
40 lines
1.6 KiB
Plaintext
Executable File
40 lines
1.6 KiB
Plaintext
Executable File
Bonjour <%= @user.email.split('@').first %>,
|
|
|
|
<% if defined?(@order) && @order.present? %>
|
|
Merci pour votre achat ! Nous avons le plaisir de vous confirmer votre commande pour l'événement "<%= @event.name %>".
|
|
|
|
DÉTAILS DE VOTRE COMMANDE
|
|
=========================
|
|
|
|
Événement : <%= @event.name %>
|
|
Date & heure : <%= @event.start_time.strftime("%d %B %Y à %H:%M") %>
|
|
Nombre de billets : <%= @tickets.count %>
|
|
Total : <%= number_to_currency(@order.total_amount_euros, unit: "€") %>
|
|
|
|
BILLETS INCLUS :
|
|
<% @tickets.each_with_index do |ticket, index| %>
|
|
- Billet #<%= index + 1 %> : <%= ticket.ticket_type.name %> - <%= number_to_currency(ticket.price_cents / 100.0, unit: "€") %>
|
|
<% end %>
|
|
|
|
Vos billets sont attachés à cet email en format PDF. Présentez-les à l'entrée de l'événement pour y accéder.
|
|
|
|
Important : Ces billets sont valables pour une seule entrée chacun. Conservez-les précieusement.
|
|
<% else %>
|
|
Merci pour votre achat ! Nous avons le plaisir de vous confirmer votre billet pour l'événement "<%= @event.name %>".
|
|
|
|
DÉTAILS DE VOTRE BILLET
|
|
======================
|
|
|
|
Événement : <%= @event.name %>
|
|
Type de billet : <%= @ticket.ticket_type.name %>
|
|
Date & heure : <%= @event.start_time.strftime("%d %B %Y à %H:%M") %>
|
|
Prix : <%= number_to_currency(@ticket.price_cents / 100.0, unit: "€") %>
|
|
|
|
Votre billet est attaché à cet email en format PDF. Présentez-le à l'entrée de l'événement pour y accéder.
|
|
|
|
Important : Ce billet est valable pour une seule entrée. Conservez-le précieusement.
|
|
<% end %>
|
|
|
|
Si vous avez des questions, contactez-nous à support@aperonight.com
|
|
|
|
© <%= Time.current.year %> ApéroNight. Tous droits réservés. |