diff --git a/handler/transaction_recurring.go b/handler/transaction_recurring.go index d56a5ee..cd17f3f 100644 --- a/handler/transaction_recurring.go +++ b/handler/transaction_recurring.go @@ -57,7 +57,7 @@ func (h TransactionRecurringImpl) handleUpdateTransactionRecurring() http.Handle input := types.TransactionRecurringInput{ Id: r.PathValue("id"), IntervalMonths: r.FormValue("interval-months"), - Active: r.FormValue("active"), + NextExecution: r.FormValue("next-execution"), Party: r.FormValue("party"), Description: r.FormValue("description"), AccountId: r.FormValue("account-id"), diff --git a/migration/009_recurring_transaction_change.up.sql b/migration/009_recurring_transaction_change.up.sql new file mode 100644 index 0000000..aea0c01 --- /dev/null +++ b/migration/009_recurring_transaction_change.up.sql @@ -0,0 +1,5 @@ + +ALTER TABLE transaction_recurring DROP COLUMN active; +ALTER TABLE transaction_recurring DROP COLUMN last_execution; +ALTER TABLE transaction_recurring ADD COLUMN next_execution DATETIME; + diff --git a/service/transaction_recurring.go b/service/transaction_recurring.go index 7f54f6f..f3b92ab 100644 --- a/service/transaction_recurring.go +++ b/service/transaction_recurring.go @@ -76,9 +76,9 @@ func (s TransactionRecurringImpl) Add( r, err := tx.NamedExec(` INSERT INTO "transaction_recurring" (id, user_id, interval_months, - active, party, description, account_id, treasure_chest_id, value, created_at, created_by) + next_execution, party, description, account_id, treasure_chest_id, value, created_at, created_by) VALUES (:id, :user_id, :interval_months, - :active, :party, :description, :account_id, :treasure_chest_id, :value, :created_at, :created_by)`, + :next_execution, :party, :description, :account_id, :treasure_chest_id, :value, :created_at, :created_by)`, transactionRecurring) err = db.TransformAndLogDbError("transactionRecurring Insert", r, err) if err != nil { @@ -135,7 +135,7 @@ func (s TransactionRecurringImpl) Update( UPDATE transaction_recurring SET interval_months = :interval_months, - active = :active, + next_execution = :next_execution, party = :party, description = :description, account_id = :account_id, @@ -444,15 +444,24 @@ func (s TransactionRecurringImpl) validateAndEnrichTransactionRecurring( log.Error("transactionRecurring validate: %v", err) return nil, fmt.Errorf("intervalMonths needs to be greater than 0: %w", ErrBadRequest) } - active := input.Active == "on" + var nextExecution *time.Time = nil + if input.NextExecution != "" { + t, err := time.Parse("2006-01-02", input.NextExecution) + if err != nil { + log.Error("transaction validate: %v", err) + return nil, fmt.Errorf("could not parse timestamp: %w", ErrBadRequest) + } + + t = time.Date(t.Year(), t.Month(), 1, 0, 0, 0, 0, t.Location()) + nextExecution = &t + } transactionRecurring := types.TransactionRecurring{ Id: id, UserId: userId, IntervalMonths: intervalMonths, - Active: active, - LastExecution: nil, + NextExecution: nextExecution, Party: input.Party, Description: input.Description, diff --git a/template/transaction_recurring/transaction_recurring.templ b/template/transaction_recurring/transaction_recurring.templ index 3310eb7..0350490 100644 --- a/template/transaction_recurring/transaction_recurring.templ +++ b/template/transaction_recurring/transaction_recurring.templ @@ -1,13 +1,14 @@ package transaction_recurring import "fmt" +import "time" import "spend-sparrow/template/svg" import "spend-sparrow/types" templ TransactionRecurringItems(transactionsRecurring []*types.TransactionRecurring, editId, accountId, treasureChestId string) {
- if transactionRecurring.Active { - ✅ +
+ if transactionRecurring.NextExecution != nil { + { transactionRecurring.NextExecution.Format("2006/01") } } else { - ❌ + - }
@@ -92,12 +93,15 @@ templ EditTransactionRecurring(transactionRecurring *types.TransactionRecurring, description := "" value := "0.00" intervalMonths := "1" - active := true + nextExecution := "" if transactionRecurring == nil { id = "new" + nextExecution = time.Now().Format("2006-01-02") } else { intervalMonths = fmt.Sprintf("%d", transactionRecurring.IntervalMonths) - active = transactionRecurring.Active + if transactionRecurring.NextExecution != nil { + nextExecution = transactionRecurring.NextExecution.Format("2006-01-02") + } party = transactionRecurring.Party description = transactionRecurring.Description value = displayBalance(transactionRecurring.Value) @@ -113,11 +117,10 @@ templ EditTransactionRecurring(transactionRecurring *types.TransactionRecurring, class="hidden" >