diff --git a/handler/transaction_recurring.go b/handler/transaction_recurring.go index 23a52a4..008cee5 100644 --- a/handler/transaction_recurring.go +++ b/handler/transaction_recurring.go @@ -82,7 +82,6 @@ func (h TransactionRecurringImpl) handleUpdateTransactionRecurring() http.Handle input := types.TransactionRecurringInput{ Id: r.PathValue("id"), IntervalMonths: r.FormValue("interval-months"), - LastExecution: r.FormValue("last-execution"), Active: r.FormValue("active"), Party: r.FormValue("party"), Description: r.FormValue("description"), diff --git a/service/transaction_recurring.go b/service/transaction_recurring.go index 7209a97..220f26b 100644 --- a/service/transaction_recurring.go +++ b/service/transaction_recurring.go @@ -127,7 +127,6 @@ func (s TransactionRecurringImpl) Update(user *types.User, input types.Transacti UPDATE transaction_recurring SET interval_months = :interval_months, - last_execution = :last_execution, active = :active, party = :party, description = :description, @@ -340,7 +339,6 @@ func (s TransactionRecurringImpl) validateAndEnrichTransactionRecurring( updatedAt *time.Time updatedBy uuid.UUID intervalMonths int64 - active bool err error rowCount int @@ -362,6 +360,8 @@ func (s TransactionRecurringImpl) validateAndEnrichTransactionRecurring( updatedBy = userId } + hasAccount := false + hasTreasureChest := false if input.AccountId != "" { temp, err := uuid.Parse(input.AccountId) if err != nil { @@ -379,6 +379,7 @@ func (s TransactionRecurringImpl) validateAndEnrichTransactionRecurring( return nil, fmt.Errorf("account not found: %w", ErrBadRequest) } + hasAccount = true } if input.TreasureChestId != "" { @@ -400,6 +401,16 @@ func (s TransactionRecurringImpl) validateAndEnrichTransactionRecurring( if treasureChest.ParentId == nil { return nil, fmt.Errorf("treasure chest is a group: %w", ErrBadRequest) } + hasTreasureChest = true + } + + if !hasAccount && !hasTreasureChest { + log.Error("transactionRecurring validate: %v", err) + return nil, fmt.Errorf("either account or treasure chest is required: %w", ErrBadRequest) + } + if hasAccount && hasTreasureChest { + log.Error("transactionRecurring validate: %v", err) + return nil, fmt.Errorf("either account or treasure chest is required, not both: %w", ErrBadRequest) } valueFloat, err := strconv.ParseFloat(input.Value, 64) @@ -430,10 +441,9 @@ func (s TransactionRecurringImpl) validateAndEnrichTransactionRecurring( log.Error("transactionRecurring validate: %v", err) return nil, fmt.Errorf("intervalMonths needs to be greater than 0: %w", ErrBadRequest) } - active, err = strconv.ParseBool(input.Active) - if err != nil { - log.Error("transactionRecurring validate: %v", err) - return nil, fmt.Errorf("could not parse active: %w", ErrBadRequest) + active := false + if input.Active == "on" { + active = true } transactionRecurring := types.TransactionRecurring{ diff --git a/template/transaction_recurring/transaction_recurring.templ b/template/transaction_recurring/transaction_recurring.templ index 89d8fba..73b759c 100644 --- a/template/transaction_recurring/transaction_recurring.templ +++ b/template/transaction_recurring/transaction_recurring.templ @@ -5,58 +5,76 @@ import "spend-sparrow/template/svg" import "spend-sparrow/types" templ TransactionRecurringItems(transactionsRecurring []*types.TransactionRecurring) { -
- for _, transaction := range transactionsRecurring { - @TransactionRecurringItem(transaction) - } -
+ + + + + + + + + + + for _, transaction := range transactionsRecurring { + @TransactionRecurringItem(transaction) + } + +
PartyDescriptionValue (€)Actions
} templ TransactionRecurringItem(transactionRecurring *types.TransactionRecurring) { -
-

- if transactionRecurring.Party != "" { - { transactionRecurring.Party } + + +

+ if transactionRecurring.Party != "" { + { transactionRecurring.Party } + } else { +   + } +

+ + +

+ if transactionRecurring.Description != "" { + { transactionRecurring.Description } + } else { +   + } +

+ + + if transactionRecurring.Value < 0 { +

{ displayBalance(transactionRecurring.Value)+" €" }

} else { -   +

{ displayBalance(transactionRecurring.Value)+" €" }

} -

-

- if transactionRecurring.Description != "" { - { transactionRecurring.Description } - } else { -   - } -

- if transactionRecurring.Value < 0 { -

{ displayBalance(transactionRecurring.Value)+" €" }

- } else { -

{ displayBalance(transactionRecurring.Value)+" €" }

- } - - -
+ + + + + + } templ EditTransactionRecurring(transactionRecurring *types.TransactionRecurring, accountId, treasureChestId string) { @@ -68,13 +86,13 @@ templ EditTransactionRecurring(transactionRecurring *types.TransactionRecurring, party := "" description := "" value := "0.00" - intervalMonth := "1" - active := false + intervalMonths := "1" + active := true if transactionRecurring == nil { id = "new" cancelUrl = "/empty" } else { - intervalMonth = fmt.Sprintf("%d", transactionRecurring.IntervalMonths) + intervalMonths = fmt.Sprintf("%d", transactionRecurring.IntervalMonths) active = transactionRecurring.Active party = transactionRecurring.Party description = transactionRecurring.Description @@ -97,16 +115,16 @@ templ EditTransactionRecurring(transactionRecurring *types.TransactionRecurring, name="active" id="active" type="checkbox" - value={ active } + checked?={ active } class="bg-white input" /> - + @@ -131,8 +149,12 @@ templ EditTransactionRecurring(transactionRecurring *types.TransactionRecurring, value={ value } class="bg-white input" /> - - + if accountId != "" { + + } + if treasureChestId != "" { + + } -
-
-

Monthly Transactions

- -
- @transactionsRecurring + if id != "new" { +
+
+

Monthly Transactions

+ +
+ @transactionsRecurring + } }