support ach transfer payment account over grpc api

This commit is contained in:
woodser 2025-06-20 10:57:13 -04:00
parent 49005d604e
commit ae650c6ee1
No known key found for this signature in database
GPG key ID: 55A10DD48ADEE5EF
5 changed files with 39 additions and 7 deletions

View file

@ -83,7 +83,8 @@ public final class PaymentAccountForm implements PersistablePayload {
ALI_PAY, ALI_PAY,
SWISH, SWISH,
TRANSFERWISE_USD, TRANSFERWISE_USD,
AMAZON_GIFT_CARD; AMAZON_GIFT_CARD,
ACH_TRANSFER;
public static PaymentAccountForm.FormId fromProto(protobuf.PaymentAccountForm.FormId formId) { public static PaymentAccountForm.FormId fromProto(protobuf.PaymentAccountForm.FormId formId) {
return ProtoUtil.enumFromProto(PaymentAccountForm.FormId.class, formId.name()); return ProtoUtil.enumFromProto(PaymentAccountForm.FormId.class, formId.name());

View file

@ -19,6 +19,7 @@ package haveno.core.payment;
import haveno.core.api.model.PaymentAccountFormField; import haveno.core.api.model.PaymentAccountFormField;
import haveno.core.locale.TraditionalCurrency; import haveno.core.locale.TraditionalCurrency;
import haveno.core.locale.BankUtil;
import haveno.core.locale.TradeCurrency; import haveno.core.locale.TradeCurrency;
import haveno.core.payment.payload.AchTransferAccountPayload; import haveno.core.payment.payload.AchTransferAccountPayload;
import haveno.core.payment.payload.BankAccountPayload; import haveno.core.payment.payload.BankAccountPayload;
@ -34,6 +35,19 @@ public final class AchTransferAccount extends CountryBasedPaymentAccount impleme
public static final List<TradeCurrency> SUPPORTED_CURRENCIES = List.of(new TraditionalCurrency("USD")); public static final List<TradeCurrency> SUPPORTED_CURRENCIES = List.of(new TraditionalCurrency("USD"));
private static final List<PaymentAccountFormField.FieldId> INPUT_FIELD_IDS = List.of(
PaymentAccountFormField.FieldId.HOLDER_NAME,
PaymentAccountFormField.FieldId.HOLDER_ADDRESS,
PaymentAccountFormField.FieldId.BANK_NAME,
PaymentAccountFormField.FieldId.BRANCH_ID,
PaymentAccountFormField.FieldId.ACCOUNT_NR,
PaymentAccountFormField.FieldId.ACCOUNT_TYPE,
PaymentAccountFormField.FieldId.COUNTRY,
PaymentAccountFormField.FieldId.TRADE_CURRENCIES,
PaymentAccountFormField.FieldId.ACCOUNT_NAME,
PaymentAccountFormField.FieldId.SALT
);
public AchTransferAccount() { public AchTransferAccount() {
super(PaymentMethod.ACH_TRANSFER); super(PaymentMethod.ACH_TRANSFER);
} }
@ -79,6 +93,15 @@ public final class AchTransferAccount extends CountryBasedPaymentAccount impleme
@Override @Override
public @NonNull List<PaymentAccountFormField.FieldId> getInputFieldIds() { public @NonNull List<PaymentAccountFormField.FieldId> getInputFieldIds() {
throw new RuntimeException("Not implemented"); return INPUT_FIELD_IDS;
}
@Override
protected PaymentAccountFormField getEmptyFormField(PaymentAccountFormField.FieldId fieldId) {
var field = super.getEmptyFormField(fieldId);
if (field.getId() == PaymentAccountFormField.FieldId.TRADE_CURRENCIES) field.setComponent(PaymentAccountFormField.Component.SELECT_ONE);
if (field.getId() == PaymentAccountFormField.FieldId.BRANCH_ID) field.setLabel(BankUtil.getBranchIdLabel("US"));
if (field.getId() == PaymentAccountFormField.FieldId.ACCOUNT_TYPE) field.setLabel(BankUtil.getAccountTypeLabel("US"));
return field;
} }
} }

View file

@ -435,7 +435,8 @@ public abstract class PaymentAccount implements PersistablePayload {
processValidationResult(new LengthValidator(2, 100).validate(value)); processValidationResult(new LengthValidator(2, 100).validate(value));
break; break;
case ACCOUNT_TYPE: case ACCOUNT_TYPE:
throw new IllegalArgumentException("Not implemented"); processValidationResult(new LengthValidator(2, 100).validate(value));
break;
case ANSWER: case ANSWER:
throw new IllegalArgumentException("Not implemented"); throw new IllegalArgumentException("Not implemented");
case BANK_ACCOUNT_NAME: case BANK_ACCOUNT_NAME:
@ -491,7 +492,8 @@ public abstract class PaymentAccount implements PersistablePayload {
processValidationResult(new BICValidator().validate(value)); processValidationResult(new BICValidator().validate(value));
break; break;
case BRANCH_ID: case BRANCH_ID:
throw new IllegalArgumentException("Not implemented"); processValidationResult(new LengthValidator(2, 34).validate(value));
break;
case CITY: case CITY:
processValidationResult(new LengthValidator(2, 34).validate(value)); processValidationResult(new LengthValidator(2, 34).validate(value));
break; break;
@ -624,7 +626,9 @@ public abstract class PaymentAccount implements PersistablePayload {
field.setLabel(Res.get("payment.account.owner")); field.setLabel(Res.get("payment.account.owner"));
break; break;
case ACCOUNT_TYPE: case ACCOUNT_TYPE:
throw new IllegalArgumentException("Not implemented"); field.setComponent(PaymentAccountFormField.Component.SELECT_ONE);
field.setLabel(Res.get("payment.select.account"));
break;
case ANSWER: case ANSWER:
throw new IllegalArgumentException("Not implemented"); throw new IllegalArgumentException("Not implemented");
case BANK_ACCOUNT_NAME: case BANK_ACCOUNT_NAME:
@ -692,7 +696,9 @@ public abstract class PaymentAccount implements PersistablePayload {
field.setLabel("BIC"); field.setLabel("BIC");
break; break;
case BRANCH_ID: case BRANCH_ID:
throw new IllegalArgumentException("Not implemented"); field.setComponent(PaymentAccountFormField.Component.TEXT);
//field.setLabel("Not implemented"); // expected to be overridden by subclasses
break;
case CITY: case CITY:
field.setComponent(PaymentAccountFormField.Component.TEXT); field.setComponent(PaymentAccountFormField.Component.TEXT);
field.setLabel(Res.get("payment.account.city")); field.setLabel(Res.get("payment.account.city"));

View file

@ -374,7 +374,8 @@ public final class PaymentMethod implements PersistablePayload, Comparable<Payme
ALI_PAY_ID, ALI_PAY_ID,
SWISH_ID, SWISH_ID,
TRANSFERWISE_USD_ID, TRANSFERWISE_USD_ID,
AMAZON_GIFT_CARD_ID); AMAZON_GIFT_CARD_ID,
ACH_TRANSFER_ID);
return paymentMethods.stream().filter(paymentMethod -> paymentMethodIds.contains(paymentMethod.getId())).collect(Collectors.toList()); return paymentMethods.stream().filter(paymentMethod -> paymentMethodIds.contains(paymentMethod.getId())).collect(Collectors.toList());
} }

View file

@ -1908,6 +1908,7 @@ message PaymentAccountForm {
SWISH = 22; SWISH = 22;
TRANSFERWISE_USD = 23; TRANSFERWISE_USD = 23;
AMAZON_GIFT_CARD = 24; AMAZON_GIFT_CARD = 24;
ACH_TRANSFER = 25;
} }
FormId id = 1; FormId id = 1;
repeated PaymentAccountFormField fields = 2; repeated PaymentAccountFormField fields = 2;