stacked bar graph, edit / remove transaction & budget page base
This commit is contained in:
@@ -14,6 +14,7 @@ import 'package:tunas/domains/account/models/transaction_line.dart';
|
||||
import 'package:tunas/domains/account/models/transaction_value.dart';
|
||||
import 'package:tunas/repositories/account/account_repository.dart';
|
||||
import 'package:tunas/repositories/account/models/transaction.dart';
|
||||
import 'package:uuid/uuid.dart';
|
||||
|
||||
part 'account_event.dart';
|
||||
part 'account_state.dart';
|
||||
@@ -24,7 +25,6 @@ class AccountBloc extends Bloc<AccountEvent, AccountState> {
|
||||
AccountBloc({required AccountRepository accountRepository})
|
||||
: _accountRepository = accountRepository,
|
||||
super(const AccountState()) {
|
||||
on<AccountAddTransaction>(_onTransactionAdd);
|
||||
on<AccountLoad>(_onAccountLoad);
|
||||
on<AccountImportJSON>(_onAccountImportJSON);
|
||||
on<AccountImportCSV>(_onAccountImportCSV);
|
||||
@@ -38,23 +38,14 @@ class AccountBloc extends Bloc<AccountEvent, AccountState> {
|
||||
on<TransactionOpenAddDialog>(_onTransactionOpenAddDialog);
|
||||
on<TransactionHideAddDialog>(_onTransactionHideAddDialog);
|
||||
on<TransactionAdd>(_onTransactionAddDialog);
|
||||
on<TransactionSetCurrent>(_onTransactionSetCurrent);
|
||||
on<TransactionDeleteCurrent>(_onTransactionDeleteCurrent);
|
||||
|
||||
_accountRepository
|
||||
.getTransactionsStream()
|
||||
.listen((transactions) => add(AccountLoad(transactions)));
|
||||
}
|
||||
|
||||
_onTransactionAdd(AccountAddTransaction event, Emitter<AccountState> emit) {
|
||||
state.transactions.add(event.transaction);
|
||||
var computeResult = _computeTransactionLine(state.transactions);
|
||||
|
||||
emit(state.copyWith(
|
||||
transactionsLines: computeResult.list,
|
||||
globalTotal: computeResult.globalTotal,
|
||||
accountsTotals: computeResult.accountsTotals,
|
||||
));
|
||||
}
|
||||
|
||||
_onAccountLoad(AccountLoad event, Emitter<AccountState> emit) {
|
||||
var computeResult = _computeTransactionLine(event.transactions);
|
||||
emit(state.copyWith(
|
||||
@@ -78,6 +69,7 @@ class AccountBloc extends Bloc<AccountEvent, AccountState> {
|
||||
|
||||
final transactions = csvList
|
||||
.map((line) => Transaction(
|
||||
uuid: const Uuid().v8(),
|
||||
date: DateTime.parse(line[0]),
|
||||
category: line[1],
|
||||
description: line[2],
|
||||
@@ -200,18 +192,83 @@ class AccountBloc extends Bloc<AccountEvent, AccountState> {
|
||||
|
||||
_onTransactionAddDialog(
|
||||
TransactionAdd event, Emitter<AccountState> emit
|
||||
) {
|
||||
) async {
|
||||
if (state.isValid) {
|
||||
state.transactions.add(Transaction(
|
||||
List<Transaction> transactions = state.transactions;
|
||||
Transaction? currentTransaction = state.currentTransaction;
|
||||
if (currentTransaction != null) {
|
||||
transactions.removeWhere((transaction) => transaction.uuid == currentTransaction.uuid);
|
||||
}
|
||||
|
||||
transactions.add(Transaction(
|
||||
uuid: const Uuid().v8(),
|
||||
date: state.transactionDate.value ?? DateTime.now(),
|
||||
category: state.transactionCategory.value,
|
||||
description: state.transactionDescription.value,
|
||||
account: state.transactionAccount.value,
|
||||
value: state.transactionValue.value
|
||||
));
|
||||
var computeResult = _computeTransactionLine(state.transactions);
|
||||
final computeResult = _computeTransactionLine(transactions);
|
||||
|
||||
await _accountRepository.saveTransactions(transactions);
|
||||
|
||||
emit(state.copyWith(
|
||||
currentTransaction: null,
|
||||
transactionDate: const TransactionDate.pure(),
|
||||
transactionCategory: const TransactionCategory.pure(),
|
||||
transactionDescription: const TransactionDescription.pure(),
|
||||
transactionAccount: const TransactionAccount.pure(),
|
||||
transactionValue: const TransactionValue.pure(),
|
||||
transactions: transactions,
|
||||
transactionsLines: computeResult.list,
|
||||
globalTotal: computeResult.globalTotal,
|
||||
accountsTotals: computeResult.accountsTotals,
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
_onTransactionSetCurrent(
|
||||
TransactionSetCurrent event, Emitter<AccountState> emit
|
||||
) {
|
||||
Transaction? transaction = event.transaction;
|
||||
if (transaction == null) {
|
||||
emit(state.copyWith(
|
||||
currentTransaction: event.transaction,
|
||||
transactionDate: const TransactionDate.pure(),
|
||||
transactionCategory: const TransactionCategory.pure(),
|
||||
transactionDescription: const TransactionDescription.pure(),
|
||||
transactionAccount: const TransactionAccount.pure(),
|
||||
transactionValue: const TransactionValue.pure(),
|
||||
));
|
||||
} else {
|
||||
emit(state.copyWith(
|
||||
currentTransaction: transaction,
|
||||
transactionDate: TransactionDate.dirty(transaction.date),
|
||||
transactionCategory: TransactionCategory.dirty(transaction.category),
|
||||
transactionDescription: TransactionDescription.dirty(transaction.description),
|
||||
transactionAccount: TransactionAccount.dirty(transaction.account),
|
||||
transactionValue: TransactionValue.dirty(transaction.value),
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
_onTransactionDeleteCurrent(
|
||||
TransactionDeleteCurrent event, Emitter<AccountState> emit
|
||||
) async {
|
||||
Transaction? currentTransaction = state.currentTransaction;
|
||||
if (currentTransaction != null) {
|
||||
List<Transaction> transactions = state.transactions;
|
||||
transactions.removeWhere((transaction) => transaction.uuid == currentTransaction.uuid);
|
||||
final computeResult = _computeTransactionLine(transactions);
|
||||
await _accountRepository.saveTransactions(transactions);
|
||||
emit(state.copyWith(
|
||||
currentTransaction: null,
|
||||
transactionDate: const TransactionDate.pure(),
|
||||
transactionCategory: const TransactionCategory.pure(),
|
||||
transactionDescription: const TransactionDescription.pure(),
|
||||
transactionAccount: const TransactionAccount.pure(),
|
||||
transactionValue: const TransactionValue.pure(),
|
||||
transactions: transactions,
|
||||
transactionsLines: computeResult.list,
|
||||
globalTotal: computeResult.globalTotal,
|
||||
accountsTotals: computeResult.accountsTotals,
|
||||
|
||||
Reference in New Issue
Block a user