quotation provider now uses payment methods as source for quotation

This commit is contained in:
Stephan D
2025-12-24 20:39:17 +01:00
parent 4251dfb2c6
commit 407e704352
9 changed files with 34 additions and 35 deletions

View File

@@ -1,26 +1,20 @@
import 'package:pshared/models/currency.dart';
import 'package:pshared/models/wallet/wallet.dart' as domain; import 'package:pshared/models/wallet/wallet.dart' as domain;
import 'package:pshared/models/payment/wallet.dart'; import 'package:pshared/models/payment/wallet.dart';
import 'package:pshared/utils/currency.dart'; import 'package:pshared/utils/currency.dart';
extension WalletUiMapper on domain.WalletModel { extension WalletUiMapper on domain.WalletModel {
Wallet toUi() { Wallet toUi() => Wallet(
final amountStr = availableMoney?.amount ?? balance?.available?.amount ?? '0'; id: walletRef,
final parsedAmount = double.tryParse(amountStr) ?? 0; walletUserID: walletRef,
final currency = currencyStringToCode(asset.tokenSymbol); balance: double.tryParse(availableMoney?.amount ?? balance?.available?.amount ?? '0') ?? 0,
return Wallet( currency: currencyStringToCode(asset.tokenSymbol),
id: walletRef, isHidden: true,
walletUserID: walletRef, calculatedAt: balance?.calculatedAt ?? DateTime.now(),
balance: parsedAmount, depositAddress: depositAddress,
currency: currency, network: asset.chain,
isHidden: true, tokenSymbol: asset.tokenSymbol,
calculatedAt: balance?.calculatedAt ?? DateTime.now(), contractAddress: asset.contractAddress,
depositAddress: depositAddress, describable: describable,
network: asset.chain, );
tokenSymbol: asset.tokenSymbol,
contractAddress: asset.contractAddress,
describable: describable,
);
}
} }

View File

@@ -1,18 +1,18 @@
import 'dart:async'; import 'dart:async';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:pshared/models/auth/state.dart';
import 'package:share_plus/share_plus.dart'; import 'package:share_plus/share_plus.dart';
import 'package:pshared/api/errors/unauthorized.dart'; import 'package:pshared/api/errors/unauthorized.dart';
import 'package:pshared/api/requests/signup.dart'; import 'package:pshared/api/requests/signup.dart';
import 'package:pshared/api/requests/login_data.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/config/constants.dart';
import 'package:pshared/models/account/account.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/login_outcome.dart';
import 'package:pshared/models/auth/pending_login.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/describable.dart';
import 'package:pshared/models/storable.dart'; import 'package:pshared/models/storable.dart';
import 'package:pshared/provider/locale.dart'; import 'package:pshared/provider/locale.dart';

View File

