small fixes for single payout and big chunck for multiple payouts

This commit is contained in:
Arseni
2026-02-05 21:58:37 +03:00
parent 8034847e46
commit b9748b8ab2
37 changed files with 1708 additions and 224 deletions

View File

@@ -10,6 +10,8 @@ import 'package:pshared/models/recipient/recipient.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/multiple/provider.dart';
import 'package:pshared/provider/payment/multiple/quotation.dart';
import 'package:pshared/provider/payment/provider.dart';
import 'package:pshared/provider/payment/quotation/quotation.dart';
import 'package:pshared/provider/recipient/provider.dart';
@@ -18,6 +20,8 @@ import 'package:pshared/provider/recipient/pmethods.dart';
import 'package:pweb/app/router/pages.dart';
import 'package:pweb/app/router/payout_routes.dart';
import 'package:pweb/controllers/multiple_payouts.dart';
import 'package:pweb/controllers/payment_page.dart';
import 'package:pweb/providers/quotation/quotation.dart';
import 'package:pshared/models/payment/wallet.dart';
import 'package:pweb/pages/address_book/form/page.dart';
@@ -34,52 +38,126 @@ import 'package:pweb/widgets/error/snackbar.dart';
import 'package:pweb/widgets/sidebar/destinations.dart';
import 'package:pweb/widgets/sidebar/page.dart';
import 'package:pweb/utils/payment/availability.dart';
import 'package:pweb/services/payments/csv_input.dart';
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(
recipients,
methods,
),
ChangeNotifierProxyProvider2<
RecipientsProvider,
PaymentMethodsProvider,
PaymentFlowProvider
>(
create: (_) =>
PaymentFlowProvider(initialType: enabledPaymentTypes.first),
update: (context, recipients, methods, provider) =>
provider!..update(recipients, methods),
),
ChangeNotifierProvider(
create: (_) => PaymentAmountProvider(),
),
ChangeNotifierProxyProvider6<OrganizationsProvider, PaymentAmountProvider, WalletsController, PaymentFlowProvider, RecipientsProvider, PaymentMethodsProvider, QuotationProvider>(
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),
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),
),
ChangeNotifierProxyProvider4<
PaymentProvider,
QuotationProvider,
PaymentFlowProvider,
RecipientsProvider,
PaymentPageController
>(
create: (_) => PaymentPageController(),
update: (context, payment, quotation, flow, recipients, controller) =>
controller!..update(payment, quotation, flow, recipients),
),
ChangeNotifierProxyProvider<
OrganizationsProvider,
MultiQuotationProvider
>(
create: (_) => MultiQuotationProvider(),
update: (context, organization, provider) =>
provider!..update(organization),
),
ChangeNotifierProxyProvider2<
OrganizationsProvider,
MultiQuotationProvider,
MultiPaymentProvider
>(
create: (_) => MultiPaymentProvider(),
update: (context, organization, quotation, provider) =>
provider!..update(organization, quotation),
),
ChangeNotifierProxyProvider3<
WalletsController,
MultiQuotationProvider,
MultiPaymentProvider,
MultiplePayoutsController
>(
create: (_) =>
MultiplePayoutsController(csvInput: WebCsvInputService()),
update: (context, wallets, quotation, payment, provider) =>
provider!..update(wallets, quotation, payment),
),
],
child: PageSelector(
child: child,
routerState: state,
),
child: PageSelector(child: child, routerState: state),
),
routes: [
GoRoute(
@@ -135,11 +213,11 @@ RouteBase payoutShellRoute() => ShellRoute(
);
if (!confirmed) return;
await executeActionWithNotification(
context: context,
action: () async =>
context.read<RecipientsProvider>().delete(recipient.id),
successMessage: loc.recipientDeletedSuccessfully,
errorMessage: loc.errorDeleteRecipient,
context: context,
action: () async =>
context.read<RecipientsProvider>().delete(recipient.id),
successMessage: loc.recipientDeletedSuccessfully,
errorMessage: loc.errorDeleteRecipient,
);
},
),
@@ -149,9 +227,7 @@ RouteBase payoutShellRoute() => ShellRoute(
GoRoute(
name: PayoutRoutes.invitations,
path: PayoutRoutes.invitationsPath,
pageBuilder: (_, _) => const NoTransitionPage(
child: InvitationsPage(),
),
pageBuilder: (_, _) => const NoTransitionPage(child: InvitationsPage()),
),
GoRoute(
name: PayoutRoutes.addRecipient,
@@ -187,9 +263,8 @@ RouteBase payoutShellRoute() => ShellRoute(
GoRoute(
name: PayoutRoutes.settings,
path: PayoutRoutes.settingsPath,
pageBuilder: (_, _) => const NoTransitionPage(
child: ProfileSettingsPage(),
),
pageBuilder: (_, _) =>
const NoTransitionPage(child: ProfileSettingsPage()),
),
GoRoute(
name: PayoutRoutes.reports,
@@ -249,16 +324,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);
}