Commit Graph

26 Commits

Author SHA1 Message Date
Paul Huliganga 26f7067cb5 fix(i18n): detect Spanish language variants for flow greeting/signoff 2026-03-24 15:37:38 -04:00
Paul Huliganga a81d5788c7 feat(i18n): add Spanish greeting/signoff when language='es'; update authReleaseFormCopies doc 2026-03-24 13:52:58 -04:00
Paul Huliganga a3ebafe506 feat: prefix envelope subject with 'Docusign: ' 2026-03-24 11:10:56 -04:00
Paul Huliganga 06e2a14de5 feat: update email intro text; allow up to 5 copies of Authorization to Release form; update flows and docs 2026-03-24 10:58:37 -04:00
Paul Huliganga 5b68f341ef style: shorten email body divider line from 60 to 40 characters 2026-03-13 16:06:35 -04:00
Paul Huliganga 3f3fe8dd71 feat: add greeting, dividers, and sign-off to envelope email body
- Prepend 'Hello,' greeting before first template body
- Separate template bodies with a blank line + horizontal rule + blank line
- Append 'Thank you, / Early Intervention Colorado' after last template body
- Greeting + sign-off are included even when no templates supply a body
2026-03-13 11:15:30 -04:00
Paul Huliganga e41e43cabd feat(sms): SMS delivery via dfsle withSmsDelivery() for recipients without email
- Add recipientSmsPhone InvocableVariable to DocusignEnvelopeRequest
- Add SMS_PLACEHOLDER_EMAIL constant to DocusignCompositeEnvelopeBuilder
- Update resolveRecipients() and buildRecipient() to accept smsPhone param
- Chain .withSmsDelivery(smsPhone) on recipient when smsPhone is provided
- Substitute placeholder email when recipient has no email and SMS phone given
- Add Flow V4 with Get_Recipient_Contact lookup, Is_Recipient_Email_Blank
  decision, and SMS_Phone_Screen to collect phone for no-email recipients
- V3 left untouched for existing Salesforce deployments
2026-03-13 09:57:28 -04:00
Paul Huliganga 9b355b997e feat(apex): support multiple copies of Authorization to Release Information
DocusignEnvelopeRequest:
- Add authReleaseFormCopies InvocableVariable (Integer, optional, 1-3)

DocusignCompositeEnvelopeBuilder:
- Add MULTI_COPY_TEMPLATE_NAME constant (single place to update if the
  template is renamed; matched via LIKE '%...%' covering both languages)
- Before building the document list, query for template IDs matching the
  multi-copy template name and append (copies-1) additional IDs so the
  envelope contains the correct number of distinct documents
- Duplicate-safe label builder: appends '(Copy N)' suffix to keep
  document labels unique within the envelope
- Build deduplicated displayNames list for email subject/body:
  collapses multi-copy entries to a single line with a '(N)' count
  suffix, e.g. 'Authorization to Release Information (3)'
- Email body: each template's message text is included only once even
  when the same template ID appears multiple times (bodyIdsAdded guard)
- Log and Status label use displayNames (deduplicated) not raw docNames
2026-03-11 16:23:51 -04:00
Paul Huliganga 30fc345bb0 Sort templates alphabetically by Short_Name__c in email subject and document order
- Updated DocusignCompositeEnvelopeBuilder.cls to sort documents and subject by Short_Name__c
- Modified Docusign_Envelope_Templates_V3.flow-meta.xml: repositioned elements and added filter for Short_Name__c not null
2026-03-03 23:12:06 -05:00
Paul Huliganga 61446bde23 Fix email subject truncation to 100 chars
- Add truncation to existing working email subject logic (combined template names)
- Subject is truncated to 100 characters max with '...' suffix when needed
- Add test case for truncation with multiple templates
- Preserves existing behavior: subject = combined template names, body = concatenated email messages
2026-03-03 18:55:18 -05:00
Paul Huliganga 32369c5939 Fix email subject to use combined template Short Names
- Query Short_Name__c field from dfsle__EnvelopeConfiguration__c
- Use short names for email subject (fallback to full names if blank)
- Custom emailSubject still overrides if provided
- Always truncate subject to 100 characters max
- Fixes issue where selecting all templates created too-long subject
2026-03-03 18:51:42 -05:00
Paul Huliganga 90c65ea2c6 Fix email subject truncation to 100 chars
- Truncate req.emailSubject to 100 characters max as required by Docusign
- Add '...' suffix when truncating long subjects
- Add test case for subject truncation validation
- Fixes error: 'email subject must be no greater than 100 characters'
2026-03-03 18:38:00 -05:00
Paul Huliganga 9a8cde3735 Fix email subject truncation to 100 chars
- Truncate envelopeSubject to 100 characters max as required by Docusign
- Add '...' suffix when truncating long subjects
- Add test case for subject truncation validation
- Fixes error: 'email subject must be no greater than 100 characters'
2026-03-03 17:40:47 -05:00
Paul Huliganga 95abbdbabd Revert "Fix email subject truncation to 100 chars"
This reverts commit 458d8f21a4.
2026-03-03 17:40:34 -05:00
Paul Huliganga 458d8f21a4 Fix email subject truncation to 100 chars
- Truncate envelopeSubject to 100 characters max as required by Docusign
- Add '...' suffix when truncating long subjects
- Add test case for subject truncation validation
- Fixes error: 'email subject must be no greater than 100 characters'
2026-03-03 17:24:36 -05:00
Paul Huliganga 85677a3ff1 style: visually separate template bodies with '\n\n---\n\n' divider in email body 2026-02-25 23:59:54 -05:00
Paul Huliganga 03a8f48e8d feat: envelope uses combined template names for subject and concatenated dfsle_EmailMessage__c for body
- Email subject is now combined document names (Short_Name__c if available)
- Email body is concatenated dfsle_EmailMessage__c from each selected template
- No longer uses template-level email subject for envelope
- Keeps status/document name logic unchanged
2026-02-25 23:55:30 -05:00
Paul Huliganga 5ae3da3c1e feat: use Short_Name__c for Document Name when available
Priority: Short_Name__c > stripped Name > template ID
Requires adding Short_Name__c (Text 80) custom field to
dfsle__EnvelopeConfiguration__c. Falls back to language-stripped
Name if Short_Name__c is blank or not populated.
2026-02-25 17:44:15 -05:00
Paul Huliganga fed796e6cc feat: concatenate template names for Document Name, strip language suffix
- First document label is now all template names joined with ', '
- Strips ' - English', ' - Spanish', ' - French' suffixes (case-insensitive)
- Truncates to 255 chars with '...' if too long
- Docusign Status now shows e.g. 'Admin Unit Notification, Consent to Eval'
  instead of 'Template 89dd5ead'
