Compare commits

...

1 Commits

Author SHA1 Message Date
fff24d5686 Handle delay before current day 2025-06-15 00:15:13 -04:00

28
main.go
View File

@@ -420,15 +420,24 @@ func calculateShift(transactionLog TransactionLog, transaction Transaction) time
return transactionLog.nextLogDay(transaction.Date).Date return transactionLog.nextLogDay(transaction.Date).Date
} }
func (tl *TransactionLog) delayTransaction(transaction *Transaction) { func (tl *TransactionLog) delayTransaction(transaction *Transaction) bool {
newDate := calculateShift(*tl, *transaction) newDate := calculateShift(*tl, *transaction)
if newDate.Before(currentDay()) {
logrus.Debugf("Transaction presumed executed in the past %s (%s | %f)",
transaction.ID, transaction.Name, transaction.Amount)
delete(tl.LogDays[transaction.Date].Transactions, transaction.ID)
return false
}
if newDate.Before(tl.first()) || newDate == transaction.Date { if newDate.Before(tl.first()) || newDate == transaction.Date {
logrus.Debugf("Transaction not delayable %s (%s | %f)", transaction.ID, transaction.Name, transaction.Amount) logrus.Debugf("Transaction not delayable %s (%s | %f)", transaction.ID, transaction.Name, transaction.Amount)
transaction.Delayable = false transaction.Delayable = false
return return false
} }
delete(tl.LogDays[transaction.Date].Transactions, transaction.ID)
if newDate.After(tl.last()) { if newDate.After(tl.last()) {
newDate = tl.last() newDate = tl.last()
} }
@@ -439,8 +448,6 @@ func (tl *TransactionLog) delayTransaction(transaction *Transaction) {
tl.addDay(newDate) tl.addDay(newDate)
delete(tl.LogDays[transaction.Date].Transactions, transaction.ID)
transaction.Date = newDate transaction.Date = newDate
tl.LogDays[newDate].Transactions[transaction.ID] = transaction tl.LogDays[newDate].Transactions[transaction.ID] = transaction
@@ -449,6 +456,7 @@ func (tl *TransactionLog) delayTransaction(transaction *Transaction) {
transaction.DelayedReason = DelayInsufficient transaction.DelayedReason = DelayInsufficient
} }
return true
} }
func (tl *TransactionLog) executeTransaction(transaction *Transaction) bool { func (tl *TransactionLog) executeTransaction(transaction *Transaction) bool {
@@ -457,9 +465,11 @@ func (tl *TransactionLog) executeTransaction(transaction *Transaction) bool {
copy(accounts, logDay.EndingBalance) copy(accounts, logDay.EndingBalance)
if isWeekend(transaction.Date) && transaction.Delayable { if isWeekend(transaction.Date) && transaction.Delayable {
logrus.Debugf("Delaying %s due to weekend scheduling\n", transaction.Name) delayed := tl.delayTransaction(transaction)
tl.delayTransaction(transaction) if delayed {
transaction.DelayedReason = DelayWeekend logrus.Debugf("Delaying %s to %s due to weekend scheduling\n", transaction.Name, transaction.Date.String())
transaction.DelayedReason = DelayWeekend
}
return false return false
} }
@@ -467,9 +477,9 @@ func (tl *TransactionLog) executeTransaction(transaction *Transaction) bool {
logrus.Debugf("Balance: %f | Minimum: %f\n", accounts[0].Balance, accounts[0].Minimum) logrus.Debugf("Balance: %f | Minimum: %f\n", accounts[0].Balance, accounts[0].Minimum)
logrus.Debugf("Delayable: %t", transaction.Delayable) logrus.Debugf("Delayable: %t", transaction.Delayable)
if !isAffordable(transaction.Amount, accounts[0].Balance, accounts[0].Minimum) && transaction.Delayable { if !isAffordable(transaction.Amount, accounts[0].Balance, accounts[0].Minimum) && transaction.Delayable {
logrus.Debugf("Delaying %s: %f (%s) due to lack of funds\n",
transaction.Name, transaction.Amount, transaction.Date)
tl.delayTransaction(transaction) tl.delayTransaction(transaction)
logrus.Debugf("Delaying %s to %s: %f (%s) due to lack of funds\n",
transaction.Name, transaction.Date.String(), transaction.Amount, transaction.Date)
return false return false
} }