fee treatment added

This commit is contained in:
Stephan D
2026-02-24 16:39:08 +01:00
parent 2fe90347a8
commit 2e08ec9b9b
17 changed files with 162 additions and 30 deletions

View File

@@ -23,6 +23,9 @@ class PaymentIntentDTO {
@JsonKey(name: 'settlement_currency')
final String? settlementCurrency;
@JsonKey(name: "fee_treatment")
final String? feeTreatment;
final Map<String, String>? attributes;
final CustomerDTO? customer;
@@ -36,6 +39,7 @@ class PaymentIntentDTO {
this.settlementCurrency,
this.attributes,
this.customer,
this.feeTreatment,
});
factory PaymentIntentDTO.fromJson(Map<String, dynamic> json) => _$PaymentIntentDTOFromJson(json);

View File

@@ -5,6 +5,7 @@ import 'package:pshared/models/payment/kind.dart';
import 'package:pshared/models/payment/type.dart';
import 'package:pshared/models/payment/settlement_mode.dart';
PaymentKind paymentKindFromValue(String? value) {
switch (value) {
case 'payout':

View File

@@ -0,0 +1,26 @@
import 'package:pshared/models/payment/fees/treatment.dart';
FeeTreatment feeTreatmentFromValue(String? value) {
switch (value) {
case 'add_to_source':
return FeeTreatment.addToSource;
case 'deduct_from_destination':
return FeeTreatment.deductFromDestination;
case 'unspecified':
return FeeTreatment.unspecified;
default:
throw ArgumentError('Unknown FeeTreatment value: $value');
}
}
String feeTreatmentToValue(FeeTreatment value) {
switch (value) {
case FeeTreatment.addToSource:
return 'add_to_source';
case FeeTreatment.deductFromDestination:
return 'deduct_from_destination';
case FeeTreatment.unspecified:
return 'unspecified';
}
}

View File

@@ -1,4 +1,5 @@
import 'package:pshared/data/dto/payment/intent/payment.dart';
import 'package:pshared/data/mapper/payment/fees/treatment.dart';
import 'package:pshared/data/mapper/payment/payment.dart';
import 'package:pshared/data/mapper/payment/enums.dart';
import 'package:pshared/data/mapper/payment/intent/customer.dart';
@@ -18,6 +19,7 @@ extension PaymentIntentMapper on PaymentIntent {
settlementCurrency: settlementCurrency,
attributes: attributes,
customer: customer?.toDTO(),
feeTreatment: feeTreatmentToValue(feeTreatment),
);
}
@@ -32,5 +34,6 @@ extension PaymentIntentDTOMapper on PaymentIntentDTO {
settlementCurrency: settlementCurrency,
attributes: attributes,
customer: customer?.toDomain(),
feeTreatment: feeTreatmentFromValue(feeTreatment),
);
}

View File

@@ -0,0 +1,5 @@
enum FeeTreatment {
addToSource,
deductFromDestination,
unspecified,
}

View File

@@ -1,3 +1,4 @@
import 'package:pshared/models/payment/fees/treatment.dart';
import 'package:pshared/models/payment/fx/intent.dart';
import 'package:pshared/models/payment/kind.dart';
import 'package:pshared/models/payment/customer.dart';
@@ -12,6 +13,7 @@ class PaymentIntent {
final PaymentMethodData? destination;
final Money? amount;
final FxIntent? fx;
final FeeTreatment feeTreatment;
final SettlementMode settlementMode;
final String? settlementCurrency;
final Map<String, String>? attributes;
@@ -27,5 +29,6 @@ class PaymentIntent {
this.settlementCurrency,
this.attributes,
this.customer,
required this.feeTreatment,
});
}

View File

@@ -2,6 +2,7 @@ import 'package:pshared/controllers/balance_mask/wallets.dart';
import 'package:pshared/models/payment/asset.dart';
import 'package:pshared/models/payment/chain_network.dart';
import 'package:pshared/models/payment/customer.dart';
import 'package:pshared/models/payment/fees/treatment.dart';
import 'package:pshared/models/payment/kind.dart';
import 'package:pshared/models/payment/methods/card.dart';
import 'package:pshared/models/payment/methods/crypto_address.dart';
@@ -63,7 +64,8 @@ class QuotationIntentBuilder {
)
),
fx: fxIntent,
settlementMode: payment.payerCoversFee ? SettlementMode.fixReceived : SettlementMode.fixSource,
feeTreatment: payment.payerCoversFee ? FeeTreatment.addToSource : FeeTreatment.deductFromDestination,
settlementMode: SettlementMode.fixSource,
settlementCurrency: FxIntentHelper.resolveSettlementCurrency(
amount: amount,
fx: fxIntent,