diff --git a/main.go b/main.go index 9a5c3ed..68bddd6 100644 --- a/main.go +++ b/main.go @@ -420,15 +420,24 @@ func calculateShift(transactionLog TransactionLog, transaction Transaction) time return transactionLog.nextLogDay(transaction.Date).Date } -func (tl *TransactionLog) delayTransaction(transaction *Transaction) { +func (tl *TransactionLog) delayTransaction(transaction *Transaction) bool { 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 { logrus.Debugf("Transaction not delayable %s (%s | %f)", transaction.ID, transaction.Name, transaction.Amount) transaction.Delayable = false - return + return false } + delete(tl.LogDays[transaction.Date].Transactions, transaction.ID) + if newDate.After(tl.last()) { newDate = tl.last() } @@ -439,8 +448,6 @@ func (tl *TransactionLog) delayTransaction(transaction *Transaction) { tl.addDay(newDate) - delete(tl.LogDays[transaction.Date].Transactions, transaction.ID) - transaction.Date = newDate tl.LogDays[newDate].Transactions[transaction.ID] = transaction @@ -449,6 +456,7 @@ func (tl *TransactionLog) delayTransaction(transaction *Transaction) { transaction.DelayedReason = DelayInsufficient } + return true } func (tl *TransactionLog) executeTransaction(transaction *Transaction) bool { @@ -457,9 +465,11 @@ func (tl *TransactionLog) executeTransaction(transaction *Transaction) bool { copy(accounts, logDay.EndingBalance) if isWeekend(transaction.Date) && transaction.Delayable { - logrus.Debugf("Delaying %s due to weekend scheduling\n", transaction.Name) - tl.delayTransaction(transaction) - transaction.DelayedReason = DelayWeekend + delayed := tl.delayTransaction(transaction) + if delayed { + logrus.Debugf("Delaying %s to %s due to weekend scheduling\n", transaction.Name, transaction.Date.String()) + transaction.DelayedReason = DelayWeekend + } 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("Delayable: %t", 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) + 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 }