WIP: Add Drafts, Templates, and Recurring Transactions #45
|
|
@ -4,6 +4,7 @@
|
||||||
],
|
],
|
||||||
"copyright": "Copyright © 2024, Andrew Lalis",
|
"copyright": "Copyright © 2024, Andrew Lalis",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"cronexp": ">=0.1.0-beta3 <0.2.0-0",
|
||||||
"d2sqlite3": "~>1.0",
|
"d2sqlite3": "~>1.0",
|
||||||
"handy-http-starter": "~>1.6",
|
"handy-http-starter": "~>1.6",
|
||||||
"jwt4d": "~>0.0.2",
|
"jwt4d": "~>0.0.2",
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@
|
||||||
"fileVersion": 1,
|
"fileVersion": 1,
|
||||||
"versions": {
|
"versions": {
|
||||||
"asdf": "0.8.0",
|
"asdf": "0.8.0",
|
||||||
|
"cronexp": "0.1.0-beta3",
|
||||||
"d2sqlite3": "1.0.0",
|
"d2sqlite3": "1.0.0",
|
||||||
"dxml": "0.4.5",
|
"dxml": "0.4.5",
|
||||||
"handy-http-data": "1.3.2",
|
"handy-http-data": "1.3.2",
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,7 @@ void startScheduledJobs() {
|
||||||
);
|
);
|
||||||
|
|
||||||
JobScheduler jobScheduler = new TaskPoolScheduler();
|
JobScheduler jobScheduler = new TaskPoolScheduler();
|
||||||
|
|
||||||
jobScheduler.addJob(() {
|
jobScheduler.addJob(() {
|
||||||
// Clear old analytics data from profiles.
|
// Clear old analytics data from profiles.
|
||||||
import profile.data;
|
import profile.data;
|
||||||
|
|
@ -38,5 +39,32 @@ void startScheduledJobs() {
|
||||||
);
|
);
|
||||||
|
|
||||||
}, analyticsSchedule);
|
}, analyticsSchedule);
|
||||||
|
|
||||||
|
// Add a scheduled job to regularly check for and create recurring transaction drafts.
|
||||||
|
jobScheduler.addJob(() {
|
||||||
|
import profile.data;
|
||||||
|
import profile.data_impl_sqlite;
|
||||||
|
import profile.model;
|
||||||
|
import transaction.dto;
|
||||||
|
import transaction.data;
|
||||||
|
import util.pagination;
|
||||||
|
import std.stdio;
|
||||||
|
import std.datetime;
|
||||||
|
import cronexp;
|
||||||
|
FileSystemProfileRepository.doForAllUserProfiles((Profile profile, ProfileRepository profileRepo) {
|
||||||
|
writefln!"Recurring transaction check: %s / %s"(profile.username, profile.name);
|
||||||
|
ProfileDataSource ds = profileRepo.getDataSource(profile);
|
||||||
|
RecurringTransactionRepository rtRepo = ds.getRecurringTransactionRepository();
|
||||||
|
Page!(RecurringTransactionResponse) result = rtRepo.findAll(PageRequest.unpaged());
|
||||||
|
foreach (rt; result.items) {
|
||||||
|
writeln(rt.scheduleExpr);
|
||||||
|
DateTime now = cast(DateTime) Clock.currTime();
|
||||||
|
auto cron = CronExpr(rt.scheduleExpr);
|
||||||
|
writefln!"scheduleExpr = %s -> %s"(rt.scheduleExpr, cron.getNext(now));
|
||||||
|
// TODO: Figure out how to actually create the transactions!
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}, new FixedIntervalSchedule(minutes(1), Clock.currTime(UTC())));
|
||||||
|
|
||||||
jobScheduler.start();
|
jobScheduler.start();
|
||||||
}
|
}
|
||||||
Loading…
Reference in New Issue