Fixed timezone edgecase. Fixed weekend bug

This commit is contained in:
2023-03-11 20:14:44 -05:00
parent c7fd50b347
commit 520f3e312f

31
main.go
View File

@@ -18,6 +18,10 @@ import (
"gopkg.in/yaml.v3" "gopkg.in/yaml.v3"
) )
const (
maxWidth = 100
)
type timeSlice []time.Time type timeSlice []time.Time
func (s timeSlice) Len() int { return len(s) } func (s timeSlice) Len() int { return len(s) }
@@ -330,10 +334,9 @@ func (tl *TransactionLog) deleteDay(date time.Time) {
} }
func calculateShift(transactionLog TransactionLog, transaction Transaction) time.Time { func calculateShift(transactionLog TransactionLog, transaction Transaction) time.Time {
if transaction.Amount > 0 { if isWeekend(transaction.Date) {
add := 1 add := 1
newDate := transaction.Date newDate := transaction.Date
if transaction.Shift == "early" { if transaction.Shift == "early" {
add = -1 add = -1
} }
@@ -343,7 +346,6 @@ func calculateShift(transactionLog TransactionLog, transaction Transaction) time
} }
return newDate return newDate
} }
if transaction.Shift == "early" { if transaction.Shift == "early" {
@@ -426,15 +428,15 @@ func currentDay() time.Time {
} }
func firstOfMonth(t time.Time) time.Time { func firstOfMonth(t time.Time) time.Time {
return time.Date(t.Year(), t.Month(), 1, 0, 0, 0, 0, time.Now().Location()) return time.Date(t.Year(), t.Month(), 1, 0, 0, 0, 0, t.Location())
} }
func lastOfMonth(t time.Time) time.Time { func lastOfMonth(t time.Time) time.Time {
return time.Date(t.Year(), t.Month()+1, 0, 0, 0, 0, 0, time.Now().Location()) return time.Date(t.Year(), t.Month()+1, 0, 0, 0, 0, 0, t.Location())
} }
func stripTime(t time.Time) time.Time { func stripTime(t time.Time) time.Time {
return time.Date(t.Year(), t.Month(), t.Day(), 0, 0, 0, 0, time.Now().Location()) return time.Date(t.Year(), t.Month(), t.Day(), 0, 0, 0, 0, t.Location())
} }
func calculateFrequency(frequency string, startDate time.Time, endDate time.Time, hardDate bool) []time.Time { func calculateFrequency(frequency string, startDate time.Time, endDate time.Time, hardDate bool) []time.Time {
@@ -604,8 +606,8 @@ func printOutput(logDay LogDay) {
fullWidth := getTerminalWidth() fullWidth := getTerminalWidth()
if fullWidth > 120 { if fullWidth > maxWidth {
fullWidth = 120 fullWidth = maxWidth
} }
border := strings.Repeat("=", fullWidth) border := strings.Repeat("=", fullWidth)
@@ -619,26 +621,25 @@ func printOutput(logDay LogDay) {
} }
for _, charge := range logDay.transactions() { for _, charge := range logDay.transactions() {
prefix := "-" prefix := "-"
suffix := "|"
if charge.Amount > 0 { if charge.Amount > 0 {
prefix = "+" prefix = "+"
} }
if charge.Delayed { if charge.Delayed {
suffix := fmt.Sprintf("(%s - %s) |", "Late", charge.OriginDate.Format("Jan 02 2006")) suffix = fmt.Sprintf("(%s - %s) |", "Late", charge.OriginDate.Format("Jan 02 2006"))
printTransactionLine(charge.Amount, charge.Name, prefix, suffix, fullWidth)
} else if charge.Date != charge.OriginDate { } else if charge.Date != charge.OriginDate {
suffix := fmt.Sprintf("(%s - %s) |", "Weekend", charge.OriginDate.Format("Jan 02 2006")) suffix = fmt.Sprintf("(%s - %s) |", "Weekend", charge.OriginDate.Format("Jan 02 2006"))
printTransactionLine(charge.Amount, charge.Name, prefix, suffix, fullWidth)
} else {
printTransactionLine(charge.Amount, charge.Name, prefix, "|", fullWidth)
} }
printTransactionLine(charge.Amount, charge.Name, prefix, suffix, fullWidth)
} }
fmt.Println(divider) fmt.Println(divider)
for _, v := range logDay.EndingBalance { for _, v := range logDay.EndingBalance {
printTransactionLine(v.Balance, v.Name, "", "|", fullWidth) printTransactionLine(v.Balance, v.Name, "", "|", fullWidth)
} }
fmt.Println(border + "\n") fmt.Printf("%s\n\n", border)
} }
func main() { func main() {