diff --git a/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/states/LandlordRegistrationOrgLandlordState.kt b/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/states/LandlordRegistrationOrgLandlordState.kt index d54004065f..6fac33c16d 100644 --- a/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/states/LandlordRegistrationOrgLandlordState.kt +++ b/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/states/LandlordRegistrationOrgLandlordState.kt @@ -1,35 +1,17 @@ package uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.states import uk.gov.communities.prsdb.webapp.journeys.JourneyState -import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.HasAnyGovBodyMembersStep -import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.LeadTrusteeDobStep -import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.LeadTrusteeEmailStep -import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.LeadTrusteeNameStep -import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.LeadTrusteePhoneStep import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgAddressStep -import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgCharityNumberEnglandAndWalesStep -import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgCharityNumberNorthernIrelandStep -import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgCharityNumberScotlandStep -import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgCharityRegisteredWithStep -import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgCompanyNumberStep import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgEmailStep -import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgGovBodyDetailsStep -import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgGovBodyMemberDobStep -import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgGovBodyMemberListStep -import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgGovBodyMemberNameStep -import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgGovBodyMustProvideInfoStep -import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgGovBodyWhoToProvideStep -import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgIsRegisteredCharityStep -import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgIsRegisteredCompanyStep import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgMainContactStep import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgNameStep import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgPhoneNumberStep import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgTypeStep -import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.RemoveGovBodyMemberStep -import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.SaveGovBodyMemberStep -import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.SetStateForGovBodyMemberEditStep -import uk.gov.communities.prsdb.webapp.journeys.shared.tasks.AddressTask -import uk.gov.communities.prsdb.webapp.models.dataModels.GoverningBodyMemberDataModel +import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.UpdateDetailsTodoStep +import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.tasks.LeadTrusteeTask +import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.tasks.OrgCharityTask +import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.tasks.OrgCompaniesHouseTask +import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.tasks.OrgGovBodyTask interface LandlordRegistrationOrgLandlordState : JourneyState { val orgNameStep: OrgNameStep @@ -37,31 +19,12 @@ interface LandlordRegistrationOrgLandlordState : JourneyState { val orgEmailStep: OrgEmailStep val orgPhoneNumberStep: OrgPhoneNumberStep val orgTypeStep: OrgTypeStep - val orgIsRegisteredCompanyStep: OrgIsRegisteredCompanyStep - val orgCompanyNumberStep: OrgCompanyNumberStep - val orgIsRegisteredCharityStep: OrgIsRegisteredCharityStep - val orgCharityRegisteredWithStep: OrgCharityRegisteredWithStep - val orgCharityNumberEnglandAndWalesStep: OrgCharityNumberEnglandAndWalesStep - val orgCharityNumberNorthernIrelandStep: OrgCharityNumberNorthernIrelandStep - val orgCharityNumberScotlandStep: OrgCharityNumberScotlandStep - val leadTrusteeNameStep: LeadTrusteeNameStep - val leadTrusteeEmailStep: LeadTrusteeEmailStep - val leadTrusteePhoneStep: LeadTrusteePhoneStep - val leadTrusteeDobStep: LeadTrusteeDobStep - val trusteeAddressTask: AddressTask + val companiesHouseTask: OrgCompaniesHouseTask + val orgGovBodyTask: OrgGovBodyTask + val charityTask: OrgCharityTask + val leadTrusteeTask: LeadTrusteeTask val orgMainContactStep: OrgMainContactStep - val orgGovBodyDetailsStep: OrgGovBodyDetailsStep - val orgGovBodyMustProvideInfoStep: OrgGovBodyMustProvideInfoStep - val orgGovBodyWhoToProvideStep: OrgGovBodyWhoToProvideStep - val orgGovBodyMemberNameStep: OrgGovBodyMemberNameStep - val orgGovBodyMemberDobStep: OrgGovBodyMemberDobStep - val govBodyMemberAddressTask: AddressTask - val orgGovBodyMemberListStep: OrgGovBodyMemberListStep - val hasAnyGovBodyMembersStep: HasAnyGovBodyMembersStep - val saveGovBodyMemberStep: SaveGovBodyMemberStep - val setStateForGovBodyMemberEditStep: SetStateForGovBodyMemberEditStep - val removeGovBodyMemberStep: RemoveGovBodyMemberStep - var governingBodyMembersMap: Map? - var nextGoverningBodyMemberId: Int? - var editingGovBodyMemberId: Int? + + // TODO PDJB-1237 PDJB-1238: remove this placeholder once the org type and companies house update journeys exist. + val updateDetailsTodoStep: UpdateDetailsTodoStep } diff --git a/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/states/LandlordRegistrationState.kt b/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/states/LandlordRegistrationState.kt index 77ba1060df..42b52a20ec 100644 --- a/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/states/LandlordRegistrationState.kt +++ b/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/states/LandlordRegistrationState.kt @@ -1,9 +1,8 @@ package uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.states import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.EmailStep -import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.IndividualLandlordRegistrationCyaStep +import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.LandlordRegistrationCyaStep import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.LandlordTypeStep -import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgLandlordRegistrationCyaStep import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.PhoneNumberStep import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.PrivacyNoticeStep import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.tasks.IdentityTask @@ -22,6 +21,5 @@ interface LandlordRegistrationState : val privacyNoticeStep: PrivacyNoticeStep val identityTask: IdentityTask override val finishCyaStep: FinishCyaJourneyStep - override val cyaStep: IndividualLandlordRegistrationCyaStep - val orgCyaStep: OrgLandlordRegistrationCyaStep + override val cyaStep: LandlordRegistrationCyaStep } diff --git a/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/states/LeadTrusteeState.kt b/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/states/LeadTrusteeState.kt new file mode 100644 index 0000000000..5abfe91eb2 --- /dev/null +++ b/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/states/LeadTrusteeState.kt @@ -0,0 +1,16 @@ +package uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.states + +import uk.gov.communities.prsdb.webapp.journeys.JourneyState +import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.LeadTrusteeDobStep +import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.LeadTrusteeEmailStep +import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.LeadTrusteeNameStep +import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.LeadTrusteePhoneStep +import uk.gov.communities.prsdb.webapp.journeys.shared.tasks.AddressTask + +interface LeadTrusteeState : JourneyState { + val leadTrusteeNameStep: LeadTrusteeNameStep + val leadTrusteeDobStep: LeadTrusteeDobStep + val leadTrusteeEmailStep: LeadTrusteeEmailStep + val leadTrusteePhoneStep: LeadTrusteePhoneStep + val trusteeAddressTask: AddressTask +} diff --git a/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/states/OrgCharityState.kt b/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/states/OrgCharityState.kt new file mode 100644 index 0000000000..37f41f4b53 --- /dev/null +++ b/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/states/OrgCharityState.kt @@ -0,0 +1,16 @@ +package uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.states + +import uk.gov.communities.prsdb.webapp.journeys.JourneyState +import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgCharityNumberEnglandAndWalesStep +import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgCharityNumberNorthernIrelandStep +import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgCharityNumberScotlandStep +import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgCharityRegisteredWithStep +import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgIsRegisteredCharityStep + +interface OrgCharityState : JourneyState { + val orgIsRegisteredCharityStep: OrgIsRegisteredCharityStep + val orgCharityRegisteredWithStep: OrgCharityRegisteredWithStep + val orgCharityNumberEnglandAndWalesStep: OrgCharityNumberEnglandAndWalesStep + val orgCharityNumberNorthernIrelandStep: OrgCharityNumberNorthernIrelandStep + val orgCharityNumberScotlandStep: OrgCharityNumberScotlandStep +} diff --git a/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/states/OrgCompaniesHouseState.kt b/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/states/OrgCompaniesHouseState.kt new file mode 100644 index 0000000000..c29c6606cf --- /dev/null +++ b/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/states/OrgCompaniesHouseState.kt @@ -0,0 +1,10 @@ +package uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.states + +import uk.gov.communities.prsdb.webapp.journeys.JourneyState +import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgCompanyNumberStep +import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgIsRegisteredCompanyStep + +interface OrgCompaniesHouseState : JourneyState { + val orgIsRegisteredCompanyStep: OrgIsRegisteredCompanyStep + val orgCompanyNumberStep: OrgCompanyNumberStep +} diff --git a/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/states/OrgGovBodyState.kt b/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/states/OrgGovBodyState.kt new file mode 100644 index 0000000000..721e2ca38d --- /dev/null +++ b/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/states/OrgGovBodyState.kt @@ -0,0 +1,32 @@ +package uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.states + +import uk.gov.communities.prsdb.webapp.journeys.JourneyState +import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.HasAnyGovBodyMembersStep +import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgGovBodyDetailsStep +import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgGovBodyMemberDobStep +import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgGovBodyMemberListStep +import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgGovBodyMemberNameStep +import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgGovBodyMustProvideInfoStep +import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgGovBodyWhoToProvideStep +import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.RemoveGovBodyMemberStep +import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.SaveGovBodyMemberStep +import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.SetStateForGovBodyMemberEditStep +import uk.gov.communities.prsdb.webapp.journeys.shared.tasks.AddressTask +import uk.gov.communities.prsdb.webapp.models.dataModels.GoverningBodyMemberDataModel + +interface OrgGovBodyState : JourneyState { + val orgGovBodyDetailsStep: OrgGovBodyDetailsStep + val orgGovBodyMustProvideInfoStep: OrgGovBodyMustProvideInfoStep + val orgGovBodyWhoToProvideStep: OrgGovBodyWhoToProvideStep + val orgGovBodyMemberNameStep: OrgGovBodyMemberNameStep + val orgGovBodyMemberDobStep: OrgGovBodyMemberDobStep + val govBodyMemberAddressTask: AddressTask + val orgGovBodyMemberListStep: OrgGovBodyMemberListStep + val hasAnyGovBodyMembersStep: HasAnyGovBodyMembersStep + val saveGovBodyMemberStep: SaveGovBodyMemberStep + val setStateForGovBodyMemberEditStep: SetStateForGovBodyMemberEditStep + val removeGovBodyMemberStep: RemoveGovBodyMemberStep + var governingBodyMembersMap: Map? + var nextGoverningBodyMemberId: Int? + var editingGovBodyMemberId: Int? +} diff --git a/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/stepConfig/HasAnyGovBodyMembersStepConfig.kt b/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/stepConfig/HasAnyGovBodyMembersStepConfig.kt index db70bf9b7c..e7591b1ff2 100644 --- a/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/stepConfig/HasAnyGovBodyMembersStepConfig.kt +++ b/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/stepConfig/HasAnyGovBodyMembersStepConfig.kt @@ -3,16 +3,16 @@ package uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig import uk.gov.communities.prsdb.webapp.annotations.webAnnotations.JourneyFrameworkComponent import uk.gov.communities.prsdb.webapp.journeys.AbstractInternalStepConfig import uk.gov.communities.prsdb.webapp.journeys.JourneyStep -import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.states.LandlordRegistrationOrgLandlordState +import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.states.OrgGovBodyState import uk.gov.communities.prsdb.webapp.journeys.shared.AnyMembers @JourneyFrameworkComponent -class HasAnyGovBodyMembersStepConfig : AbstractInternalStepConfig() { - override fun mode(state: LandlordRegistrationOrgLandlordState) = +class HasAnyGovBodyMembersStepConfig : AbstractInternalStepConfig() { + override fun mode(state: OrgGovBodyState) = if (state.governingBodyMembersMap.isNullOrEmpty()) AnyMembers.NO_MEMBERS else AnyMembers.SOME_MEMBERS } @JourneyFrameworkComponent final class HasAnyGovBodyMembersStep( stepConfig: HasAnyGovBodyMembersStepConfig, -) : JourneyStep.InternalStep(stepConfig) +) : JourneyStep.InternalStep(stepConfig) diff --git a/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/stepConfig/IndividualLandlordRegistrationCyaStepConfig.kt b/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/stepConfig/IndividualLandlordRegistrationCyaStepConfig.kt deleted file mode 100644 index 71497ce1d1..0000000000 --- a/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/stepConfig/IndividualLandlordRegistrationCyaStepConfig.kt +++ /dev/null @@ -1,145 +0,0 @@ -package uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig - -import org.springframework.security.core.context.SecurityContextHolder -import uk.gov.communities.prsdb.webapp.annotations.webAnnotations.JourneyFrameworkComponent -import uk.gov.communities.prsdb.webapp.constants.ENGLAND_OR_WALES -import uk.gov.communities.prsdb.webapp.exceptions.NotNullFormModelValueIsNullException.Companion.notNullValue -import uk.gov.communities.prsdb.webapp.journeys.Destination -import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.states.LandlordRegistrationState -import uk.gov.communities.prsdb.webapp.journeys.shared.stepConfig.AbstractCheckYourAnswersStep -import uk.gov.communities.prsdb.webapp.journeys.shared.stepConfig.AbstractCheckYourAnswersStepConfig -import uk.gov.communities.prsdb.webapp.models.requestModels.formModels.CountryOfResidenceFormModel -import uk.gov.communities.prsdb.webapp.models.requestModels.formModels.EmailFormModel -import uk.gov.communities.prsdb.webapp.models.requestModels.formModels.PhoneNumberFormModel -import uk.gov.communities.prsdb.webapp.models.requestModels.formModels.PrivacyNoticeFormModel -import uk.gov.communities.prsdb.webapp.models.viewModels.summaryModels.SummaryListRowViewModel -import uk.gov.communities.prsdb.webapp.services.LandlordRegistrationService -import uk.gov.communities.prsdb.webapp.services.SecurityContextService - -@JourneyFrameworkComponent -class IndividualLandlordRegistrationCyaStepConfig( - private val landlordRegistrationService: LandlordRegistrationService, - private val securityContextService: SecurityContextService, -) : AbstractCheckYourAnswersStepConfig() { - override fun getStepSpecificContent(state: LandlordRegistrationState): Map = - mapOf( - "summaryName" to "registerAsALandlord.checkAnswers.summaryName", - "showWarning" to true, - "submitButtonText" to "forms.buttons.confirmAndContinue", - "insetText" to false, - "summaryListData" to getSummaryList(state), - ) - - override fun afterStepDataIsAdded(state: LandlordRegistrationState) { - landlordRegistrationService.registerIndividualLandlord( - baseUserId = SecurityContextHolder.getContext().authentication.name, - name = state.identityTask.getName(), - email = - state.emailStep.formModel - .notNullValue(EmailFormModel::emailAddress), - phoneNumber = - state.phoneNumberStep.formModel.notNullValue( - PhoneNumberFormModel::phoneNumber, - ), - address = state.individualLandlordLocationTask.addressTask.getAddress(), - countryOfResidence = ENGLAND_OR_WALES, - isVerified = state.identityTask.getIsIdentityVerified(), - hasAcceptedPrivacyNotice = state.privacyNoticeStep.formModel.notNullValue(PrivacyNoticeFormModel::agreesToPrivacyNotice), - nonEnglandOrWalesAddress = null, - dateOfBirth = state.identityTask.getDateOfBirth(), - ) - - securityContextService.refreshContext() - } - - // Overrides AbstractCheckYourAnswersStepConfig, which deleted the journey - // We don't want to delete the journey at this stage when this page is included within another journey, - // such as accepting a joint landlord invitation - override fun resolveNextDestination( - state: LandlordRegistrationState, - defaultDestination: Destination, - ): Destination = defaultDestination - - private fun getSummaryList(state: LandlordRegistrationState) = - getIdentityRows(state) + - getEmailAndPhoneRows(state) + - getAddressRows(state) - - private fun getIdentityRows(state: LandlordRegistrationState): List { - val isIdentityVerified = state.identityTask.getIsIdentityVerified() - return listOf( - SummaryListRowViewModel.forCheckYourAnswersPage( - "registerAsALandlord.checkAnswers.rowHeading.name", - state.identityTask.getName(), - if (isIdentityVerified) { - Destination.Nowhere() - } else { - Destination.VisitableStep(state.identityTask.nameStep, state.getCyaJourneyId(state.identityTask.nameStep)) - }, - ), - SummaryListRowViewModel.forCheckYourAnswersPage( - "registerAsALandlord.checkAnswers.rowHeading.dateOfBirth", - state.identityTask.getDateOfBirth(), - if (isIdentityVerified) { - Destination.Nowhere() - } else { - Destination.VisitableStep( - state.identityTask.dateOfBirthStep, - state.getCyaJourneyId(state.identityTask.dateOfBirthStep), - ) - }, - ), - ) - } - - private fun getEmailAndPhoneRows(state: LandlordRegistrationState): List = - listOf( - SummaryListRowViewModel.forCheckYourAnswersPage( - "registerAsALandlord.checkAnswers.rowHeading.email", - state.emailStep.formModel - .notNullValue(EmailFormModel::emailAddress), - Destination.VisitableStep( - state.emailStep, - state.getCyaJourneyId(state.emailStep), - ), - ), - SummaryListRowViewModel.forCheckYourAnswersPage( - "registerAsALandlord.checkAnswers.rowHeading.telephoneNumber", - state.phoneNumberStep.formModel - .notNullValue(PhoneNumberFormModel::phoneNumber), - Destination.VisitableStep( - state.phoneNumberStep, - state.getCyaJourneyId(state.phoneNumberStep), - ), - ), - ) - - private fun getAddressRows(state: LandlordRegistrationState): List = - listOf( - SummaryListRowViewModel.forCheckYourAnswersPage( - "registerAsALandlord.checkAnswers.rowHeading.englandOrWalesResident", - state.individualLandlordLocationTask.countryOfResidenceStep.formModel.notNullValue( - CountryOfResidenceFormModel::livesInEnglandOrWales, - ), - Destination.VisitableStep( - state.individualLandlordLocationTask.countryOfResidenceStep, - state.getCyaJourneyId(state.individualLandlordLocationTask.countryOfResidenceStep), - ), - ), - SummaryListRowViewModel.forCheckYourAnswersPage( - "registerAsALandlord.checkAnswers.rowHeading.contactAddress", - state.individualLandlordLocationTask.addressTask - .getAddress() - .singleLineAddress, - Destination.VisitableStep( - state.individualLandlordLocationTask.addressTask.lookupAddressStep, - state.getCyaJourneyId(state.individualLandlordLocationTask.addressTask.lookupAddressStep), - ), - ), - ) -} - -@JourneyFrameworkComponent -final class IndividualLandlordRegistrationCyaStep( - stepConfig: IndividualLandlordRegistrationCyaStepConfig, -) : AbstractCheckYourAnswersStep(stepConfig) diff --git a/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/stepConfig/OrgLandlordRegistrationCyaStepConfig.kt b/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/stepConfig/LandlordRegistrationCyaStepConfig.kt similarity index 55% rename from src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/stepConfig/OrgLandlordRegistrationCyaStepConfig.kt rename to src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/stepConfig/LandlordRegistrationCyaStepConfig.kt index 04d02c669f..c2d1b3d435 100644 --- a/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/stepConfig/OrgLandlordRegistrationCyaStepConfig.kt +++ b/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/stepConfig/LandlordRegistrationCyaStepConfig.kt @@ -2,6 +2,9 @@ package uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig import org.springframework.security.core.context.SecurityContextHolder import uk.gov.communities.prsdb.webapp.annotations.webAnnotations.JourneyFrameworkComponent +import uk.gov.communities.prsdb.webapp.config.managers.FeatureFlagManager +import uk.gov.communities.prsdb.webapp.constants.ENGLAND_OR_WALES +import uk.gov.communities.prsdb.webapp.constants.ORGANISATION_LANDLORD_REGISTRATION import uk.gov.communities.prsdb.webapp.constants.enums.CharityRegulator import uk.gov.communities.prsdb.webapp.constants.enums.GoverningBodyMemberType import uk.gov.communities.prsdb.webapp.constants.enums.OrgType @@ -11,6 +14,7 @@ import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.states.Land import uk.gov.communities.prsdb.webapp.journeys.shared.stepConfig.AbstractCheckYourAnswersStep import uk.gov.communities.prsdb.webapp.journeys.shared.stepConfig.AbstractCheckYourAnswersStepConfig import uk.gov.communities.prsdb.webapp.models.dataModels.AddressDataModel +import uk.gov.communities.prsdb.webapp.models.requestModels.formModels.CountryOfResidenceFormModel import uk.gov.communities.prsdb.webapp.models.requestModels.formModels.EmailFormModel import uk.gov.communities.prsdb.webapp.models.requestModels.formModels.LeadTrusteeEmailFormModel import uk.gov.communities.prsdb.webapp.models.requestModels.formModels.LeadTrusteeNameFormModel @@ -26,6 +30,7 @@ import uk.gov.communities.prsdb.webapp.models.requestModels.formModels.OrgMainCo import uk.gov.communities.prsdb.webapp.models.requestModels.formModels.OrgNameFormModel import uk.gov.communities.prsdb.webapp.models.requestModels.formModels.OrgPhoneNumberFormModel import uk.gov.communities.prsdb.webapp.models.requestModels.formModels.PhoneNumberFormModel +import uk.gov.communities.prsdb.webapp.models.requestModels.formModels.PrivacyNoticeFormModel import uk.gov.communities.prsdb.webapp.models.viewModels.summaryModels.SummaryCardActionViewModel import uk.gov.communities.prsdb.webapp.models.viewModels.summaryModels.SummaryCardViewModel import uk.gov.communities.prsdb.webapp.models.viewModels.summaryModels.SummaryListRowViewModel @@ -33,68 +38,120 @@ import uk.gov.communities.prsdb.webapp.services.LandlordRegistrationService import uk.gov.communities.prsdb.webapp.services.SecurityContextService @JourneyFrameworkComponent -class OrgLandlordRegistrationCyaStepConfig( +class LandlordRegistrationCyaStepConfig( private val landlordRegistrationService: LandlordRegistrationService, private val securityContextService: SecurityContextService, + private val featureFlagManager: FeatureFlagManager, ) : AbstractCheckYourAnswersStepConfig() { - override fun chooseTemplate(state: LandlordRegistrationState) = "forms/orgLandlordRegistrationCheckAnswersForm" + override fun chooseTemplate(state: LandlordRegistrationState) = + if (isOrgLandlord(state)) { + "forms/orgLandlordRegistrationCheckAnswersForm" + } else { + "forms/checkAnswersForm" + } override fun getStepSpecificContent(state: LandlordRegistrationState): Map = - mapOf( - "title" to "registerAsALandlord.title", - "submitButtonText" to "registerAsALandlord.orgCheckAnswers.submitButton", - "yourDetailsCard" to getYourDetailsCard(state), - "landlordDetails" to getLandlordDetailsRows(state), - "governingBodyMemberCards" to (listOfNotNull(getLeadTrusteeCard(state)) + getGovBodyMemberCards(state)), - "mainContactCard" to getMainContactCard(state), - ) + if (isOrgLandlord(state)) { + getOrgStepContent(state) + } else { + getIndividualStepContent(state) + } override fun afterStepDataIsAdded(state: LandlordRegistrationState) { - val org = state.orgLandlordRegistrationTask - - val organisationTypes = org.orgTypeStep.formModel.getSelectedOrgTypes() - val isTrust = OrgType.TRUST in organisationTypes - val hasCompanyNumber = org.orgIsRegisteredCompanyStep.formModel.notNullValue(OrgIsRegisteredCompanyFormModel::companiesHouse) - val isRegisteredCharity = org.orgIsRegisteredCharityStep.formModel.notNullValue(OrgIsRegisteredCharityFormModel::charity) - - val charityRegulator = if (isRegisteredCharity) org.orgCharityRegisteredWithStep.formModel.charityRegisteredWith else null + if (isOrgLandlord(state)) { + val org = state.orgLandlordRegistrationTask + + val organisationTypes = org.orgTypeStep.formModel.getSelectedOrgTypes() + val isTrust = OrgType.TRUST in organisationTypes + val isRegisteredCharity = + org.charityTask.orgIsRegisteredCharityStep.formModel.notNullValue( + OrgIsRegisteredCharityFormModel::charity, + ) + val hasCompanyNumber = + org.companiesHouseTask.orgIsRegisteredCompanyStep.formModel.notNullValue( + OrgIsRegisteredCompanyFormModel::companiesHouse, + ) - val mainContact = org.orgMainContactStep.formModel + val charityRegulator = + if (isRegisteredCharity) org.charityTask.orgCharityRegisteredWithStep.formModel.charityRegisteredWith else null + + val mainContact = org.orgMainContactStep.formModel + + val governingBodyMembers = + (org.orgGovBodyTask.governingBodyMembersMap ?: emptyMap()) + .values + .toList() + + landlordRegistrationService.registerOrganisationLandlord( + baseUserId = SecurityContextHolder.getContext().authentication.name, + organisationTypes = organisationTypes, + organisationHasCompanyNumber = hasCompanyNumber, + orgIsRegisteredCharity = isRegisteredCharity, + organisationName = org.orgNameStep.formModel.notNullValue(OrgNameFormModel::orgName), + organisationAddress = getOrgAddress(org.orgAddressStep.formModel), + organisationEmail = org.orgEmailStep.formModel.notNullValue(EmailFormModel::emailAddress), + organisationPhoneNumber = org.orgPhoneNumberStep.formModel.notNullValue(OrgPhoneNumberFormModel::phoneNumber), + organisationCompanyNumber = + if (hasCompanyNumber) { + org.companiesHouseTask.orgCompanyNumberStep.formModel.notNullValue( + OrgCompanyNumberFormModel::companyNumber, + ) + } else { + null + }, + organisationCharityRegisteredWith = charityRegulator, + organisationCharityNumber = getCharityNumber(state, charityRegulator), + organisationLeadTrusteeName = + if (isTrust) org.leadTrusteeTask.leadTrusteeNameStep.formModel.notNullValue(LeadTrusteeNameFormModel::name) else null, + organisationLeadTrusteeDateOfBirth = + if (isTrust) org.leadTrusteeTask.leadTrusteeDobStep.formModel.toLocalDateOrNull() else null, + organisationLeadTrusteeEmail = + if (isTrust) { + org.leadTrusteeTask.leadTrusteeEmailStep.formModel.notNullValue( + LeadTrusteeEmailFormModel::emailAddress, + ) + } else { + null + }, + organisationLeadTrusteePhoneNumber = + if (isTrust) { + org.leadTrusteeTask.leadTrusteePhoneStep.formModel.notNullValue( + LeadTrusteePhoneFormModel::phoneNumber, + ) + } else { + null + }, + organisationLeadTrusteeAddress = if (isTrust) org.leadTrusteeTask.trusteeAddressTask.getAddress() else null, + organisationMainContactName = mainContact.notNullValue(OrgMainContactFormModel::name), + organisationMainContactEmail = mainContact.notNullValue(OrgMainContactFormModel::emailAddress), + organisationMainContactPhoneNumber = mainContact.notNullValue(OrgMainContactFormModel::phoneNumber), + organisationRegistrantName = state.identityTask.getName(), + organisationRegistrantDateOfBirth = state.identityTask.getDateOfBirth(), + organisationRegistrantEmail = state.emailStep.formModel.notNullValue(EmailFormModel::emailAddress), + organisationRegistrantPhoneNumber = state.phoneNumberStep.formModel.notNullValue(PhoneNumberFormModel::phoneNumber), + organisationGoverningBodyMembers = governingBodyMembers, + ) - val governingBodyMembers = - (org.governingBodyMembersMap ?: emptyMap()) - .values - .toList() + securityContextService.refreshContext() + return + } - landlordRegistrationService.registerOrganisationLandlord( + landlordRegistrationService.registerIndividualLandlord( baseUserId = SecurityContextHolder.getContext().authentication.name, - organisationTypes = organisationTypes, - organisationHasCompanyNumber = hasCompanyNumber, - orgIsRegisteredCharity = isRegisteredCharity, - organisationName = org.orgNameStep.formModel.notNullValue(OrgNameFormModel::orgName), - organisationAddress = getOrgAddress(org.orgAddressStep.formModel), - organisationEmail = org.orgEmailStep.formModel.notNullValue(EmailFormModel::emailAddress), - organisationPhoneNumber = org.orgPhoneNumberStep.formModel.notNullValue(OrgPhoneNumberFormModel::phoneNumber), - organisationCompanyNumber = - if (hasCompanyNumber) org.orgCompanyNumberStep.formModel.notNullValue(OrgCompanyNumberFormModel::companyNumber) else null, - organisationCharityRegisteredWith = charityRegulator, - organisationCharityNumber = getCharityNumber(state, charityRegulator), - organisationLeadTrusteeName = - if (isTrust) org.leadTrusteeNameStep.formModel.notNullValue(LeadTrusteeNameFormModel::name) else null, - organisationLeadTrusteeDateOfBirth = if (isTrust) org.leadTrusteeDobStep.formModel.toLocalDateOrNull() else null, - organisationLeadTrusteeEmail = - if (isTrust) org.leadTrusteeEmailStep.formModel.notNullValue(LeadTrusteeEmailFormModel::emailAddress) else null, - organisationLeadTrusteePhoneNumber = - if (isTrust) org.leadTrusteePhoneStep.formModel.notNullValue(LeadTrusteePhoneFormModel::phoneNumber) else null, - organisationLeadTrusteeAddress = if (isTrust) org.trusteeAddressTask.getAddress() else null, - organisationMainContactName = mainContact.notNullValue(OrgMainContactFormModel::name), - organisationMainContactEmail = mainContact.notNullValue(OrgMainContactFormModel::emailAddress), - organisationMainContactPhoneNumber = mainContact.notNullValue(OrgMainContactFormModel::phoneNumber), - organisationRegistrantName = state.identityTask.getName(), - organisationRegistrantDateOfBirth = state.identityTask.getDateOfBirth(), - organisationRegistrantEmail = state.emailStep.formModel.notNullValue(EmailFormModel::emailAddress), - organisationRegistrantPhoneNumber = state.phoneNumberStep.formModel.notNullValue(PhoneNumberFormModel::phoneNumber), - organisationGoverningBodyMembers = governingBodyMembers, + name = state.identityTask.getName(), + email = + state.emailStep.formModel + .notNullValue(EmailFormModel::emailAddress), + phoneNumber = + state.phoneNumberStep.formModel.notNullValue( + PhoneNumberFormModel::phoneNumber, + ), + address = state.individualLandlordLocationTask.addressTask.getAddress(), + countryOfResidence = ENGLAND_OR_WALES, + isVerified = state.identityTask.getIsIdentityVerified(), + hasAcceptedPrivacyNotice = state.privacyNoticeStep.formModel.notNullValue(PrivacyNoticeFormModel::agreesToPrivacyNotice), + nonEnglandOrWalesAddress = null, + dateOfBirth = state.identityTask.getDateOfBirth(), ) securityContextService.refreshContext() @@ -108,6 +165,127 @@ class OrgLandlordRegistrationCyaStepConfig( defaultDestination: Destination, ): Destination = defaultDestination + private fun isOrgLandlord(state: LandlordRegistrationState) = + featureFlagManager.checkFeature(ORGANISATION_LANDLORD_REGISTRATION) && + state.landlordTypeStep.outcome == LandlordTypeMode.ORGANISATION + + // Individual landlord content + + private fun getIndividualStepContent(state: LandlordRegistrationState): Map = + mapOf( + "summaryName" to "registerAsALandlord.checkAnswers.summaryName", + "showWarning" to true, + "submitButtonText" to "forms.buttons.confirmAndContinue", + "insetText" to false, + "summaryListData" to getSummaryList(state), + ) + + private fun getSummaryList(state: LandlordRegistrationState) = + getIdentityRows(state) + + getLandlordTypeRows(state) + + getEmailAndPhoneRows(state) + + getAddressRows(state) + + private fun getLandlordTypeRows(state: LandlordRegistrationState): List = + if (featureFlagManager.checkFeature(ORGANISATION_LANDLORD_REGISTRATION) && + state.landlordTypeStep.outcome == LandlordTypeMode.INDIVIDUAL + ) { + listOf( + SummaryListRowViewModel.forCheckYourAnswersPage( + "registerAsALandlord.checkAnswers.rowHeading.landlordType", + "registerAsALandlord.checkAnswers.landlordTypeValue", + Destination.VisitableStep(state.landlordTypeStep, state.getCyaJourneyId(state.landlordTypeStep)), + ), + ) + } else { + emptyList() + } + + private fun getIdentityRows(state: LandlordRegistrationState): List { + val isIdentityVerified = state.identityTask.getIsIdentityVerified() + return listOf( + SummaryListRowViewModel.forCheckYourAnswersPage( + "registerAsALandlord.checkAnswers.rowHeading.name", + state.identityTask.getName(), + if (isIdentityVerified) { + Destination.Nowhere() + } else { + Destination.VisitableStep(state.identityTask.nameStep, state.getCyaJourneyId(state.identityTask.nameStep)) + }, + ), + SummaryListRowViewModel.forCheckYourAnswersPage( + "registerAsALandlord.checkAnswers.rowHeading.dateOfBirth", + state.identityTask.getDateOfBirth(), + if (isIdentityVerified) { + Destination.Nowhere() + } else { + Destination.VisitableStep( + state.identityTask.dateOfBirthStep, + state.getCyaJourneyId(state.identityTask.dateOfBirthStep), + ) + }, + ), + ) + } + + private fun getEmailAndPhoneRows(state: LandlordRegistrationState): List = + listOf( + SummaryListRowViewModel.forCheckYourAnswersPage( + "registerAsALandlord.checkAnswers.rowHeading.email", + state.emailStep.formModel + .notNullValue(EmailFormModel::emailAddress), + Destination.VisitableStep( + state.emailStep, + state.getCyaJourneyId(state.emailStep), + ), + ), + SummaryListRowViewModel.forCheckYourAnswersPage( + "registerAsALandlord.checkAnswers.rowHeading.telephoneNumber", + state.phoneNumberStep.formModel + .notNullValue(PhoneNumberFormModel::phoneNumber), + Destination.VisitableStep( + state.phoneNumberStep, + state.getCyaJourneyId(state.phoneNumberStep), + ), + ), + ) + + private fun getAddressRows(state: LandlordRegistrationState): List = + listOf( + SummaryListRowViewModel.forCheckYourAnswersPage( + "registerAsALandlord.checkAnswers.rowHeading.englandOrWalesResident", + state.individualLandlordLocationTask.countryOfResidenceStep.formModel.notNullValue( + CountryOfResidenceFormModel::livesInEnglandOrWales, + ), + Destination.VisitableStep( + state.individualLandlordLocationTask.countryOfResidenceStep, + state.getCyaJourneyId(state.individualLandlordLocationTask.countryOfResidenceStep), + ), + ), + SummaryListRowViewModel.forCheckYourAnswersPage( + "registerAsALandlord.checkAnswers.rowHeading.contactAddress", + state.individualLandlordLocationTask.addressTask + .getAddress() + .singleLineAddress, + Destination.VisitableStep( + state.individualLandlordLocationTask.addressTask.lookupAddressStep, + state.getCyaJourneyId(state.individualLandlordLocationTask.addressTask.lookupAddressStep), + ), + ), + ) + + // Organisation landlord content + + private fun getOrgStepContent(state: LandlordRegistrationState): Map = + mapOf( + "title" to "registerAsALandlord.title", + "submitButtonText" to "registerAsALandlord.orgCheckAnswers.submitButton", + "yourDetailsCard" to getYourDetailsCard(state), + "landlordDetails" to getLandlordDetailsRows(state), + "governingBodyMemberCards" to (listOfNotNull(getLeadTrusteeCard(state)) + getGovBodyMemberCards(state)), + "mainContactCard" to getMainContactCard(state), + ) + private fun getYourDetailsCard(state: LandlordRegistrationState): SummaryCardViewModel { val verified = state.identityTask.getIsIdentityVerified() val rows = @@ -206,16 +384,27 @@ class OrgLandlordRegistrationCyaStepConfig( ), ) - val isRegisteredCharity = org.orgIsRegisteredCharityStep.formModel.notNullValue(OrgIsRegisteredCharityFormModel::charity) + val isRegisteredCharity = + org.charityTask.orgIsRegisteredCharityStep.formModel.notNullValue( + OrgIsRegisteredCharityFormModel::charity, + ) add( SummaryListRowViewModel.forCheckYourAnswersPage( "registerAsALandlord.orgCheckAnswers.landlordDetails.registeredCharity", isRegisteredCharity, - Destination.VisitableStep(org.orgIsRegisteredCharityStep, state.getCyaJourneyId(org.orgIsRegisteredCharityStep)), + Destination.VisitableStep( + org.charityTask.orgIsRegisteredCharityStep, + state.getCyaJourneyId(org.charityTask.orgIsRegisteredCharityStep), + ), ), ) - val charityRegulator = if (isRegisteredCharity) org.orgCharityRegisteredWithStep.formModel.charityRegisteredWith else null + val charityRegulator = + if (isRegisteredCharity) { + org.charityTask.orgCharityRegisteredWithStep.formModel.charityRegisteredWith + } else { + null + } val showCharityRegulator = charityRegulator != null val showCharityNumber = charityRegulator != null && charityRegulator != CharityRegulator.NONE @@ -223,35 +412,41 @@ class OrgLandlordRegistrationCyaStepConfig( add( SummaryListRowViewModel.forCheckYourAnswersPage( "registerAsALandlord.orgCheckAnswers.landlordDetails.charityCommission", - regulatorMessageKey(charityRegulator!!), + regulatorMessageKey(charityRegulator), Destination.VisitableStep( - org.orgCharityRegisteredWithStep, - state.getCyaJourneyId(org.orgCharityRegisteredWithStep), + org.charityTask.orgCharityRegisteredWithStep, + state.getCyaJourneyId(org.charityTask.orgCharityRegisteredWithStep), ), ), ) } if (showCharityNumber) { - add(charityNumberRow(state, charityRegulator!!)) + add(charityNumberRow(state, charityRegulator)) } val registeredWithCompaniesHouse = - org.orgIsRegisteredCompanyStep.formModel.notNullValue( + org.companiesHouseTask.orgIsRegisteredCompanyStep.formModel.notNullValue( OrgIsRegisteredCompanyFormModel::companiesHouse, ) add( SummaryListRowViewModel.forCheckYourAnswersPage( "registerAsALandlord.orgCheckAnswers.landlordDetails.registeredWithCompaniesHouse", registeredWithCompaniesHouse, - Destination.VisitableStep(org.orgIsRegisteredCompanyStep, state.getCyaJourneyId(org.orgIsRegisteredCompanyStep)), + Destination.VisitableStep( + org.companiesHouseTask.orgIsRegisteredCompanyStep, + state.getCyaJourneyId(org.companiesHouseTask.orgIsRegisteredCompanyStep), + ), ), ) if (registeredWithCompaniesHouse) { add( SummaryListRowViewModel.forCheckYourAnswersPage( "registerAsALandlord.orgCheckAnswers.landlordDetails.companiesHouseNumber", - org.orgCompanyNumberStep.formModel.notNullValue(OrgCompanyNumberFormModel::companyNumber), - Destination.VisitableStep(org.orgCompanyNumberStep, state.getCyaJourneyId(org.orgCompanyNumberStep)), + org.companiesHouseTask.orgCompanyNumberStep.formModel.notNullValue(OrgCompanyNumberFormModel::companyNumber), + Destination.VisitableStep( + org.companiesHouseTask.orgCompanyNumberStep, + state.getCyaJourneyId(org.companiesHouseTask.orgCompanyNumberStep), + ), ), ) } @@ -265,42 +460,41 @@ class OrgLandlordRegistrationCyaStepConfig( val org = state.orgLandlordRegistrationTask val headingKey = "registerAsALandlord.orgCheckAnswers.landlordDetails.charityNumber" return when (regulator) { - CharityRegulator.ENGLAND_AND_WALES -> { + CharityRegulator.ENGLAND_AND_WALES -> SummaryListRowViewModel.forCheckYourAnswersPage( headingKey, - org.orgCharityNumberEnglandAndWalesStep.formModel.notNullValue(OrgCharityNumberEnglandAndWalesFormModel::charityNumber), + org.charityTask.orgCharityNumberEnglandAndWalesStep.formModel.notNullValue( + OrgCharityNumberEnglandAndWalesFormModel::charityNumber, + ), Destination.VisitableStep( - org.orgCharityNumberEnglandAndWalesStep, - state.getCyaJourneyId(org.orgCharityNumberEnglandAndWalesStep), + org.charityTask.orgCharityNumberEnglandAndWalesStep, + state.getCyaJourneyId(org.charityTask.orgCharityNumberEnglandAndWalesStep), ), ) - } - CharityRegulator.NORTHERN_IRELAND -> { + CharityRegulator.NORTHERN_IRELAND -> SummaryListRowViewModel.forCheckYourAnswersPage( headingKey, - org.orgCharityNumberNorthernIrelandStep.formModel.notNullValue(OrgCharityNumberNorthernIrelandFormModel::charityNumber), + org.charityTask.orgCharityNumberNorthernIrelandStep.formModel.notNullValue( + OrgCharityNumberNorthernIrelandFormModel::charityNumber, + ), Destination.VisitableStep( - org.orgCharityNumberNorthernIrelandStep, - state.getCyaJourneyId(org.orgCharityNumberNorthernIrelandStep), + org.charityTask.orgCharityNumberNorthernIrelandStep, + state.getCyaJourneyId(org.charityTask.orgCharityNumberNorthernIrelandStep), ), ) - } - CharityRegulator.SCOTLAND -> { + CharityRegulator.SCOTLAND -> SummaryListRowViewModel.forCheckYourAnswersPage( headingKey, - org.orgCharityNumberScotlandStep.formModel.notNullValue(OrgCharityNumberScotlandFormModel::charityNumber), + org.charityTask.orgCharityNumberScotlandStep.formModel.notNullValue(OrgCharityNumberScotlandFormModel::charityNumber), Destination.VisitableStep( - org.orgCharityNumberScotlandStep, - state.getCyaJourneyId(org.orgCharityNumberScotlandStep), + org.charityTask.orgCharityNumberScotlandStep, + state.getCyaJourneyId(org.charityTask.orgCharityNumberScotlandStep), ), ) - } - CharityRegulator.NONE -> { - error("charityNumberRow should only be called for a regulator that issues a charity number") - } + CharityRegulator.NONE -> error("charityNumberRow should only be called for a regulator that issues a charity number") } } @@ -313,30 +507,27 @@ class OrgLandlordRegistrationCyaStepConfig( listOf( SummaryListRowViewModel.forCheckYourAnswersPage( "registerAsALandlord.orgCheckAnswers.governingBody.name", - org.leadTrusteeNameStep.formModel.notNullValue(LeadTrusteeNameFormModel::name), + org.leadTrusteeTask.leadTrusteeNameStep.formModel.notNullValue(LeadTrusteeNameFormModel::name), Destination.Nowhere(), ), SummaryListRowViewModel.forCheckYourAnswersPage( "registerAsALandlord.orgCheckAnswers.governingBody.dateOfBirth", - org.leadTrusteeDobStep.formModel.toLocalDateOrNull(), + org.leadTrusteeTask.leadTrusteeDobStep.formModel.toLocalDateOrNull(), Destination.Nowhere(), ), SummaryListRowViewModel.forCheckYourAnswersPage( "registerAsALandlord.orgCheckAnswers.governingBody.email", - org.leadTrusteeEmailStep.formModel.notNullValue(LeadTrusteeEmailFormModel::emailAddress), + org.leadTrusteeTask.leadTrusteeEmailStep.formModel.notNullValue(LeadTrusteeEmailFormModel::emailAddress), Destination.Nowhere(), ), SummaryListRowViewModel.forCheckYourAnswersPage( "registerAsALandlord.orgCheckAnswers.governingBody.phoneNumber", - org.leadTrusteePhoneStep.formModel.notNullValue(LeadTrusteePhoneFormModel::phoneNumber), + org.leadTrusteeTask.leadTrusteePhoneStep.formModel.notNullValue(LeadTrusteePhoneFormModel::phoneNumber), Destination.Nowhere(), ), SummaryListRowViewModel.forCheckYourAnswersPage( "registerAsALandlord.orgCheckAnswers.governingBody.address", - org.trusteeAddressTask - .getAddress() - .toMultiLineAddress() - .split("\n"), + org.leadTrusteeTask.trusteeAddressTask.getAddress().toMultiLineAddress().split("\n"), Destination.Nowhere(), ), ) @@ -345,13 +536,16 @@ class OrgLandlordRegistrationCyaStepConfig( summaryList = rows, actions = SummaryCardActionViewModel.changeAction( - Destination.VisitableStep(org.leadTrusteeNameStep, state.getCyaJourneyId(org.leadTrusteeNameStep)), + Destination.VisitableStep( + org.leadTrusteeTask.leadTrusteeNameStep, + state.getCyaJourneyId(org.leadTrusteeTask.leadTrusteeNameStep), + ), ), ) } private fun getGovBodyMemberCards(state: LandlordRegistrationState): List { - val members = state.orgLandlordRegistrationTask.governingBodyMembersMap ?: emptyMap() + val members = state.orgLandlordRegistrationTask.orgGovBodyTask.governingBodyMembersMap ?: emptyMap() return members .toList() .sortedBy { it.first } @@ -382,8 +576,15 @@ class OrgLandlordRegistrationCyaStepConfig( Destination.Nowhere(), ), ), - // TODO: PDJB-1168 (PR2) - wire this to the real governing-body-member edit round-trip that returns to the CYA page. - actions = listOf(SummaryCardActionViewModel(text = "forms.links.change", url = PLACEHOLDER_CHANGE_URL)), + actions = + SummaryCardActionViewModel.changeAction( + Destination.VisitableStep( + state.orgLandlordRegistrationTask.orgGovBodyTask.orgGovBodyMemberListStep, + state.getCyaJourneyId( + state.orgLandlordRegistrationTask.orgGovBodyTask.orgGovBodyMemberListStep, + ), + ), + ), ) } } @@ -457,27 +658,22 @@ class OrgLandlordRegistrationCyaStepConfig( ): String? { val org = state.orgLandlordRegistrationTask return when (charityRegulator) { - CharityRegulator.ENGLAND_AND_WALES -> { - org.orgCharityNumberEnglandAndWalesStep.formModel.notNullValue( + CharityRegulator.ENGLAND_AND_WALES -> + org.charityTask.orgCharityNumberEnglandAndWalesStep.formModel.notNullValue( OrgCharityNumberEnglandAndWalesFormModel::charityNumber, ) - } - CharityRegulator.NORTHERN_IRELAND -> { - org.orgCharityNumberNorthernIrelandStep.formModel.notNullValue( + CharityRegulator.NORTHERN_IRELAND -> + org.charityTask.orgCharityNumberNorthernIrelandStep.formModel.notNullValue( OrgCharityNumberNorthernIrelandFormModel::charityNumber, ) - } - CharityRegulator.SCOTLAND -> { - org.orgCharityNumberScotlandStep.formModel.notNullValue( + CharityRegulator.SCOTLAND -> + org.charityTask.orgCharityNumberScotlandStep.formModel.notNullValue( OrgCharityNumberScotlandFormModel::charityNumber, ) - } - CharityRegulator.NONE, null -> { - null - } + CharityRegulator.NONE, null -> null } } @@ -496,18 +692,9 @@ class OrgLandlordRegistrationCyaStepConfig( CharityRegulator.SCOTLAND -> "forms.orgCharityRegisteredWith.radios.option.scotland" CharityRegulator.NONE -> "commonText.other" } - - companion object { - // TODO: PDJB-1168 - non-functional Change link placeholder for governing body member rows until edit flow exists. - private const val PLACEHOLDER_CHANGE_URL = "#" - } } @JourneyFrameworkComponent -final class OrgLandlordRegistrationCyaStep( - stepConfig: OrgLandlordRegistrationCyaStepConfig, -) : AbstractCheckYourAnswersStep(stepConfig) { - companion object { - const val ROUTE_SEGMENT = "organisation-check-answers" - } -} +final class LandlordRegistrationCyaStep( + stepConfig: LandlordRegistrationCyaStepConfig, +) : AbstractCheckYourAnswersStep(stepConfig) diff --git a/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/stepConfig/OrgGovBodyMemberDobStepConfig.kt b/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/stepConfig/OrgGovBodyMemberDobStepConfig.kt index a997508937..3d8dd58ea7 100644 --- a/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/stepConfig/OrgGovBodyMemberDobStepConfig.kt +++ b/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/stepConfig/OrgGovBodyMemberDobStepConfig.kt @@ -4,16 +4,16 @@ import uk.gov.communities.prsdb.webapp.annotations.webAnnotations.JourneyFramewo import uk.gov.communities.prsdb.webapp.constants.FORM_MODEL_ATTR_NAME import uk.gov.communities.prsdb.webapp.journeys.AbstractRequestableStepConfig import uk.gov.communities.prsdb.webapp.journeys.JourneyStep.RequestableStep -import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.states.LandlordRegistrationOrgLandlordState +import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.states.OrgGovBodyState import uk.gov.communities.prsdb.webapp.journeys.shared.Complete import uk.gov.communities.prsdb.webapp.models.requestModels.formModels.OrgGovBodyMemberDobFormModel @JourneyFrameworkComponent class OrgGovBodyMemberDobStepConfig : - AbstractRequestableStepConfig() { + AbstractRequestableStepConfig() { override val formModelClass = OrgGovBodyMemberDobFormModel::class - override fun getStepSpecificContent(state: LandlordRegistrationOrgLandlordState) = + override fun getStepSpecificContent(state: OrgGovBodyState) = mapOf( "fieldSetHeading" to "registerAsALandlord.orgGovBodyMemberDob.fieldSetHeading", "fieldSetHint" to "registerAsALandlord.orgGovBodyMemberDob.fieldSetHint", @@ -21,7 +21,7 @@ class OrgGovBodyMemberDobStepConfig : ) override fun resolvePageContent( - state: LandlordRegistrationOrgLandlordState, + state: OrgGovBodyState, defaultContent: Map, ): Map { val formModel = defaultContent[FORM_MODEL_ATTR_NAME] as? OrgGovBodyMemberDobFormModel @@ -35,18 +35,18 @@ class OrgGovBodyMemberDobStepConfig : return defaultContent + (FORM_MODEL_ATTR_NAME to prepopulatedFormModel) } - override fun chooseTemplate(state: LandlordRegistrationOrgLandlordState) = "forms/dateForm" + override fun chooseTemplate(state: OrgGovBodyState) = "forms/dateForm" - override fun mode(state: LandlordRegistrationOrgLandlordState) = getFormModelFromStateOrNull(state)?.let { Complete.COMPLETE } + override fun mode(state: OrgGovBodyState) = getFormModelFromStateOrNull(state)?.let { Complete.COMPLETE } - private fun getEditingMemberOrNull(state: LandlordRegistrationOrgLandlordState) = + private fun getEditingMemberOrNull(state: OrgGovBodyState) = state.editingGovBodyMemberId?.let { state.governingBodyMembersMap?.get(it) } } @JourneyFrameworkComponent final class OrgGovBodyMemberDobStep( stepConfig: OrgGovBodyMemberDobStepConfig, -) : RequestableStep(stepConfig) { +) : RequestableStep(stepConfig) { companion object { const val ROUTE_SEGMENT = "organisation-governing-body-member-dob" } diff --git a/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/stepConfig/OrgGovBodyMemberListStepConfig.kt b/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/stepConfig/OrgGovBodyMemberListStepConfig.kt index 68a88ff6ea..9ff25dd647 100644 --- a/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/stepConfig/OrgGovBodyMemberListStepConfig.kt +++ b/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/stepConfig/OrgGovBodyMemberListStepConfig.kt @@ -4,7 +4,7 @@ import uk.gov.communities.prsdb.webapp.annotations.webAnnotations.JourneyFramewo import uk.gov.communities.prsdb.webapp.journeys.AbstractRequestableStepConfig import uk.gov.communities.prsdb.webapp.journeys.Destination import uk.gov.communities.prsdb.webapp.journeys.JourneyStep.RequestableStep -import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.states.LandlordRegistrationOrgLandlordState +import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.states.OrgGovBodyState import uk.gov.communities.prsdb.webapp.journeys.shared.Complete import uk.gov.communities.prsdb.webapp.models.requestModels.formModels.NoInputFormModel import uk.gov.communities.prsdb.webapp.models.viewModels.summaryModels.SummaryListRowActionsInputWithDestination @@ -14,10 +14,10 @@ import uk.gov.communities.prsdb.webapp.services.CollectionKeyParameterService @JourneyFrameworkComponent class OrgGovBodyMemberListStepConfig( private val urlParameterService: CollectionKeyParameterService, -) : AbstractRequestableStepConfig() { +) : AbstractRequestableStepConfig() { override val formModelClass = NoInputFormModel::class - override fun getStepSpecificContent(state: LandlordRegistrationOrgLandlordState) = + override fun getStepSpecificContent(state: OrgGovBodyState) = mapOf( "addAnotherTitle" to "forms.orgGovBodyMemberList.heading", "optionalAddAnotherTitleParam" to (state.governingBodyMembersMap?.size ?: 0), @@ -29,13 +29,13 @@ class OrgGovBodyMemberListStepConfig( "addAnotherUrl" to Destination(state.orgGovBodyWhoToProvideStep).toUrlStringOrNull(), ) - override fun afterStepIsReached(state: LandlordRegistrationOrgLandlordState) { + override fun afterStepIsReached(state: OrgGovBodyState) { // ensure that if you ever get to this page we reset any state that is used by one of the buttons. // this means we can be certain all the buttons will always work even if you use the browser back buttons. state.editingGovBodyMemberId = null } - private fun getMemberRows(state: LandlordRegistrationOrgLandlordState): List { + private fun getMemberRows(state: OrgGovBodyState): List { val membersMap = state.governingBodyMembersMap ?: emptyMap() return membersMap .toList() @@ -64,15 +64,15 @@ class OrgGovBodyMemberListStepConfig( } } - override fun chooseTemplate(state: LandlordRegistrationOrgLandlordState): String = "forms/addAnotherForm" + override fun chooseTemplate(state: OrgGovBodyState): String = "forms/addAnotherForm" - override fun mode(state: LandlordRegistrationOrgLandlordState) = getFormModelFromStateOrNull(state)?.let { Complete.COMPLETE } + override fun mode(state: OrgGovBodyState) = getFormModelFromStateOrNull(state)?.let { Complete.COMPLETE } } @JourneyFrameworkComponent final class OrgGovBodyMemberListStep( stepConfig: OrgGovBodyMemberListStepConfig, -) : RequestableStep(stepConfig) { +) : RequestableStep(stepConfig) { companion object { const val ROUTE_SEGMENT = "organisation-governing-body-member-list" } diff --git a/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/stepConfig/OrgGovBodyMemberNameStepConfig.kt b/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/stepConfig/OrgGovBodyMemberNameStepConfig.kt index 3816a558be..2a0eb2f45d 100644 --- a/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/stepConfig/OrgGovBodyMemberNameStepConfig.kt +++ b/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/stepConfig/OrgGovBodyMemberNameStepConfig.kt @@ -4,23 +4,23 @@ import uk.gov.communities.prsdb.webapp.annotations.webAnnotations.JourneyFramewo import uk.gov.communities.prsdb.webapp.constants.FORM_MODEL_ATTR_NAME import uk.gov.communities.prsdb.webapp.journeys.AbstractRequestableStepConfig import uk.gov.communities.prsdb.webapp.journeys.JourneyStep.RequestableStep -import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.states.LandlordRegistrationOrgLandlordState +import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.states.OrgGovBodyState import uk.gov.communities.prsdb.webapp.journeys.shared.Complete import uk.gov.communities.prsdb.webapp.models.requestModels.formModels.GoverningBodyMemberNameFormModel @JourneyFrameworkComponent class OrgGovBodyMemberNameStepConfig : - AbstractRequestableStepConfig() { + AbstractRequestableStepConfig() { override val formModelClass = GoverningBodyMemberNameFormModel::class - override fun getStepSpecificContent(state: LandlordRegistrationOrgLandlordState) = + override fun getStepSpecificContent(state: OrgGovBodyState) = mapOf( "fieldSetHeading" to "forms.orgGovBodyMemberName.fieldSetHeading", "submitButtonText" to "forms.buttons.continue", ) override fun resolvePageContent( - state: LandlordRegistrationOrgLandlordState, + state: OrgGovBodyState, defaultContent: Map, ): Map { val formModel = defaultContent[FORM_MODEL_ATTR_NAME] as? GoverningBodyMemberNameFormModel @@ -32,18 +32,18 @@ class OrgGovBodyMemberNameStepConfig : return defaultContent + (FORM_MODEL_ATTR_NAME to prepopulatedFormModel) } - override fun chooseTemplate(state: LandlordRegistrationOrgLandlordState) = "forms/nameForm" + override fun chooseTemplate(state: OrgGovBodyState) = "forms/nameForm" - override fun mode(state: LandlordRegistrationOrgLandlordState) = getFormModelFromStateOrNull(state)?.let { Complete.COMPLETE } + override fun mode(state: OrgGovBodyState) = getFormModelFromStateOrNull(state)?.let { Complete.COMPLETE } - private fun getEditingMemberOrNull(state: LandlordRegistrationOrgLandlordState) = + private fun getEditingMemberOrNull(state: OrgGovBodyState) = state.editingGovBodyMemberId?.let { state.governingBodyMembersMap?.get(it) } } @JourneyFrameworkComponent final class OrgGovBodyMemberNameStep( stepConfig: OrgGovBodyMemberNameStepConfig, -) : RequestableStep(stepConfig) { +) : RequestableStep(stepConfig) { companion object { const val ROUTE_SEGMENT = "organisation-governing-body-member-name" } diff --git a/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/stepConfig/OrgGovBodyWhoToProvideStepConfig.kt b/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/stepConfig/OrgGovBodyWhoToProvideStepConfig.kt index 70b872fc88..5ae0d26457 100644 --- a/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/stepConfig/OrgGovBodyWhoToProvideStepConfig.kt +++ b/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/stepConfig/OrgGovBodyWhoToProvideStepConfig.kt @@ -5,17 +5,17 @@ import uk.gov.communities.prsdb.webapp.constants.FORM_MODEL_ATTR_NAME import uk.gov.communities.prsdb.webapp.constants.enums.GoverningBodyMemberType import uk.gov.communities.prsdb.webapp.journeys.AbstractRequestableStepConfig import uk.gov.communities.prsdb.webapp.journeys.JourneyStep.RequestableStep -import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.states.LandlordRegistrationOrgLandlordState +import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.states.OrgGovBodyState import uk.gov.communities.prsdb.webapp.journeys.shared.Complete import uk.gov.communities.prsdb.webapp.models.requestModels.formModels.OrgGovBodyWhoToProvideFormModel import uk.gov.communities.prsdb.webapp.models.viewModels.formModels.RadiosButtonViewModel @JourneyFrameworkComponent class OrgGovBodyWhoToProvideStepConfig : - AbstractRequestableStepConfig() { + AbstractRequestableStepConfig() { override val formModelClass = OrgGovBodyWhoToProvideFormModel::class - override fun getStepSpecificContent(state: LandlordRegistrationOrgLandlordState) = + override fun getStepSpecificContent(state: OrgGovBodyState) = mapOf( "fieldSetHeading" to "registerAsALandlord.orgGovBodyWhoToProvide.fieldSetHeading", "fieldName" to "whoToProvide", @@ -41,7 +41,7 @@ class OrgGovBodyWhoToProvideStepConfig : ) override fun resolvePageContent( - state: LandlordRegistrationOrgLandlordState, + state: OrgGovBodyState, defaultContent: Map, ): Map { val formModel = defaultContent[FORM_MODEL_ATTR_NAME] as? OrgGovBodyWhoToProvideFormModel @@ -53,21 +53,21 @@ class OrgGovBodyWhoToProvideStepConfig : return defaultContent + (FORM_MODEL_ATTR_NAME to prepopulatedFormModel) } - override fun chooseTemplate(state: LandlordRegistrationOrgLandlordState) = "forms/orgGovBodyWhoToProvideForm" + override fun chooseTemplate(state: OrgGovBodyState) = "forms/orgGovBodyWhoToProvideForm" - override fun mode(state: LandlordRegistrationOrgLandlordState) = + override fun mode(state: OrgGovBodyState) = getFormModelFromStateOrNull( state, )?.whoToProvide?.let { Complete.COMPLETE } - private fun getEditingMemberOrNull(state: LandlordRegistrationOrgLandlordState) = + private fun getEditingMemberOrNull(state: OrgGovBodyState) = state.editingGovBodyMemberId?.let { state.governingBodyMembersMap?.get(it) } } @JourneyFrameworkComponent final class OrgGovBodyWhoToProvideStep( stepConfig: OrgGovBodyWhoToProvideStepConfig, -) : RequestableStep(stepConfig) { +) : RequestableStep(stepConfig) { companion object { const val ROUTE_SEGMENT = "organisation-governing-body-who-to-provide" } diff --git a/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/stepConfig/RemoveGovBodyMemberStepConfig.kt b/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/stepConfig/RemoveGovBodyMemberStepConfig.kt index 9b40b7591a..65c0f767b4 100644 --- a/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/stepConfig/RemoveGovBodyMemberStepConfig.kt +++ b/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/stepConfig/RemoveGovBodyMemberStepConfig.kt @@ -4,7 +4,7 @@ import uk.gov.communities.prsdb.webapp.annotations.webAnnotations.JourneyFramewo import uk.gov.communities.prsdb.webapp.journeys.AbstractRequestableStepConfig import uk.gov.communities.prsdb.webapp.journeys.JourneyStep import uk.gov.communities.prsdb.webapp.journeys.StepLifecycleOrchestrator.RedirectingStepLifecycleOrchestrator -import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.states.LandlordRegistrationOrgLandlordState +import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.states.OrgGovBodyState import uk.gov.communities.prsdb.webapp.journeys.shared.AnyMembers import uk.gov.communities.prsdb.webapp.models.requestModels.formModels.NoInputFormModel import uk.gov.communities.prsdb.webapp.services.CollectionKeyParameterService @@ -12,36 +12,36 @@ import uk.gov.communities.prsdb.webapp.services.CollectionKeyParameterService @JourneyFrameworkComponent class RemoveGovBodyMemberStepConfig( private val collectionKeyParameterService: CollectionKeyParameterService, -) : AbstractRequestableStepConfig() { +) : AbstractRequestableStepConfig() { override val formModelClass = NoInputFormModel::class override fun getStepLifecycleOrchestrator(journeyStep: JourneyStep<*, *, *>) = RedirectingStepLifecycleOrchestrator(journeyStep) - override fun getStepSpecificContent(state: LandlordRegistrationOrgLandlordState): Map = emptyMap() + override fun getStepSpecificContent(state: OrgGovBodyState): Map = emptyMap() - override fun chooseTemplate(state: LandlordRegistrationOrgLandlordState): String = "" + override fun chooseTemplate(state: OrgGovBodyState): String = "" - override fun beforeAttemptingToReachStep(state: LandlordRegistrationOrgLandlordState): Boolean { + override fun beforeAttemptingToReachStep(state: OrgGovBodyState): Boolean { val keyToRemove = collectionKeyParameterService.getParameterOrNull() val currentMap = state.governingBodyMembersMap ?: emptyMap() return keyToRemove != null && keyToRemove in currentMap.keys } - override fun afterStepIsReached(state: LandlordRegistrationOrgLandlordState) { + override fun afterStepIsReached(state: OrgGovBodyState) { val keyToRemove = collectionKeyParameterService.getParameterOrNull() ?: return val currentMap = state.governingBodyMembersMap?.toMutableMap() ?: return currentMap.remove(keyToRemove) state.governingBodyMembersMap = currentMap } - override fun mode(state: LandlordRegistrationOrgLandlordState): AnyMembers = + override fun mode(state: OrgGovBodyState): AnyMembers = if (state.governingBodyMembersMap.isNullOrEmpty()) AnyMembers.NO_MEMBERS else AnyMembers.SOME_MEMBERS } @JourneyFrameworkComponent final class RemoveGovBodyMemberStep( stepConfig: RemoveGovBodyMemberStepConfig, -) : JourneyStep.RequestableStep(stepConfig) { +) : JourneyStep.RequestableStep(stepConfig) { companion object { const val ROUTE_SEGMENT = "remove-governing-body-member" } diff --git a/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/stepConfig/SaveGovBodyMemberStepConfig.kt b/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/stepConfig/SaveGovBodyMemberStepConfig.kt index 6ec0fb55e4..a45794863e 100644 --- a/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/stepConfig/SaveGovBodyMemberStepConfig.kt +++ b/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/stepConfig/SaveGovBodyMemberStepConfig.kt @@ -5,15 +5,15 @@ import uk.gov.communities.prsdb.webapp.exceptions.PrsdbWebException import uk.gov.communities.prsdb.webapp.helpers.DateTimeHelper import uk.gov.communities.prsdb.webapp.journeys.AbstractInternalStepConfig import uk.gov.communities.prsdb.webapp.journeys.JourneyStep -import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.states.LandlordRegistrationOrgLandlordState +import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.states.OrgGovBodyState import uk.gov.communities.prsdb.webapp.journeys.shared.Complete import uk.gov.communities.prsdb.webapp.models.dataModels.GoverningBodyMemberDataModel @JourneyFrameworkComponent -class SaveGovBodyMemberStepConfig : AbstractInternalStepConfig() { - override fun mode(state: LandlordRegistrationOrgLandlordState): Complete = Complete.COMPLETE +class SaveGovBodyMemberStepConfig : AbstractInternalStepConfig() { + override fun mode(state: OrgGovBodyState): Complete = Complete.COMPLETE - override fun afterStepIsReached(state: LandlordRegistrationOrgLandlordState) { + override fun afterStepIsReached(state: OrgGovBodyState) { val name = state.orgGovBodyMemberNameStep.formModelOrNull?.name ?: throw PrsdbWebException("Governing body member name step data is missing") @@ -63,4 +63,4 @@ class SaveGovBodyMemberStepConfig : AbstractInternalStepConfig(stepConfig) +) : JourneyStep.InternalStep(stepConfig) diff --git a/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/stepConfig/SetStateForGovBodyMemberEditStepConfig.kt b/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/stepConfig/SetStateForGovBodyMemberEditStepConfig.kt index ca2fde5790..2fce52fc40 100644 --- a/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/stepConfig/SetStateForGovBodyMemberEditStepConfig.kt +++ b/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/stepConfig/SetStateForGovBodyMemberEditStepConfig.kt @@ -4,7 +4,7 @@ import uk.gov.communities.prsdb.webapp.annotations.webAnnotations.JourneyFramewo import uk.gov.communities.prsdb.webapp.journeys.AbstractRequestableStepConfig import uk.gov.communities.prsdb.webapp.journeys.JourneyStep import uk.gov.communities.prsdb.webapp.journeys.StepLifecycleOrchestrator.RedirectingStepLifecycleOrchestrator -import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.states.LandlordRegistrationOrgLandlordState +import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.states.OrgGovBodyState import uk.gov.communities.prsdb.webapp.journeys.shared.Complete import uk.gov.communities.prsdb.webapp.models.requestModels.formModels.NoInputFormModel import uk.gov.communities.prsdb.webapp.services.CollectionKeyParameterService @@ -12,33 +12,33 @@ import uk.gov.communities.prsdb.webapp.services.CollectionKeyParameterService @JourneyFrameworkComponent class SetStateForGovBodyMemberEditStepConfig( private val collectionKeyParameterService: CollectionKeyParameterService, -) : AbstractRequestableStepConfig() { +) : AbstractRequestableStepConfig() { override val formModelClass = NoInputFormModel::class override fun getStepLifecycleOrchestrator(journeyStep: JourneyStep<*, *, *>) = RedirectingStepLifecycleOrchestrator(journeyStep) - override fun getStepSpecificContent(state: LandlordRegistrationOrgLandlordState): Map = emptyMap() + override fun getStepSpecificContent(state: OrgGovBodyState): Map = emptyMap() - override fun chooseTemplate(state: LandlordRegistrationOrgLandlordState): String = "" + override fun chooseTemplate(state: OrgGovBodyState): String = "" - override fun beforeAttemptingToReachStep(state: LandlordRegistrationOrgLandlordState): Boolean { + override fun beforeAttemptingToReachStep(state: OrgGovBodyState): Boolean { val keyToEdit = collectionKeyParameterService.getParameterOrNull() val currentMap = state.governingBodyMembersMap ?: emptyMap() return keyToEdit != null && keyToEdit in currentMap.keys } - override fun afterStepIsReached(state: LandlordRegistrationOrgLandlordState) { + override fun afterStepIsReached(state: OrgGovBodyState) { val keyToEdit = collectionKeyParameterService.getParameterOrNull() ?: return state.editingGovBodyMemberId = keyToEdit } - override fun mode(state: LandlordRegistrationOrgLandlordState): Complete = Complete.COMPLETE + override fun mode(state: OrgGovBodyState): Complete = Complete.COMPLETE } @JourneyFrameworkComponent final class SetStateForGovBodyMemberEditStep( stepConfig: SetStateForGovBodyMemberEditStepConfig, -) : JourneyStep.RequestableStep(stepConfig) { +) : JourneyStep.RequestableStep(stepConfig) { companion object { const val ROUTE_SEGMENT = "load-governing-body-member-for-edit" } diff --git a/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/stepConfig/UpdateDetailsTodoStepConfig.kt b/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/stepConfig/UpdateDetailsTodoStepConfig.kt new file mode 100644 index 0000000000..ac6fde6fb0 --- /dev/null +++ b/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/stepConfig/UpdateDetailsTodoStepConfig.kt @@ -0,0 +1,31 @@ +package uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig + +import uk.gov.communities.prsdb.webapp.annotations.webAnnotations.JourneyFrameworkComponent +import uk.gov.communities.prsdb.webapp.journeys.AbstractRequestableStepConfig +import uk.gov.communities.prsdb.webapp.journeys.JourneyState +import uk.gov.communities.prsdb.webapp.journeys.JourneyStep.RequestableStep +import uk.gov.communities.prsdb.webapp.journeys.shared.Complete +import uk.gov.communities.prsdb.webapp.models.requestModels.formModels.NoInputFormModel + +// TODO PDJB-1237 PDJB-1238: remove this placeholder step once the organisation type and companies house update +// journeys exist. It renders a dead-end TODO page (no continue button) so the corresponding check-your-answers change +// links don't 404. The todoComment shown is supplied per branch where the step is wired into the journey map. +@JourneyFrameworkComponent +class UpdateDetailsTodoStepConfig : AbstractRequestableStepConfig() { + override val formModelClass = NoInputFormModel::class + + override fun getStepSpecificContent(state: JourneyState) = emptyMap() + + override fun chooseTemplate(state: JourneyState) = "forms/todoNoContinue" + + override fun mode(state: JourneyState) = getFormModelFromStateOrNull(state)?.let { Complete.COMPLETE } +} + +@JourneyFrameworkComponent +final class UpdateDetailsTodoStep( + stepConfig: UpdateDetailsTodoStepConfig, +) : RequestableStep(stepConfig) { + companion object { + const val ROUTE_SEGMENT = "update-details-todo" + } +} diff --git a/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/tasks/LandlordRegistrationTask.kt b/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/tasks/LandlordRegistrationTask.kt index e4d94ed869..8075866ced 100644 --- a/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/tasks/LandlordRegistrationTask.kt +++ b/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/tasks/LandlordRegistrationTask.kt @@ -5,11 +5,13 @@ import org.springframework.beans.factory.ObjectFactory import uk.gov.communities.prsdb.webapp.annotations.webAnnotations.JourneyFrameworkComponent import uk.gov.communities.prsdb.webapp.config.managers.FeatureFlagManager import uk.gov.communities.prsdb.webapp.constants.ORGANISATION_LANDLORD_REGISTRATION +import uk.gov.communities.prsdb.webapp.journeys.AndParents import uk.gov.communities.prsdb.webapp.journeys.Destination import uk.gov.communities.prsdb.webapp.journeys.DuplicableTask import uk.gov.communities.prsdb.webapp.journeys.JourneyStateService import uk.gov.communities.prsdb.webapp.journeys.OrParents import uk.gov.communities.prsdb.webapp.journeys.StepLifecycleOrchestrator +import uk.gov.communities.prsdb.webapp.journeys.SubjourneyComplete import uk.gov.communities.prsdb.webapp.journeys.builders.JourneyBuilder.Companion.journey import uk.gov.communities.prsdb.webapp.journeys.builders.SubJourneyBuilder import uk.gov.communities.prsdb.webapp.journeys.hasOutcome @@ -18,10 +20,24 @@ import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.states.Land import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.CountryOfResidenceStep import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.DateOfBirthStep import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.EmailStep -import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.IndividualLandlordRegistrationCyaStep +import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.LandlordRegistrationCyaStep import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.LandlordTypeMode import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.LandlordTypeStep -import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgLandlordRegistrationCyaStep +import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.LeadTrusteeNameStep +import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgAddressStep +import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgCharityNumberEnglandAndWalesStep +import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgCharityNumberNorthernIrelandStep +import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgCharityNumberScotlandStep +import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgCharityRegisteredWithStep +import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgCompanyNumberStep +import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgEmailStep +import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgGovBodyMemberListStep +import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgIsRegisteredCharityStep +import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgIsRegisteredCompanyStep +import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgMainContactStep +import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgNameStep +import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgPhoneNumberStep +import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgTypeStep import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.PhoneNumberStep import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.PrivacyNoticeStep import uk.gov.communities.prsdb.webapp.journeys.propertyRegistration.steps.FinishCyaJourneyStep @@ -41,8 +57,7 @@ class LandlordRegistrationTask( override val orgLandlordRegistrationTask: OrgLandlordRegistrationTask, override val landlordTypeStep: LandlordTypeStep, override val privacyNoticeStep: PrivacyNoticeStep, - override val cyaStep: IndividualLandlordRegistrationCyaStep, - override val orgCyaStep: OrgLandlordRegistrationCyaStep, + override val cyaStep: LandlordRegistrationCyaStep, override val finishCyaStep: FinishCyaJourneyStep, journeyStateService: JourneyStateService, override val stateFactory: ObjectFactory, @@ -129,7 +144,7 @@ class LandlordRegistrationTask( } duplicableTask(journey.orgLandlordRegistrationTask) { parents { journey.landlordTypeStep.hasOutcome(LandlordTypeMode.ORGANISATION) } - nextStep { journey.orgCyaStep } + nextStep { journey.cyaStep } } duplicableTask(journey.individualLandlordLocationTask) { parents { journey.landlordTypeStep.hasOutcome(LandlordTypeMode.INDIVIDUAL) } @@ -137,16 +152,22 @@ class LandlordRegistrationTask( } step(journey.cyaStep) { routeSegment(AbstractCheckYourAnswersStep.ROUTE_SEGMENT) - parents { journey.individualLandlordLocationTask.isComplete() } - nextStep { exitStep } - } - step(journey.orgCyaStep) { - routeSegment(OrgLandlordRegistrationCyaStep.ROUTE_SEGMENT) - parents { journey.orgLandlordRegistrationTask.isComplete() } + parents { + OrParents( + AndParents( + journey.individualLandlordLocationTask.isComplete(), + journey.landlordTypeStep.hasOutcome(LandlordTypeMode.INDIVIDUAL), + ), + AndParents( + journey.orgLandlordRegistrationTask.isComplete(), + journey.landlordTypeStep.hasOutcome(LandlordTypeMode.ORGANISATION), + ), + ) + } nextStep { exitStep } } exitStep { - parents { OrParents(journey.cyaStep.isComplete(), journey.orgCyaStep.isComplete()) } + parents { journey.cyaStep.isComplete() } } } @@ -188,11 +209,124 @@ class LandlordRegistrationTask( LookupAddressStep.ROUTE_SEGMENT -> { duplicableCheckAnswerTask(journey.individualLandlordLocationTask.addressTask, null) } + + LandlordTypeStep.ROUTE_SEGMENT -> { + step(journey.landlordTypeStep) { + initialStep() + routeSegment(LandlordTypeStep.ROUTE_SEGMENT) + nextDestination { mode -> destinationForSelectedLandlordType(journey, mode) } + } + duplicableTask(journey.individualLandlordLocationTask) { + parents { journey.landlordTypeStep.hasOutcome(LandlordTypeMode.INDIVIDUAL) } + nextStep { journey.finishCyaStep } + } + duplicableTask(journey.orgLandlordRegistrationTask) { + parents { journey.landlordTypeStep.hasOutcome(LandlordTypeMode.ORGANISATION) } + nextStep { journey.finishCyaStep } + } + } + + OrgNameStep.ROUTE_SEGMENT -> { + checkAnswerStep(journey.orgLandlordRegistrationTask.orgNameStep, OrgNameStep.ROUTE_SEGMENT) + } + + OrgAddressStep.ROUTE_SEGMENT -> { + checkAnswerStep(journey.orgLandlordRegistrationTask.orgAddressStep, OrgAddressStep.ROUTE_SEGMENT) + } + + OrgEmailStep.ROUTE_SEGMENT -> { + checkAnswerStep(journey.orgLandlordRegistrationTask.orgEmailStep, OrgEmailStep.ROUTE_SEGMENT) + } + + OrgPhoneNumberStep.ROUTE_SEGMENT -> { + checkAnswerStep(journey.orgLandlordRegistrationTask.orgPhoneNumberStep, OrgPhoneNumberStep.ROUTE_SEGMENT) + } + + OrgTypeStep.ROUTE_SEGMENT -> { + // TODO PDJB-1237 : replace this placeholder with the org type update journey + checkAnswerStep(journey.orgLandlordRegistrationTask.updateDetailsTodoStep, OrgTypeStep.ROUTE_SEGMENT) { + withAdditionalContentProperty { "todoComment" to "TODO PDJB-1237: Organisation type update journey" } + } + } + + OrgIsRegisteredCharityStep.ROUTE_SEGMENT, + OrgCharityRegisteredWithStep.ROUTE_SEGMENT, + -> { + duplicableCheckAnswerTask(journey.orgLandlordRegistrationTask.charityTask, null) + } + + OrgCharityNumberEnglandAndWalesStep.ROUTE_SEGMENT, + -> { + checkAnswerStep( + journey.orgLandlordRegistrationTask.charityTask.orgCharityNumberEnglandAndWalesStep, + OrgCharityNumberEnglandAndWalesStep.ROUTE_SEGMENT, + ) + } + + OrgCharityNumberNorthernIrelandStep.ROUTE_SEGMENT, + -> { + checkAnswerStep( + journey.orgLandlordRegistrationTask.charityTask.orgCharityNumberNorthernIrelandStep, + OrgCharityNumberNorthernIrelandStep.ROUTE_SEGMENT, + ) + } + + OrgCharityNumberScotlandStep.ROUTE_SEGMENT, + -> { + checkAnswerStep( + journey.orgLandlordRegistrationTask.charityTask.orgCharityNumberScotlandStep, + OrgCharityNumberScotlandStep.ROUTE_SEGMENT, + ) + } + + OrgIsRegisteredCompanyStep.ROUTE_SEGMENT, + -> { + // TODO PDJB-1238 : replace this placeholder with the companies house update journey + checkAnswerStep(journey.orgLandlordRegistrationTask.updateDetailsTodoStep, checkingAnswersFor) { + withAdditionalContentProperty { "todoComment" to "TODO PDJB-1238: Companies House update journey" } + } + } + + OrgCompanyNumberStep.ROUTE_SEGMENT, + -> { + checkAnswerStep( + journey.orgLandlordRegistrationTask.companiesHouseTask.orgCompanyNumberStep, + OrgCompanyNumberStep.ROUTE_SEGMENT, + ) + } + + LeadTrusteeNameStep.ROUTE_SEGMENT -> { + duplicableCheckAnswerTask(journey.orgLandlordRegistrationTask.leadTrusteeTask, null) + } + + OrgGovBodyMemberListStep.ROUTE_SEGMENT -> { + duplicableCheckAnswerTask(journey.orgLandlordRegistrationTask.orgGovBodyTask, null) + } + + OrgMainContactStep.ROUTE_SEGMENT -> { + checkAnswerStep(journey.orgLandlordRegistrationTask.orgMainContactStep, OrgMainContactStep.ROUTE_SEGMENT) + } } step(journey.finishCyaStep) { initialStep() nextDestination { Destination.Nowhere() } } } + + private fun destinationForSelectedLandlordType( + journey: LandlordRegistrationState, + landlordType: LandlordTypeMode, + ): Destination { + val selectedTask = + when (landlordType) { + LandlordTypeMode.INDIVIDUAL -> journey.individualLandlordLocationTask + LandlordTypeMode.ORGANISATION -> journey.orgLandlordRegistrationTask + } + return if (selectedTask.exitStep.outcome == SubjourneyComplete.COMPLETE) { + Destination(journey.finishCyaStep) + } else { + Destination(selectedTask.firstStep) + } + } } } diff --git a/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/tasks/LeadTrusteeTask.kt b/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/tasks/LeadTrusteeTask.kt new file mode 100644 index 0000000000..dad60046d6 --- /dev/null +++ b/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/tasks/LeadTrusteeTask.kt @@ -0,0 +1,55 @@ +package uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.tasks + +import uk.gov.communities.prsdb.webapp.annotations.webAnnotations.JourneyFrameworkComponent +import uk.gov.communities.prsdb.webapp.journeys.DuplicableTask +import uk.gov.communities.prsdb.webapp.journeys.JourneyStateService +import uk.gov.communities.prsdb.webapp.journeys.isComplete +import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.states.LeadTrusteeState +import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.LeadTrusteeDobStep +import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.LeadTrusteeEmailStep +import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.LeadTrusteeNameStep +import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.LeadTrusteePhoneStep +import uk.gov.communities.prsdb.webapp.journeys.shared.tasks.TrusteeAddressTask + +@JourneyFrameworkComponent +class LeadTrusteeTask( + journeyStateService: JourneyStateService, + override val leadTrusteeNameStep: LeadTrusteeNameStep, + override val leadTrusteeDobStep: LeadTrusteeDobStep, + override val leadTrusteeEmailStep: LeadTrusteeEmailStep, + override val leadTrusteePhoneStep: LeadTrusteePhoneStep, + override val trusteeAddressTask: TrusteeAddressTask, +) : DuplicableTask(journeyStateService), + LeadTrusteeState { + override val taskState get() = this + + override fun makeSubJourney(state: LeadTrusteeState) = + subJourney(state) { + step(journey.leadTrusteeNameStep) { + routeSegment(LeadTrusteeNameStep.ROUTE_SEGMENT) + nextStep { journey.leadTrusteeDobStep } + } + step(journey.leadTrusteeDobStep) { + routeSegment(LeadTrusteeDobStep.ROUTE_SEGMENT) + parents { journey.leadTrusteeNameStep.isComplete() } + nextStep { journey.leadTrusteeEmailStep } + } + step(journey.leadTrusteeEmailStep) { + routeSegment(LeadTrusteeEmailStep.ROUTE_SEGMENT) + parents { journey.leadTrusteeDobStep.isComplete() } + nextStep { journey.leadTrusteePhoneStep } + } + step(journey.leadTrusteePhoneStep) { + routeSegment(LeadTrusteePhoneStep.ROUTE_SEGMENT) + parents { journey.leadTrusteeEmailStep.isComplete() } + nextStep { journey.trusteeAddressTask.firstStep } + } + duplicableTask(journey.trusteeAddressTask, TrusteeAddressTask.ROUTE_SEGMENT) { + parents { journey.leadTrusteePhoneStep.isComplete() } + nextStep { exitStep } + } + exitStep { + parents { journey.trusteeAddressTask.isComplete() } + } + } +} diff --git a/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/tasks/OrgCharityTask.kt b/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/tasks/OrgCharityTask.kt new file mode 100644 index 0000000000..d4f7ea4b61 --- /dev/null +++ b/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/tasks/OrgCharityTask.kt @@ -0,0 +1,80 @@ +package uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.tasks + +import uk.gov.communities.prsdb.webapp.annotations.webAnnotations.JourneyFrameworkComponent +import uk.gov.communities.prsdb.webapp.constants.enums.CharityRegulator +import uk.gov.communities.prsdb.webapp.journeys.DuplicableTask +import uk.gov.communities.prsdb.webapp.journeys.JourneyStateService +import uk.gov.communities.prsdb.webapp.journeys.OrParents +import uk.gov.communities.prsdb.webapp.journeys.hasOutcome +import uk.gov.communities.prsdb.webapp.journeys.isComplete +import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.states.OrgCharityState +import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgCharityNumberEnglandAndWalesStep +import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgCharityNumberNorthernIrelandStep +import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgCharityNumberScotlandStep +import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgCharityRegisteredWithStep +import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgIsRegisteredCharityStep +import uk.gov.communities.prsdb.webapp.journeys.shared.YesOrNo + +@JourneyFrameworkComponent +class OrgCharityTask( + journeyStateService: JourneyStateService, + override val orgIsRegisteredCharityStep: OrgIsRegisteredCharityStep, + override val orgCharityRegisteredWithStep: OrgCharityRegisteredWithStep, + override val orgCharityNumberEnglandAndWalesStep: OrgCharityNumberEnglandAndWalesStep, + override val orgCharityNumberNorthernIrelandStep: OrgCharityNumberNorthernIrelandStep, + override val orgCharityNumberScotlandStep: OrgCharityNumberScotlandStep, +) : DuplicableTask(journeyStateService), + OrgCharityState { + override val taskState get() = this + + override fun makeSubJourney(state: OrgCharityState) = + subJourney(state) { + step(journey.orgIsRegisteredCharityStep) { + routeSegment(OrgIsRegisteredCharityStep.ROUTE_SEGMENT) + nextStep { mode -> + when (mode) { + YesOrNo.YES -> journey.orgCharityRegisteredWithStep + YesOrNo.NO -> exitStep + } + } + } + step(journey.orgCharityRegisteredWithStep) { + routeSegment(OrgCharityRegisteredWithStep.ROUTE_SEGMENT) + parents { journey.orgIsRegisteredCharityStep.hasOutcome(YesOrNo.YES) } + nextStep { mode -> + when (mode) { + CharityRegulator.ENGLAND_AND_WALES -> journey.orgCharityNumberEnglandAndWalesStep + CharityRegulator.NORTHERN_IRELAND -> journey.orgCharityNumberNorthernIrelandStep + CharityRegulator.SCOTLAND -> journey.orgCharityNumberScotlandStep + CharityRegulator.NONE -> exitStep + } + } + } + step(journey.orgCharityNumberEnglandAndWalesStep) { + routeSegment(OrgCharityNumberEnglandAndWalesStep.ROUTE_SEGMENT) + parents { journey.orgCharityRegisteredWithStep.hasOutcome(CharityRegulator.ENGLAND_AND_WALES) } + nextStep { exitStep } + } + step(journey.orgCharityNumberNorthernIrelandStep) { + routeSegment(OrgCharityNumberNorthernIrelandStep.ROUTE_SEGMENT) + parents { journey.orgCharityRegisteredWithStep.hasOutcome(CharityRegulator.NORTHERN_IRELAND) } + nextStep { exitStep } + } + step(journey.orgCharityNumberScotlandStep) { + routeSegment(OrgCharityNumberScotlandStep.ROUTE_SEGMENT) + parents { journey.orgCharityRegisteredWithStep.hasOutcome(CharityRegulator.SCOTLAND) } + nextStep { exitStep } + } + exitStep { + parents { + OrParents( + journey.orgIsRegisteredCharityStep.hasOutcome(YesOrNo.NO), + journey.orgCharityRegisteredWithStep.hasOutcome(CharityRegulator.NONE), + journey.orgCharityNumberEnglandAndWalesStep.isComplete(), + journey.orgCharityNumberNorthernIrelandStep.isComplete(), + journey.orgCharityNumberScotlandStep.isComplete(), + ) + } + } + } +} diff --git a/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/tasks/OrgCompaniesHouseTask.kt b/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/tasks/OrgCompaniesHouseTask.kt new file mode 100644 index 0000000000..52e391d147 --- /dev/null +++ b/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/tasks/OrgCompaniesHouseTask.kt @@ -0,0 +1,48 @@ +package uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.tasks + +import uk.gov.communities.prsdb.webapp.annotations.webAnnotations.JourneyFrameworkComponent +import uk.gov.communities.prsdb.webapp.journeys.DuplicableTask +import uk.gov.communities.prsdb.webapp.journeys.JourneyStateService +import uk.gov.communities.prsdb.webapp.journeys.OrParents +import uk.gov.communities.prsdb.webapp.journeys.hasOutcome +import uk.gov.communities.prsdb.webapp.journeys.isComplete +import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.states.OrgCompaniesHouseState +import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgCompanyNumberStep +import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgIsRegisteredCompanyStep +import uk.gov.communities.prsdb.webapp.journeys.shared.YesOrNo + +@JourneyFrameworkComponent +class OrgCompaniesHouseTask( + journeyStateService: JourneyStateService, + override val orgIsRegisteredCompanyStep: OrgIsRegisteredCompanyStep, + override val orgCompanyNumberStep: OrgCompanyNumberStep, +) : DuplicableTask(journeyStateService), + OrgCompaniesHouseState { + override val taskState get() = this + + override fun makeSubJourney(state: OrgCompaniesHouseState) = + subJourney(state) { + step(journey.orgIsRegisteredCompanyStep) { + routeSegment(OrgIsRegisteredCompanyStep.ROUTE_SEGMENT) + nextStep { mode -> + when (mode) { + YesOrNo.YES -> journey.orgCompanyNumberStep + YesOrNo.NO -> exitStep + } + } + } + step(journey.orgCompanyNumberStep) { + routeSegment(OrgCompanyNumberStep.ROUTE_SEGMENT) + parents { journey.orgIsRegisteredCompanyStep.hasOutcome(YesOrNo.YES) } + nextStep { exitStep } + } + exitStep { + parents { + OrParents( + journey.orgIsRegisteredCompanyStep.hasOutcome(YesOrNo.NO), + journey.orgCompanyNumberStep.isComplete(), + ) + } + } + } +} diff --git a/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/tasks/OrgGovBodyTask.kt b/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/tasks/OrgGovBodyTask.kt new file mode 100644 index 0000000000..f652fe6967 --- /dev/null +++ b/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/tasks/OrgGovBodyTask.kt @@ -0,0 +1,135 @@ +package uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.tasks + +import uk.gov.communities.prsdb.webapp.annotations.webAnnotations.JourneyFrameworkComponent +import uk.gov.communities.prsdb.webapp.journeys.Destination +import uk.gov.communities.prsdb.webapp.journeys.DuplicableTask +import uk.gov.communities.prsdb.webapp.journeys.JourneyStateService +import uk.gov.communities.prsdb.webapp.journeys.hasOutcome +import uk.gov.communities.prsdb.webapp.journeys.isComplete +import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.states.OrgGovBodyState +import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.HasAnyGovBodyMembersStep +import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgGovBodyDetailsStep +import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgGovBodyMemberDobStep +import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgGovBodyMemberListStep +import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgGovBodyMemberNameStep +import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgGovBodyMustProvideInfoStep +import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgGovBodyWhoToProvideStep +import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.RemoveGovBodyMemberStep +import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.SaveGovBodyMemberStep +import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.SetStateForGovBodyMemberEditStep +import uk.gov.communities.prsdb.webapp.journeys.shared.AnyMembers +import uk.gov.communities.prsdb.webapp.journeys.shared.tasks.GovBodyMemberAddressTask +import uk.gov.communities.prsdb.webapp.models.dataModels.GoverningBodyMemberDataModel +import uk.gov.communities.prsdb.webapp.models.requestModels.formModels.OrgGovBodyDetailsMode + +@JourneyFrameworkComponent +class OrgGovBodyTask( + journeyStateService: JourneyStateService, + override val orgGovBodyDetailsStep: OrgGovBodyDetailsStep, + override val orgGovBodyMustProvideInfoStep: OrgGovBodyMustProvideInfoStep, + override val orgGovBodyWhoToProvideStep: OrgGovBodyWhoToProvideStep, + override val orgGovBodyMemberNameStep: OrgGovBodyMemberNameStep, + override val orgGovBodyMemberDobStep: OrgGovBodyMemberDobStep, + override val govBodyMemberAddressTask: GovBodyMemberAddressTask, + override val orgGovBodyMemberListStep: OrgGovBodyMemberListStep, + override val hasAnyGovBodyMembersStep: HasAnyGovBodyMembersStep, + override val saveGovBodyMemberStep: SaveGovBodyMemberStep, + override val setStateForGovBodyMemberEditStep: SetStateForGovBodyMemberEditStep, + override val removeGovBodyMemberStep: RemoveGovBodyMemberStep, +) : DuplicableTask(journeyStateService), + OrgGovBodyState { + override val taskState get() = this + + override var governingBodyMembersMap: Map? by delegateProvider.nullableDelegate( + "governingBodyMembersMap", + ) + override var nextGoverningBodyMemberId: Int? by delegateProvider.nullableDelegate("nextGoverningBodyMemberId") + override var editingGovBodyMemberId: Int? by delegateProvider.nullableDelegate("editingGovBodyMemberId") + + override fun makeSubJourney(state: OrgGovBodyState) = + subJourney(state) { + step(journey.orgGovBodyDetailsStep) { + routeSegment(OrgGovBodyDetailsStep.ROUTE_SEGMENT) + nextDestination { mode -> + when (mode) { + OrgGovBodyDetailsMode.HAS_DETAILS -> Destination(journey.hasAnyGovBodyMembersStep) + OrgGovBodyDetailsMode.NO_DETAILS -> Destination(journey.orgGovBodyMustProvideInfoStep) + } + } + } + step(journey.orgGovBodyMustProvideInfoStep) { + routeSegment(OrgGovBodyMustProvideInfoStep.ROUTE_SEGMENT) + parents { journey.orgGovBodyDetailsStep.hasOutcome(OrgGovBodyDetailsMode.NO_DETAILS) } + noNextDestination() + } + step(journey.hasAnyGovBodyMembersStep) { + parents { journey.orgGovBodyDetailsStep.hasOutcome(OrgGovBodyDetailsMode.HAS_DETAILS) } + nextStep { mode -> + when (mode) { + AnyMembers.NO_MEMBERS -> journey.orgGovBodyWhoToProvideStep + AnyMembers.SOME_MEMBERS -> journey.orgGovBodyMemberListStep + } + } + } + step(journey.setStateForGovBodyMemberEditStep) { + routeSegment(SetStateForGovBodyMemberEditStep.ROUTE_SEGMENT) + parents { journey.hasAnyGovBodyMembersStep.hasOutcome(AnyMembers.SOME_MEMBERS) } + nextStep { journey.orgGovBodyWhoToProvideStep } + } + step(journey.removeGovBodyMemberStep) { + routeSegment(RemoveGovBodyMemberStep.ROUTE_SEGMENT) + parents { journey.hasAnyGovBodyMembersStep.hasOutcome(AnyMembers.SOME_MEMBERS) } + nextStep { mode -> + when (mode) { + AnyMembers.SOME_MEMBERS -> journey.orgGovBodyMemberListStep + AnyMembers.NO_MEMBERS -> journey.orgGovBodyDetailsStep + } + } + } + step(journey.orgGovBodyWhoToProvideStep) { + routeSegment(OrgGovBodyWhoToProvideStep.ROUTE_SEGMENT) + parents { journey.orgGovBodyDetailsStep.hasOutcome(OrgGovBodyDetailsMode.HAS_DETAILS) } + backDestination { + if (journey.governingBodyMembersMap.isNullOrEmpty()) { + Destination(journey.orgGovBodyDetailsStep) + } else { + Destination(journey.orgGovBodyMemberListStep) + } + } + nextStep { journey.orgGovBodyMemberNameStep } + } + step(journey.orgGovBodyMemberNameStep) { + routeSegment(OrgGovBodyMemberNameStep.ROUTE_SEGMENT) + parents { journey.orgGovBodyWhoToProvideStep.isComplete() } + nextStep { journey.orgGovBodyMemberDobStep } + } + step(journey.orgGovBodyMemberDobStep) { + routeSegment(OrgGovBodyMemberDobStep.ROUTE_SEGMENT) + parents { journey.orgGovBodyMemberNameStep.isComplete() } + nextStep { journey.govBodyMemberAddressTask.firstStep } + } + duplicableTask(journey.govBodyMemberAddressTask, GovBodyMemberAddressTask.ROUTE_SEGMENT) { + parents { journey.orgGovBodyMemberDobStep.isComplete() } + nextStep { journey.saveGovBodyMemberStep } + } + step(journey.saveGovBodyMemberStep) { + parents { journey.govBodyMemberAddressTask.isComplete() } + nextStep { journey.orgGovBodyMemberListStep } + configureStep(journey.govBodyMemberAddressTask.selectAddressStep) { + withAdditionalContentProperties { + mapOf("fieldSetHeading" to "forms.selectAddress.govBodyMemberRegistration.fieldSetHeading") + } + } + } + step(journey.orgGovBodyMemberListStep) { + routeSegment(OrgGovBodyMemberListStep.ROUTE_SEGMENT) + parents { + journey.hasAnyGovBodyMembersStep.hasOutcome(AnyMembers.SOME_MEMBERS) + } + nextStep { exitStep } + } + exitStep { + parents { journey.orgGovBodyMemberListStep.isComplete() } + } + } +} diff --git a/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/tasks/OrgLandlordRegistrationTask.kt b/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/tasks/OrgLandlordRegistrationTask.kt index cb003707ca..7b87215a40 100644 --- a/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/tasks/OrgLandlordRegistrationTask.kt +++ b/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/tasks/OrgLandlordRegistrationTask.kt @@ -1,7 +1,7 @@ package uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.tasks import uk.gov.communities.prsdb.webapp.annotations.webAnnotations.JourneyFrameworkComponent -import uk.gov.communities.prsdb.webapp.constants.enums.CharityRegulator +import uk.gov.communities.prsdb.webapp.journeys.AndParents import uk.gov.communities.prsdb.webapp.journeys.Destination import uk.gov.communities.prsdb.webapp.journeys.DuplicableTask import uk.gov.communities.prsdb.webapp.journeys.JourneyStateService @@ -9,40 +9,15 @@ import uk.gov.communities.prsdb.webapp.journeys.OrParents import uk.gov.communities.prsdb.webapp.journeys.hasOutcome import uk.gov.communities.prsdb.webapp.journeys.isComplete import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.states.LandlordRegistrationOrgLandlordState -import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.HasAnyGovBodyMembersStep -import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.LeadTrusteeDobStep -import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.LeadTrusteeEmailStep -import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.LeadTrusteeNameStep -import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.LeadTrusteePhoneStep import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgAddressStep -import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgCharityNumberEnglandAndWalesStep -import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgCharityNumberNorthernIrelandStep -import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgCharityNumberScotlandStep -import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgCharityRegisteredWithStep -import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgCompanyNumberStep import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgEmailStep -import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgGovBodyDetailsStep -import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgGovBodyMemberDobStep -import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgGovBodyMemberListStep -import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgGovBodyMemberNameStep -import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgGovBodyMustProvideInfoStep -import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgGovBodyWhoToProvideStep -import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgIsRegisteredCharityStep -import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgIsRegisteredCompanyStep import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgMainContactStep import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgNameStep import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgPhoneNumberStep import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgTypeMode import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgTypeStep -import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.RemoveGovBodyMemberStep -import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.SaveGovBodyMemberStep -import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.SetStateForGovBodyMemberEditStep -import uk.gov.communities.prsdb.webapp.journeys.shared.AnyMembers +import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.UpdateDetailsTodoStep import uk.gov.communities.prsdb.webapp.journeys.shared.YesOrNo -import uk.gov.communities.prsdb.webapp.journeys.shared.tasks.GovBodyMemberAddressTask -import uk.gov.communities.prsdb.webapp.journeys.shared.tasks.TrusteeAddressTask -import uk.gov.communities.prsdb.webapp.models.dataModels.GoverningBodyMemberDataModel -import uk.gov.communities.prsdb.webapp.models.requestModels.formModels.OrgGovBodyDetailsMode @JourneyFrameworkComponent class OrgLandlordRegistrationTask( @@ -52,40 +27,17 @@ class OrgLandlordRegistrationTask( override val orgEmailStep: OrgEmailStep, override val orgPhoneNumberStep: OrgPhoneNumberStep, override val orgTypeStep: OrgTypeStep, - override val orgIsRegisteredCompanyStep: OrgIsRegisteredCompanyStep, - override val orgCompanyNumberStep: OrgCompanyNumberStep, - override val orgIsRegisteredCharityStep: OrgIsRegisteredCharityStep, - override val orgCharityRegisteredWithStep: OrgCharityRegisteredWithStep, - override val orgCharityNumberEnglandAndWalesStep: OrgCharityNumberEnglandAndWalesStep, - override val orgCharityNumberNorthernIrelandStep: OrgCharityNumberNorthernIrelandStep, - override val orgCharityNumberScotlandStep: OrgCharityNumberScotlandStep, - override val leadTrusteeNameStep: LeadTrusteeNameStep, - override val leadTrusteeEmailStep: LeadTrusteeEmailStep, - override val leadTrusteePhoneStep: LeadTrusteePhoneStep, - override val leadTrusteeDobStep: LeadTrusteeDobStep, - override val trusteeAddressTask: TrusteeAddressTask, - override val orgGovBodyDetailsStep: OrgGovBodyDetailsStep, - override val orgGovBodyMustProvideInfoStep: OrgGovBodyMustProvideInfoStep, - override val orgGovBodyWhoToProvideStep: OrgGovBodyWhoToProvideStep, - override val orgGovBodyMemberNameStep: OrgGovBodyMemberNameStep, - override val orgGovBodyMemberDobStep: OrgGovBodyMemberDobStep, - override val govBodyMemberAddressTask: GovBodyMemberAddressTask, - override val orgGovBodyMemberListStep: OrgGovBodyMemberListStep, - override val hasAnyGovBodyMembersStep: HasAnyGovBodyMembersStep, - override val saveGovBodyMemberStep: SaveGovBodyMemberStep, - override val setStateForGovBodyMemberEditStep: SetStateForGovBodyMemberEditStep, - override val removeGovBodyMemberStep: RemoveGovBodyMemberStep, + override val leadTrusteeTask: LeadTrusteeTask, + override val charityTask: OrgCharityTask, + override val companiesHouseTask: OrgCompaniesHouseTask, + override val orgGovBodyTask: OrgGovBodyTask, override val orgMainContactStep: OrgMainContactStep, + // TODO PDJB-1237 PDJB-1238: remove this placeholder once the org type and companies house update journeys exist. + override val updateDetailsTodoStep: UpdateDetailsTodoStep, ) : DuplicableTask(journeyStateService), LandlordRegistrationOrgLandlordState { override val taskState get() = this - override var governingBodyMembersMap: Map? by delegateProvider.nullableDelegate( - "governingBodyMembersMap", - ) - override var nextGoverningBodyMemberId: Int? by delegateProvider.nullableDelegate("nextGoverningBodyMemberId") - override var editingGovBodyMemberId: Int? by delegateProvider.nullableDelegate("editingGovBodyMemberId") - override fun makeSubJourney(state: LandlordRegistrationOrgLandlordState) = subJourney(state) { step(journey.orgNameStep) { @@ -112,187 +64,47 @@ class OrgLandlordRegistrationTask( parents { journey.orgPhoneNumberStep.isComplete() } nextDestination { mode -> when (mode) { - OrgTypeMode.INCLUDES_TRUST -> Destination(journey.leadTrusteeNameStep) - OrgTypeMode.EXCLUDES_TRUST -> Destination(journey.orgIsRegisteredCharityStep) + OrgTypeMode.INCLUDES_TRUST -> Destination(journey.leadTrusteeTask.firstStep) + OrgTypeMode.EXCLUDES_TRUST -> Destination(journey.charityTask.firstStep) } } } - step(journey.leadTrusteeNameStep) { - routeSegment(LeadTrusteeNameStep.ROUTE_SEGMENT) + duplicableTask(journey.leadTrusteeTask) { parents { journey.orgTypeStep.hasOutcome(OrgTypeMode.INCLUDES_TRUST) } - nextStep { journey.leadTrusteeDobStep } - } - step(journey.leadTrusteeDobStep) { - routeSegment(LeadTrusteeDobStep.ROUTE_SEGMENT) - parents { journey.leadTrusteeNameStep.isComplete() } - nextStep { journey.leadTrusteeEmailStep } - } - step(journey.leadTrusteeEmailStep) { - routeSegment(LeadTrusteeEmailStep.ROUTE_SEGMENT) - parents { journey.leadTrusteeDobStep.isComplete() } - nextStep { journey.leadTrusteePhoneStep } - } - step(journey.leadTrusteePhoneStep) { - routeSegment(LeadTrusteePhoneStep.ROUTE_SEGMENT) - parents { journey.leadTrusteeEmailStep.isComplete() } - nextStep { journey.trusteeAddressTask.firstStep } + nextStep { journey.charityTask.firstStep } } - duplicableTask(journey.trusteeAddressTask, TrusteeAddressTask.ROUTE_SEGMENT) { - parents { journey.leadTrusteeDobStep.isComplete() } - nextStep { journey.orgIsRegisteredCharityStep } - } - step(journey.orgIsRegisteredCharityStep) { - routeSegment(OrgIsRegisteredCharityStep.ROUTE_SEGMENT) + duplicableTask(journey.charityTask) { parents { OrParents( - journey.trusteeAddressTask.isComplete(), + journey.leadTrusteeTask.isComplete(), journey.orgTypeStep.hasOutcome(OrgTypeMode.EXCLUDES_TRUST), ) } - nextDestination { mode -> - when (mode) { - YesOrNo.YES -> Destination(journey.orgCharityRegisteredWithStep) - YesOrNo.NO -> Destination(journey.orgIsRegisteredCompanyStep) - } - } - } - step(journey.orgCharityRegisteredWithStep) { - routeSegment(OrgCharityRegisteredWithStep.ROUTE_SEGMENT) - parents { journey.orgIsRegisteredCharityStep.hasOutcome(YesOrNo.YES) } - nextDestination { mode -> - when (mode) { - CharityRegulator.ENGLAND_AND_WALES -> Destination(journey.orgCharityNumberEnglandAndWalesStep) - CharityRegulator.NORTHERN_IRELAND -> Destination(journey.orgCharityNumberNorthernIrelandStep) - CharityRegulator.SCOTLAND -> Destination(journey.orgCharityNumberScotlandStep) - CharityRegulator.NONE -> Destination(journey.orgIsRegisteredCompanyStep) - } - } - } - step(journey.orgCharityNumberEnglandAndWalesStep) { - routeSegment(OrgCharityNumberEnglandAndWalesStep.ROUTE_SEGMENT) - parents { journey.orgCharityRegisteredWithStep.hasOutcome(CharityRegulator.ENGLAND_AND_WALES) } - nextStep { journey.orgIsRegisteredCompanyStep } - } - step(journey.orgCharityNumberNorthernIrelandStep) { - routeSegment(OrgCharityNumberNorthernIrelandStep.ROUTE_SEGMENT) - parents { journey.orgCharityRegisteredWithStep.hasOutcome(CharityRegulator.NORTHERN_IRELAND) } - nextStep { journey.orgIsRegisteredCompanyStep } - } - step(journey.orgCharityNumberScotlandStep) { - routeSegment(OrgCharityNumberScotlandStep.ROUTE_SEGMENT) - parents { journey.orgCharityRegisteredWithStep.hasOutcome(CharityRegulator.SCOTLAND) } - nextStep { journey.orgIsRegisteredCompanyStep } - } - step(journey.orgIsRegisteredCompanyStep) { - routeSegment(OrgIsRegisteredCompanyStep.ROUTE_SEGMENT) - parents { - OrParents( - journey.orgIsRegisteredCharityStep.hasOutcome(YesOrNo.NO), - journey.orgCharityRegisteredWithStep.hasOutcome(CharityRegulator.NONE), - journey.orgCharityNumberEnglandAndWalesStep.isComplete(), - journey.orgCharityNumberNorthernIrelandStep.isComplete(), - journey.orgCharityNumberScotlandStep.isComplete(), - ) - } - nextDestination { mode -> - when (mode) { - YesOrNo.YES -> Destination(journey.orgCompanyNumberStep) - YesOrNo.NO -> Destination(journey.orgGovBodyDetailsStep) - } - } + nextStep { journey.companiesHouseTask.firstStep } } - step(journey.orgCompanyNumberStep) { - routeSegment(OrgCompanyNumberStep.ROUTE_SEGMENT) - parents { journey.orgIsRegisteredCompanyStep.hasOutcome(YesOrNo.YES) } - nextStep { journey.orgMainContactStep } - } - step(journey.orgGovBodyDetailsStep) { - routeSegment(OrgGovBodyDetailsStep.ROUTE_SEGMENT) - parents { journey.orgIsRegisteredCompanyStep.hasOutcome(YesOrNo.NO) } - nextDestination { mode -> - when (mode) { - OrgGovBodyDetailsMode.HAS_DETAILS -> Destination(journey.hasAnyGovBodyMembersStep) - OrgGovBodyDetailsMode.NO_DETAILS -> Destination(journey.orgGovBodyMustProvideInfoStep) - } - } - } - step(journey.orgGovBodyMustProvideInfoStep) { - routeSegment(OrgGovBodyMustProvideInfoStep.ROUTE_SEGMENT) - parents { journey.orgGovBodyDetailsStep.hasOutcome(OrgGovBodyDetailsMode.NO_DETAILS) } - noNextDestination() - } - step(journey.hasAnyGovBodyMembersStep) { - parents { journey.orgGovBodyDetailsStep.hasOutcome(OrgGovBodyDetailsMode.HAS_DETAILS) } - nextStep { mode -> - when (mode) { - AnyMembers.NO_MEMBERS -> journey.orgGovBodyWhoToProvideStep - AnyMembers.SOME_MEMBERS -> journey.orgGovBodyMemberListStep - } - } - } - step(journey.setStateForGovBodyMemberEditStep) { - routeSegment(SetStateForGovBodyMemberEditStep.ROUTE_SEGMENT) - parents { journey.hasAnyGovBodyMembersStep.hasOutcome(AnyMembers.SOME_MEMBERS) } - nextStep { journey.orgGovBodyWhoToProvideStep } - } - step(journey.removeGovBodyMemberStep) { - routeSegment(RemoveGovBodyMemberStep.ROUTE_SEGMENT) - parents { journey.hasAnyGovBodyMembersStep.hasOutcome(AnyMembers.SOME_MEMBERS) } - nextStep { mode -> - when (mode) { - AnyMembers.SOME_MEMBERS -> journey.orgGovBodyMemberListStep - AnyMembers.NO_MEMBERS -> journey.orgGovBodyDetailsStep - } - } - } - step(journey.orgGovBodyWhoToProvideStep) { - routeSegment(OrgGovBodyWhoToProvideStep.ROUTE_SEGMENT) - parents { journey.orgGovBodyDetailsStep.hasOutcome(OrgGovBodyDetailsMode.HAS_DETAILS) } - backDestination { - if (journey.governingBodyMembersMap.isNullOrEmpty()) { - Destination(journey.orgGovBodyDetailsStep) + duplicableTask(journey.companiesHouseTask) { + parents { journey.charityTask.isComplete() } + nextDestination { + if (journey.companiesHouseTask.orgIsRegisteredCompanyStep.outcome == YesOrNo.NO) { + Destination(journey.orgGovBodyTask.firstStep) } else { - Destination(journey.orgGovBodyMemberListStep) - } - } - nextStep { journey.orgGovBodyMemberNameStep } - } - step(journey.orgGovBodyMemberNameStep) { - routeSegment(OrgGovBodyMemberNameStep.ROUTE_SEGMENT) - parents { journey.orgGovBodyWhoToProvideStep.isComplete() } - nextStep { journey.orgGovBodyMemberDobStep } - } - step(journey.orgGovBodyMemberDobStep) { - routeSegment(OrgGovBodyMemberDobStep.ROUTE_SEGMENT) - parents { journey.orgGovBodyMemberNameStep.isComplete() } - nextStep { journey.govBodyMemberAddressTask.firstStep } - } - duplicableTask(journey.govBodyMemberAddressTask, GovBodyMemberAddressTask.ROUTE_SEGMENT) { - parents { journey.orgGovBodyMemberDobStep.isComplete() } - nextStep { journey.saveGovBodyMemberStep } - } - step(journey.saveGovBodyMemberStep) { - parents { journey.govBodyMemberAddressTask.isComplete() } - nextStep { journey.orgGovBodyMemberListStep } - configureStep(journey.govBodyMemberAddressTask.selectAddressStep) { - withAdditionalContentProperties { - mapOf("fieldSetHeading" to "forms.selectAddress.govBodyMemberRegistration.fieldSetHeading") + Destination(journey.orgMainContactStep) } } } - step(journey.orgGovBodyMemberListStep) { - routeSegment(OrgGovBodyMemberListStep.ROUTE_SEGMENT) - parents { - journey.hasAnyGovBodyMembersStep.hasOutcome(AnyMembers.SOME_MEMBERS) - } + duplicableTask(journey.orgGovBodyTask) { + parents { journey.companiesHouseTask.orgIsRegisteredCompanyStep.hasOutcome(YesOrNo.NO) } nextStep { journey.orgMainContactStep } } step(journey.orgMainContactStep) { routeSegment(OrgMainContactStep.ROUTE_SEGMENT) parents { OrParents( - journey.orgCompanyNumberStep.isComplete(), - journey.orgGovBodyMemberListStep.isComplete(), + AndParents( + journey.companiesHouseTask.isComplete(), + journey.companiesHouseTask.orgIsRegisteredCompanyStep.hasOutcome(YesOrNo.YES), + ), + journey.orgGovBodyTask.isComplete(), ) } nextStep { exitStep } diff --git a/src/main/resources/messages/registerAsALandlord.yml b/src/main/resources/messages/registerAsALandlord.yml index 1fd87e15cb..70f04ab886 100644 --- a/src/main/resources/messages/registerAsALandlord.yml +++ b/src/main/resources/messages/registerAsALandlord.yml @@ -23,6 +23,7 @@ testTheService: three: Parts of the service may change during the private beta period. checkAnswers: summaryName: Your details + landlordTypeValue: Individual rowHeading: name: Name dateOfBirth: Date of birth @@ -31,6 +32,7 @@ checkAnswers: englandOrWalesResident: Resident in England or Wales contactAddress: Contact address localCouncil: Local Council + landlordType: Landlord type orgCheckAnswers: heading: Check your answers yourDetails: diff --git a/src/main/resources/templates/forms/todoNoContinue.html b/src/main/resources/templates/forms/todoNoContinue.html new file mode 100644 index 0000000000..76699b154f --- /dev/null +++ b/src/main/resources/templates/forms/todoNoContinue.html @@ -0,0 +1,10 @@ + + + + + + +
+

todoComment

+
+ diff --git a/src/test/kotlin/uk/gov/communities/prsdb/webapp/integration/LandlordRegistrationJourneyTests.kt b/src/test/kotlin/uk/gov/communities/prsdb/webapp/integration/LandlordRegistrationJourneyTests.kt index 6644129f7b..8b905bc69a 100644 --- a/src/test/kotlin/uk/gov/communities/prsdb/webapp/integration/LandlordRegistrationJourneyTests.kt +++ b/src/test/kotlin/uk/gov/communities/prsdb/webapp/integration/LandlordRegistrationJourneyTests.kt @@ -15,6 +15,7 @@ import uk.gov.communities.prsdb.webapp.constants.MANUAL_ADDRESS_CHOSEN import uk.gov.communities.prsdb.webapp.constants.ORGANISATION_LANDLORD_REGISTRATION import uk.gov.communities.prsdb.webapp.constants.enums.CharityRegulator import uk.gov.communities.prsdb.webapp.constants.enums.GoverningBodyMemberType +import uk.gov.communities.prsdb.webapp.constants.enums.LandlordType import uk.gov.communities.prsdb.webapp.integration.pageObjects.components.BackLink import uk.gov.communities.prsdb.webapp.integration.pageObjects.components.BaseComponent.Companion.assertThat import uk.gov.communities.prsdb.webapp.integration.pageObjects.pages.LandlordDashboardPage @@ -64,6 +65,7 @@ import uk.gov.communities.prsdb.webapp.models.viewModels.emailModels.LandlordReg import uk.gov.communities.prsdb.webapp.services.AbsoluteUrlProvider import uk.gov.communities.prsdb.webapp.services.EmailNotificationService import uk.gov.communities.prsdb.webapp.services.LandlordService +import uk.gov.communities.prsdb.webapp.testHelpers.builders.LandlordStateSessionBuilder import uk.gov.communities.prsdb.webapp.testHelpers.extensions.getFormattedUkPhoneNumber import java.net.URI import java.time.LocalDate @@ -424,6 +426,191 @@ class LandlordRegistrationJourneyTests : IntegrationTestWithMutableData("data-mo assertPageIs(page, OrgIsRegisteredCharityFormPageLandlordRegistration::class) } + @Test + fun `The organisation name change link returns to the org check answers page with the updated value`(page: Page) { + featureFlagManager.enable(ORGANISATION_LANDLORD_REGISTRATION) + + val checkAnswersPage = navigator.skipToLandlordRegistrationOrgCheckAnswersPage() + checkAnswersPage.landlordDetails.organisationNameRow.clickNamedActionLinkAndWait("Change") + + val orgNamePage = assertPageIs(page, OrgNameFormPageLandlordRegistration::class) + orgNamePage.submitName("Updated Organisation Name") + + val updatedCheckAnswersPage = assertPageIs(page, OrgCheckAnswersPageLandlordRegistration::class) + assertThat(updatedCheckAnswersPage.landlordDetails.organisationNameRow).containsText("Updated Organisation Name") + } + + @Test + fun `The landlord type change link returns to the org check answers page when the organisation type is kept`(page: Page) { + featureFlagManager.enable(ORGANISATION_LANDLORD_REGISTRATION) + + val checkAnswersPage = navigator.skipToLandlordRegistrationOrgCheckAnswersPage() + checkAnswersPage.landlordDetails.landlordTypeRow.clickNamedActionLinkAndWait("Change") + + val landlordTypePage = assertPageIs(page, LandlordTypeFormPageLandlordRegistration::class) + landlordTypePage.submitOrganisation() + + assertPageIs(page, OrgCheckAnswersPageLandlordRegistration::class) + } + + @Test + fun `The registered charity change link re-walks the charity questions and returns to the org check answers page`(page: Page) { + featureFlagManager.enable(ORGANISATION_LANDLORD_REGISTRATION) + + val checkAnswersPage = navigator.skipToLandlordRegistrationOrgCheckAnswersPage() + checkAnswersPage.landlordDetails.registeredCharityRow.clickNamedActionLinkAndWait("Change") + + val orgCharityPage = assertPageIs(page, OrgIsRegisteredCharityFormPageLandlordRegistration::class) + orgCharityPage.submitYes() + + val orgCharityRegisteredWithPage = assertPageIs(page, OrgCharityRegisteredWithFormPageLandlordRegistration::class) + orgCharityRegisteredWithPage.submitCharityRegisteredWith(CharityRegulator.ENGLAND_AND_WALES) + + val orgCharityNumberPage = assertPageIs(page, OrgCharityNumberEnglandAndWalesFormPageLandlordRegistration::class) + orgCharityNumberPage.submitCharityNumber("1234567") + + val updatedCheckAnswersPage = assertPageIs(page, OrgCheckAnswersPageLandlordRegistration::class) + assertThat(updatedCheckAnswersPage.landlordDetails.charityNumberRow).containsText("1234567") + } + + @Test + fun `The lead trustee card change link re-walks the trustee section and returns to the org check answers page`(page: Page) { + featureFlagManager.enable(ORGANISATION_LANDLORD_REGISTRATION) + + val checkAnswersPage = navigator.skipToLandlordRegistrationOrgCheckAnswersPage() + checkAnswersPage.leadTrusteeCard.getAction("Change").link.clickAndWait() + + val leadTrusteeNamePage = assertPageIs(page, LeadTrusteeNameFormPageLandlordRegistration::class) + leadTrusteeNamePage.submitName("Updated Lead Trustee Name") + + val leadTrusteeDobPage = assertPageIs(page, LeadTrusteeDobFormPageLandlordRegistration::class) + leadTrusteeDobPage.submitDate("15", "6", "1980") + + val leadTrusteeEmailPage = assertPageIs(page, LeadTrusteeEmailFormPageLandlordRegistration::class) + leadTrusteeEmailPage.submitEmail("trustee@test.com") + + val leadTrusteePhonePage = assertPageIs(page, LeadTrusteePhoneFormPageLandlordRegistration::class) + leadTrusteePhonePage.submitPhoneNumber("07123456789") + + val leadTrusteeLookupAddressPage = assertPageIs(page, LeadTrusteeAddressFormPageLandlordRegistration::class) + leadTrusteeLookupAddressPage.submitPostcodeAndBuildingNameOrNumber("EG1 2AA", "1") + + val leadTrusteeSelectAddressPage = + assertPageIs(page, LeadTrusteeSelectAddressFormPageLandlordRegistration::class) + leadTrusteeSelectAddressPage.selectAddressAndSubmit("1 PRSDB Square, EG1 2AA") + + assertPageIs(page, OrgCheckAnswersPageLandlordRegistration::class) + } + + @Test + fun `The organisation address change link returns to the org check answers page with the updated value`(page: Page) { + featureFlagManager.enable(ORGANISATION_LANDLORD_REGISTRATION) + + val checkAnswersPage = navigator.skipToLandlordRegistrationOrgCheckAnswersPage() + checkAnswersPage.landlordDetails.organisationAddressRow.clickNamedActionLinkAndWait("Change") + + val orgAddressPage = assertPageIs(page, OrgAddressFormPageLandlordRegistration::class) + orgAddressPage.submitAddress( + addressLineOne = "2 Updated Street", + townOrCity = "Updatedton", + postcode = "UP1 2DD", + ) + + val updatedCheckAnswersPage = assertPageIs(page, OrgCheckAnswersPageLandlordRegistration::class) + assertThat(updatedCheckAnswersPage.landlordDetails.organisationAddressRow).containsText("2 Updated Street") + } + + @Test + fun `The organisation email change link returns to the org check answers page with the updated value`(page: Page) { + featureFlagManager.enable(ORGANISATION_LANDLORD_REGISTRATION) + + val checkAnswersPage = navigator.skipToLandlordRegistrationOrgCheckAnswersPage() + checkAnswersPage.landlordDetails.organisationEmailRow.clickNamedActionLinkAndWait("Change") + + val orgEmailPage = assertPageIs(page, OrgEmailFormPageLandlordRegistration::class) + orgEmailPage.submitEmail("updated.email@example.com") + + val updatedCheckAnswersPage = assertPageIs(page, OrgCheckAnswersPageLandlordRegistration::class) + assertThat(updatedCheckAnswersPage.landlordDetails.organisationEmailRow).containsText("updated.email@example.com") + } + + @Test + fun `The organisation phone number change link returns to the org check answers page with the updated value`(page: Page) { + featureFlagManager.enable(ORGANISATION_LANDLORD_REGISTRATION) + + val checkAnswersPage = navigator.skipToLandlordRegistrationOrgCheckAnswersPage() + checkAnswersPage.landlordDetails.organisationPhoneRow.clickNamedActionLinkAndWait("Change") + + val orgPhoneNumberPage = assertPageIs(page, OrgPhoneNumberFormPageLandlordRegistration::class) + orgPhoneNumberPage.submitPhoneNumber("07999999999") + + val updatedCheckAnswersPage = assertPageIs(page, OrgCheckAnswersPageLandlordRegistration::class) + assertThat(updatedCheckAnswersPage.landlordDetails.organisationPhoneRow).containsText("07999999999") + } + + @Test + fun `The governing body member card change link re-walks the member list and returns to the org check answers page`(page: Page) { + featureFlagManager.enable(ORGANISATION_LANDLORD_REGISTRATION) + + val checkAnswersPage = navigator.skipToLandlordRegistrationOrgCheckAnswersPage() + checkAnswersPage.governingBodyMemberCard.getAction("Change").link.clickAndWait() + + val memberListPage = assertPageIs(page, OrgGovBodyMemberListFormPageLandlordRegistration::class) + memberListPage.form.submit() + + assertPageIs(page, OrgCheckAnswersPageLandlordRegistration::class) + } + + @Test + fun `The main contact change link returns to the org check answers page with the updated value`(page: Page) { + featureFlagManager.enable(ORGANISATION_LANDLORD_REGISTRATION) + + val checkAnswersPage = navigator.skipToLandlordRegistrationOrgCheckAnswersPage() + checkAnswersPage.mainContactCard.getAction("Change").link.clickAndWait() + + val orgMainContactPage = assertPageIs(page, OrgMainContactFormPageLandlordRegistration::class) + orgMainContactPage.submit("Updated Contact Name", "updated.contact@example.com", "07888888888") + + val updatedCheckAnswersPage = assertPageIs(page, OrgCheckAnswersPageLandlordRegistration::class) + assertThat(updatedCheckAnswersPage.mainContactCard).containsText("Updated Contact Name") + } + + @Test + fun `The landlord type change link routes into the individual journey when switching to individual`(page: Page) { + featureFlagManager.enable(ORGANISATION_LANDLORD_REGISTRATION) + + val checkAnswersPage = navigator.skipToLandlordRegistrationOrgCheckAnswersPage() + checkAnswersPage.landlordDetails.landlordTypeRow.clickNamedActionLinkAndWait("Change") + + val landlordTypePage = assertPageIs(page, LandlordTypeFormPageLandlordRegistration::class) + landlordTypePage.submitIndividual() + + assertPageIs(page, CountryOfResidenceFormPageLandlordRegistration::class) + } + + @Test + fun `The landlord type change link routes into the organisation journey when switching to organisation`(page: Page) { + featureFlagManager.enable(ORGANISATION_LANDLORD_REGISTRATION) + + val checkAnswersPage = + navigator.skipToLandlordRegistrationCheckAnswersPage( + LandlordStateSessionBuilder.beforeCheckAnswers().withLandlordType(LandlordType.INDIVIDUAL), + ) + checkAnswersPage.summaryList.landlordTypeRow.clickNamedActionLinkAndWait("Change") + + val landlordTypePage = assertPageIs(page, LandlordTypeFormPageLandlordRegistration::class) + landlordTypePage.submitOrganisation() + + assertPageIs(page, OrgNameFormPageLandlordRegistration::class) + } + + // TODO PDJB-1237: add a test for the organisation type change link once the org type update journey is wired into + // LandlordRegistrationTask.checkYourAnswersJourneyMap (the OrgTypeStep.ROUTE_SEGMENT branch is currently empty). + + // TODO PDJB-1238: add tests for the Companies House and company number change links once the companies update + // journey is wired into LandlordRegistrationTask.checkYourAnswersJourneyMap (the OrgIsRegisteredCompanyStep / + // OrgCompanyNumberStep branch is currently empty). + @Test fun `Selecting no on companies house skips the company number question and goes to the governing body journey`(page: Page) { featureFlagManager.enable(ORGANISATION_LANDLORD_REGISTRATION) @@ -601,7 +788,7 @@ class LandlordRegistrationJourneyTests : IntegrationTestWithMutableData("data-mo .getActionLink("Remove") .clickAndWait() - assertPageIs(page, OrgGovBodyDetailsFormPageLandlordRegistration::class) + assertPageIs(page, OrgGovBodyWhoToProvideFormPageLandlordRegistration::class) } @Test @@ -622,6 +809,9 @@ class LandlordRegistrationJourneyTests : IntegrationTestWithMutableData("data-mo assertPageIs(page, OrgGovBodyWhoToProvideFormPageLandlordRegistration::class) BackLink.default(page).clickAndWait() + val detailsPage = assertPageIs(page, OrgGovBodyDetailsFormPageLandlordRegistration::class) + detailsPage.submitHasDetails() + val returnedListPage = assertPageIs(page, OrgGovBodyMemberListFormPageLandlordRegistration::class) returnedListPage.addAnotherButton.click() diff --git a/src/test/kotlin/uk/gov/communities/prsdb/webapp/integration/pageObjects/Navigator.kt b/src/test/kotlin/uk/gov/communities/prsdb/webapp/integration/pageObjects/Navigator.kt index 1283efb288..b722286745 100644 --- a/src/test/kotlin/uk/gov/communities/prsdb/webapp/integration/pageObjects/Navigator.kt +++ b/src/test/kotlin/uk/gov/communities/prsdb/webapp/integration/pageObjects/Navigator.kt @@ -208,7 +208,6 @@ import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig. import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgGovBodyWhoToProvideStep import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgIsRegisteredCharityStep import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgIsRegisteredCompanyStep -import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgLandlordRegistrationCyaStep import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgMainContactStep import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgNameStep import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgPhoneNumberStep @@ -340,6 +339,12 @@ class Navigator( return createValidPage(page, OrgCompanyNumberFormPageLandlordRegistration::class) } + fun skipToLandlordRegistrationOrgCheckAnswersPage(): OrgCheckAnswersPageLandlordRegistration { + setJourneyStateInSession(LandlordStateSessionBuilder.beforeOrgCheckAnswers().build()) + navigateToLandlordRegistrationJourneyStep(AbstractCheckYourAnswersStep.ROUTE_SEGMENT) + return createValidPage(page, OrgCheckAnswersPageLandlordRegistration::class) + } + fun goToLandlordRegistrationPrivacyNoticePage(): PrivacyNoticePageLandlordRegistration { navigate("$LANDLORD_REGISTRATION_ROUTE/${PrivacyNoticeStep.ROUTE_SEGMENT}") return createValidPage(page, PrivacyNoticePageLandlordRegistration::class) @@ -433,8 +438,10 @@ class Navigator( return createValidPage(page, ManualAddressFormPageLandlordRegistration::class) } - fun skipToLandlordRegistrationCheckAnswersPage(): CheckAnswersPageLandlordRegistration { - setJourneyStateInSession(LandlordStateSessionBuilder.beforeCheckAnswers().build()) + fun skipToLandlordRegistrationCheckAnswersPage( + stateBuilder: LandlordStateSessionBuilder = LandlordStateSessionBuilder.beforeCheckAnswers(), + ): CheckAnswersPageLandlordRegistration { + setJourneyStateInSession(stateBuilder.build()) navigateToLandlordRegistrationJourneyStep(AbstractCheckYourAnswersStep.ROUTE_SEGMENT) return createValidPage(page, CheckAnswersPageLandlordRegistration::class) } @@ -461,7 +468,7 @@ class Navigator( stateBuilder: LandlordStateSessionBuilder = LandlordStateSessionBuilder.beforeOrgCheckAnswers(), ): OrgCheckAnswersPageLandlordRegistration { setJourneyStateInSession(stateBuilder.build()) - navigateToLandlordRegistrationJourneyStep(OrgLandlordRegistrationCyaStep.ROUTE_SEGMENT) + navigateToLandlordRegistrationJourneyStep(AbstractCheckYourAnswersStep.ROUTE_SEGMENT) return createValidPage(page, OrgCheckAnswersPageLandlordRegistration::class) } diff --git a/src/test/kotlin/uk/gov/communities/prsdb/webapp/integration/pageObjects/pages/landlordRegistrationJourneyPages/CheckAnswersPageLandlordRegistration.kt b/src/test/kotlin/uk/gov/communities/prsdb/webapp/integration/pageObjects/pages/landlordRegistrationJourneyPages/CheckAnswersPageLandlordRegistration.kt index 9b2df8462c..ae69f203b7 100644 --- a/src/test/kotlin/uk/gov/communities/prsdb/webapp/integration/pageObjects/pages/landlordRegistrationJourneyPages/CheckAnswersPageLandlordRegistration.kt +++ b/src/test/kotlin/uk/gov/communities/prsdb/webapp/integration/pageObjects/pages/landlordRegistrationJourneyPages/CheckAnswersPageLandlordRegistration.kt @@ -25,6 +25,7 @@ class CheckAnswersPageLandlordRegistration( class CheckAnswersLandlordRegistrationSummaryList( page: Page, ) : SummaryList(page) { + val landlordTypeRow = getRow("Landlord type") val emailRow = getRow("Email address") } } diff --git a/src/test/kotlin/uk/gov/communities/prsdb/webapp/integration/pageObjects/pages/landlordRegistrationJourneyPages/OrgCheckAnswersPageLandlordRegistration.kt b/src/test/kotlin/uk/gov/communities/prsdb/webapp/integration/pageObjects/pages/landlordRegistrationJourneyPages/OrgCheckAnswersPageLandlordRegistration.kt index b2ca278e7d..6886a22ae1 100644 --- a/src/test/kotlin/uk/gov/communities/prsdb/webapp/integration/pageObjects/pages/landlordRegistrationJourneyPages/OrgCheckAnswersPageLandlordRegistration.kt +++ b/src/test/kotlin/uk/gov/communities/prsdb/webapp/integration/pageObjects/pages/landlordRegistrationJourneyPages/OrgCheckAnswersPageLandlordRegistration.kt @@ -7,13 +7,13 @@ import uk.gov.communities.prsdb.webapp.integration.pageObjects.components.PostFo import uk.gov.communities.prsdb.webapp.integration.pageObjects.components.SummaryCard import uk.gov.communities.prsdb.webapp.integration.pageObjects.components.SummaryList import uk.gov.communities.prsdb.webapp.integration.pageObjects.pages.basePages.BasePage -import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.stepConfig.OrgLandlordRegistrationCyaStep +import uk.gov.communities.prsdb.webapp.journeys.shared.stepConfig.AbstractCheckYourAnswersStep class OrgCheckAnswersPageLandlordRegistration( page: Page, ) : BasePage( page, - "${RegisterLandlordController.LANDLORD_REGISTRATION_ROUTE}/${OrgLandlordRegistrationCyaStep.ROUTE_SEGMENT}", + "${RegisterLandlordController.LANDLORD_REGISTRATION_ROUTE}/${AbstractCheckYourAnswersStep.ROUTE_SEGMENT}", ) { fun confirmAndSubmit() = form.submit() diff --git a/src/test/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/stepConfig/OrgGovBodyMemberListStepConfigTests.kt b/src/test/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/stepConfig/OrgGovBodyMemberListStepConfigTests.kt index c5d8715729..fb2307986e 100644 --- a/src/test/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/stepConfig/OrgGovBodyMemberListStepConfigTests.kt +++ b/src/test/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/stepConfig/OrgGovBodyMemberListStepConfigTests.kt @@ -5,14 +5,14 @@ import org.junit.jupiter.api.extension.ExtendWith import org.mockito.Mock import org.mockito.junit.jupiter.MockitoExtension import org.mockito.kotlin.verify -import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.states.LandlordRegistrationOrgLandlordState +import uk.gov.communities.prsdb.webapp.journeys.landlordRegistration.states.OrgGovBodyState import uk.gov.communities.prsdb.webapp.services.CollectionKeyParameterService import uk.gov.communities.prsdb.webapp.testHelpers.mockObjects.AlwaysTrueValidator @ExtendWith(MockitoExtension::class) class OrgGovBodyMemberListStepConfigTests { @Mock - lateinit var mockState: LandlordRegistrationOrgLandlordState + lateinit var mockState: OrgGovBodyState @Mock lateinit var urlParameterService: CollectionKeyParameterService