WIP: integration with ledger

This commit is contained in:
Arseni
2026-02-04 02:01:22 +03:00
parent f1f16a30e6
commit f44ef56ff3
32 changed files with 1226 additions and 405 deletions

View File

@@ -5,6 +5,8 @@ import 'package:go_router/go_router.dart';
import 'package:provider/provider.dart';
import 'package:pshared/controllers/balance_mask/wallets.dart';
import 'package:pshared/controllers/payment/source.dart';
import 'package:pshared/models/payment/source.dart';
import 'package:pshared/models/payment/type.dart';
import 'package:pshared/models/recipient/recipient.dart';
import 'package:pshared/provider/organizations.dart';
@@ -26,6 +28,7 @@ import 'package:pweb/pages/dashboard/dashboard.dart';
import 'package:pweb/pages/invitations/page.dart';
import 'package:pweb/pages/payment_methods/page.dart';
import 'package:pweb/pages/payout_page/page.dart';
import 'package:pweb/pages/payout_page/wallet/edit/ledger_page.dart';
import 'package:pweb/pages/payout_page/wallet/edit/page.dart';
import 'package:pweb/pages/report/page.dart';
import 'package:pweb/pages/settings/profile/page.dart';
@@ -42,45 +45,80 @@ import 'package:pweb/generated/i18n/app_localizations.dart';
RouteBase payoutShellRoute() => ShellRoute(
builder: (context, state, child) => MultiProvider(
providers: [
ChangeNotifierProxyProvider2<OrganizationsProvider, RecipientsProvider, PaymentMethodsProvider>(
ChangeNotifierProxyProvider2<
OrganizationsProvider,
RecipientsProvider,
PaymentMethodsProvider
>(
create: (_) => PaymentMethodsProvider(),
update: (context, organizations, recipients, provider) => provider!..updateProviders(organizations, recipients),
update: (context, organizations, recipients, provider) =>
provider!..updateProviders(organizations, recipients),
),
ChangeNotifierProxyProvider2<OrganizationsProvider, RecipientsProvider, RecipientMethodsCacheProvider>(
ChangeNotifierProxyProvider2<
OrganizationsProvider,
RecipientsProvider,
RecipientMethodsCacheProvider
>(
create: (_) => RecipientMethodsCacheProvider(),
update: (context, organizations, recipients, provider) => provider!..updateProviders(organizations, recipients),
update: (context, organizations, recipients, provider) =>
provider!..updateProviders(organizations, recipients),
),
ChangeNotifierProxyProvider2<RecipientsProvider, PaymentMethodsProvider, PaymentFlowProvider>(
create: (_) => PaymentFlowProvider(initialType: enabledPaymentTypes.first),
update: (context, recipients, methods, provider) => provider!..update(
ChangeNotifierProxyProvider2<
RecipientsProvider,
PaymentMethodsProvider,
PaymentFlowProvider
>(
create: (_) =>
PaymentFlowProvider(initialType: enabledPaymentTypes.first),
update: (context, recipients, methods, provider) =>
provider!..update(recipients, methods),
),
ChangeNotifierProvider(create: (_) => PaymentAmountProvider()),
ChangeNotifierProxyProvider6<
OrganizationsProvider,
PaymentAmountProvider,
PaymentSourceController,
PaymentFlowProvider,
RecipientsProvider,
PaymentMethodsProvider,
QuotationProvider
>(
create: (_) => QuotationProvider(),
update:
(
_,
organization,
payment,
sources,
flow,
recipients,
methods,
provider,
) => provider!
..update(
organization,
payment,
sources,
flow,
recipients,
methods,
),
),
ChangeNotifierProvider(
create: (_) => PaymentAmountProvider(),
),
ChangeNotifierProxyProvider6<OrganizationsProvider, PaymentAmountProvider, WalletsController, PaymentFlowProvider, RecipientsProvider, PaymentMethodsProvider, QuotationProvider>(
create: (_) => QuotationProvider(),
update: (_, organization, payment, wallet, flow, recipients, methods, provider) =>
provider!..update(organization, payment, wallet, flow, recipients, methods),
),
ChangeNotifierProxyProvider<QuotationProvider, QuotationController>(
create: (_) => QuotationController(),
update: (_, quotation, controller) => controller!..update(quotation),
),
ChangeNotifierProxyProvider2<OrganizationsProvider, QuotationProvider, PaymentProvider>(
ChangeNotifierProxyProvider2<
OrganizationsProvider,
QuotationProvider,
PaymentProvider
>(
create: (_) => PaymentProvider(),
update: (context, organization, quotation, provider) => provider!..update(
organization,
quotation,
),
update: (context, organization, quotation, provider) =>
provider!..update(organization, quotation),
),
],
child: PageSelector(
child: child,
routerState: state,
),
child: PageSelector(child: child, routerState: state),
),
routes: [
GoRoute(
@@ -206,6 +244,11 @@ RouteBase payoutShellRoute() => ShellRoute(
wallet,
returnTo: PayoutDestination.methods,
),
onLedgerTap: (ledgerAccountRef) => _openLedgerEdit(
context,
ledgerAccountRef,
returnTo: PayoutDestination.methods,
),
),
),
),
@@ -213,8 +256,7 @@ RouteBase payoutShellRoute() => ShellRoute(
name: PayoutRoutes.editWallet,
path: PayoutRoutes.editWalletPath,
pageBuilder: (context, state) {
final walletsProvider = context.read<WalletsController>();
final wallet = walletsProvider.selectedWallet;
final source = context.read<PaymentSourceController>().selectedSource;
final loc = AppLocalizations.of(context)!;
final fallbackDestination = PayoutRoutes.fallbackFromState(
state,
@@ -222,11 +264,15 @@ RouteBase payoutShellRoute() => ShellRoute(
);
return NoTransitionPage(
child: wallet != null
? WalletEditPage(
child: switch (source?.type) {
PaymentSourceType.wallet => WalletEditPage(
onBack: () => _popOrGo(context, fallbackDestination),
)
: Center(child: Text(loc.noWalletSelected)),
),
PaymentSourceType.ledger => LedgerEditPage(
onBack: () => _popOrGo(context, fallbackDestination),
),
null => Center(child: Text(loc.noWalletSelected)),
},
);
},
),
@@ -256,16 +302,10 @@ void _startPayment(
required PayoutDestination returnTo,
}) {
context.read<RecipientsProvider>().setCurrentObject(recipient?.id);
context.pushToPayment(
paymentType: paymentType,
returnTo: returnTo,
);
context.pushToPayment(paymentType: paymentType, returnTo: returnTo);
}
void _openAddRecipient(
BuildContext context, {
Recipient? recipient,
}) {
void _openAddRecipient(BuildContext context, {Recipient? recipient}) {
context.read<RecipientsProvider>().setCurrentObject(recipient?.id);
context.pushNamed(PayoutRoutes.addRecipient);
}
@@ -276,6 +316,16 @@ void _openWalletEdit(
required PayoutDestination returnTo,
}) {
context.read<WalletsController>().selectWallet(wallet);
context.read<PaymentSourceController>().selectWalletByRef(wallet.id);
context.pushToEditWallet(returnTo: returnTo);
}
void _openLedgerEdit(
BuildContext context,
String ledgerAccountRef, {
required PayoutDestination returnTo,
}) {
context.read<PaymentSourceController>().selectLedgerByRef(ledgerAccountRef);
context.pushToEditWallet(returnTo: returnTo);
}
@@ -285,6 +335,7 @@ void _openWalletTopUp(
required PayoutDestination returnTo,
}) {
context.read<WalletsController>().selectWallet(wallet);
context.read<PaymentSourceController>().selectWalletByRef(wallet.id);
context.pushToWalletTopUp(returnTo: returnTo);
}