@@ -1,5 +1,7 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:collection/collection.dart';
import 'package:uuid/uuid.dart'; import 'package:uuid/uuid.dart';
import 'package:pshared/api/requests/payment/quote.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/intent.dart';
import 'package:pshared/models/payment/fx/side.dart'; import 'package:pshared/models/payment/fx/side.dart';
import 'package:pshared/models/payment/kind.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/methods/managed_wallet.dart';
import 'package:pshared/models/payment/money.dart'; import 'package:pshared/models/payment/money.dart';
import 'package:pshared/models/payment/settlement_mode.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/models/payment/quote.dart';
import 'package:pshared/provider/organizations.dart'; import 'package:pshared/provider/organizations.dart';
import 'package:pshared/provider/payment/amount.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/payment/wallets.dart';
import 'package:pshared/provider/recipient/pmethods.dart';
import 'package:pshared/provider/resource.dart'; import 'package:pshared/provider/resource.dart';
import 'package:pshared/service/payment/quotation.dart'; import 'package:pshared/service/payment/quotation.dart';
import 'package:pshared/utils/currency.dart'; import 'package:pshared/utils/currency.dart';
@@ -32,9 +35,13 @@ class QuotationProvider extends ChangeNotifier {
OrganizationsProvider venue, OrganizationsProvider venue,
PaymentAmountProvider payment, PaymentAmountProvider payment,
WalletsProvider wallets, WalletsProvider wallets,
PaymentFlowProvider flow,
PaymentMethodsProvider methods,
) { ) {
_organizations = venue; _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( getQuotation(PaymentIntent(
kind: PaymentKind.payout, kind: PaymentKind.payout,
amount: Money( amount: Money(
@@ -42,18 +49,14 @@ class QuotationProvider extends ChangeNotifier {
// TODO: adapt to possible other sources // TODO: adapt to possible other sources
currency: currencyCodeToString(wallets.selectedWallet!.currency), currency: currencyCodeToString(wallets.selectedWallet!.currency),
), ),
destination: CardPaymentMethod( destination: method.data,
pan: '4000000000000077',
firstName: 'John',
lastName: 'Doe',
),
source: ManagedWalletPaymentMethod( source: ManagedWalletPaymentMethod(
managedWalletRef: wallets.selectedWallet!.id, managedWalletRef: wallets.selectedWallet!.id,
), ),
fx: FxIntent( fx: FxIntent(
pair: CurrencyPair( pair: CurrencyPair(
base: currencyCodeToString(wallets.selectedWallet!.currency), base: currencyCodeToString(wallets.selectedWallet!.currency),
quote: 'RUB', quote: 'RUB', // TODO: exentd target currencies
), ),
side: FxSide.sellBaseBuyQuote, side: FxSide.sellBaseBuyQuote,
), ),

View File

@@ -4,8 +4,10 @@ import 'package:provider/provider.dart';
import 'package:pshared/provider/organizations.dart'; import 'package:pshared/provider/organizations.dart';
import 'package:pshared/provider/payment/amount.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/quotation.dart';
import 'package:pshared/provider/payment/wallets.dart'; import 'package:pshared/provider/payment/wallets.dart';
import 'package:pshared/provider/recipient/pmethods.dart';
import 'package:pweb/pages/dashboard/payouts/form.dart'; import 'package:pweb/pages/dashboard/payouts/form.dart';
@@ -19,9 +21,9 @@ class PaymentFromWrappingWidget extends StatelessWidget {
ChangeNotifierProvider( ChangeNotifierProvider(
create: (_) => PaymentAmountProvider(), create: (_) => PaymentAmountProvider(),
), ),
ChangeNotifierProxyProvider3<OrganizationsProvider, PaymentAmountProvider, WalletsProvider, QuotationProvider>( ChangeNotifierProxyProvider5<OrganizationsProvider, PaymentAmountProvider, WalletsProvider, PaymentFlowProvider, PaymentMethodsProvider, QuotationProvider>(
create: (_) => QuotationProvider(), 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(), child: const PaymentFormWidget(),

View File

@@ -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/methods/type.dart';
import 'package:pshared/models/payment/type.dart'; import 'package:pshared/models/payment/type.dart';
import 'package:pshared/models/recipient/recipient.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/pmethods.dart';
import 'package:pshared/provider/recipient/provider.dart'; import 'package:pshared/provider/recipient/provider.dart';
import 'package:pshared/models/payment/wallet.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:pweb/pages/payment_methods/payment_page/body.dart';
import 'package:pshared/provider/payment/wallets.dart'; import 'package:pshared/provider/payment/wallets.dart';
import 'package:pweb/widgets/sidebar/destinations.dart'; import 'package:pweb/widgets/sidebar/destinations.dart';

View File

@@ -6,6 +6,7 @@ import 'package:pshared/models/payment/methods/data.dart';
import 'package:pshared/models/recipient/recipient.dart'; import 'package:pshared/models/recipient/recipient.dart';
import 'package:pshared/provider/recipient/pmethods.dart'; import 'package:pshared/provider/recipient/pmethods.dart';
import 'package:pshared/provider/recipient/provider.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/back_button.dart';
import 'package:pweb/pages/payment_methods/payment_page/header.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/payment_info_section.dart';
import 'package:pweb/pages/payment_methods/widgets/recipient_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/pages/payment_methods/widgets/section_title.dart';
import 'package:pweb/providers/payment_flow.dart';
import 'package:pweb/utils/dimensions.dart'; import 'package:pweb/utils/dimensions.dart';
import 'package:pweb/widgets/sidebar/destinations.dart'; import 'package:pweb/widgets/sidebar/destinations.dart';

View File

@@ -6,6 +6,7 @@ import 'package:pshared/models/payment/methods/data.dart';
import 'package:pshared/models/recipient/recipient.dart'; import 'package:pshared/models/recipient/recipient.dart';
import 'package:pshared/provider/recipient/pmethods.dart'; import 'package:pshared/provider/recipient/pmethods.dart';
import 'package:pshared/provider/recipient/provider.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/dashboard/payouts/widget.dart';
import 'package:pweb/pages/payment_methods/payment_page/back_button.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/payment_info_section.dart';
import 'package:pweb/pages/payment_methods/widgets/recipient_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/pages/payment_methods/widgets/section_title.dart';
import 'package:pweb/providers/payment_flow.dart';
import 'package:pweb/utils/dimensions.dart'; import 'package:pweb/utils/dimensions.dart';
import 'package:pweb/widgets/sidebar/destinations.dart'; import 'package:pweb/widgets/sidebar/destinations.dart';

View File

@@ -3,10 +3,10 @@ import 'package:flutter/material.dart';
import 'package:pshared/models/payment/methods/data.dart'; import 'package:pshared/models/payment/methods/data.dart';
import 'package:pshared/models/payment/type.dart'; import 'package:pshared/models/payment/type.dart';
import 'package:pshared/models/recipient/recipient.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/form.dart';
import 'package:pweb/pages/payment_methods/widgets/section_title.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/dimensions.dart';
import 'package:pweb/utils/payment/selector_type.dart'; import 'package:pweb/utils/payment/selector_type.dart';