From 407e704352560f9a4edefaa65490d1d249c1c00a Mon Sep 17 00:00:00 2001 From: Stephan D Date: Wed, 24 Dec 2025 20:39:17 +0100 Subject: [PATCH] quotation provider now uses payment methods as source for quotation --- .../pshared/lib/data/mapper/wallet/ui.dart | 32 ++++++++----------- frontend/pshared/lib/provider/account.dart | 4 +-- .../lib/provider/payment/flow.dart} | 0 .../lib/provider/payment/quotation.dart | 19 ++++++----- .../lib/pages/dashboard/payouts/widget.dart | 6 ++-- .../pweb/lib/pages/payment_methods/page.dart | 2 +- .../payment_methods/payment_page/content.dart | 2 +- .../payment_methods/payment_page/page.dart | 2 +- .../widgets/payment_info_section.dart | 2 +- 9 files changed, 34 insertions(+), 35 deletions(-) rename frontend/{pweb/lib/providers/payment_flow.dart => pshared/lib/provider/payment/flow.dart} (100%) diff --git a/frontend/pshared/lib/data/mapper/wallet/ui.dart b/frontend/pshared/lib/data/mapper/wallet/ui.dart index b90f1b0..7ce5a4e 100644 --- a/frontend/pshared/lib/data/mapper/wallet/ui.dart +++ b/frontend/pshared/lib/data/mapper/wallet/ui.dart @@ -1,26 +1,20 @@ -import 'package:pshared/models/currency.dart'; import 'package:pshared/models/wallet/wallet.dart' as domain; import 'package:pshared/models/payment/wallet.dart'; import 'package:pshared/utils/currency.dart'; extension WalletUiMapper on domain.WalletModel { - Wallet toUi() { - final amountStr = availableMoney?.amount ?? balance?.available?.amount ?? '0'; - final parsedAmount = double.tryParse(amountStr) ?? 0; - final currency = currencyStringToCode(asset.tokenSymbol); - return Wallet( - id: walletRef, - walletUserID: walletRef, - balance: parsedAmount, - currency: currency, - isHidden: true, - calculatedAt: balance?.calculatedAt ?? DateTime.now(), - depositAddress: depositAddress, - network: asset.chain, - tokenSymbol: asset.tokenSymbol, - contractAddress: asset.contractAddress, - describable: describable, - ); - } + Wallet toUi() => Wallet( + id: walletRef, + walletUserID: walletRef, + balance: double.tryParse(availableMoney?.amount ?? balance?.available?.amount ?? '0') ?? 0, + currency: currencyStringToCode(asset.tokenSymbol), + isHidden: true, + calculatedAt: balance?.calculatedAt ?? DateTime.now(), + depositAddress: depositAddress, + network: asset.chain, + tokenSymbol: asset.tokenSymbol, + contractAddress: asset.contractAddress, + describable: describable, + ); } diff --git a/frontend/pshared/lib/provider/account.dart b/frontend/pshared/lib/provider/account.dart index 576ac0f..426693b 100644 --- a/frontend/pshared/lib/provider/account.dart +++ b/frontend/pshared/lib/provider/account.dart @@ -1,18 +1,18 @@ import 'dart:async'; import 'package:flutter/material.dart'; -import 'package:pshared/models/auth/state.dart'; import 'package:share_plus/share_plus.dart'; import 'package:pshared/api/errors/unauthorized.dart'; import 'package:pshared/api/requests/signup.dart'; import 'package:pshared/api/requests/login_data.dart'; +import 'package:pshared/api/responses/confirmation.dart'; import 'package:pshared/config/constants.dart'; import 'package:pshared/models/account/account.dart'; -import 'package:pshared/api/responses/confirmation.dart'; import 'package:pshared/models/auth/login_outcome.dart'; import 'package:pshared/models/auth/pending_login.dart'; +import 'package:pshared/models/auth/state.dart'; import 'package:pshared/models/describable.dart'; import 'package:pshared/models/storable.dart'; import 'package:pshared/provider/locale.dart'; diff --git a/frontend/pweb/lib/providers/payment_flow.dart b/frontend/pshared/lib/provider/payment/flow.dart similarity index 100% rename from frontend/pweb/lib/providers/payment_flow.dart rename to frontend/pshared/lib/provider/payment/flow.dart diff --git a/frontend/pshared/lib/provider/payment/quotation.dart b/frontend/pshared/lib/provider/payment/quotation.dart index f614709..a36bacc 100644 --- a/frontend/pshared/lib/provider/payment/quotation.dart +++ b/frontend/pshared/lib/provider/payment/quotation.dart @@ -1,5 +1,7 @@ import 'package:flutter/material.dart'; +import 'package:collection/collection.dart'; + import 'package:uuid/uuid.dart'; import 'package:pshared/api/requests/payment/quote.dart'; @@ -9,7 +11,6 @@ import 'package:pshared/models/payment/currency_pair.dart'; import 'package:pshared/models/payment/fx/intent.dart'; import 'package:pshared/models/payment/fx/side.dart'; import 'package:pshared/models/payment/kind.dart'; -import 'package:pshared/models/payment/methods/card.dart'; import 'package:pshared/models/payment/methods/managed_wallet.dart'; import 'package:pshared/models/payment/money.dart'; import 'package:pshared/models/payment/settlement_mode.dart'; @@ -17,7 +18,9 @@ import 'package:pshared/models/payment/intent.dart'; import 'package:pshared/models/payment/quote.dart'; import 'package:pshared/provider/organizations.dart'; import 'package:pshared/provider/payment/amount.dart'; +import 'package:pshared/provider/payment/flow.dart'; import 'package:pshared/provider/payment/wallets.dart'; +import 'package:pshared/provider/recipient/pmethods.dart'; import 'package:pshared/provider/resource.dart'; import 'package:pshared/service/payment/quotation.dart'; import 'package:pshared/utils/currency.dart'; @@ -32,9 +35,13 @@ class QuotationProvider extends ChangeNotifier { OrganizationsProvider venue, PaymentAmountProvider payment, WalletsProvider wallets, + PaymentFlowProvider flow, + PaymentMethodsProvider methods, ) { _organizations = venue; - if (wallets.selectedWallet != null) { + final t = flow.selectedType; + final method = methods.methods.firstWhereOrNull((m) => m.type == t); + if ((wallets.selectedWallet != null) && (method != null)) { getQuotation(PaymentIntent( kind: PaymentKind.payout, amount: Money( @@ -42,18 +49,14 @@ class QuotationProvider extends ChangeNotifier { // TODO: adapt to possible other sources currency: currencyCodeToString(wallets.selectedWallet!.currency), ), - destination: CardPaymentMethod( - pan: '4000000000000077', - firstName: 'John', - lastName: 'Doe', - ), + destination: method.data, source: ManagedWalletPaymentMethod( managedWalletRef: wallets.selectedWallet!.id, ), fx: FxIntent( pair: CurrencyPair( base: currencyCodeToString(wallets.selectedWallet!.currency), - quote: 'RUB', + quote: 'RUB', // TODO: exentd target currencies ), side: FxSide.sellBaseBuyQuote, ), diff --git a/frontend/pweb/lib/pages/dashboard/payouts/widget.dart b/frontend/pweb/lib/pages/dashboard/payouts/widget.dart index 3db9a49..2e7e89f 100644 --- a/frontend/pweb/lib/pages/dashboard/payouts/widget.dart +++ b/frontend/pweb/lib/pages/dashboard/payouts/widget.dart @@ -4,8 +4,10 @@ import 'package:provider/provider.dart'; import 'package:pshared/provider/organizations.dart'; import 'package:pshared/provider/payment/amount.dart'; +import 'package:pshared/provider/payment/flow.dart'; import 'package:pshared/provider/payment/quotation.dart'; import 'package:pshared/provider/payment/wallets.dart'; +import 'package:pshared/provider/recipient/pmethods.dart'; import 'package:pweb/pages/dashboard/payouts/form.dart'; @@ -19,9 +21,9 @@ class PaymentFromWrappingWidget extends StatelessWidget { ChangeNotifierProvider( create: (_) => PaymentAmountProvider(), ), - ChangeNotifierProxyProvider3( + ChangeNotifierProxyProvider5( create: (_) => QuotationProvider(), - update: (context, orgnization, payment, wallet, provider) => provider!..update(orgnization, payment, wallet), + update: (context, orgnization, payment, wallet, flow, methods, provider) => provider!..update(orgnization, payment, wallet, flow, methods), ), ], child: const PaymentFormWidget(), diff --git a/frontend/pweb/lib/pages/payment_methods/page.dart b/frontend/pweb/lib/pages/payment_methods/page.dart index 6cc7520..98aa77b 100644 --- a/frontend/pweb/lib/pages/payment_methods/page.dart +++ b/frontend/pweb/lib/pages/payment_methods/page.dart @@ -8,11 +8,11 @@ import 'package:pshared/models/payment/methods/data.dart'; import 'package:pshared/models/payment/methods/type.dart'; import 'package:pshared/models/payment/type.dart'; import 'package:pshared/models/recipient/recipient.dart'; +import 'package:pshared/provider/payment/flow.dart'; import 'package:pshared/provider/recipient/pmethods.dart'; import 'package:pshared/provider/recipient/provider.dart'; import 'package:pshared/models/payment/wallet.dart'; -import 'package:pweb/providers/payment_flow.dart'; import 'package:pweb/pages/payment_methods/payment_page/body.dart'; import 'package:pshared/provider/payment/wallets.dart'; import 'package:pweb/widgets/sidebar/destinations.dart'; diff --git a/frontend/pweb/lib/pages/payment_methods/payment_page/content.dart b/frontend/pweb/lib/pages/payment_methods/payment_page/content.dart index 8a53814..2638330 100644 --- a/frontend/pweb/lib/pages/payment_methods/payment_page/content.dart +++ b/frontend/pweb/lib/pages/payment_methods/payment_page/content.dart @@ -6,6 +6,7 @@ import 'package:pshared/models/payment/methods/data.dart'; import 'package:pshared/models/recipient/recipient.dart'; import 'package:pshared/provider/recipient/pmethods.dart'; import 'package:pshared/provider/recipient/provider.dart'; +import 'package:pshared/provider/payment/flow.dart'; import 'package:pweb/pages/payment_methods/payment_page/back_button.dart'; import 'package:pweb/pages/payment_methods/payment_page/header.dart'; @@ -15,7 +16,6 @@ import 'package:pweb/pages/dashboard/payouts/form.dart'; import 'package:pweb/pages/payment_methods/widgets/payment_info_section.dart'; import 'package:pweb/pages/payment_methods/widgets/recipient_section.dart'; import 'package:pweb/pages/payment_methods/widgets/section_title.dart'; -import 'package:pweb/providers/payment_flow.dart'; import 'package:pweb/utils/dimensions.dart'; import 'package:pweb/widgets/sidebar/destinations.dart'; diff --git a/frontend/pweb/lib/pages/payment_methods/payment_page/page.dart b/frontend/pweb/lib/pages/payment_methods/payment_page/page.dart index ee2ece1..d0ff6f5 100644 --- a/frontend/pweb/lib/pages/payment_methods/payment_page/page.dart +++ b/frontend/pweb/lib/pages/payment_methods/payment_page/page.dart @@ -6,6 +6,7 @@ import 'package:pshared/models/payment/methods/data.dart'; import 'package:pshared/models/recipient/recipient.dart'; import 'package:pshared/provider/recipient/pmethods.dart'; import 'package:pshared/provider/recipient/provider.dart'; +import 'package:pshared/provider/payment/flow.dart'; import 'package:pweb/pages/dashboard/payouts/widget.dart'; import 'package:pweb/pages/payment_methods/payment_page/back_button.dart'; @@ -15,7 +16,6 @@ import 'package:pweb/pages/payment_methods/payment_page/send_button.dart'; import 'package:pweb/pages/payment_methods/widgets/payment_info_section.dart'; import 'package:pweb/pages/payment_methods/widgets/recipient_section.dart'; import 'package:pweb/pages/payment_methods/widgets/section_title.dart'; -import 'package:pweb/providers/payment_flow.dart'; import 'package:pweb/utils/dimensions.dart'; import 'package:pweb/widgets/sidebar/destinations.dart'; diff --git a/frontend/pweb/lib/pages/payment_methods/widgets/payment_info_section.dart b/frontend/pweb/lib/pages/payment_methods/widgets/payment_info_section.dart index acd3f51..600184e 100644 --- a/frontend/pweb/lib/pages/payment_methods/widgets/payment_info_section.dart +++ b/frontend/pweb/lib/pages/payment_methods/widgets/payment_info_section.dart @@ -3,10 +3,10 @@ import 'package:flutter/material.dart'; import 'package:pshared/models/payment/methods/data.dart'; import 'package:pshared/models/payment/type.dart'; import 'package:pshared/models/recipient/recipient.dart'; +import 'package:pshared/provider/payment/flow.dart'; import 'package:pweb/pages/payment_methods/form.dart'; import 'package:pweb/pages/payment_methods/widgets/section_title.dart'; -import 'package:pweb/providers/payment_flow.dart'; import 'package:pweb/utils/dimensions.dart'; import 'package:pweb/utils/payment/selector_type.dart';