Adding detection for charges scheduled on weekends

This commit is contained in:
2022-09-30 22:36:20 -04:00
parent c8616e569e
commit 1acb7773b4

38
main.go
View File

@@ -198,8 +198,19 @@ func addTransaction(transactionLog *TransactionLog, transaction *Transaction) {
} }
func delayTransaction(transactionLog *TransactionLog, transaction *Transaction) { func delayTransaction(transactionLog *TransactionLog, transaction *Transaction) {
newDate := transaction.Date
if transaction.Date.Weekday() == 0 || transaction.Date.Weekday() == 6 {
if transaction.Date.Weekday() == 0 {
newDate = newDate.AddDate(0, 0, 1)
} else if transaction.Date.Weekday() == 6 {
newDate = newDate.AddDate(0, 0, 2)
}
if _, ok := transactionLog.Transactions[newDate]; !ok {
transactionLog.Transactions[newDate] = make([]Transaction, 0)
}
} else {
transaction.Late = true transaction.Late = true
newDate := transaction.Date.AddDate(0, 0, 1) newDate = newDate.AddDate(0, 0, 1)
_, ok := transactionLog.Transactions[newDate] _, ok := transactionLog.Transactions[newDate]
for !ok { for !ok {
if newDate == transactionLog.EndDate { if newDate == transactionLog.EndDate {
@@ -208,6 +219,7 @@ func delayTransaction(transactionLog *TransactionLog, transaction *Transaction)
newDate = newDate.AddDate(0, 0, 1) newDate = newDate.AddDate(0, 0, 1)
_, ok = transactionLog.Transactions[newDate] _, ok = transactionLog.Transactions[newDate]
} }
}
transaction.Date = newDate transaction.Date = newDate
transactionLog.Transactions[newDate] = append(transactionLog.Transactions[newDate], *transaction) transactionLog.Transactions[newDate] = append(transactionLog.Transactions[newDate], *transaction)
} }
@@ -215,11 +227,12 @@ func delayTransaction(transactionLog *TransactionLog, transaction *Transaction)
func executeTransaction(transactionLog *TransactionLog, accounts []Account, transaction *Transaction) bool { func executeTransaction(transactionLog *TransactionLog, accounts []Account, transaction *Transaction) bool {
executed := false executed := false
finalDate := transactionLog.EndDate finalDate := transactionLog.EndDate
if transaction.Amount > 0 { if transaction.Date.Weekday() == 0 || transaction.Date.Weekday() == 6 {
delayTransaction(transactionLog, transaction)
} else if transaction.Amount > 0 {
accounts[0].Balance = accounts[0].Balance + transaction.Amount accounts[0].Balance = accounts[0].Balance + transaction.Amount
executed = true executed = true
} } else if transaction.Amount < 0 && math.Abs(transaction.Amount) > (accounts[0].Balance-accounts[0].Minimum) && transaction.Date.Before(finalDate) {
if transaction.Amount < 0 && math.Abs(transaction.Amount) > (accounts[0].Balance-accounts[0].Minimum) && transaction.Date.Before(finalDate) {
delayTransaction(transactionLog, transaction) delayTransaction(transactionLog, transaction)
} else if transaction.Amount < 0 { } else if transaction.Amount < 0 {
accounts[0].Balance = accounts[0].Balance + transaction.Amount accounts[0].Balance = accounts[0].Balance + transaction.Amount
@@ -298,6 +311,10 @@ func printOutput(date time.Time, initialBalances []Account, executedCharges []Tr
late_tag := fmt.Sprintf("(%s - %s)", "Late", charge.OrigDate.Format("Jan 02 2006")) late_tag := fmt.Sprintf("(%s - %s)", "Late", charge.OrigDate.Format("Jan 02 2006"))
rear_spacer := strings.Repeat(" ", 65-len(late_tag)-len(output)) rear_spacer := strings.Repeat(" ", 65-len(late_tag)-len(output))
fmt.Printf("%s%s%s |\n", output, rear_spacer, late_tag) fmt.Printf("%s%s%s |\n", output, rear_spacer, late_tag)
} else if charge.Date.After(charge.OrigDate) {
weekend_tag := fmt.Sprintf("(%s - %s)", "Weekend", charge.OrigDate.Format("Jan 02 2006"))
rear_spacer := strings.Repeat(" ", 65-len(weekend_tag)-len(output))
fmt.Printf("%s%s%s |\n", output, rear_spacer, weekend_tag)
} else { } else {
rear_spacer := strings.Repeat(" ", 65-len(output)) rear_spacer := strings.Repeat(" ", 65-len(output))
fmt.Printf("%s%s |\n", output, rear_spacer) fmt.Printf("%s%s |\n", output, rear_spacer)
@@ -326,6 +343,8 @@ func printOutput(date time.Time, initialBalances []Account, executedCharges []Tr
func main() { func main() {
yfile, err := ioutil.ReadFile(os.Args[1]) yfile, err := ioutil.ReadFile(os.Args[1])
dates := make([]time.Time, 0)
base := time.Now()
if err != nil { if err != nil {
log.Fatal(err) log.Fatal(err)
@@ -361,10 +380,18 @@ func main() {
} }
} }
current := time.Date(base.Year(),
base.Month(), base.Day(), 0, 0, 0, 0, time.UTC)
for current.Before(transactionLog.EndDate.AddDate(0, 0, 7)) {
dates = append(dates, current)
current = current.AddDate(0, 0, 1)
}
collectTransactions(config.Credit, &transactionLog) collectTransactions(config.Credit, &transactionLog)
collectTransactions(config.Transactions, &transactionLog) collectTransactions(config.Transactions, &transactionLog)
for _, date := range transactionLog.Dates { for _, date := range dates {
if _, ok := transactionLog.Transactions[date]; ok {
dateCharges := transactionLog.Transactions[date] dateCharges := transactionLog.Transactions[date]
chargeCount := len(dateCharges) chargeCount := len(dateCharges)
executedCharges := make([]Transaction, 0) executedCharges := make([]Transaction, 0)
@@ -407,5 +434,6 @@ func main() {
printOutput(date, initialBalances, executedCharges, config.Accounts) printOutput(date, initialBalances, executedCharges, config.Accounts)
} }
} }
}
} }