Handle delay before current day
This commit is contained in:
26
main.go
26
main.go
@@ -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 {
|
||||||
|
logrus.Debugf("Delaying %s to %s due to weekend scheduling\n", transaction.Name, transaction.Date.String())
|
||||||
transaction.DelayedReason = DelayWeekend
|
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
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user