Compare commits
3 Commits
c4f7d5745a
...
121d0ec236
Author | SHA1 | Date | |
---|---|---|---|
121d0ec236 | |||
71993c2686 | |||
cbe2d5a556 |
@ -179,10 +179,19 @@ class OkaneDatabase extends _$OkaneDatabase {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@DriftAccessor(tables: [Accounts])
|
@DriftAccessor(
|
||||||
|
tables: [
|
||||||
|
Accounts,
|
||||||
|
Transactions,
|
||||||
|
TransactionTemplates,
|
||||||
|
RecurringTransactions,
|
||||||
|
Budgets,
|
||||||
|
Beneficiaries,
|
||||||
|
],
|
||||||
|
)
|
||||||
class AccountsDao extends DatabaseAccessor<OkaneDatabase>
|
class AccountsDao extends DatabaseAccessor<OkaneDatabase>
|
||||||
with _$AccountsDaoMixin {
|
with _$AccountsDaoMixin {
|
||||||
AccountsDao(OkaneDatabase db) : super(db);
|
AccountsDao(super.db);
|
||||||
|
|
||||||
Stream<List<Account>> accountsStream() {
|
Stream<List<Account>> accountsStream() {
|
||||||
return select(accounts).watch();
|
return select(accounts).watch();
|
||||||
@ -195,6 +204,22 @@ 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 }
|
||||||
@ -202,7 +227,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(OkaneDatabase db) : super(db);
|
TransactionsDao(super.db);
|
||||||
|
|
||||||
JoinedSelectStatement _transactionQuery(Account account) {
|
JoinedSelectStatement _transactionQuery(Account account) {
|
||||||
return (select(transactions)
|
return (select(transactions)
|
||||||
@ -325,7 +350,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(OkaneDatabase db) : super(db);
|
BeneficiariesDao(super.db);
|
||||||
|
|
||||||
Stream<List<Beneficiary>> beneficiariesStream() {
|
Stream<List<Beneficiary>> beneficiariesStream() {
|
||||||
return select(beneficiaries).watch();
|
return select(beneficiaries).watch();
|
||||||
@ -354,7 +379,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(OkaneDatabase db) : super(db);
|
ExpenseCategoriesDao(super.db);
|
||||||
|
|
||||||
Stream<List<ExpenseCategory>> expenseCategoriesStream(Account account) {
|
Stream<List<ExpenseCategory>> expenseCategoriesStream(Account account) {
|
||||||
return select(expenseCategories).watch();
|
return select(expenseCategories).watch();
|
||||||
@ -378,7 +403,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(OkaneDatabase db) : super(db);
|
BudgetsDao(super.db);
|
||||||
|
|
||||||
Stream<List<BudgetsDto>> budgetsStream(Account account) {
|
Stream<List<BudgetsDto>> budgetsStream(Account account) {
|
||||||
return (select(budgets)
|
return (select(budgets)
|
||||||
@ -436,7 +461,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(OkaneDatabase db) : super(db);
|
LoansDao(super.db);
|
||||||
|
|
||||||
Stream<List<LoanDto>> loansStream(Account account) {
|
Stream<List<LoanDto>> loansStream(Account account) {
|
||||||
return select(loans)
|
return select(loans)
|
||||||
@ -512,7 +537,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(OkaneDatabase db) : super(db);
|
TransactionTemplatesDao(super.db);
|
||||||
|
|
||||||
Stream<List<TransactionTemplateDto>> transactionTemplatesStream(
|
Stream<List<TransactionTemplateDto>> transactionTemplatesStream(
|
||||||
Account account,
|
Account account,
|
||||||
@ -593,7 +618,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(OkaneDatabase db) : super(db);
|
RecurringTransactionsDao(super.db);
|
||||||
|
|
||||||
Stream<List<RecurringTransactionDto>> recurringTransactionsStream(
|
Stream<List<RecurringTransactionDto>> recurringTransactionsStream(
|
||||||
Account account,
|
Account account,
|
||||||
|
@ -8190,6 +8190,15 @@ 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;
|
||||||
|
@ -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());
|
||||||
|
|
||||||
final appRunner = () => runApp(const MyApp());
|
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) {
|
||||||
|
@ -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;
|
||||||
transactions.forEach((t) {
|
for (var t in transactions) {
|
||||||
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,7 +2,6 @@ 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';
|
||||||
|
|
||||||
|
@ -193,8 +193,7 @@ class CoreCubit extends Cubit<CoreState> {
|
|||||||
|
|
||||||
cancelStreams();
|
cancelStreams();
|
||||||
try {
|
try {
|
||||||
// TODO
|
await GetIt.I.get<OkaneDatabase>().accountsDao.removeAccount(account);
|
||||||
//await db.deleteAccount(account);
|
|
||||||
} finally {
|
} finally {
|
||||||
emit(state.copyWith(isDeletingAccount: false));
|
emit(state.copyWith(isDeletingAccount: false));
|
||||||
}
|
}
|
||||||
|
@ -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+3
|
version: 1.0.0+5
|
||||||
environment:
|
environment:
|
||||||
sdk: ^3.7.0
|
sdk: ^3.7.0
|
||||||
|
|
||||||
|
@ -1,38 +0,0 @@
|
|||||||
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);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user