@@ -40,28 +40,31 @@ object ChooseAccountTypeForm {
4040
4141 val form : Form [BankAccountType ] = Form (
4242 single(
43- BUSINESS_OR_PERSONAL_ACCOUNT_RADIO -> default(text, " " ).verifying(stopOnFail(
44- mandatory(errorMsg)
45- )).transform[BankAccountType ](
46- s => BankAccountType .fromString(s).get,
47- _.asBars
48- )
43+ BUSINESS_OR_PERSONAL_ACCOUNT_RADIO -> default(text, " " )
44+ .verifying(
45+ stopOnFail(
46+ mandatory(errorMsg)
47+ ))
48+ .transform[BankAccountType ](
49+ s => BankAccountType .fromString(s).get,
50+ _.asBars
51+ )
4952 )
5053 )
5154}
5255
53- object EnterBankAccountDetailsForm {
56+ object EnterCompanyBankAccountDetailsForm {
5457
5558 val ACCOUNT_NAME = " accountName"
5659 val ACCOUNT_NUMBER = " accountNumber"
5760 val SORT_CODE = " sortCode"
5861
59- val accountNameEmptyKey = " validation.companyBankAccount.name.missing"
62+ val accountNameEmptyKey = " validation.companyBankAccount.name.missing.old "
6063 val accountNameMaxLengthKey = " validation.companyBankAccount.name.maxLength"
61- val accountNameInvalidKey = " validation.companyBankAccount.name.invalid"
64+ val accountNameInvalidKey = " validation.companyBankAccount.name.invalid.old "
6265 val accountNumberEmptyKey = " validation.companyBankAccount.number.missing"
6366 val accountNumberInvalidKey = " validation.companyBankAccount.number.invalid"
64- val sortCodeEmptyKey = " validation.companyBankAccount.sortCode.missing"
67+ val sortCodeEmptyKey = " validation.companyBankAccount.sortCode.missing.old "
6568 val sortCodeInvalidKey = " validation.companyBankAccount.sortCode.invalid"
6669
6770 val invalidAccountReputationKey = " sortCodeAndAccountGroup"
@@ -95,12 +98,72 @@ object EnterBankAccountDetailsForm {
9598 matchesRegex(sortCodeRegex, sortCodeInvalidKey)
9699 ))
97100 )((accountName, accountNumber, sortCode) => BankAccountDetails .apply(accountName, accountNumber, sortCode, None ))(bankAccountDetails =>
98- BankAccountDetails .unapply(bankAccountDetails).map { case (accountName, accountNumber, sortCode, _) =>
101+ BankAccountDetails .unapply(bankAccountDetails).map { case (accountName, accountNumber, sortCode, _, _ ) =>
99102 (accountName, accountNumber, sortCode)
100103 })
101104 )
102-
103105 val formWithInvalidAccountReputation : Form [BankAccountDetails ] =
104106 form.withError(invalidAccountReputationKey, invalidAccountReputationMessage)
107+ }
105108
109+ object EnterBankAccountDetailsForm {
110+
111+ val ACCOUNT_NAME = " accountName"
112+ val ACCOUNT_NUMBER = " accountNumber"
113+ val SORT_CODE = " sortCode"
114+ val ROLL_NUMBER = " rollNumber"
115+
116+ val accountNameEmptyKey = " validation.companyBankAccount.name.missing.new"
117+ val accountNameMaxLengthKey = " validation.companyBankAccount.name.maxLength"
118+ val accountNameInvalidKey = " validation.companyBankAccount.name.invalid.new"
119+ val accountNumberEmptyKey = " validation.companyBankAccount.number.missing"
120+ val accountNumberFormatKey = " validation.companyBankAccount.number.format"
121+ val accountNumberInvalidKey = " validation.companyBankAccount.number.invalid"
122+ val sortCodeEmptyKey = " validation.companyBankAccount.sortCode.missing.new"
123+ val sortCodeLengthKey = " validation.companyBankAccount.sortCode.length"
124+ val sortCodeFormatKey = " validation.companyBankAccount.sortCode.format"
125+ val rollNumberInvalidKey = " validation.companyBankAccount.rollNumber.invalid"
126+
127+ private val accountNameRegex = """ ^[A-Za-z0-9 '\-./]{1,60}$""" .r
128+ private val accountNameMaxLength = 60
129+ private val rollNumberMaxLength = 25
130+ private val accountNumberDigitRegex = """ ^[0-9]+$""" .r
131+ private val accountNumberLengthRegex = """ ^.{6,8}$""" .r
132+ private val sortCodeDigitRegex = """ ^[0-9]+$""" .r
133+ private val sortCodeLengthRegex = """ ^.{6}$""" .r
134+
135+ val form : Form [BankAccountDetails ] = Form [BankAccountDetails ](
136+ mapping(
137+ ACCOUNT_NAME -> text.verifying(
138+ stopOnFail(
139+ mandatory(accountNameEmptyKey),
140+ maxLength(accountNameMaxLength, accountNameMaxLengthKey),
141+ matchesRegex(accountNameRegex, accountNameInvalidKey)
142+ )),
143+ ACCOUNT_NUMBER -> text
144+ .transform(removeSpaces, identity[String ])
145+ .verifying(stopOnFail(
146+ mandatory(accountNumberEmptyKey),
147+ matchesRegex(accountNumberDigitRegex, accountNumberFormatKey),
148+ matchesRegex(accountNumberLengthRegex, accountNumberInvalidKey)
149+ )),
150+ SORT_CODE -> text
151+ .transform(removeSpaces, identity[String ])
152+ .verifying(
153+ stopOnFail(
154+ mandatory(sortCodeEmptyKey),
155+ matchesRegex(sortCodeDigitRegex, sortCodeFormatKey),
156+ matchesRegex(sortCodeLengthRegex, sortCodeLengthKey)
157+ )),
158+ ROLL_NUMBER -> optional(
159+ text
160+ .transform(removeSpaces, identity[String ])
161+ .verifying(maxLength(rollNumberMaxLength, rollNumberInvalidKey))
162+ )
163+ )((accountName, accountNumber, sortCode, rollNumber) => BankAccountDetails .apply(accountName, accountNumber, sortCode, rollNumber))(
164+ bankAccountDetails =>
165+ BankAccountDetails .unapply(bankAccountDetails).map { case (accountName, accountNumber, sortCode, rollNumber, _) =>
166+ (accountName, accountNumber, sortCode, rollNumber)
167+ })
168+ )
106169}
0 commit comments