small fixes for single payout and big chunck for multiple payouts
This commit is contained in:
71
frontend/pweb/lib/controllers/payment_page.dart
Normal file
71
frontend/pweb/lib/controllers/payment_page.dart
Normal file
@@ -0,0 +1,71 @@
|
||||
import 'package:flutter/foundation.dart';
|
||||
|
||||
import 'package:pshared/provider/payment/flow.dart';
|
||||
import 'package:pshared/provider/payment/provider.dart';
|
||||
import 'package:pshared/provider/payment/quotation/quotation.dart';
|
||||
import 'package:pshared/provider/recipient/provider.dart';
|
||||
|
||||
|
||||
class PaymentPageController extends ChangeNotifier {
|
||||
PaymentProvider? _payment;
|
||||
QuotationProvider? _quotation;
|
||||
PaymentFlowProvider? _flow;
|
||||
RecipientsProvider? _recipients;
|
||||
|
||||
bool _isSending = false;
|
||||
Exception? _error;
|
||||
|
||||
bool get isSending => _isSending;
|
||||
Exception? get error => _error;
|
||||
|
||||
void update(
|
||||
PaymentProvider payment,
|
||||
QuotationProvider quotation,
|
||||
PaymentFlowProvider flow,
|
||||
RecipientsProvider recipients,
|
||||
) {
|
||||
_payment = payment;
|
||||
_quotation = quotation;
|
||||
_flow = flow;
|
||||
_recipients = recipients;
|
||||
}
|
||||
|
||||
Future<bool> sendPayment() async {
|
||||
if (_isSending) return false;
|
||||
final payment = _payment;
|
||||
if (payment == null) {
|
||||
_setError(StateError('Payment provider is not ready'));
|
||||
return false;
|
||||
}
|
||||
|
||||
try {
|
||||
_setSending(true);
|
||||
_error = null;
|
||||
final result = await payment.pay();
|
||||
return result != null && payment.error == null;
|
||||
} catch (e) {
|
||||
_setError(e);
|
||||
return false;
|
||||
} finally {
|
||||
_setSending(false);
|
||||
}
|
||||
}
|
||||
|
||||
void resetAfterSuccess() {
|
||||
_quotation?.reset();
|
||||
_payment?.reset();
|
||||
_flow?.setManualPaymentData(null);
|
||||
_recipients?.setCurrentObject(null);
|
||||
}
|
||||
|
||||
void _setSending(bool value) {
|
||||
if (_isSending == value) return;
|
||||
_isSending = value;
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
void _setError(Object error) {
|
||||
_error = error is Exception ? error : Exception(error.toString());
|
||||
notifyListeners();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user