Skip to content
Open
Original file line number Diff line number Diff line change
Expand Up @@ -231,7 +231,11 @@ class RecipientDetailsDto {
isOwner: d.isOwner,
label: d.label,
isDefault: d.isDefault,
isCorporate: d.isCorporate,
name: d.name,
lastname: d.lastname,
corporateName: d.corporateName,
email: d.email,
accountType: d.accountType,
bankAccount: d.bankAccount,
bankCode: d.bankCode,
Expand All @@ -247,10 +251,14 @@ class RecipientDetailsDto {
isOwner: d.isOwner,
label: d.label,
isDefault: d.isDefault,
isCorporate: d.isCorporate,
phoneNumber: d.phoneNumber,
documentId: d.documentId,
documentType: d.documentType,
name: d.name,
lastname: d.lastname,
corporateName: d.corporateName,
email: d.email,
);
}(),
};
Expand Down Expand Up @@ -459,9 +467,6 @@ class RecipientDetailsDto {
name: name!,
);
case RecipientType.pseColombia:
if (name == null) {
throw StateError('name is required for PSE_COLOMBIA.');
}
if (accountType == null) {
throw StateError('accountType is required for PSE_COLOMBIA.');
}
Expand All @@ -481,7 +486,11 @@ class RecipientDetailsDto {
label: label,
isDefault: def,
isOwner: isOwner,
name: name!,
isCorporate: isCorporate ?? false,
name: name,
lastname: lastname,
corporateName: corporateName,
email: email ?? '',
accountType: accountType!,
bankAccount: bankAccount!,
bankCode: bankCode!,
Expand All @@ -494,12 +503,16 @@ class RecipientDetailsDto {
label: label,
isDefault: def,
isOwner: isOwner,
isCorporate: isCorporate ?? false,
name: name,
lastname: lastname,
corporateName: corporateName,
email: email ?? '',
// Nequi uses phone number as bank account and API field is bankAccount
// Phone number has a value when entered by user, bank account has a value when retrieved from API
phoneNumber: phoneNumber ?? bankAccount!,
documentId: documentId!,
documentType: documentType!,
name: name!,
);
}
}
Expand Down
85 changes: 72 additions & 13 deletions lib/features/recipients/domain/value_objects/recipient_details.dart
Original file line number Diff line number Diff line change
Expand Up @@ -546,7 +546,14 @@ class CbuCvuArgentinaDetails extends RecipientDetails {
// ── PSE (Colombia)
@immutable
class PseColombiaDetails extends RecipientDetails {
final String name;
@override
final bool isCorporate;
final String? name;
final String? lastname;
@override
final String? corporateName;
@override
final String email;
final String accountType;
final String bankAccount;
final String bankCode;
Expand All @@ -558,7 +565,11 @@ class PseColombiaDetails extends RecipientDetails {
super.label,
super.isDefault = false,
super.isOwner,
required this.name,
required this.isCorporate,
this.name,
this.lastname,
this.corporateName,
required this.email,
required this.accountType,
required this.bankAccount,
required this.bankCode,
Expand All @@ -571,16 +582,31 @@ class PseColombiaDetails extends RecipientDetails {
String? label,
bool isDefault = false,
bool? isOwner,
required String name,
required bool isCorporate,
String? name,
String? lastname,
String? corporateName,
required String email,
required String accountType,
required String bankAccount,
required String bankCode,
required String bankName,
required String documentId,
required String documentType,
}) {
if (name.trim().isEmpty) {
throw ArgumentError('Name cannot be empty');
if (isCorporate) {
if (corporateName == null || corporateName.trim().isEmpty) {
throw ArgumentError(
'Corporate name is required for corporate accounts',
);
}
} else {
if (name == null || name.trim().isEmpty) {
throw ArgumentError('First name is required for individual accounts');
}
if (lastname == null || lastname.trim().isEmpty) {
throw ArgumentError('Last name is required for individual accounts');
}
}
if (accountType.trim().isEmpty) {
throw ArgumentError('Account type cannot be empty');
Expand All @@ -591,7 +617,6 @@ class PseColombiaDetails extends RecipientDetails {
if (bankCode.trim().isEmpty) {
throw ArgumentError('Bank code cannot be empty');
}

if (documentId.trim().isEmpty) {
throw ArgumentError('Document ID cannot be empty');
}
Expand All @@ -603,7 +628,11 @@ class PseColombiaDetails extends RecipientDetails {
label: label,
isDefault: isDefault,
isOwner: isOwner,
name: name.trim(),
isCorporate: isCorporate,
name: name?.trim(),
lastname: lastname?.trim(),
corporateName: corporateName?.trim(),
email: email.trim(),
accountType: accountType.trim(),
bankAccount: bankAccount.trim(),
bankCode: bankCode.trim(),
Expand All @@ -623,7 +652,14 @@ class NequiColombiaDetails extends RecipientDetails {
final String phoneNumber;
final String documentId;
final String documentType;
final String name;
@override
final bool isCorporate;
final String? name;
final String? lastname;
@override
final String? corporateName;
@override
final String email;

const NequiColombiaDetails._({
super.label,
Expand All @@ -632,20 +668,39 @@ class NequiColombiaDetails extends RecipientDetails {
required this.phoneNumber,
required this.documentId,
required this.documentType,
required this.name,
required this.isCorporate,
this.name,
this.lastname,
this.corporateName,
required this.email,
});

factory NequiColombiaDetails.create({
String? label,
bool isDefault = false,
bool? isOwner,
required String name,
required bool isCorporate,
String? name,
String? lastname,
String? corporateName,
required String email,
required String phoneNumber,
required String documentId,
required String documentType,
}) {
if (name.trim().isEmpty) {
throw ArgumentError('Name cannot be empty');
if (isCorporate) {
if (corporateName == null || corporateName.trim().isEmpty) {
throw ArgumentError(
'Corporate name is required for corporate accounts',
);
}
} else {
if (name == null || name.trim().isEmpty) {
throw ArgumentError('First name is required for individual accounts');
}
if (lastname == null || lastname.trim().isEmpty) {
throw ArgumentError('Last name is required for individual accounts');
}
}
if (phoneNumber.trim().isEmpty) {
throw ArgumentError('Phone number cannot be empty');
Expand All @@ -661,7 +716,11 @@ class NequiColombiaDetails extends RecipientDetails {
label: label,
isDefault: isDefault,
isOwner: isOwner,
name: name.trim(),
isCorporate: isCorporate,
name: name?.trim(),
lastname: lastname?.trim(),
corporateName: corporateName?.trim(),
email: email.trim(),
phoneNumber: phoneNumber.trim(),
documentId: documentId.trim(),
documentType: documentType.trim(),
Expand Down
Loading