nhance/public/dev_logs/2026-03-20.md
2026-03-23 18:33:11 +05:30

3.1 KiB

Release Summary — 2026-03-20


1. QCR Sheet Creation (Non-EB Lead)

  • Added QCR button in the Non-EB lead row dropdown (leads list page).
  • Clicking QCR copies the existing RFQ Google Sheet for that lead, renames the copy by replacing "RFQ" with "QCR" in the filename, and places it in the same parent folder.
  • The created sheet's Google File ID is saved to leads.misc (as qcr_sheet_id).
  • Lead status is updated to qcr_created upon successful creation.
  • If a QCR sheet already exists for the lead, the existing sheet URL is returned directly (no duplicate creation).
  • A full-screen "Creating RFQ/QCR file, this may take a while, please wait..." overlay is shown during the AJAX call and hidden on completion.

2. RFQ/QCR Parent Folder ID — Environment Variable

  • RFQ_PARENT_FOLDER_ID is now loaded from the .env file instead of being hardcoded in RfqConfig.php.
  • Placeholder key added to .env.sample for environment setup reference.

3. RFQ/QCR File Viewers (Non-EB Lead Form)

  • Added a "RFQ/QCR File Viewers" searchable multi-select field (Select2) on the Non-EB lead create/edit form, positioned before the Sales Person and Status fields.
  • Populated with sales team email addresses.
  • At least one viewer must be selected (validated on submit).
  • Selected viewer emails are stored as a JSON array in a new database column leads.rfq_qcr_viewers.
  • When an RFQ or QCR sheet is created, the selected viewer emails are applied as Google Sheet viewer permissions automatically.

DB Change Required:

ALTER TABLE leads ADD COLUMN rfq_qcr_viewers TEXT NULL;

4. Lead Attachment File Upload (All Mail Modals)

  • Added a file upload control (label, file input, "Upload & Add" button) inside the attachment section of all four mail modals: Internal Mail, Client Mail, Insurer Mail, and Placement Mail.
  • On upload:
    • File is saved to the server under uploads/lead_files/.
    • A record is inserted into the lead_files table.
    • The attachment selection list in the modal is refreshed automatically to include the newly uploaded file.

5. External CC Field (Client Mail & Placement Mail)

  • Added a manual External CC input field (comma-separated email addresses) to:
    • Client Mail modal — visible only when sending a Client Mail (hidden for Insurer Mail).
    • Placement Mail modal — always visible.
  • On send:
    1. The field value is validated as a comma-separated list of valid email addresses. Invalid entries show an error toast.
    2. If valid external emails are present, a Bootstrap confirmation modal warns the user that the mail will be sent to external addresses.
    3. On confirmation, the mail is sent; on cancel, the action is aborted.
  • Merge strategy:
    • Placement Mail: external CC emails are merged directly into the CC array (both are email strings) on the client side before the AJAX call.
    • Client Mail: external CC emails are kept as a separate field and merged into the CC list on the server side, after internal user CC addresses are resolved from user IDs.