import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:pshared/models/payment/operation.dart'; import 'package:pshared/models/payment/status.dart'; import 'package:pshared/provider/organizations.dart'; import 'package:pshared/service/payment/documents.dart'; import 'package:pshared/utils/currency.dart'; import 'package:pweb/generated/i18n/app_localizations.dart'; import 'package:pweb/pages/report/table/badge.dart'; import 'package:pweb/utils/download.dart'; import 'package:pweb/utils/error/snackbar.dart'; class OperationRow { static DataRow build(OperationItem op, BuildContext context) { final isUnknownDate = op.date.millisecondsSinceEpoch == 0; final localDate = op.date.toLocal(); final loc = AppLocalizations.of(context)!; final dateLabel = isUnknownDate ? '-' : '${TimeOfDay.fromDateTime(localDate).format(context)}\n' '${localDate.toIso8601String().split("T").first}'; final canDownload = op.status == OperationStatus.success && (op.paymentRef ?? '').trim().isNotEmpty; final documentCell = canDownload ? TextButton.icon( onPressed: () => _downloadAct(context, op), icon: const Icon(Icons.download), label: Text(loc.downloadAct), ) : Text(op.fileName ?? ''); return DataRow(cells: [ DataCell(OperationStatusBadge(status: op.status)), DataCell(documentCell), DataCell(Text('${amountToString(op.amount)} ${op.currency}')), DataCell(Text('${amountToString(op.toAmount)} ${op.toCurrency}')), DataCell(Text(op.payId)), DataCell(Text(op.cardNumber ?? '-')), DataCell(Text(op.name)), DataCell(Text(dateLabel)), DataCell(Text(op.comment)), ]); } static Future _downloadAct(BuildContext context, OperationItem op) async { final organizations = context.read(); if (!organizations.isOrganizationSet) { return; } final paymentRef = (op.paymentRef ?? '').trim(); if (paymentRef.isEmpty) { return; } final loc = AppLocalizations.of(context)!; await executeActionWithNotification( context: context, action: () async { final file = await PaymentDocumentsService.getAct( organizations.current.id, paymentRef, ); await downloadFile(file); }, errorMessage: loc.downloadActError, ); } }