small fixes

This commit is contained in:
Arseni
2026-02-17 11:17:19 +03:00
parent 0eea39fb97
commit e2e2257167
13 changed files with 120 additions and 58 deletions

View File

@@ -1,3 +1,5 @@
import 'package:pshared/utils/money.dart';
import 'package:pweb/models/multiple_payouts/csv_row.dart';
@@ -79,8 +81,8 @@ class MultipleCsvParser {
throw FormatException('CSV row ${i + 1}: amount is required');
}
final parsedAmount = double.tryParse(amount);
if (parsedAmount == null || parsedAmount <= 0) {
final parsedAmount = parseMoneyAmount(amount, fallback: double.nan);
if (parsedAmount.isNaN || parsedAmount <= 0) {
throw FormatException(
'CSV row ${i + 1}: amount must be greater than 0',
);

View File

@@ -1,6 +1,9 @@
import 'package:pshared/models/payment/operation.dart';
import 'package:pshared/models/payment/payment.dart';
import 'package:pshared/models/payment/status.dart';
import 'package:pshared/utils/money.dart';
import 'package:pweb/models/payment_state.dart';
OperationItem mapPaymentToOperation(Payment payment) {
@@ -8,9 +11,11 @@ OperationItem mapPaymentToOperation(Payment payment) {
final settlement = payment.lastQuote?.expectedSettlementAmount;
final amountMoney = debit ?? settlement;
final amount = _parseAmount(amountMoney?.amount);
final amount = parseMoneyAmount(amountMoney?.amount);
final currency = amountMoney?.currency ?? '';
final toAmount = settlement == null ? amount : _parseAmount(settlement.amount);
final toAmount = settlement == null
? amount
: parseMoneyAmount(settlement.amount);
final toCurrency = settlement?.currency ?? currency;
final payId = _firstNonEmpty([
@@ -48,14 +53,15 @@ OperationItem mapPaymentToOperation(Payment payment) {
}
OperationStatus statusFromPayment(Payment payment) {
final normalized = _normalizePaymentState(payment.state);
switch (normalized) {
case 'SUCCESS':
final state = paymentStateFromRaw(payment.state);
switch (state) {
case PaymentState.success:
return OperationStatus.success;
case 'FAILED':
case 'CANCELLED':
case PaymentState.failed:
case PaymentState.cancelled:
return OperationStatus.error;
default:
case PaymentState.processing:
case PaymentState.unknown:
return OperationStatus.processing;
}
}
@@ -102,16 +108,3 @@ String? _firstNonEmpty(List<String?> values) {
}
return null;
}
String _normalizePaymentState(String? raw) {
final trimmed = (raw ?? '').trim().toUpperCase();
if (trimmed.startsWith('PAYMENT_STATE_')) {
return trimmed.substring('PAYMENT_STATE_'.length);
}
return trimmed;
}
double _parseAmount(String? amount) {
if (amount == null || amount.trim().isEmpty) return 0;
return double.tryParse(amount) ?? 0;
}

View File

@@ -0,0 +1,37 @@
import 'package:flutter/material.dart';
import 'package:pshared/models/money.dart';
import 'package:pshared/utils/currency.dart';
import 'package:pshared/utils/localization.dart';
import 'package:intl/intl.dart';
String formatMoney(Money? money, {String fallback = '-'}) {
final amount = money?.amount.trim();
if (amount == null || amount.isEmpty) return fallback;
return '$amount ${money!.currency}';
}
String formatAmount(double amount, String currency, {String fallback = '-'}) {
final trimmed = currency.trim();
if (trimmed.isEmpty) return amountToString(amount);
final symbol = currencySymbolFromCode(trimmed);
final suffix = symbol ?? trimmed;
return '${amountToString(amount)} $suffix';
}
String formatDateLabel(BuildContext context, DateTime? date, {String fallback = '-'}) {
if (date == null || date.millisecondsSinceEpoch == 0) return fallback;
return dateTimeToLocalFormat(context, date.toLocal());
}
String formatLongDate(BuildContext context, DateTime? date, {String fallback = '-'}) {
if (date == null || date.millisecondsSinceEpoch == 0) return fallback;
final locale = Localizations.localeOf(context).toString();
final formatter = DateFormat('d MMMM y', locale);
return formatter.format(date.toLocal());
}
String collapseWhitespace(String value) {
return value.replaceAll(RegExp(r'\s+'), ' ').trim();
}