Add SMS quote approval, fix Twilio credentials, fix passkey post-login redirect

- Add 'Send Quote via SMS' button on quote details page that sends the approval
  link to the customer via SMS (respects NotifyBySms, handles prospects via ProspectPhone)
- Reuses existing valid approval token rather than regenerating, so a previously
  emailed link stays valid when SMS is also sent
- Fix Twilio appsettings.json placeholders (real credentials moved to gitignored
  appsettings.Development.json)
- Fix passkey login ignoring ReturnUrl: biometric login on the login page now
  respects the form's ReturnUrl hidden field so QR-code and deep-link flows
  redirect correctly after authentication instead of always going to the dashboard

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-02 09:38:55 -04:00
parent d9bf80cc9a
commit a2d48c8b58
6 changed files with 238 additions and 5 deletions
@@ -11,6 +11,13 @@ public interface INotificationService
/// </summary>
Task NotifyQuoteSentAsync(Quote quote, byte[]? pdfAttachment = null, string? pdfFilename = null);
/// <summary>
/// Sends the quote approval link to the customer via SMS.
/// Handles both registered customers (respects NotifyBySms) and prospects (ProspectPhone).
/// Returns (success, errorMessage) so the caller can surface the result to the user.
/// </summary>
Task<(bool Success, string? Error)> NotifyQuoteSentSmsAsync(Quote quote);
/// <summary>
/// Notify when a quote is approved by a customer.
/// </summary>