Skip to content

Commit

Permalink
Refactor, Send Provider Confirmation plus tests
Browse files Browse the repository at this point in the history
  • Loading branch information
analoo committed Feb 18, 2025
1 parent 84d06ca commit d471078
Show file tree
Hide file tree
Showing 7 changed files with 154 additions and 82 deletions.
14 changes: 8 additions & 6 deletions src/main/java/org/ilgcc/app/email/ILGCCEmail.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,9 @@

@Getter
public class ILGCCEmail {

public static final String FROM_ADDRESS = "[email protected]";
public static final String EMAIL_SENDER_KEY = "email.sender-name";
public static final String EMAIL_SENDER_KEY = "email.general.sender-name";

private Email senderEmail;
private String subject;
Expand All @@ -17,7 +18,8 @@ public class ILGCCEmail {
private UUID submissionId;
private Email recipientEmail;

public ILGCCEmail(String senderName, String recipientAddress, String subject, Content body, EmailType emailType, UUID submissionId) {
public ILGCCEmail(String senderName, String recipientAddress, String subject, Content body, EmailType emailType,
UUID submissionId) {
this.senderEmail = new Email(FROM_ADDRESS, senderName);
this.recipientEmail = new Email(recipientAddress);
this.subject = subject;
Expand All @@ -27,11 +29,13 @@ public ILGCCEmail(String senderName, String recipientAddress, String subject, Co
}


public static ILGCCEmail createFamilyConfirmationEmail(String senderName, String recipientAddress, String subject, Content body, UUID submissionId){
public static ILGCCEmail createFamilyConfirmationEmail(String senderName, String recipientAddress, String subject,
Content body, UUID submissionId) {
return new ILGCCEmail(senderName, recipientAddress, subject, body, EmailType.FAMILY_CONFIRMATION_EMAIL, submissionId);
}

public static ILGCCEmail createProviderConfirmationEmail(String senderName, String recipientAddress, String subject, Content body, UUID submissionId){
public static ILGCCEmail createProviderConfirmationEmail(String senderName, String recipientAddress, String subject,
Content body, UUID submissionId) {
return new ILGCCEmail(senderName, recipientAddress, subject, body, EmailType.PROVIDER_CONFIRMATION_EMAIL, submissionId);
}

Expand All @@ -49,6 +53,4 @@ public enum EmailType {
this.description = description;
}
}


}
42 changes: 12 additions & 30 deletions src/main/java/org/ilgcc/app/submission/actions/Mailer.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package org.ilgcc.app.submission.actions;

import com.sendgrid.helpers.mail.objects.Content;
import formflow.library.config.submission.Action;
import formflow.library.data.Submission;
import formflow.library.data.SubmissionRepositoryService;
Expand All @@ -9,7 +8,6 @@
import java.util.UUID;
import lombok.extern.slf4j.Slf4j;
import org.ilgcc.app.email.ILGCCEmail;
import org.ilgcc.app.email.ILGCCEmail.EmailType;
import org.ilgcc.app.utils.ProviderSubmissionUtilities;
import org.ilgcc.jobs.SendEmailJob;
import org.springframework.context.MessageSource;
Expand All @@ -23,42 +21,25 @@ abstract class Mailer implements Action {

protected final SendEmailJob sendEmailJob;

protected static String EMAIL_SENT_STATUS_INPUT_NAME;
protected static String RECIPIENT_EMAIL_INPUT_NAME;
protected static String emailSentStatusInputName;
protected static String recipientEmailInputName;

public Mailer(SendEmailJob sendEmailJob, SubmissionRepositoryService submissionRepositoryService,
MessageSource messageSource) {
MessageSource messageSource, String emailSentStatusInputName, String recipientEmailInputName) {
this.sendEmailJob = sendEmailJob;
this.submissionRepositoryService = submissionRepositoryService;
this.messageSource = messageSource;
this.emailSentStatusInputName = emailSentStatusInputName;
this.recipientEmailInputName = recipientEmailInputName;
}


protected static String setSenderName(Locale locale) {
protected static String getSenderName(Locale locale) {
return messageSource.getMessage(ILGCCEmail.EMAIL_SENDER_KEY, null, locale);
}

protected static String setRecipientName(Submission submission) {
return submission.getInputData().getOrDefault(RECIPIENT_EMAIL_INPUT_NAME, "").toString();
}

protected String setSubject(Submission submission, Locale locale) {
return messageSource.getMessage("email.family-confirmation.subject", null, locale);
}

protected Content setBodyCopy(Submission submission, Locale locale) {
return new Content();
}


protected ILGCCEmail prepareEmailCopy(Submission submission, EmailType emailType) {
Locale locale =
submission.getInputData().getOrDefault("languageRead", "English").equals("Spanish") ? Locale.forLanguageTag(
"es") : Locale.ENGLISH;

return new ILGCCEmail(setSenderName(locale), setRecipientName(submission), setSubject(submission, locale),
setBodyCopy(submission, locale), emailType, submission.getId());

protected static String getRecipientEmail(Submission submission) {
return submission.getInputData().getOrDefault(recipientEmailInputName, "").toString();
}

protected void sendEmail(ILGCCEmail email, Submission submission) {
Expand All @@ -67,18 +48,19 @@ protected void sendEmail(ILGCCEmail email, Submission submission) {
}

protected Boolean skipEmailSend(Submission submission) {
return submission.getInputData().getOrDefault(EMAIL_SENT_STATUS_INPUT_NAME, "false").equals("true");
return submission.getInputData().getOrDefault(emailSentStatusInputName, "false").equals("true");
}

private void updateEmailStatus(Submission submission) {
submission.getInputData().putIfAbsent(EMAIL_SENT_STATUS_INPUT_NAME, "true");
submission.getInputData().putIfAbsent(emailSentStatusInputName, "true");
submissionRepositoryService.save(submission);
}

protected Optional<Submission> getFamilyApplication(Submission providerSubmission) {
Optional<UUID> familySubmissionId = ProviderSubmissionUtilities.getClientId(providerSubmission);
if (familySubmissionId.isEmpty()) {
log.warn("No family submission is associated with the provider submission with ID: {}", providerSubmission.getId());
log.warn(String.format("No family submission is associated with the provider submission with ID: {}",
providerSubmission.getId()));

Check warning

Code scanning / CodeQL

Unused format argument Warning

This format call refers to 0 argument(s) but supplies 1 argument(s).
return Optional.empty();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
import java.util.Optional;
import lombok.extern.slf4j.Slf4j;
import org.ilgcc.app.email.ILGCCEmail;
import org.ilgcc.app.email.ILGCCEmail.EmailType;
import org.ilgcc.jobs.SendEmailJob;
import org.springframework.context.MessageSource;

Expand All @@ -23,46 +22,56 @@ public class SendProviderConfirmationEmail extends Mailer {
public SendProviderConfirmationEmail(SendEmailJob sendEmailJob,
SubmissionRepositoryService submissionRepositoryService,
MessageSource messageSource) {
super(sendEmailJob, submissionRepositoryService, messageSource);
super(sendEmailJob, submissionRepositoryService, messageSource, EMAIL_SENT_STATUS_INPUT_NAME, RECIPIENT_EMAIL_INPUT_NAME);
}

@Override
public void run(Submission submission) {
if (!skipEmailSend(submission)) {
ILGCCEmail email = prepareEmailCopy(submission, EmailType.PROVIDER_CONFIRMATION_EMAIL);
Locale locale =
submission.getInputData().getOrDefault("languageRead", "English").equals("Spanish") ? Locale.forLanguageTag(
"es") : Locale.ENGLISH;
Optional<Map<String, String>> emailData = getEmailData(submission);
String subject = emailData.isPresent() ? setSubject(emailData.get(), locale) : "";
Content body = emailData.isPresent() ? new Content("text/html", setBodyCopy(emailData.get(), locale)) : new Content();

ILGCCEmail email = ILGCCEmail.createProviderConfirmationEmail(getSenderName(locale), getRecipientEmail(submission),
subject, body,
submission.getId());
sendEmail(email, submission);
}
}

@Override
protected String setSubject(Submission submission, Locale locale) {
return messageSource.getMessage("email.family-confirmation.subject", null, locale);
}

@Override
protected Content setBodyCopy(Submission providerSubmission, Locale locale) {
protected Optional<Map<String, String>> getEmailData(Submission providerSubmission) {
Optional<Submission> familySubmission = getFamilyApplication(providerSubmission);
if (familySubmission.isPresent()) {
Map<String, String> emailData = getCombinedDataForEmails(providerSubmission, familySubmission.get());

String p1 = messageSource.getMessage("email.provider-confirmation.p1", null, locale);
String p2 = messageSource.getMessage("email.provider-confirmation.p2", new Object[]{emailData.get("ccrrName")},
locale);
String p3 = messageSource.getMessage("email.provider-confirmation.p3",
new Object[]{emailData.get("childrenInitials"), emailData.get("ccapStartDate")}, locale);
String p4 = messageSource.getMessage("email.provider-confirmation.p4",
new Object[]{emailData.get("confirmationCode")}, locale);
String p5 = messageSource.getMessage("email.provider-confirmation.p5",
new Object[]{emailData.get("ccrrName"), emailData.get("ccrrPhoneNumber")},
locale);
String p6 = messageSource.getMessage("email.general.footer.automated-response", null, locale);
String p7 = messageSource.getMessage("email.general.footer.cfa", null, locale);
return new Content("text/html", p1 + p2 + p3 + p4 + p5 + p6 + p7);
return Optional.of(getCombinedDataForEmails(providerSubmission, familySubmission.get()));
} else {
log.warn("Could not send Email: {}: No family submission is associated with the familSubmissionID: {}",
providerSubmission.getId());

Check failure

Code scanning / CodeQL

Missing format argument Error

This format call refers to 2 argument(s) but only supplies 1 argument(s).
return Optional.empty();
}
}

protected String setSubject(Map<String, String> emailData, Locale locale) {
return messageSource.getMessage("email.family-confirmation.subject", new Object[]{emailData.get("confirmationCode")},
locale);
}

log.warn("Could not send Email: {}: No family submission is associated with the familSubmissionID: {}",
providerSubmission.getId());
return new Content();
protected String setBodyCopy(Map<String, String> emailData, Locale locale) {
String p1 = messageSource.getMessage("email.provider-confirmation.p1", null, locale);
String p2 = messageSource.getMessage("email.provider-confirmation.p2", new Object[]{emailData.get("ccrrName")},
locale);
String p3 = messageSource.getMessage("email.provider-confirmation.p3",
new Object[]{emailData.get("childrenInitials"), emailData.get("ccapStartDate")}, locale);
String p4 = messageSource.getMessage("email.provider-confirmation.p4",
new Object[]{emailData.get("confirmationCode")}, locale);
String p5 = messageSource.getMessage("email.provider-confirmation.p5",
new Object[]{emailData.get("ccrrName"), emailData.get("ccrrPhoneNumber")},
locale);
String p6 = messageSource.getMessage("email.general.footer.automated-response", null, locale);
String p7 = messageSource.getMessage("email.general.footer.cfa", null, locale);
return p1 + p2 + p3 + p4 + p5 + p6 + p7;
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -237,7 +237,17 @@ public static String getChildrenInitialsFromApplication(Submission familySubmiss
String lastName = (String) child.get("childLastName");
childrenInitials.add(String.format("%s.%s.", firstName.toUpperCase().charAt(0), lastName.toUpperCase().charAt(0)));
}
return String.join(", ", childrenInitials);
if (childrenInitials.isEmpty()) {
return "";
} else if (childrenInitials.size() == 1) {
return childrenInitials.get(0); // Single name, no 'and'
} else if (childrenInitials.size() == 2) {
return String.join(" and ", childrenInitials); // Two childrenInitials, join with 'and'
} else {
// More than 2 childrenInitials, use comma for all but the last one
String last = childrenInitials.remove(childrenInitials.size() - 1); // Remove and keep the last name
return String.join(", ", childrenInitials) + " and " + last; // Join remaining with commas, append 'and last'
}
}

public static String getProviderResponseName(Submission providerSubmission) {
Expand Down
1 change: 1 addition & 0 deletions src/main/resources/flows-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -536,6 +536,7 @@ flow:
response:
beforeDisplayAction: FindApplicationData
onPostAction: SendProviderAgreesToCareFamilyConfirmationEmail
onSaveAction: SendProviderConfirmationEmail
nextScreens:
- name: registration-submit-intro
condition: ProviderIsRegistering
Expand Down
Loading

0 comments on commit d471078

Please sign in to comment.