diff --git a/src/main/java/org/ilgcc/app/inputs/Gcc.java b/src/main/java/org/ilgcc/app/inputs/Gcc.java index 4fbd5751f..3b2603c65 100644 --- a/src/main/java/org/ilgcc/app/inputs/Gcc.java +++ b/src/main/java/org/ilgcc/app/inputs/Gcc.java @@ -73,7 +73,7 @@ public class Gcc extends FlowInputs { @NotBlank(message = "{errors.provide-zip}") private String parentHomeZipCode; - private String organizationId; + private String useSuggestedParentHomeAddress; // parent-mailing-address private Boolean parentMailingAddressSameAsHomeAddress; @@ -86,7 +86,7 @@ public class Gcc extends FlowInputs { private String parentMailingState; @NotBlank(message = "{errors.provide-zip}") private String parentMailingZipCode; - private String useSuggestedParentAddress; + private String useSuggestedParentMailingAddress; private String parentConfirmSuggestedAddress; // parent-comm-preference @NotBlank(message = "{errors.invalid-communication-preference}") @@ -98,6 +98,8 @@ public class Gcc extends FlowInputs { @Email(regexp = RegexUtils.EMAIL_REGEX, message = "{errors.invalid-email}") private String parentContactEmail; + private String organizationId; + // parent-has-a-partner private String parentHasPartner; private String parentHasQualifyingPartner; diff --git a/src/main/java/org/ilgcc/app/pdf/ApplicationPreparer.java b/src/main/java/org/ilgcc/app/pdf/ApplicationPreparer.java index 827adfb2a..2566c4415 100644 --- a/src/main/java/org/ilgcc/app/pdf/ApplicationPreparer.java +++ b/src/main/java/org/ilgcc/app/pdf/ApplicationPreparer.java @@ -1,5 +1,6 @@ package org.ilgcc.app.pdf; +import static java.util.Collections.emptyList; import static org.ilgcc.app.utils.SubmissionUtilities.formatToStringFromLocalDate; import formflow.library.data.Submission; @@ -52,6 +53,22 @@ public Map prepareSubmissionFields(Submission submissio results.put("partnerFullName", new SingleField("partnerFullName", String.format("%s, %s", partnerLastName, partnerFirstName), null)); + List mailingAddressFields = List.of( + "parentMailingStreetAddress1", + "parentMailingStreetAddress2", + "parentMailingCity", + "parentMailingState", + "parentMailingZipCode"); + + List sameAddress = (List) inputData.getOrDefault("parentMailingAddressSameAsHomeAddress[]", emptyList()); + + if (sameAddress.contains("yes")) { + for (String fieldName : mailingAddressFields) { + results.put(fieldName, + new SingleField(fieldName, "", null)); + } + } + String rentalIncome = inputData.getOrDefault("unearnedIncomeRental", "").toString(); String dividendIncome = inputData.getOrDefault("unearnedIncomeDividends", "").toString(); String unemploymentIncome = inputData.getOrDefault("unearnedIncomeUnemployment", "").toString(); diff --git a/src/main/java/org/ilgcc/app/pdf/MailingAddressPreparer.java b/src/main/java/org/ilgcc/app/pdf/MailingAddressPreparer.java deleted file mode 100644 index 1476fdf1d..000000000 --- a/src/main/java/org/ilgcc/app/pdf/MailingAddressPreparer.java +++ /dev/null @@ -1,42 +0,0 @@ -package org.ilgcc.app.pdf; - -import formflow.library.data.Submission; -import formflow.library.pdf.PdfMap; -import formflow.library.pdf.SingleField; -import formflow.library.pdf.SubmissionField; -import formflow.library.pdf.SubmissionFieldPreparer; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import org.springframework.stereotype.Component; - -@Component -public class MailingAddressPreparer implements SubmissionFieldPreparer { - - @Override - public Map prepareSubmissionFields(Submission submission, PdfMap pdfMap) { - var results = new HashMap(); - var inputData = submission.getInputData(); - var homeAddressSameAsMailingAddress = inputData.getOrDefault("parentMailingAddressSameAsHomeAddress[]", "no").equals(List.of("yes")); - var useSuggestedParentAddress = inputData.getOrDefault("useSuggestedParentAddress", "false").equals("true"); - - String mailingAddressStreet1 = useSuggestedParentAddress ? "parentMailingStreetAddress1_validated" : "parentMailingStreetAddress1"; - String mailingAddressStreet2 = useSuggestedParentAddress ? "" : "parentMailingStreetAddress2"; - String mailingCity = useSuggestedParentAddress ? "parentMailingCity_validated" : "parentMailingCity"; - String mailingState = useSuggestedParentAddress ? "parentMailingState_validated" : "parentMailingState"; - String mailingZipCode = useSuggestedParentAddress ? "parentMailingZipCode_validated" : "parentMailingZipCode"; - - results.put("parentMailingAddressForPDFStreet", new SingleField("parentMailingAddressForPDFStreet", inputData.getOrDefault(mailingAddressStreet1, "").toString(), null)); - results.put("parentMailingAddressForPDFApt", new SingleField("parentMailingAddressForPDFApt", inputData.getOrDefault(mailingAddressStreet2, "").toString(), null)); - results.put("parentMailingAddressForPDFCity", new SingleField("parentMailingAddressForPDFCity", inputData.getOrDefault(mailingCity, "").toString(), null)); - results.put("parentMailingAddressForPDFState", new SingleField("parentMailingAddressForPDFState", inputData.getOrDefault(mailingState, "").toString(), null)); - results.put("parentMailingAddressForPDFZipCode", new SingleField("parentMailingAddressForPDFZipCode", inputData.getOrDefault(mailingZipCode, "").toString(), null)); - - results.put("parentHomeStreetAddress1ForPDF", new SingleField("parentHomeStreetAddress1ForPDF", homeAddressSameAsMailingAddress ? inputData.getOrDefault(mailingAddressStreet1, "").toString() : inputData.getOrDefault("parentHomeStreetAddress1" , "").toString() , null)); - results.put("parentHomeStreetAddress2ForPDF", new SingleField("parentHomeStreetAddress2ForPDF", homeAddressSameAsMailingAddress ? inputData.getOrDefault(mailingAddressStreet2, "").toString() : inputData.getOrDefault( "parentHomeStreetAddress2", "").toString() , null)); - results.put("parentHomeCityForPDF", new SingleField("parentHomeCityForPDF", homeAddressSameAsMailingAddress ? inputData.getOrDefault(mailingCity, "").toString() : inputData.getOrDefault("parentHomeCity", "").toString() , null)); - results.put("parentHomeStateForPDF", new SingleField("parentHomeStateForPDF", homeAddressSameAsMailingAddress ? inputData.getOrDefault(mailingState, "").toString() : inputData.getOrDefault("parentHomeState" , "").toString() , null)); - results.put("parentHomeZipCodeForPDF", new SingleField("parentHomeZipCodeForPDF", homeAddressSameAsMailingAddress ? inputData.getOrDefault(mailingZipCode, "").toString() : inputData.getOrDefault( "parentHomeZipCode", "").toString(), null)); - return results; - } -} diff --git a/src/main/java/org/ilgcc/app/pdf/ProviderApplicationPreparer.java b/src/main/java/org/ilgcc/app/pdf/ProviderApplicationPreparer.java index c6893b117..8da731c45 100644 --- a/src/main/java/org/ilgcc/app/pdf/ProviderApplicationPreparer.java +++ b/src/main/java/org/ilgcc/app/pdf/ProviderApplicationPreparer.java @@ -1,5 +1,6 @@ package org.ilgcc.app.pdf; +import static java.util.Collections.emptyList; import static org.ilgcc.app.utils.SubmissionUtilities.formatToStringFromLocalDate; import static org.ilgcc.app.utils.SubmissionUtilities.hasNotChosenProvider; import static org.ilgcc.app.utils.SubmissionUtilities.hasProviderResponse; @@ -12,13 +13,13 @@ import java.time.OffsetDateTime; import java.time.ZoneId; import java.time.ZonedDateTime; +import java.util.ArrayList; +import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Optional; -import org.ilgcc.app.submission.actions.FormatSubmittedAtDate; import org.ilgcc.app.utils.ProviderSubmissionUtilities; -import org.ilgcc.app.utils.SubmissionUtilities; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; @@ -47,7 +48,7 @@ private Map prepareProviderResponse() { Map providerInputData = providerSubmission.getInputData(); - List providerFields = List.of( + List providerFields = new ArrayList<>(Arrays.asList( "providerResponseProviderNumber", "providerResponseFirstName", "providerResponseLastName", @@ -57,8 +58,26 @@ private Map prepareProviderResponse() { "providerConviction", "providerConvictionExplanation", "providerIdentityCheckDateOfBirthDate", - "providerTaxIdEIN" - ); + "providerTaxIdEIN", + "providerResponseServiceStreetAddress1", + "providerResponseServiceStreetAddress2", + "providerResponseServiceCity", + "providerResponseServiceState", + "providerResponseServiceZipCode" + )); + + List mailingAddressFields = List.of( + "providerMailingStreetAddress1", + "providerMailingStreetAddress2", + "providerMailingCity", + "providerMailingState", + "providerMailingZipCode"); + + List sameAddress = (List) providerInputData.getOrDefault("providerMailingAddressSameAsServiceAddress[]", emptyList()); + + if (sameAddress.isEmpty()) { + providerFields.addAll(mailingAddressFields); + }; for (String fieldName : providerFields) { results.put(fieldName, @@ -69,8 +88,6 @@ private Map prepareProviderResponse() { new HashMap()); results.put("clientResponseConfirmationCode", new SingleField("clientResponseConfirmationCode", (String) client.getOrDefault("clientResponseConfirmationCode", ""), null)); - results.putAll(prepareProviderAddressData(providerInputData)); - results.putAll(prepareProviderMailingAddressData(providerInputData)); results.put("providerLicenseNumber", new SingleField("providerLicenseNumber", providerLicense(providerInputData), null)); @@ -122,45 +139,9 @@ private Map prepareNoProviderData(String shortCode) { return results; } - private Map prepareProviderAddressData(Map inputData) { - var results = new HashMap(); - - Map providerAddressMapped = SubmissionUtilities.getAddress(inputData, "providerResponseService"); - - results.put("providerResponseServiceStreetAddress1", new SingleField("providerResponseServiceStreetAddress1", - providerAddressMapped.get("address1"), null)); - results.put("providerResponseServiceStreetAddress2", new SingleField("providerResponseServiceStreetAddress2", - providerAddressMapped.get("address2"), null)); - results.put("providerResponseServiceCity", - new SingleField("providerResponseServiceCity", providerAddressMapped.get("city"), null)); - results.put("providerResponseServiceState", - new SingleField("providerResponseServiceState", providerAddressMapped.get("state"), null)); - results.put("providerResponseServiceZipCode", - new SingleField("providerResponseServiceZipCode", providerAddressMapped.get("zipCode"), null)); - - return results; - } - - private Map prepareProviderMailingAddressData(Map inputData) { - var results = new HashMap(); - Map mailingAddressMapped = SubmissionUtilities.getAddress(inputData, "providerMailing"); - - results.put("providerMailingStreetAddress1", new SingleField("providerMailingStreetAddress1", - mailingAddressMapped.get("address1"), null)); - results.put("providerMailingStreetAddress2", new SingleField("providerMailingStreetAddress2", - mailingAddressMapped.get("address2"), null)); - results.put("providerMailingCity", - new SingleField("providerMailingCity", mailingAddressMapped.get("city"), null)); - results.put("providerMailingState", - new SingleField("providerMailingState", mailingAddressMapped.get("state"), null)); - results.put("providerMailingZipCode", - new SingleField("providerMailingZipCode", mailingAddressMapped.get("zipCode"), null)); - - return results; - } private String providerSignature(Map providerInputData) { - String providerSignature = (String) providerInputData.getOrDefault("providerSignedName", ""); + String providerSignature = (String) providerInputData.getOrDefault("providerSignedName", ""); if (!providerSignature.isEmpty()) { return providerSignature; } diff --git a/src/main/java/org/ilgcc/app/submission/actions/FormatParentConfirmationAddress.java b/src/main/java/org/ilgcc/app/submission/actions/FormatParentConfirmationAddress.java deleted file mode 100644 index a7187921a..000000000 --- a/src/main/java/org/ilgcc/app/submission/actions/FormatParentConfirmationAddress.java +++ /dev/null @@ -1,77 +0,0 @@ -package org.ilgcc.app.submission.actions; - -import formflow.library.config.submission.Action; -import formflow.library.data.Submission; -import org.springframework.stereotype.Component; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -import static org.ilgcc.app.utils.SubmissionUtilities.parentIsExperiencingHomelessness; -import static org.ilgcc.app.utils.SubmissionUtilities.parentMailingAddressIsHomeAddress; - -@Component -public class FormatParentConfirmationAddress implements Action { - - @Override - public void run(Submission submission) { - Map inputData = submission.getInputData(); - var parentMailingStreetAddress1 = (String) inputData.get("parentMailingStreetAddress1"); - var parentMailingStreetAddress2 = (String) inputData.get("parentMailingStreetAddress2"); - var parentMailingCity = (String) inputData.get("parentMailingCity"); - var parentMailingState = (String) inputData.get("parentMailingState"); - var parentMailingZipCode = (String) inputData.get("parentMailingZipCode"); - var parentMailingUsingSmartySuggestion = (String) inputData.get("useSuggestedParentAddress"); - var parentMailingSuggestedStreetAddress1 = (String) inputData.get("parentMailingStreetAddress1_validated"); - var parentMailingSuggestedCity = (String) inputData.get("parentMailingCity_validated"); - var parentMailingSuggestedState = (String) inputData.get("parentMailingState_validated"); - var parentMailingSuggestedZipCode = (String) inputData.get("parentMailingZipCode_validated"); - - if (parentAddressFieldsAreNotEmpty(parentMailingStreetAddress1, parentMailingCity, parentMailingState, parentMailingZipCode)) { - List addressLines = new ArrayList<>(); - - if (!(parentMailingUsingSmartySuggestion==null) && parentMailingUsingSmartySuggestion.equals("true")) { - addressLines.add(Map.entry("mailing-street-address-1", parentMailingSuggestedStreetAddress1)); - addressLines.add(Map.entry("mailing-city-and-state","%s, %s".formatted(parentMailingSuggestedCity, parentMailingSuggestedState))); - addressLines.add(Map.entry("mailing-zip-code", parentMailingSuggestedZipCode)); - } else { - addressLines.add(Map.entry("mailing-street-address-1", parentMailingStreetAddress1)); - addressLines.add(Map.entry("mailing-street-address-2",parentMailingStreetAddress2)); - addressLines.add(Map.entry("mailing-city-and-state", "%s, %s".formatted(parentMailingCity, parentMailingState))); - addressLines.add(Map.entry("mailing-zip-code",parentMailingZipCode)); - } - - inputData.put("addressLines", addressLines); - } - - var parentHomeStreetAddress1 = (String) inputData.get("parentHomeStreetAddress1"); - var parentHomeStreetAddress2 = (String) inputData.get("parentHomeStreetAddress2"); - var parentHomeCity = (String) inputData.get("parentHomeCity"); - var parentHomeState = (String) inputData.get("parentHomeState"); - var parentHomeZipCode = (String) inputData.get("parentHomeZipCode"); - - if (parentAddressFieldsAreNotEmpty(parentHomeStreetAddress1, parentHomeCity, parentHomeState, parentHomeZipCode) && !parentIsExperiencingHomelessness(inputData) ) { - List homeAddressLines = new ArrayList<>(); - if(parentMailingAddressIsHomeAddress(inputData) && !(parentMailingUsingSmartySuggestion==null) && parentMailingUsingSmartySuggestion.equals("true")){ - homeAddressLines.add(Map.entry("home-street-address-1", parentMailingSuggestedStreetAddress1)); - homeAddressLines.add(Map.entry("home-city-and-state", "%s, %s".formatted(parentMailingSuggestedCity, parentMailingSuggestedState))); - homeAddressLines.add(Map.entry("home-zip-code", parentMailingSuggestedZipCode)); - }else{ - homeAddressLines.add(Map.entry("home-street-address-1", parentHomeStreetAddress1)); - homeAddressLines.add(Map.entry("home-street-address-2", parentHomeStreetAddress2)); - homeAddressLines.add(Map.entry("home-city-and-state", "%s, %s".formatted(parentHomeCity, parentHomeState))); - homeAddressLines.add((Map.entry("home-zip-code", parentHomeZipCode))); - } - - inputData.put("homeAddressLines", homeAddressLines); - } - } - - private boolean parentAddressFieldsAreNotEmpty(String streetAddress1, String city, String state, String zipCode){ - return (streetAddress1 != null && !streetAddress1.isBlank() - && city != null && !city.isBlank() - && state != null && !state.isBlank() - && zipCode != null && !zipCode.isBlank()); - } -} diff --git a/src/main/java/org/ilgcc/app/submission/actions/SaveValidatedAddress.java b/src/main/java/org/ilgcc/app/submission/actions/SaveValidatedAddress.java new file mode 100644 index 000000000..8dcde1e38 --- /dev/null +++ b/src/main/java/org/ilgcc/app/submission/actions/SaveValidatedAddress.java @@ -0,0 +1,71 @@ +package org.ilgcc.app.submission.actions; + +import static formflow.library.inputs.FieldNameMarkers.UNVALIDATED_FIELD_MARKER_VALIDATED; +import static org.ilgcc.app.utils.AddressUtilities.hasMatchingCity; +import static org.ilgcc.app.utils.AddressUtilities.hasMatchingState; +import static org.ilgcc.app.utils.AddressUtilities.hasMatchingStreetAddress; +import static org.ilgcc.app.utils.AddressUtilities.hasMatchingZipCode; +import static org.ilgcc.app.utils.AddressUtilities.suggestedAddressKey; +import static org.ilgcc.app.utils.AddressUtilities.useSuggestedAddressKey; + +import formflow.library.config.submission.Action; +import formflow.library.data.FormSubmission; +import formflow.library.data.Submission; +import formflow.library.data.SubmissionRepositoryService; +import java.util.Map; + +abstract class SaveValidatedAddress implements Action { + + private final SubmissionRepositoryService submissionRepositoryService; + private final String addressGroupInputPrefix; + + public SaveValidatedAddress(SubmissionRepositoryService submissionRepositoryService, String addressGroupInputPrefix) { + this.submissionRepositoryService = submissionRepositoryService; + this.addressGroupInputPrefix = addressGroupInputPrefix; + } + + @Override + public void run(FormSubmission formSubmission, Submission submission) { + boolean useValidatedAddress = formSubmission.getFormData() + .getOrDefault(useSuggestedAddressKey(suggestedAddressKey, addressGroupInputPrefix), "false").equals("true"); + + if (useValidatedAddress) { + Map inputData = submission.getInputData(); + if (!hasMatchingStreetAddress(inputData, addressGroupInputPrefix)) { + String addressKey = addressGroupInputPrefix + "StreetAddress1"; + submission = updateValue(submission, addressKey); + submission.getInputData().put(addressGroupInputPrefix + "StreetAddress2", ""); + } + + if (!hasMatchingCity(inputData, addressGroupInputPrefix)) { + String addressKey = addressGroupInputPrefix + "City"; + submission = updateValue(submission, addressKey); + } + + if (!hasMatchingZipCode(inputData, addressGroupInputPrefix)) { + String addressKey = addressGroupInputPrefix + "ZipCode"; + String addressValidatedKey = addressKey + UNVALIDATED_FIELD_MARKER_VALIDATED; + String zipCodeValue = (String) submission.getInputData().getOrDefault(addressValidatedKey, ""); + if (!zipCodeValue.isBlank() && zipCodeValue.length() >= 5) { + submission.getInputData().put(addressKey, zipCodeValue.substring(0, 5)); + } + } + + if (!hasMatchingState(inputData, addressGroupInputPrefix)) { + String addressKey = addressGroupInputPrefix + "State"; + submission = updateValue(submission, addressKey); + + } + + submissionRepositoryService.save(submission); + } + } + + private Submission updateValue(Submission submission, String key) { + String addressValidatedKey = key + UNVALIDATED_FIELD_MARKER_VALIDATED; + submission.getInputData().put(key, submission.getInputData().get(addressValidatedKey)); + return submission; + } +} + + diff --git a/src/main/java/org/ilgcc/app/submission/actions/SaveValidatedParentHomeAddress.java b/src/main/java/org/ilgcc/app/submission/actions/SaveValidatedParentHomeAddress.java new file mode 100644 index 000000000..722b62e39 --- /dev/null +++ b/src/main/java/org/ilgcc/app/submission/actions/SaveValidatedParentHomeAddress.java @@ -0,0 +1,12 @@ +package org.ilgcc.app.submission.actions; + +import formflow.library.data.SubmissionRepositoryService; +import org.springframework.stereotype.Component; + +@Component +public class SaveValidatedParentHomeAddress extends SaveValidatedAddress { + + public SaveValidatedParentHomeAddress(SubmissionRepositoryService submissionRepositoryService) { + super(submissionRepositoryService, "parentHome"); + } +} diff --git a/src/main/java/org/ilgcc/app/submission/actions/SaveValidatedParentMailingAddress.java b/src/main/java/org/ilgcc/app/submission/actions/SaveValidatedParentMailingAddress.java new file mode 100644 index 000000000..40a39e123 --- /dev/null +++ b/src/main/java/org/ilgcc/app/submission/actions/SaveValidatedParentMailingAddress.java @@ -0,0 +1,12 @@ +package org.ilgcc.app.submission.actions; + +import formflow.library.data.SubmissionRepositoryService; +import org.springframework.stereotype.Component; + +@Component +public class SaveValidatedParentMailingAddress extends SaveValidatedAddress { + + public SaveValidatedParentMailingAddress(SubmissionRepositoryService submissionRepositoryService) { + super(submissionRepositoryService, "parentMailing"); + } +} diff --git a/src/main/java/org/ilgcc/app/submission/actions/SaveValidatedProviderResponseMailingAddress.java b/src/main/java/org/ilgcc/app/submission/actions/SaveValidatedProviderResponseMailingAddress.java new file mode 100644 index 000000000..0f74a0996 --- /dev/null +++ b/src/main/java/org/ilgcc/app/submission/actions/SaveValidatedProviderResponseMailingAddress.java @@ -0,0 +1,11 @@ +package org.ilgcc.app.submission.actions; + +import formflow.library.data.SubmissionRepositoryService; +import org.springframework.stereotype.Component; + +@Component +public class SaveValidatedProviderResponseMailingAddress extends SaveValidatedAddress { + public SaveValidatedProviderResponseMailingAddress(SubmissionRepositoryService submissionRepositoryService) { + super(submissionRepositoryService, "providerMailing"); + } +} diff --git a/src/main/java/org/ilgcc/app/submission/actions/SaveValidatedProviderResponseServiceAddress.java b/src/main/java/org/ilgcc/app/submission/actions/SaveValidatedProviderResponseServiceAddress.java new file mode 100644 index 000000000..d057a873a --- /dev/null +++ b/src/main/java/org/ilgcc/app/submission/actions/SaveValidatedProviderResponseServiceAddress.java @@ -0,0 +1,11 @@ +package org.ilgcc.app.submission.actions; + +import formflow.library.data.SubmissionRepositoryService; +import org.springframework.stereotype.Component; + +@Component +public class SaveValidatedProviderResponseServiceAddress extends SaveValidatedAddress { + public SaveValidatedProviderResponseServiceAddress(SubmissionRepositoryService submissionRepositoryService) { + super(submissionRepositoryService, "providerResponseService"); + } +} diff --git a/src/main/java/org/ilgcc/app/submission/actions/SetEditAddressRedirect.java b/src/main/java/org/ilgcc/app/submission/actions/SetEditAddressRedirect.java deleted file mode 100644 index f32967ff6..000000000 --- a/src/main/java/org/ilgcc/app/submission/actions/SetEditAddressRedirect.java +++ /dev/null @@ -1,21 +0,0 @@ -package org.ilgcc.app.submission.actions; - -import formflow.library.config.submission.Action; -import formflow.library.data.Submission; -import java.util.Map; -import org.ilgcc.app.utils.SubmissionUtilities; -import org.springframework.stereotype.Component; - -@Component -public class SetEditAddressRedirect implements Action { - - @Override - public void run(Submission submission) { - Map inputData = submission.getInputData(); - - if (SubmissionUtilities.parentMailingAddressIsHomeAddress(inputData)){ - inputData.put("parentEditAddressRedirect", "parent-home-address"); - } else - inputData.put("parentEditAddressRedirect", "parent-mailing-address"); - } -} diff --git a/src/main/java/org/ilgcc/app/submission/actions/SetOrganizationIdAndCCRRName.java b/src/main/java/org/ilgcc/app/submission/actions/SetOrganizationIdAndCCRRName.java index c36b50ae1..20c123fa2 100644 --- a/src/main/java/org/ilgcc/app/submission/actions/SetOrganizationIdAndCCRRName.java +++ b/src/main/java/org/ilgcc/app/submission/actions/SetOrganizationIdAndCCRRName.java @@ -28,22 +28,20 @@ public class SetOrganizationIdAndCCRRName implements Action { CCMSDataServiceImpl ccmsDataServiceImpl; private static final String ORGANIZATION_ID_INPUT = "organizationId"; - private static final String UNVALIDATED_ZIPCODE_INPUT_NAME = "parentHomeZipCode"; + private static final String ZIP_CODE_INPUT_NAME = "parentHomeZipCode"; private static final String APPLICATION_COUNTY_INPUT_NAME = "applicationCounty"; private static final String APPLICATION_ZIPCODE_INPUT_NAME = "applicationZipCode"; private static final String APPLICANT_COUNTY_INPUT_NAME = "applicantAddressCounty"; @Override public void run(Submission submission) { - //TODO: add parentHomeZipCode_validated logic when validation is implemented - Map inputData = submission.getInputData(); boolean experiencingHomelessness = inputData.getOrDefault("parentHomeExperiencingHomelessness[]", "no").equals( List.of("yes")); - if (!experiencingHomelessness && hasValidValue(inputData, UNVALIDATED_ZIPCODE_INPUT_NAME)) { - final String unvalidatedZip = (String) submission.getInputData().get(UNVALIDATED_ZIPCODE_INPUT_NAME); + if (!experiencingHomelessness && hasValidValue(inputData, ZIP_CODE_INPUT_NAME)) { + final String unvalidatedZip = (String) submission.getInputData().get(ZIP_CODE_INPUT_NAME); saveCountyFromZip(submission, unvalidatedZip); final Optional org = applicationRouterService.getOrganizationIdByZipCode(unvalidatedZip); diff --git a/src/main/java/org/ilgcc/app/submission/conditions/ParentIsExperiencingHomelessness.java b/src/main/java/org/ilgcc/app/submission/conditions/ParentIsExperiencingHomelessness.java index 0922430f6..e1e2d79ea 100644 --- a/src/main/java/org/ilgcc/app/submission/conditions/ParentIsExperiencingHomelessness.java +++ b/src/main/java/org/ilgcc/app/submission/conditions/ParentIsExperiencingHomelessness.java @@ -2,16 +2,16 @@ import formflow.library.config.submission.Condition; import formflow.library.data.Submission; -import org.ilgcc.app.utils.SubmissionUtilities; +import org.ilgcc.app.utils.AddressUtilities; + import org.springframework.stereotype.Component; -import java.util.List; @Component public class ParentIsExperiencingHomelessness implements Condition { @Override public Boolean run(Submission submission) { - return SubmissionUtilities.parentIsExperiencingHomelessness(submission.getInputData()); + return AddressUtilities.parentIsExperiencingHomelessness(submission.getInputData(), "parentHomeExperiencingHomelessness"); } } diff --git a/src/main/java/org/ilgcc/app/submission/conditions/ShowAddressConfirmationScreen.java b/src/main/java/org/ilgcc/app/submission/conditions/ShowAddressConfirmationScreen.java new file mode 100644 index 000000000..051aeb886 --- /dev/null +++ b/src/main/java/org/ilgcc/app/submission/conditions/ShowAddressConfirmationScreen.java @@ -0,0 +1,20 @@ +package org.ilgcc.app.submission.conditions; + +import formflow.library.config.submission.Condition; +import formflow.library.data.Submission; +import formflow.library.data.SubmissionRepositoryService; +import org.ilgcc.app.utils.AddressUtilities; + +abstract class ShowAddressConfirmationScreen implements Condition { + + private final String addressGroupInputPrefix; + + public ShowAddressConfirmationScreen(String addressGroupInputPrefix) { + this.addressGroupInputPrefix = addressGroupInputPrefix; + } + + @Override + public Boolean run(Submission submission) { + return AddressUtilities.requireAddressConfirmation(submission, addressGroupInputPrefix); + } +} diff --git a/src/main/java/org/ilgcc/app/submission/conditions/ShowParentHomeAddressConfirmationScreen.java b/src/main/java/org/ilgcc/app/submission/conditions/ShowParentHomeAddressConfirmationScreen.java new file mode 100644 index 000000000..3574aca2c --- /dev/null +++ b/src/main/java/org/ilgcc/app/submission/conditions/ShowParentHomeAddressConfirmationScreen.java @@ -0,0 +1,11 @@ +package org.ilgcc.app.submission.conditions; + +import org.springframework.stereotype.Component; + +@Component +public class ShowParentHomeAddressConfirmationScreen extends ShowAddressConfirmationScreen { + + public ShowParentHomeAddressConfirmationScreen() { + super("parentHome"); + } +} diff --git a/src/main/java/org/ilgcc/app/submission/conditions/ShowParentMailingAddressConfirmationScreen.java b/src/main/java/org/ilgcc/app/submission/conditions/ShowParentMailingAddressConfirmationScreen.java new file mode 100644 index 000000000..95aff5edc --- /dev/null +++ b/src/main/java/org/ilgcc/app/submission/conditions/ShowParentMailingAddressConfirmationScreen.java @@ -0,0 +1,11 @@ +package org.ilgcc.app.submission.conditions; + +import org.springframework.stereotype.Component; + +@Component +public class ShowParentMailingAddressConfirmationScreen extends ShowAddressConfirmationScreen { + + public ShowParentMailingAddressConfirmationScreen() { + super("parentMailing"); + } +} diff --git a/src/main/java/org/ilgcc/app/submission/conditions/ShowProviderResponseMailingAddressConfirmationScreen.java b/src/main/java/org/ilgcc/app/submission/conditions/ShowProviderResponseMailingAddressConfirmationScreen.java new file mode 100644 index 000000000..56ae2a4f4 --- /dev/null +++ b/src/main/java/org/ilgcc/app/submission/conditions/ShowProviderResponseMailingAddressConfirmationScreen.java @@ -0,0 +1,11 @@ +package org.ilgcc.app.submission.conditions; + +import org.springframework.stereotype.Component; + +@Component +public class ShowProviderResponseMailingAddressConfirmationScreen extends ShowAddressConfirmationScreen { + + public ShowProviderResponseMailingAddressConfirmationScreen() { + super("providerMailing"); + } +} diff --git a/src/main/java/org/ilgcc/app/submission/conditions/ShowProviderResponseServiceAddressConfirmationScreen.java b/src/main/java/org/ilgcc/app/submission/conditions/ShowProviderResponseServiceAddressConfirmationScreen.java new file mode 100644 index 000000000..d83616d23 --- /dev/null +++ b/src/main/java/org/ilgcc/app/submission/conditions/ShowProviderResponseServiceAddressConfirmationScreen.java @@ -0,0 +1,11 @@ +package org.ilgcc.app.submission.conditions; + +import org.springframework.stereotype.Component; + +@Component +public class ShowProviderResponseServiceAddressConfirmationScreen extends ShowAddressConfirmationScreen { + + public ShowProviderResponseServiceAddressConfirmationScreen() { + super("providerResponseService"); + } +} diff --git a/src/main/java/org/ilgcc/app/utils/AddressUtilities.java b/src/main/java/org/ilgcc/app/utils/AddressUtilities.java new file mode 100644 index 000000000..757a3bc8d --- /dev/null +++ b/src/main/java/org/ilgcc/app/utils/AddressUtilities.java @@ -0,0 +1,106 @@ +package org.ilgcc.app.utils; + +import static formflow.library.inputs.FieldNameMarkers.UNVALIDATED_FIELD_MARKER_VALIDATED; + +import formflow.library.data.Submission; +import formflow.library.inputs.FieldNameMarkers; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class AddressUtilities { + + public static final String suggestedAddressKey = "useSuggested%sAddress"; + private static final String streetAddress1Key = "StreetAddress1"; + private static final String streetAddress2Key = "StreetAddress2"; + private static final String cityKey = "City"; + private static final String stateKey = "State"; + private static final String zipCodeKey = "ZipCode"; + + private static final List addressKeys = List.of(streetAddress1Key, streetAddress2Key, cityKey, stateKey, zipCodeKey); + + /** + * @param inputData a JSON object of user inputs + * @return true or false + */ + public static boolean parentIsExperiencingHomelessness(Map inputData, + String experiencingHomelessnessInputName) { + return inputData.getOrDefault(experiencingHomelessnessInputName + "[]", "no").equals(List.of("yes")); + } + + public static boolean hasAddressSuggestion(Submission submission, String addressGroupInputPrefix) { + return submission.getInputData().get(FieldNameMarkers.UNVALIDATED_FIELD_MARKER_VALIDATE_ADDRESS + addressGroupInputPrefix) + .equals("true") && submission.getInputData() + .containsKey(addressGroupInputPrefix + "StreetAddress1" + FieldNameMarkers.UNVALIDATED_FIELD_MARKER_VALIDATED); + } + + public static String useSuggestedAddressKey(String suggestedAddressKey, String addressGroupInputPrefix) { + return String.format(suggestedAddressKey, capitalize(addressGroupInputPrefix)); + } + + public static boolean requireAddressConfirmation(Submission submission, String addressGroupInputPrefix) { + return !validatedAndInputtedAddressesMatch(submission.getInputData(), addressGroupInputPrefix); + } + + public static Boolean validatedAndInputtedAddressesMatch(Map inputData, String addressGroupInputPrefix) { + return hasMatchingState(inputData, addressGroupInputPrefix) && hasMatchingCity(inputData, addressGroupInputPrefix) + && hasMatchingStreetAddress(inputData, addressGroupInputPrefix) && hasMatchingZipCode(inputData, + addressGroupInputPrefix); + } + + public static Boolean hasMatchingState(Map inputData, String addressGroupInputPrefix) { + String validatedData = (String) inputData.getOrDefault( + addressGroupInputPrefix + stateKey + UNVALIDATED_FIELD_MARKER_VALIDATED, ""); + String inputtedData = (String) inputData.getOrDefault(addressGroupInputPrefix + stateKey, ""); + return validatedData.equals(inputtedData); + } + + public static Boolean hasMatchingCity(Map inputData, String addressGroupInputPrefix) { + String validatedData = (String) inputData.getOrDefault( + addressGroupInputPrefix + cityKey + UNVALIDATED_FIELD_MARKER_VALIDATED, ""); + String inputtedData = (String) inputData.getOrDefault(addressGroupInputPrefix + cityKey, ""); + return validatedData.equals(inputtedData); + } + + public static Boolean hasMatchingStreetAddress(Map inputData, String addressGroupInputPrefix) { + String validatedData = (String) inputData.getOrDefault( + addressGroupInputPrefix + streetAddress1Key + UNVALIDATED_FIELD_MARKER_VALIDATED, ""); + String inputtedData1 = (String) inputData.getOrDefault(addressGroupInputPrefix + streetAddress1Key, ""); + String inputtedData2 = (String) inputData.getOrDefault(addressGroupInputPrefix + streetAddress2Key, ""); + + return validatedData.equals(inputtedData1 + inputtedData2); + } + + public static Boolean hasMatchingZipCode(Map inputData, String addressGroupInputPrefix) { + String validatedData = (String) inputData.getOrDefault( + addressGroupInputPrefix + zipCodeKey + UNVALIDATED_FIELD_MARKER_VALIDATED, ""); + String inputtedData = (String) inputData.getOrDefault(addressGroupInputPrefix + zipCodeKey, ""); + if (validatedData.isBlank() && inputtedData.isBlank()) { + return true; + } + final String truncatedZip = validatedData.substring(0, 5); + + return inputtedData.equals(truncatedZip); + } + + public static Map formatAddressAsMultiline(Map inputData, String addressGroupInputPrefix) { + Map addressLines = new HashMap<>(); + + addressKeys.forEach(ak -> { + if (inputData.containsKey(addressGroupInputPrefix + ak) && !inputData.get(addressGroupInputPrefix + ak).toString() + .isBlank()) { + addressLines.put(ak, (String) inputData.get(addressGroupInputPrefix + ak)); + } + } + + ); + + return addressLines; + } + + private static String capitalize(String text) { + return text.substring(0, 1).toUpperCase() + text.substring(1); + } + + +} diff --git a/src/main/java/org/ilgcc/app/utils/SubmissionUtilities.java b/src/main/java/org/ilgcc/app/utils/SubmissionUtilities.java index b92ced0e9..fe196da32 100644 --- a/src/main/java/org/ilgcc/app/utils/SubmissionUtilities.java +++ b/src/main/java/org/ilgcc/app/utils/SubmissionUtilities.java @@ -4,7 +4,6 @@ import static java.util.Collections.emptyList; import formflow.library.data.Submission; -import formflow.library.inputs.FieldNameMarkers; import java.time.LocalDate; import java.time.ZoneId; import java.time.format.DateTimeFormatter; @@ -50,57 +49,6 @@ public static String getProgramSchedule(Submission submission) { return submission.getInputData().get(PROGRAM_SCHEDULE).toString(); } - /** - * @param inputData a JSON object of user inputs - * @return true or false - */ - public static boolean parentIsExperiencingHomelessness(Map inputData) { - return inputData.getOrDefault("parentHomeExperiencingHomelessness[]", "no").equals(List.of("yes")); - } - - /** - * @param inputData a JSON object of user inputs - * @return true or false - */ - public static boolean parentMailingAddressIsHomeAddress(Map inputData) { - return inputData.getOrDefault("parentMailingAddressSameAsHomeAddress[]", "no").equals(List.of("yes")); - } - - public static boolean hasAddressSuggestion(Submission submission, String inputName) { - return submission.getInputData().get(FieldNameMarkers.UNVALIDATED_FIELD_MARKER_VALIDATE_ADDRESS + inputName) - .equals("true") && submission.getInputData() - .containsKey(inputName + "StreetAddress1" + FieldNameMarkers.UNVALIDATED_FIELD_MARKER_VALIDATED); - } - - public static Map getAddress(Map inputData, String addressPrefix) { - Map addressLines = new HashMap<>(); - - String suggestedAddressKey = String.format("useSuggested%sAddress", capitalize(addressPrefix)); - - var useSmartyValidatedAddress = inputData.getOrDefault(suggestedAddressKey, "false").equals("true"); - - String addressStreet1Key = addressPrefix + (useSmartyValidatedAddress ? "StreetAddress1_validated" - : "StreetAddress1"); - String addressStreet2Key = useSmartyValidatedAddress ? "" : addressPrefix + "StreetAddress2"; - String cityKey = addressPrefix + (useSmartyValidatedAddress ? "City_validated" - : "City"); - String stateKey = addressPrefix + (useSmartyValidatedAddress ? "State_validated" - : "State"); - String zipCodeKey = addressPrefix + (useSmartyValidatedAddress ? "ZipCode_validated" - : "ZipCode"); - - addressLines.put("address1", inputData.getOrDefault(addressStreet1Key, "").toString()); - addressLines.put("address2", inputData.getOrDefault(addressStreet2Key, "").toString()); - addressLines.put("city", inputData.getOrDefault(cityKey, "").toString()); - addressLines.put("state", inputData.getOrDefault(stateKey, "").toString()); - addressLines.put("zipCode", inputData.getOrDefault(zipCodeKey, "").toString()); - - return addressLines; - } - - private static String capitalize(String text) { - return text.substring(0, 1).toUpperCase() + text.substring(1); - } public static String applicantFirstName(Map inputData) { var applicantPreferredName = inputData.getOrDefault("parentPreferredName", "").toString(); diff --git a/src/main/resources/flows-config.yaml b/src/main/resources/flows-config.yaml index e33e93b81..b02a74f00 100644 --- a/src/main/resources/flows-config.yaml +++ b/src/main/resources/flows-config.yaml @@ -54,14 +54,20 @@ flow: nextScreens: - name: parent-no-permanent-address condition: ParentIsExperiencingHomelessness + - name: confirm-parent-home-address + confirm-parent-home-address: + condition: ShowParentHomeAddressConfirmationScreen + onPostAction: SaveValidatedParentHomeAddress + nextScreens: - name: parent-mailing-address parent-no-permanent-address: nextScreens: null parent-mailing-address: nextScreens: - - name: parent-confirm-address - parent-confirm-address: - beforeDisplayAction: SetEditAddressRedirect + - name: confirm-parent-mailing-address + confirm-parent-mailing-address: + condition: ShowParentMailingAddressConfirmationScreen + onPostAction: SaveValidatedParentMailingAddress nextScreens: - name: parent-comm-preference parent-comm-preference: @@ -73,7 +79,6 @@ flow: nextScreens: - name: parent-info-review parent-info-review: - beforeDisplayAction: FormatParentConfirmationAddress nextScreens: - name: parent-have-a-partner parent-have-a-partner: @@ -550,8 +555,10 @@ flow: - name: service-address service-address: nextScreens: - - name: confirm-address - confirm-address: + - name: confirm-service-address + confirm-service-address: + condition: ShowProviderResponseServiceAddressConfirmationScreen + onPostAction: SaveValidatedProviderResponseServiceAddress nextScreens: - name: mailing-address condition: EnableProviderRegistration @@ -561,7 +568,8 @@ flow: nextScreens: - name: confirm-mailing-address confirm-mailing-address: - condition: EnableProviderRegistration + condition: ShowProviderResponseMailingAddressConfirmationScreen + onPostAction: SaveValidatedProviderResponseMailingAddress nextScreens: - name: contact-info contact-info: @@ -632,6 +640,8 @@ flow: nextScreens: - name: registration-confirm-address registration-confirm-address: + condition: ShowProviderResponseServiceAddressConfirmationScreen + onPostAction: SaveValidatedProviderResponseServiceAddress nextScreens: - name: registration-mailing-address condition: EnableProviderRegistration @@ -641,7 +651,8 @@ flow: nextScreens: - name: registration-confirm-mailing-address registration-confirm-mailing-address: - condition: EnableProviderRegistration + condition: ShowProviderResponseMailingAddressConfirmationScreen + onPostAction: SaveValidatedProviderResponseMailingAddress nextScreens: - name: registration-contact-info registration-contact-info: diff --git a/src/main/resources/messages.properties b/src/main/resources/messages.properties index af7300401..65dd7490d 100644 --- a/src/main/resources/messages.properties +++ b/src/main/resources/messages.properties @@ -168,6 +168,13 @@ errors.invalid-communication-preference=Select mail or email to continue errors.invalid-dollar-amount=Enter a valid dollar amount. Example: 1.50 errors.general-banner-warning=Sorry, You've either skipped a required question or provided information in an incorrect format. Check your answers to continue. errors.general-title=Check your answers + +# confirm-address +confirm-address.title=Confirm Address +confirm-address.header=Confirm your address +confirm-address.note-addr-not-found=We couldn't find your address. To make sure you get mail from us, you may edit your address or keep going. +confirm-address.note-suggested-addr=We updated the address you entered. If correct, please use the suggested address. + # index.title=Get help paying for child care. index.notice-html-sda15=This site is available to families living in the following 18 counties in Illinois: Carroll, Clay, Crawford, DeKalb, Edwards, Effingham, Fayette, Jasper, Jefferson, Lawrence, Lee, Marion, McHenry, Ogle, Richland, Wabash, Wayne, Whiteside. Visit our FAQs to learn more. @@ -1262,25 +1269,13 @@ provider-response-info.last-name-help=Enter your last name. #service-address provider-response-provider-service-address.title=Child care location provider-response-provider-service-address.header=Where are you providing the child care? -provider-response-info.street-address=Street address provider-response-info.street-address-help=Provide the location where care is taking place. If you are a relative or friend providing care, use your home address. -provider-response-info.street-address-2=Apartment # -provider-response-info.street-address-2-help=This is optional. -provider-response-info.city=City -provider-response-info.state=State -provider-response-info.zip=Zip code - -#provider-response-confirm-address -provider-response-confirm-address.title=Confirm address # mailing-address provider-response.mailing-address.title=Mailing address provider-response.mailing-address.header=What is your mailing address? provider-response.mailing-address.same-as-home-address=Same as my child care service address -# confirm-mailing-address -confirm-mailing-address.title=Confirm address - #contact-info provider-response-contact-info.title=Contact Info provider-response-contact-info.header=What is your provider contact information? diff --git a/src/main/resources/pdf-map.yaml b/src/main/resources/pdf-map.yaml index 887f33d3a..b63f4f20d 100644 --- a/src/main/resources/pdf-map.yaml +++ b/src/main/resources/pdf-map.yaml @@ -5,17 +5,17 @@ inputFields: parentLastName: APPLICANT_NAME_LAST parentFullName: APPLICANT_NAME_FULL parentHasDisability: APPLICANT_HAS_A_DISABILITY - parentHomeStreetAddress1ForPDF: APPLICANT_ADDRESS_HOME_STREET - parentHomeStreetAddress2ForPDF: APPLICANT_ADDRESS_HOME_APT - parentHomeCityForPDF: APPLICANT_ADDRESS_HOME_CITY - parentHomeStateForPDF: APPLICANT_ADDRESS_HOME_STATE - parentHomeZipCodeForPDF: APPLICANT_ADDRESS_HOME_ZIP + parentHomeStreetAddress1: APPLICANT_ADDRESS_HOME_STREET + parentHomeStreetAddress2: APPLICANT_ADDRESS_HOME_APT + parentHomeCity: APPLICANT_ADDRESS_HOME_CITY + parentHomeState: APPLICANT_ADDRESS_HOME_STATE + parentHomeZipCode: APPLICANT_ADDRESS_HOME_ZIP applicantAddressCounty: APPLICANT_ADDRESS_COUNTY - parentMailingAddressForPDFStreet: APPLICANT_ADDRESS_MAILING_STREET - parentMailingAddressForPDFApt: APPLICANT_ADDRESS_MAILING_APT - parentMailingAddressForPDFCity: APPLICANT_ADDRESS_MAILING_CITY - parentMailingAddressForPDFState: APPLICANT_ADDRESS_MAILING_STATE - parentMailingAddressForPDFZipCode: APPLICANT_ADDRESS_MAILING_ZIP + parentMailingStreetAddress1: APPLICANT_ADDRESS_MAILING_STREET + parentMailingStreetAddress2: APPLICANT_ADDRESS_MAILING_APT + parentMailingCity: APPLICANT_ADDRESS_MAILING_CITY + parentMailingState: APPLICANT_ADDRESS_MAILING_STATE + parentMailingZipCode: APPLICANT_ADDRESS_MAILING_ZIP parentContactEmail: APPLICANT_EMAIL parentContactPhoneNumber: APPLICANT_PHONE_NUM_HOME parentPartnerFirstName: PARTNER_NAME_FIRST diff --git a/src/main/resources/templates/fragments/screens/confirm-address.html b/src/main/resources/templates/fragments/screens/confirm-address.html new file mode 100644 index 000000000..66da30258 --- /dev/null +++ b/src/main/resources/templates/fragments/screens/confirm-address.html @@ -0,0 +1,43 @@ + + + + + +
+
+
+
+
+
+ + +
+ + + + + + +
+
+
+
+
+
+
+ + + + + diff --git a/src/main/resources/templates/fragments/screens/enter-address.html b/src/main/resources/templates/fragments/screens/enter-address.html new file mode 100644 index 000000000..f30832c44 --- /dev/null +++ b/src/main/resources/templates/fragments/screens/enter-address.html @@ -0,0 +1,62 @@ + + + + + +
+
+
+
+
+
+ + + + +
+ + + + + + + +
+
+ +
+
+
+
+
+
+ + + + + diff --git a/src/main/resources/templates/gcc/confirm-parent-home-address.html b/src/main/resources/templates/gcc/confirm-parent-home-address.html new file mode 100644 index 000000000..361f32bfa --- /dev/null +++ b/src/main/resources/templates/gcc/confirm-parent-home-address.html @@ -0,0 +1,7 @@ + + \ No newline at end of file diff --git a/src/main/resources/templates/gcc/confirm-parent-mailing-address.html b/src/main/resources/templates/gcc/confirm-parent-mailing-address.html new file mode 100644 index 000000000..ecdd13195 --- /dev/null +++ b/src/main/resources/templates/gcc/confirm-parent-mailing-address.html @@ -0,0 +1,7 @@ + + diff --git a/src/main/resources/templates/gcc/parent-confirm-address.html b/src/main/resources/templates/gcc/parent-confirm-address.html deleted file mode 100644 index 8b5cda888..000000000 --- a/src/main/resources/templates/gcc/parent-confirm-address.html +++ /dev/null @@ -1,40 +0,0 @@ - - - - -
-
-
-
-
-
- - -
- - - - - - -
-
-
-
-
-
-
- - - diff --git a/src/main/resources/templates/gcc/parent-home-address.html b/src/main/resources/templates/gcc/parent-home-address.html index 2debe9bad..74d5fc3b4 100644 --- a/src/main/resources/templates/gcc/parent-home-address.html +++ b/src/main/resources/templates/gcc/parent-home-address.html @@ -1,52 +1,15 @@ - - - - -
-
-
-
-
-
- - - - -
- -
-
- -
-
-
-
-
-
- + + +