Compare commits

..

No commits in common. "121d0ec236b0148d67e146ed8491106c7a7bd7f2" and "c4f7d5745aa7f010ac78711fb241692d3d553b0e" have entirely different histories.

8 changed files with 54 additions and 48 deletions

View File

@ -179,19 +179,10 @@ class OkaneDatabase extends _$OkaneDatabase {
} }
} }
@DriftAccessor( @DriftAccessor(tables: [Accounts])
tables: [
Accounts,
Transactions,
TransactionTemplates,
RecurringTransactions,
Budgets,
Beneficiaries,
],
)
class AccountsDao extends DatabaseAccessor<OkaneDatabase> class AccountsDao extends DatabaseAccessor<OkaneDatabase>
with _$AccountsDaoMixin { with _$AccountsDaoMixin {
AccountsDao(super.db); AccountsDao(OkaneDatabase db) : super(db);
Stream<List<Account>> accountsStream() { Stream<List<Account>> accountsStream() {
return select(accounts).watch(); return select(accounts).watch();
@ -204,22 +195,6 @@ class AccountsDao extends DatabaseAccessor<OkaneDatabase>
Future<int> upsertAccount(AccountsCompanion account) { Future<int> upsertAccount(AccountsCompanion account) {
return into(accounts).insertOnConflictUpdate(account); return into(accounts).insertOnConflictUpdate(account);
} }
Future<void> removeAccount(Account account) async {
// Delete dependent data
await (delete(transactions)
..where((t) => t.accountId.equals(account.id))).go();
await (delete(recurringTransactions)
..where((r) => r.accountId.equals(account.id))).go();
await (delete(transactionTemplates)
..where((t) => t.accountId.equals(account.id))).go();
await (delete(budgets)..where((b) => b.accountId.equals(account.id))).go();
await (delete(beneficiaries)
..where((b) => b.accountId.equals(account.id))).go();
// Delete the account
await (delete(accounts)..where((a) => a.id.equals(account.id))).go();
}
} }
enum TransactionQueryDateOption { thisMonth } enum TransactionQueryDateOption { thisMonth }
@ -227,7 +202,7 @@ enum TransactionQueryDateOption { thisMonth }
@DriftAccessor(tables: [Transactions, Beneficiaries, ExpenseCategories]) @DriftAccessor(tables: [Transactions, Beneficiaries, ExpenseCategories])
class TransactionsDao extends DatabaseAccessor<OkaneDatabase> class TransactionsDao extends DatabaseAccessor<OkaneDatabase>
with _$TransactionsDaoMixin { with _$TransactionsDaoMixin {
TransactionsDao(super.db); TransactionsDao(OkaneDatabase db) : super(db);
JoinedSelectStatement _transactionQuery(Account account) { JoinedSelectStatement _transactionQuery(Account account) {
return (select(transactions) return (select(transactions)
@ -350,7 +325,7 @@ class TransactionsDao extends DatabaseAccessor<OkaneDatabase>
@DriftAccessor(tables: [Beneficiaries]) @DriftAccessor(tables: [Beneficiaries])
class BeneficiariesDao extends DatabaseAccessor<OkaneDatabase> class BeneficiariesDao extends DatabaseAccessor<OkaneDatabase>
with _$BeneficiariesDaoMixin { with _$BeneficiariesDaoMixin {
BeneficiariesDao(super.db); BeneficiariesDao(OkaneDatabase db) : super(db);
Stream<List<Beneficiary>> beneficiariesStream() { Stream<List<Beneficiary>> beneficiariesStream() {
return select(beneficiaries).watch(); return select(beneficiaries).watch();
@ -379,7 +354,7 @@ class BeneficiariesDao extends DatabaseAccessor<OkaneDatabase>
@DriftAccessor(tables: [ExpenseCategories]) @DriftAccessor(tables: [ExpenseCategories])
class ExpenseCategoriesDao extends DatabaseAccessor<OkaneDatabase> class ExpenseCategoriesDao extends DatabaseAccessor<OkaneDatabase>
with _$ExpenseCategoriesDaoMixin { with _$ExpenseCategoriesDaoMixin {
ExpenseCategoriesDao(super.db); ExpenseCategoriesDao(OkaneDatabase db) : super(db);
Stream<List<ExpenseCategory>> expenseCategoriesStream(Account account) { Stream<List<ExpenseCategory>> expenseCategoriesStream(Account account) {
return select(expenseCategories).watch(); return select(expenseCategories).watch();
@ -403,7 +378,7 @@ class ExpenseCategoriesDao extends DatabaseAccessor<OkaneDatabase>
@DriftAccessor(tables: [Budgets, BudgetItems]) @DriftAccessor(tables: [Budgets, BudgetItems])
class BudgetsDao extends DatabaseAccessor<OkaneDatabase> class BudgetsDao extends DatabaseAccessor<OkaneDatabase>
with _$BudgetsDaoMixin { with _$BudgetsDaoMixin {
BudgetsDao(super.db); BudgetsDao(OkaneDatabase db) : super(db);
Stream<List<BudgetsDto>> budgetsStream(Account account) { Stream<List<BudgetsDto>> budgetsStream(Account account) {
return (select(budgets) return (select(budgets)
@ -461,7 +436,7 @@ class BudgetsDao extends DatabaseAccessor<OkaneDatabase>
@DriftAccessor(tables: [Loans, LoanChanges, Beneficiaries]) @DriftAccessor(tables: [Loans, LoanChanges, Beneficiaries])
class LoansDao extends DatabaseAccessor<OkaneDatabase> with _$LoansDaoMixin { class LoansDao extends DatabaseAccessor<OkaneDatabase> with _$LoansDaoMixin {
LoansDao(super.db); LoansDao(OkaneDatabase db) : super(db);
Stream<List<LoanDto>> loansStream(Account account) { Stream<List<LoanDto>> loansStream(Account account) {
return select(loans) return select(loans)
@ -537,7 +512,7 @@ class LoansDao extends DatabaseAccessor<OkaneDatabase> with _$LoansDaoMixin {
@DriftAccessor(tables: [TransactionTemplates, ExpenseCategories, Beneficiaries]) @DriftAccessor(tables: [TransactionTemplates, ExpenseCategories, Beneficiaries])
class TransactionTemplatesDao extends DatabaseAccessor<OkaneDatabase> class TransactionTemplatesDao extends DatabaseAccessor<OkaneDatabase>
with _$TransactionTemplatesDaoMixin { with _$TransactionTemplatesDaoMixin {
TransactionTemplatesDao(super.db); TransactionTemplatesDao(OkaneDatabase db) : super(db);
Stream<List<TransactionTemplateDto>> transactionTemplatesStream( Stream<List<TransactionTemplateDto>> transactionTemplatesStream(
Account account, Account account,
@ -618,7 +593,7 @@ class TransactionTemplatesDao extends DatabaseAccessor<OkaneDatabase>
@DriftAccessor(tables: [TransactionTemplates, RecurringTransactions]) @DriftAccessor(tables: [TransactionTemplates, RecurringTransactions])
class RecurringTransactionsDao extends DatabaseAccessor<OkaneDatabase> class RecurringTransactionsDao extends DatabaseAccessor<OkaneDatabase>
with _$RecurringTransactionsDaoMixin { with _$RecurringTransactionsDaoMixin {
RecurringTransactionsDao(super.db); RecurringTransactionsDao(OkaneDatabase db) : super(db);
Stream<List<RecurringTransactionDto>> recurringTransactionsStream( Stream<List<RecurringTransactionDto>> recurringTransactionsStream(
Account account, Account account,

View File

@ -8190,15 +8190,6 @@ class $OkaneDatabaseManager {
mixin _$AccountsDaoMixin on DatabaseAccessor<OkaneDatabase> { mixin _$AccountsDaoMixin on DatabaseAccessor<OkaneDatabase> {
$AccountsTable get accounts => attachedDatabase.accounts; $AccountsTable get accounts => attachedDatabase.accounts;
$ExpenseCategoriesTable get expenseCategories =>
attachedDatabase.expenseCategories;
$BeneficiariesTable get beneficiaries => attachedDatabase.beneficiaries;
$TransactionsTable get transactions => attachedDatabase.transactions;
$TransactionTemplatesTable get transactionTemplates =>
attachedDatabase.transactionTemplates;
$RecurringTransactionsTable get recurringTransactions =>
attachedDatabase.recurringTransactions;
$BudgetsTable get budgets => attachedDatabase.budgets;
} }
mixin _$BeneficiariesDaoMixin on DatabaseAccessor<OkaneDatabase> { mixin _$BeneficiariesDaoMixin on DatabaseAccessor<OkaneDatabase> {
$AccountsTable get accounts => attachedDatabase.accounts; $AccountsTable get accounts => attachedDatabase.accounts;

View File

@ -27,7 +27,7 @@ Future<void> main() async {
GetIt.I.registerSingleton<CoreCubit>(CoreCubit()); GetIt.I.registerSingleton<CoreCubit>(CoreCubit());
GetIt.I.registerSingleton<OkaneDatabase>(OkaneDatabase()); GetIt.I.registerSingleton<OkaneDatabase>(OkaneDatabase());
appRunner() => runApp(const MyApp()); final appRunner = () => runApp(const MyApp());
if (settings.sentryDsn != null) { if (settings.sentryDsn != null) {
print("Setting up Sentry!"); print("Setting up Sentry!");
await SentryFlutter.init((options) { await SentryFlutter.init((options) {

View File

@ -46,7 +46,7 @@ class BreakdownCard extends StatelessWidget {
Map<String, double> expenses = {}; Map<String, double> expenses = {};
Map<String, Color> colors = {}; Map<String, Color> colors = {};
double usableMoney = 0; double usableMoney = 0;
for (var t in transactions) { transactions.forEach((t) {
String category; String category;
if (t.transaction.amount > 0) { if (t.transaction.amount > 0) {
category = CATEGORY_INCOME; category = CATEGORY_INCOME;
@ -67,7 +67,7 @@ class BreakdownCard extends StatelessWidget {
ifAbsent: () => t.transaction.amount.abs().toDouble(), ifAbsent: () => t.transaction.amount.abs().toDouble(),
); );
usableMoney += t.transaction.amount; usableMoney += t.transaction.amount;
} });
return (expenses: expenses, colors: colors, usable: usableMoney); return (expenses: expenses, colors: colors, usable: usableMoney);
} }

View File

@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:get_it/get_it.dart'; import 'package:get_it/get_it.dart';
import 'package:okane/i18n/strings.g.dart'; import 'package:okane/i18n/strings.g.dart';
import 'package:okane/ui/pages/account/breakdown_card.dart';
import 'package:okane/ui/state/settings.dart'; import 'package:okane/ui/state/settings.dart';
import 'package:okane/ui/utils.dart'; import 'package:okane/ui/utils.dart';

View File

@ -193,7 +193,8 @@ class CoreCubit extends Cubit<CoreState> {
cancelStreams(); cancelStreams();
try { try {
await GetIt.I.get<OkaneDatabase>().accountsDao.removeAccount(account); // TODO
//await db.deleteAccount(account);
} finally { } finally {
emit(state.copyWith(isDeletingAccount: false)); emit(state.copyWith(isDeletingAccount: false));
} }

View File

@ -2,7 +2,7 @@ name: okane
description: "A cross-platform finance tracker." description: "A cross-platform finance tracker."
publish_to: "none" publish_to: "none"
version: 1.0.0+5 version: 1.0.0+3
environment: environment:
sdk: ^3.7.0 sdk: ^3.7.0

View File

@ -0,0 +1,38 @@
import 'package:flutter_test/flutter_test.dart';
import 'package:okane/database/collections/recurrent.dart';
void main() {
group("isDue", () {
test("null value", () {
final t = RecurringTransaction()..lastExecution = null;
expect(t.isDue(DateTime.now()), true);
});
test("Date before", () {
final now = DateTime.now();
final t =
RecurringTransaction()
..lastExecution = now
..days = 30;
expect(t.isDue(now.add(Duration(days: 10))), false);
});
test("Date before warning", () {
final now = DateTime.now();
final t =
RecurringTransaction()
..lastExecution = now
..days = 30;
expect(t.isDue(now.add(Duration(days: 20))), true);
});
test("Expired", () {
final now = DateTime.now();
final t =
RecurringTransaction()
..lastExecution = now
..days = 30;
expect(t.isDue(now.add(Duration(days: 31))), true);
});
});
}