From ec288877401d47d9c47406b806339ecc3c2586c7 Mon Sep 17 00:00:00 2001 From: Hillel Coren Date: Wed, 14 Sep 2022 16:06:15 +0300 Subject: [PATCH] Bank transactions --- lib/data/models/transaction_model.dart | 10 +++-- lib/ui/transaction/transaction_presenter.dart | 45 +++++++++++++++++-- lib/utils/strings.dart | 4 ++ stubs/ui/stub/stub_presenter | 2 +- 4 files changed, 54 insertions(+), 7 deletions(-) diff --git a/lib/data/models/transaction_model.dart b/lib/data/models/transaction_model.dart index 36a715722..96481b162 100644 --- a/lib/data/models/transaction_model.dart +++ b/lib/data/models/transaction_model.dart @@ -49,10 +49,14 @@ class TransactionFields { static const String date = 'date'; static const String amount = 'amount'; static const String currencyId = 'currency_id'; + static const String currency = 'currency'; static const String category = 'category'; static const String bankAccountId = 'bank_account_id'; + static const String bankAccount = 'bank_account'; static const String invoiceId = 'invoice_id'; + static const String invoice = 'invoice'; static const String expenseId = 'expense_id'; + static const String expense = 'expense'; } abstract class TransactionEntity extends Object @@ -195,13 +199,13 @@ abstract class TransactionEntity extends Object } @override - String get listDisplayName => null; + String get listDisplayName => description; @override - double get listDisplayAmount => null; + double get listDisplayAmount => amount; @override - FormatNumberType get listDisplayAmountType => null; + FormatNumberType get listDisplayAmountType => FormatNumberType.money; // ignore: unused_element static void _initializeBuilder(TransactionEntityBuilder builder) => builder diff --git a/lib/ui/transaction/transaction_presenter.dart b/lib/ui/transaction/transaction_presenter.dart index e290a2e8b..a69971908 100644 --- a/lib/ui/transaction/transaction_presenter.dart +++ b/lib/ui/transaction/transaction_presenter.dart @@ -1,25 +1,64 @@ import 'package:flutter/material.dart'; +import 'package:flutter_redux/flutter_redux.dart'; import 'package:invoiceninja_flutter/data/models/models.dart'; +import 'package:invoiceninja_flutter/redux/app/app_state.dart'; +import 'package:invoiceninja_flutter/ui/app/link_text.dart'; import 'package:invoiceninja_flutter/ui/app/presenters/entity_presenter.dart'; +import 'package:invoiceninja_flutter/utils/formatting.dart'; +import 'package:invoiceninja_flutter/utils/strings.dart'; class TransactionPresenter extends EntityPresenter { static List getDefaultTableFields(UserCompanyEntity userCompany) { - return []; + return [ + TransactionFields.date, + TransactionFields.amount, + TransactionFields.category, + TransactionFields.description, + TransactionFields.bankAccount, + TransactionFields.invoice, + TransactionFields.expense, + ]; } static List getAllTableFields(UserCompanyEntity userCompany) { return [ ...getDefaultTableFields(userCompany), ...EntityPresenter.getBaseFields(), + TransactionFields.currency, ]; } @override Widget getField({String field, BuildContext context}) { - //final state = StoreProvider.of(context).state; - //final transaction = entity as InvoiceEntity; + final state = StoreProvider.of(context).state; + final transaction = entity as TransactionEntity; switch (field) { + case TransactionFields.date: + return Text(formatDate(transaction.date, context)); + case TransactionFields.amount: + return Align( + alignment: Alignment.centerRight, + child: Text(formatNumber(transaction.amount, context, + currencyId: transaction.currencyId)), + ); + case TransactionFields.category: + return Text(toTitleCase(transaction.category.toLowerCase())); + case TransactionFields.description: + return Text(transaction.description); + case TransactionFields.bankAccount: + final bankAccount = + state.bankAccountState.get(transaction.bankAccountId); + return LinkTextRelatedEntity( + entity: bankAccount, relation: transaction); + case TransactionFields.invoice: + final invoice = state.invoiceState.get(transaction.invoiceId); + return LinkTextRelatedEntity(entity: invoice, relation: transaction); + case TransactionFields.expense: + final expense = state.expenseState.get(transaction.expenseId); + return LinkTextRelatedEntity(entity: expense, relation: transaction); + case TransactionFields.currency: + return Text(state.bankAccountState.get(transaction.bankAccountId).name); } return super.getField(field: field, context: context); diff --git a/lib/utils/strings.dart b/lib/utils/strings.dart index 43939cc35..d18a9e8a4 100644 --- a/lib/utils/strings.dart +++ b/lib/utils/strings.dart @@ -56,6 +56,10 @@ String toTitleCase(String text) { return 'URL'; } + if (word.length <= 1) { + return word; + } + final first = word.substring(0, 1).toUpperCase(); final rest = word.substring(1); return '$first$rest'; diff --git a/stubs/ui/stub/stub_presenter b/stubs/ui/stub/stub_presenter index e9c6309f6..89135b5fa 100644 --- a/stubs/ui/stub/stub_presenter +++ b/stubs/ui/stub/stub_presenter @@ -20,7 +20,7 @@ class StubPresenter extends EntityPresenter { @override Widget getField({String field, BuildContext context}) { //final state = StoreProvider.of(context).state; - //final stub = entity as InvoiceEntity; + //final stub = entity as StubEntity; switch (field) { }