2026-02-25 17:33:42 -05:00
Paul Huliganga 978051bf49 fix: use actual template names for Document Name in Docusign Status
Query dfsle__EnvelopeConfiguration__c to get template names and pass
them as document labels to dfsle.Document.fromTemplate(). This makes
the Docusign Status screen show meaningful names like 'Consent to Eval'
instead of 'Template 89dd5ead'.
2026-02-25 17:17:40 -05:00
Paul Huliganga 4211648e2a feat: add recipient resolution from Client_Case__c lookup fields
- Queries Client_Case__c for Service_Coordinator__c and Docusign_Recipient_1__c
- Resolves Contact/User name and email from lookup targets
- Maps recipients to Docusign template roles: 'Service Coordinator' and 'Docusign Recipient #1'
- Validates recipients exist and have email addresses
- Supports both Contact and User lookup types
- Role names and field names are configurable constants at top of class
- Clear error messages if recipients are missing or have no email
2026-02-25 12:28:08 -05:00
Paul Huliganga 4b1edd4d27 refactor: switch to dfsle Apex Toolkit - remove raw API code
BREAKING CHANGE: Now uses dfsle managed package for Docusign integration.
No separate credentials or Named Credentials needed.

Changes:
- Rewrote DocusignCompositeEnvelopeBuilder to use dfsle.EnvelopeService
  and dfsle.Document.fromTemplate() for composite envelopes
- Simplified DocusignEnvelopeRequestHandler to validation-only
- Updated all tests to use dfsle.TestUtils.setMock()
- 12 comprehensive test methods (success, validation, edge cases)

Deleted (no longer needed):
- DocusignAPIService.cls (raw HTTP callouts)
- DocusignAPIServiceTest.cls
- DocusignCredentials.cls (custom settings)
- DocusignCredentialsTest.cls

Benefits:
- Uses existing dfsle package authentication automatically
- No Named Credential or Custom Setting setup required
- ~95 lines of code vs ~380 lines before
- Fully supported by Docusign managed package
2026-02-25 11:29:38 -05:00
Paul Huliganga 7df62e06ca refactor: extract Request and Result as standalone global classes
- Created DocusignEnvelopeRequest.cls (separate global class for input)
- Created DocusignEnvelopeResult.cls (separate global class for output)
- Updated DocusignCompositeEnvelopeBuilder to use standalone classes
- Updated DocusignEnvelopeRequestHandler to reference standalone classes
- Updated all test classes to use new class references
- Fixes Flow Builder visibility issues with nested inner classes
- Better API design with clear input/output types
- Easier to extend and reuse across other classes
2026-02-25 10:05:36 -05:00
Paul Huliganga b00a930e8d fix: remove duplicate JSON builder test from main class
- Removed testJSONBuilder from DocusignCompositeEnvelopeBuilderTest
- JSON building logic tests now handled by DocusignEnvelopeRequestHandlerTest (10 comprehensive tests)
- Fixes deployment error: method buildCompositeEnvelopeJSON no longer exists in main class
- Eliminates code duplication between test classes
2026-02-25 09:39:18 -05:00
Paul Huliganga 2f7dcf3520 refactor: extract request handling to global DocusignEnvelopeRequestHandler class + deployment guide
Changes:
- Move validation logic to DocusignEnvelopeRequestHandler.validateRequest()
- Move envelope JSON building to DocusignEnvelopeRequestHandler.buildEnvelopeJSON()
- Add comprehensive test suite for handler (10 test methods)
- Simplify main invocable method - focus on orchestration
- Add DEPLOYMENT_AND_TESTING.md reference guide with all CLI commands
- Handler is reusable for future enhancements and integrations

Benefits:
- Single Responsibility Principle
- Reusable handler for other classes
- Better testability
- Clean separation of concerns
2026-02-25 09:32:55 -05:00
Paul Huliganga 4f734f0d17 Initial commit: Salesforce Composite Envelope Builder 2026-02-25 09:22:29 -05:00