33 lines
725 B
Dart
33 lines
725 B
Dart
import 'package:isar/isar.dart';
|
|
import 'package:okane/database/collections/account.dart';
|
|
import 'package:okane/database/collections/template.dart';
|
|
|
|
part 'recurrent.g.dart';
|
|
|
|
@collection
|
|
class RecurringTransaction {
|
|
Id id = Isar.autoIncrement;
|
|
|
|
late int days;
|
|
|
|
DateTime? lastExecution;
|
|
|
|
final template = IsarLink<TransactionTemplate>();
|
|
|
|
final account = IsarLink<Account>();
|
|
|
|
bool isDue(DateTime now) {
|
|
if (lastExecution == null) {
|
|
return true;
|
|
}
|
|
|
|
final expectedNextExecution = lastExecution!.add(Duration(days: days));
|
|
if (now.isAfter(expectedNextExecution)) {
|
|
return true;
|
|
}
|
|
|
|
return now.difference(expectedNextExecution).inDays.abs() <=
|
|
(days * 0.5).toInt();
|
|
}
|
|
}
|