Files
claudetools/projects/msp-tools/quote-wizard/session-logs/2026-03-13-session.md
azcomputerguru 1a26eb051a docs: Add quote wizard session log for 2026-03-13
- Document amount mismatch bug fix (serviceInterests)
- Document email sender/reply-to configuration
- Document submit button disabled state fix
- Include deployment details and SSH access notes

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-03-13 05:07:29 -07:00

3.0 KiB

Quote Wizard Session - 2026-03-13

Summary

Fixed multiple bugs in the MSP Quote Wizard and deployed updates to IX server.

Bugs Fixed

1. Amount Mismatch Bug ($710 displayed vs $330 saved)

Root Cause: calculateQuote() in useQuote.ts was including GPS and Support costs unconditionally, without checking serviceInterests flags. GPS and Support were enabled by default in initialServiceInterests.

Fix: Updated calculateQuote() to check serviceInterests.gps and serviceInterests.support before including those costs:

const gpsMonthly = serviceInterests.gps ? getGPSMonthly() : 0;
const supportMonthly = serviceInterests.support ? getSupportMonthly() : 0;

Files Changed:

  • frontend/src/hooks/useQuote.ts - calculateQuote() now respects serviceInterests
  • frontend/src/components/wizard/steps/Step6Summary.tsx - Conditionally render GPS/Support sections

2. Email Sender Name ("Seafile Noreply")

Root Cause: Graph API sendMail was using the mailbox's configured display name instead of specifying one in the API call.

Fix: Added from and replyTo fields to the Graph API request:

'from' => [
    'emailAddress' => [
        'name' => 'Arizona Computer Guru',
        'address' => GRAPH_SENDER_EMAIL,
    ],
],
'replyTo' => [
    [
        'emailAddress' => [
            'name' => 'Arizona Computer Guru',
            'address' => 'admin@azcomputerguru.com',
        ],
    ],
],

Files Changed:

  • php-api/api/config.php - Added GRAPH_SENDER_NAME, GRAPH_REPLY_TO_EMAIL, GRAPH_REPLY_TO_NAME
  • php-api/api/services/email_service.php - Added from/replyTo to sendMail payload

3. Submit Button Not Disabled

Issue: Submit button was clickable before terms checkbox was selected.

Fix: Added !contactInfo.agreedToTerms to disabled condition:

disabled={isSubmitting || !contactInfo.agreedToTerms}

Files Changed:

  • frontend/src/components/wizard/steps/Step7Contact.tsx

Deployments

Frontend (React)

  • Built with Vite: npm run build
  • Deployed to IX: /home/azcomputerguru/public_html/quote/
  • Latest bundle: index-DunPq78q.js

Backend (PHP)

  • Updated config.php with email settings
  • Updated email_service.php with from/replyTo fields
  • Files deployed via SCP to IX server

Database Verification

Confirmed quotes are saving correctly:

  • Test Two: $295 (GPS $260 + Web Hosting $35) - NO phantom support charge
  • Mike Test: $330 (GPS $260 + M365 $70)

Configuration

Git Commits

  • c629890 - fix: Quote wizard - correct total calculation and email sender
  • c79c81e - sync: Submit button disabled until terms agreed

SSH Access (from Mac)

Working command:

ssh -o IdentitiesOnly=yes -i ~/.ssh/id_ed25519 root@172.16.3.10

Notes

  • Browser caching may show old JS bundle - hard refresh required (Cmd+Shift+R)
  • Cloudflare blocks curl requests to API - browser access works fine