feat: Add SMTP settings and collapsible email configuration UI

- Add SMTP fields to TicketEmailSettings model (host, port, TLS/SSL, credentials, from email/name)
- Update serializers with SMTP fields and is_smtp_configured flag
- Add TicketEmailTestSmtpView for testing SMTP connections
- Update frontend API types and hooks for SMTP settings
- Add collapsible IMAP and SMTP configuration sections with "Configured" badges
- Fix TypeScript errors in mockData.ts (missing required fields, type mismatches)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
poduck
2025-11-29 18:28:29 -05:00
parent 0c7d76e264
commit cfc1b36ada
94 changed files with 13419 additions and 1121 deletions

133
TODO_EMAIL_AND_MESSAGING.md Normal file
View File

@@ -0,0 +1,133 @@
# Email Templates & Messaging TODO
## Completed Features
### Email Template System (Implemented)
- [x] EmailTemplate model with BUSINESS and PLATFORM scopes
- [x] Categories: Appointment, Reminder, Confirmation, Marketing, Notification, Report, Other
- [x] Template variables: `{{BUSINESS_NAME}}`, `{{CUSTOMER_NAME}}`, `{{APPOINTMENT_DATE}}`, etc.
- [x] Backend API (CRUD, preview, duplicate)
- [x] Frontend Email Templates page with list/create/edit/delete
- [x] EmailTemplateForm component with code editor and preview
- [x] EmailTemplateSelector component for plugin configuration
- [x] Plugin config support for `email_template` type variables
- [x] Footer enforcement for FREE tier tenants
- [x] Default templates seed command (`python manage.py seed_email_templates`)
### Default Email Templates Created
- [x] Appointment Confirmation
- [x] Appointment Reminder - 24 Hours
- [x] Appointment Reminder - 1 Hour
- [x] Appointment Rescheduled
- [x] Appointment Cancelled
- [x] Thank You - Appointment Complete
- [x] Welcome New Customer
### Ticket Email Templates (Added)
- [x] Ticket Assigned - Notification to staff when assigned
- [x] Ticket Status Changed - Status update notification
- [x] Ticket Reply - Staff Notification - When customer replies
- [x] Ticket Reply - Customer Notification - When staff replies
- [x] Ticket Resolved - Resolution confirmation
### Plugin Documentation Updated
- [x] Documented `email_template` variable type in SCHEDULER_PLUGIN_SYSTEM.md
- [x] Added template variable types table (text, textarea, email, number, url, email_template)
- [x] Added ticket-related insertion codes to template_parser.py
---
## Pending Features
### Customer Onboarding Email Process
- [ ] Welcome email when customer creates account
- [ ] Email verification workflow
- [ ] First booking celebration email
- [ ] Loyalty program introduction email (if enabled)
### Internal Staff Messaging System
- [ ] Message model (sender, recipient, subject, body, read status)
- [ ] Conversation threading
- [ ] Messaging UI in sidebar/header
- [ ] Unread count badge
- [ ] Push notifications for new messages
- [ ] Email notification option for messages
### Ticket Email Notifications
- [x] Email templates created (see "Ticket Email Templates" in Completed)
- [x] Ticket email notification service (`tickets/email_notifications.py`)
- TicketEmailService class with methods for each notification type
- Renders email templates with ticket context variables
- Falls back to default text templates if custom templates not found
- Includes Reply-To header with ticket ID for email threading
- [x] Django signals to trigger emails on ticket events (`tickets/signals.py`)
- Pre-save handler to track state changes (assignee, status)
- Post-save handlers for assignment, status change, and resolution
- Comment handler for reply notifications
- [x] Reply-To header with ticket ID for inbound processing
- Format: `support+ticket-{id}@{domain}`
- X-Ticket-ID header for easy parsing
### Email Reply Forwarding (Inbound Email Processing)
- [ ] Setup inbound email handling (mail.talova.net integration)
- [ ] Parse incoming emails to support@smoothschedule.com (or per-tenant)
- [ ] Extract ticket ID from subject line or headers
- [ ] Create ticket reply from email content
- [ ] Notify assignee of new reply
- [ ] Handle attachments
---
## Email Server Details
Current email server: `mail.talova.net`
Test account: `poduck@mail.talova.net`
### Inbound Email Options
1. **Mailgun/SendGrid Inbound Routes**
- Forward to webhook endpoint
- Parse and process programmatically
- Best for scalability
2. **IMAP Polling**
- Connect to mail.talova.net via IMAP
- Poll for new messages periodically
- Process and delete/archive
3. **Email Piping**
- Configure MTA to pipe emails to a Django management command
- Real-time processing
- Requires server access
---
## Platform vs Business Templates
### Platform Templates (Scope: PLATFORM)
Used for system-wide emails:
- Tenant invitation
- Platform announcements
- System notifications
### Business Templates (Scope: BUSINESS)
Per-tenant customizable templates:
- Appointment confirmations
- Reminders
- Customer communications
- Marketing emails
---
## Running the Seed Command
```bash
# Seed templates for all tenant schemas
docker compose -f docker-compose.local.yml exec django python manage.py seed_email_templates
# Seed for specific schema
docker compose -f docker-compose.local.yml exec django python manage.py seed_email_templates --schema=demo
# Reset to defaults (overwrites existing)
docker compose -f docker-compose.local.yml exec django python manage.py seed_email_templates --reset
```