Skip to content

Commit

Permalink
improved recurring transactions logic, added bank account ID field
Browse files Browse the repository at this point in the history
  • Loading branch information
mikev-cw committed Apr 26, 2024
1 parent b146b83 commit ad5917b
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 20 deletions.
9 changes: 5 additions & 4 deletions lib/database/sossoldi_database.dart
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,7 @@ class SossoldiDatabase {
`${RecurringTransactionFields.note}` $textNotNull,
`${RecurringTransactionFields.recurrency}` $textNotNull,
`${RecurringTransactionFields.idCategory}` $integerNotNull,
`${RecurringTransactionFields.idBankAccount}` $integerNotNull,
`${RecurringTransactionFields.lastInsertion}` $text,
`${RecurringTransactionFields.createdAt}` $textNotNull,
`${RecurringTransactionFields.updatedAt}` $textNotNull
Expand Down Expand Up @@ -176,10 +177,10 @@ class SossoldiDatabase {

// Add fake recurring transactions
await _database?.execute('''
INSERT INTO recurringTransaction(fromDate, toDate, amount, note, recurrency, idCategory, createdAt, updatedAt) VALUES
("2024-02-23", null, 10.99, "Spotify", "MONTHLY", 14, '${DateTime.now()}', '${DateTime.now()}'),
("2023-12-13", null, 4.97, "ETF Consultant Parcel", "DAILY", 14, '${DateTime.now()}', '${DateTime.now()}'),
("2023-02-11", "2028-02-11", 1193.40, "Car Loan", "QUARTERLY", 16, '${DateTime.now()}', '${DateTime.now()}');
INSERT INTO recurringTransaction(fromDate, toDate, amount, note, recurrency, idCategory, idBankAccount, createdAt, updatedAt) VALUES
("2024-02-23", null, 10.99, "Spotify", "MONTHLY", 14, 70, '${DateTime.now()}', '${DateTime.now()}'),
("2023-12-13", null, 4.97, "ETF Consultant Parcel", "DAILY", 14, 70, '${DateTime.now()}', '${DateTime.now()}'),
("2023-02-11", "2028-02-11", 1193.40, "Car Loan", "QUARTERLY", 16, 72, '${DateTime.now()}', '${DateTime.now()}');
''');

// Add fake transactions
Expand Down
51 changes: 35 additions & 16 deletions lib/model/recurring_transaction.dart
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ class RecurringTransactionFields extends BaseEntityFields {
static String note = 'note';
static String recurrency = 'recurrency';
static String idCategory = 'idCategory';
static String idBankAccount = 'idBankAccount';
static String lastInsertion = 'lastInsertion';
static String createdAt = BaseEntityFields.getCreatedAt;
static String updatedAt = BaseEntityFields.getUpdatedAt;
Expand All @@ -24,6 +25,7 @@ class RecurringTransactionFields extends BaseEntityFields {
note,
recurrency,
idCategory,
idBankAccount,
lastInsertion,
BaseEntityFields.createdAt,
BaseEntityFields.updatedAt
Expand Down Expand Up @@ -74,7 +76,8 @@ class RecurringTransaction extends BaseEntity {
final num amount;
final String note;
final String recurrency;
final num idCategory;
final int idCategory;
final int idBankAccount;
final DateTime? lastInsertion;

const RecurringTransaction(
Expand All @@ -85,6 +88,7 @@ class RecurringTransaction extends BaseEntity {
required this.note,
required this.recurrency,
required this.idCategory,
required this.idBankAccount,
this.lastInsertion,
DateTime? createdAt,
DateTime? updatedAt})
Expand All @@ -97,7 +101,8 @@ class RecurringTransaction extends BaseEntity {
num? amount,
String? note,
String? recurrency,
num? idCategory,
int? idCategory,
int? idBankAccount,
DateTime? lastInsertion,
DateTime? createdAt,
DateTime? updatedAt}) =>
Expand All @@ -109,6 +114,7 @@ class RecurringTransaction extends BaseEntity {
note: note ?? this.note,
recurrency: recurrency ?? this.recurrency,
idCategory: idCategory ?? this.idCategory,
idBankAccount: idBankAccount ?? this.idBankAccount,
lastInsertion: lastInsertion ?? this.lastInsertion,
createdAt: createdAt ?? this.createdAt,
updatedAt: updatedAt ?? this.updatedAt);
Expand All @@ -124,7 +130,8 @@ class RecurringTransaction extends BaseEntity {
amount: json[RecurringTransactionFields.amount] as num,
note: json[RecurringTransactionFields.note] as String,
recurrency: json[RecurringTransactionFields.recurrency] as String,
idCategory: json[RecurringTransactionFields.idCategory] as num,
idCategory: json[RecurringTransactionFields.idCategory] as int,
idBankAccount: json[RecurringTransactionFields.idBankAccount] as int,
lastInsertion: json[RecurringTransactionFields.lastInsertion] != null
? DateTime.parse(json[RecurringTransactionFields.lastInsertion] as String)
: null,
Expand All @@ -140,6 +147,7 @@ class RecurringTransaction extends BaseEntity {
RecurringTransactionFields.note: note,
RecurringTransactionFields.recurrency: recurrency,
RecurringTransactionFields.idCategory: idCategory,
RecurringTransactionFields.idBankAccount: idBankAccount,
RecurringTransactionFields.lastInsertion: lastInsertion?.toIso8601String(),
BaseEntityFields.createdAt: createdAt?.toIso8601String(),
BaseEntityFields.updatedAt: updatedAt?.toIso8601String(),
Expand Down Expand Up @@ -174,21 +182,21 @@ class RecurringTransactionMethods extends SossoldiDatabase {
Future<List<RecurringTransaction>> selectAll() async {
final db = await database;

final orderByASC = '${RecurringTransactionFields.createdAt} ASC';
final orderBy = '${RecurringTransactionFields.createdAt} ASC';

final result = await db.query(recurringTransactionTable, orderBy: orderByASC);
final result = await db.query(recurringTransactionTable, orderBy: orderBy);

return result.map((json) => RecurringTransaction.fromJson(json)).toList();
}

Future<List<RecurringTransaction>> selectAllActive() async {
final db = await database;

final orderByASC = '${RecurringTransactionFields.createdAt} ASC';
final orderBy = '${RecurringTransactionFields.createdAt} ASC';

final result = await db.query(
recurringTransactionTable,
orderBy: orderByASC,
orderBy: orderBy,
where: '${RecurringTransactionFields.toDate} IS NULL OR ${RecurringTransactionFields.toDate} > ?',
whereArgs: [DateTime.now().toIso8601String()],
);
Expand All @@ -203,8 +211,7 @@ class RecurringTransactionMethods extends SossoldiDatabase {
return db.update(
recurringTransactionTable,
item.toJson(),
where:
'${RecurringTransactionFields.id} = ?',
where: '${RecurringTransactionFields.id} = ?',
whereArgs: [item.id],
);
}
Expand All @@ -213,8 +220,7 @@ class RecurringTransactionMethods extends SossoldiDatabase {
final db = await database;

return await db.delete(recurringTransactionTable,
where:
'${RecurringTransactionFields.id} = ?',
where: '${RecurringTransactionFields.id} = ?',
whereArgs: [id]);
}

Expand Down Expand Up @@ -264,11 +270,9 @@ class RecurringTransactionMethods extends SossoldiDatabase {

final db = await database;

final orderByASC = '${TransactionFields.date} ASC';

final result = await db.query(
transactionTable,
orderBy: orderByASC,
orderBy: '${TransactionFields.date} DESC',
where: '${TransactionFields.idRecurringTransaction} = ?',
whereArgs: [tid],
limit: 1,
Expand Down Expand Up @@ -297,7 +301,7 @@ class RecurringTransactionMethods extends SossoldiDatabase {

switch (scope) {
case 'days':
periods = now.difference(lastTransactionDate).inDays;
periods = (now.difference(lastTransactionDate).inDays/amount).floor();
break;
case 'months':
periods = (((now.year - lastTransactionDate.year) * 12 + now.month - lastTransactionDate.month)/amount).floor();
Expand Down Expand Up @@ -333,6 +337,7 @@ class RecurringTransactionMethods extends SossoldiDatabase {
}

if (transaction.toDate?.isAfter(lastTransactionDate) ?? true) {
// TODO no future dates
transactions2Add.add(lastTransactionDate);
}

Expand All @@ -342,10 +347,24 @@ class RecurringTransactionMethods extends SossoldiDatabase {
// insert a new transaction
print(tr);

Transaction addTr = Transaction(
date: tr,
amount: transaction.amount,
type: TransactionType.expense,
note: transaction.note,
idCategory: transaction.idCategory,
idBankAccount: transaction.idBankAccount,
recurring: true,
idRecurringTransaction: transaction.id,
createdAt: DateTime.now(),
updatedAt: DateTime.now(),
);

TransactionMethods().insert(addTr);
}

// update the last insertion date
// update the recurring transaction
updateItem(transaction.copy(lastInsertion: now));

}

Expand Down

0 comments on commit ad5917b

Please sign in to comment.