diff --git a/client/cashcompass_hook/lib/src/chart_of_accounts.dart/chart_of_accounts.dart b/client/cashcompass_hook/lib/src/chart_of_accounts.dart/chart_of_accounts.dart index 2e29112..0b1ee1d 100644 --- a/client/cashcompass_hook/lib/src/chart_of_accounts.dart/chart_of_accounts.dart +++ b/client/cashcompass_hook/lib/src/chart_of_accounts.dart/chart_of_accounts.dart @@ -1,6 +1,15 @@ import 'package:cashcompass_hook/src/accounts/active_account/active_account.dart'; import 'package:cashcompass_hook/src/accounts/category/category.dart'; +import 'package:cashcompass_hook/src/chart_of_accounts.dart/data.dart'; import 'package:cashcompass_hook/src/data_storage/accout_manager.dart'; +import 'package:cashcompass_hook/src/transactions/transactions/transaction.dart'; + +class CategoryAndTransactions { + final Category category; + final List soll, haben; + CategoryAndTransactions( + {required this.category, required this.haben, required this.soll}); +} class ChartOfAccounts { final Accountmanager _accountmanager; @@ -13,6 +22,58 @@ class ChartOfAccounts { .toList(); } + List getCategoriesAndTransaktions() { + var cates = _accountmanager.getAllCategories(); + var ret = []; + for (Category i in cates) { + ret.add( + CategoryAndTransactions(category: i, haben: i.habenT, soll: i.sollT)); + } + return ret; + } + + Map> getExpencesPerCategory(Category? category) { + Map> ret = {}; + Iterable categories = _accountmanager + .getAllCategories() + .where((cate) => category == null ? true : cate == category); + + for (var category in categories) { + var e = category.sollT.map((elem) => Expense(elem, category)); + if (e.isNotEmpty) { + ret[category] = e; + } + } + return ret; + } + + Map> getIncomePerCategory(Category? category) { + Map> ret = {}; + Iterable categories = _accountmanager + .getAllCategories() + .where((cate) => category == null ? true : cate == category); + + for (var category in categories) { + var e = category.sollT.map((elem) => Income(elem, category)); + if (e.isNotEmpty) { + ret[category] = e; + } + } + return ret; + } + + List getAllTransactionsRealtedToCategories() { + List ret = []; + ret.addAll(_accountmanager.getAllCategories().expand((cate) => cate.habenT + .map((transaction) => + TransactionInfo(TransactionTypes.expense, transaction, cate)))); + + ret.addAll(_accountmanager.getAllCategories().expand((cate) => cate.sollT + .map((transaction) => + TransactionInfo(TransactionTypes.income, transaction, cate)))); + return ret; + } + List getActiveAccounts( {bool Function(ActiveAccount)? matcher}) { return _accountmanager diff --git a/client/cashcompass_hook/lib/src/chart_of_accounts.dart/data.dart b/client/cashcompass_hook/lib/src/chart_of_accounts.dart/data.dart new file mode 100644 index 0000000..cf1f9cc --- /dev/null +++ b/client/cashcompass_hook/lib/src/chart_of_accounts.dart/data.dart @@ -0,0 +1,34 @@ +import 'package:cashcompass_hook/src/accounts/category/category.dart'; +import 'package:cashcompass_hook/src/transactions/transactions/transaction.dart'; + +class Income { + final Transaction transaction; + final Category category; + Income(this.transaction, this.category); + String get icon => category.iconString; + DateTime get timestamp => transaction.timestamp; +} + +class Expense { + final Transaction transaction; + final Category category; + Expense(this.transaction, this.category); + String get icon => category.iconString; + DateTime get timestamp => transaction.timestamp; +} + +enum TransactionTypes { + expense, + income; +} + +class TransactionInfo { + final TransactionTypes transactionType; + final Transaction transcation; + final Category category; + TransactionInfo(this.transactionType, this.transcation, this.category); + double get amount => transcation.amount; + String get label => transcation.label; + String get walletName => category.name; + String get icon => category.iconString; +} diff --git a/client/cashcompass_hook/lib/src/connector/sync_controller.dart b/client/cashcompass_hook/lib/src/connector/sync_controller.dart index 18b94ef..52876d5 100644 --- a/client/cashcompass_hook/lib/src/connector/sync_controller.dart +++ b/client/cashcompass_hook/lib/src/connector/sync_controller.dart @@ -26,8 +26,9 @@ class SyncController implements DataAdapter { @override Future getInitialPull(Accountmanager accountmanager) async { - var remote = - _remoteStorage.getInitialPull(accountmanager).timeout(const Duration(seconds: 5)); + var remote = _remoteStorage + .getInitialPull(accountmanager) + .timeout(const Duration(seconds: 5)); var local = _localStorage.getInitialPull(accountmanager); InitialPullData? localData, remoteData; try {