diff --git a/http/transaction-edit.go b/http/transaction-edit.go index 65a76a7..d784e2b 100644 --- a/http/transaction-edit.go +++ b/http/transaction-edit.go @@ -13,6 +13,7 @@ type TransactionData struct { Transaction *postgres.Transaction Account *postgres.Account Categories []postgres.GetCategoriesRow + Payees []postgres.Payee } func (h *Handler) transaction(c *gin.Context) { @@ -43,11 +44,18 @@ func (h *Handler) transaction(c *gin.Context) { return } + payees, err := h.Service.GetPayees(c.Request.Context(), data.Budget.ID) + if err != nil { + c.AbortWithError(http.StatusNotFound, err) + return + } + d := TransactionData{ data, &transaction, &account, categories, + payees, } c.HTML(http.StatusOK, "transaction.html", d) diff --git a/http/transaction.go b/http/transaction.go index 966e5b1..301acf1 100644 --- a/http/transaction.go +++ b/http/transaction.go @@ -72,6 +72,12 @@ func (h *Handler) newTransaction(c *gin.Context) { return } + transactionPayeeID, err := getNullUUIDFromForm(c, "payee_id") + if err != nil { + c.AbortWithError(http.StatusNotAcceptable, fmt.Errorf("payee_id: %w", err)) + return + } + transactionDate, succ := c.GetPostForm("date") if !succ { c.AbortWithError(http.StatusNotAcceptable, fmt.Errorf("date missing")) @@ -95,39 +101,47 @@ func (h *Handler) newTransaction(c *gin.Context) { transactionUUID, err := getNullUUIDFromParam(c, "transactionid") if err != nil { - + c.AbortWithError(http.StatusInternalServerError, fmt.Errorf("parse transaction id: %w", err)) + return } + if !transactionUUID.Valid { new := postgres.CreateTransactionParams{ Memo: transactionMemo, Date: transactionDateValue, Amount: amount, AccountID: transactionAccountID, - PayeeID: uuid.NullUUID{}, + PayeeID: transactionPayeeID, CategoryID: transactionCategoryID, } _, err = h.Service.CreateTransaction(c.Request.Context(), new) if err != nil { c.AbortWithError(http.StatusInternalServerError, fmt.Errorf("create transaction: %w", err)) - return } - } else { - _, delete := c.GetPostForm("delete") - if delete { - h.Service.DeleteTransaction(c.Request.Context(), transactionUUID.UUID) - } - update := postgres.UpdateTransactionParams{ - Memo: transactionMemo, - Date: transactionDateValue, - Amount: amount, - AccountID: transactionAccountID, - PayeeID: uuid.NullUUID{}, - CategoryID: transactionCategoryID, - } - err = h.Service.UpdateTransaction(c.Request.Context(), update) + + return + } + + _, delete := c.GetPostForm("delete") + if delete { + err = h.Service.DeleteTransaction(c.Request.Context(), transactionUUID.UUID) if err != nil { - c.AbortWithError(http.StatusInternalServerError, fmt.Errorf("update transaction: %w", err)) - return + c.AbortWithError(http.StatusInternalServerError, fmt.Errorf("delete transaction: %w", err)) } + return + } + + update := postgres.UpdateTransactionParams{ + ID: transactionUUID.UUID, + Memo: transactionMemo, + Date: transactionDateValue, + Amount: amount, + AccountID: transactionAccountID, + PayeeID: transactionPayeeID, + CategoryID: transactionCategoryID, + } + err = h.Service.UpdateTransaction(c.Request.Context(), update) + if err != nil { + c.AbortWithError(http.StatusInternalServerError, fmt.Errorf("update transaction: %w", err)) } } diff --git a/postgres/payees.sql.go b/postgres/payees.sql.go index a723f28..34f036a 100644 --- a/postgres/payees.sql.go +++ b/postgres/payees.sql.go @@ -31,6 +31,7 @@ func (q *Queries) CreatePayee(ctx context.Context, arg CreatePayeeParams) (Payee const getPayees = `-- name: GetPayees :many SELECT payees.id, payees.budget_id, payees.name FROM payees WHERE payees.budget_id = $1 +ORDER BY name ` func (q *Queries) GetPayees(ctx context.Context, budgetID uuid.UUID) ([]Payee, error) { diff --git a/postgres/queries/payees.sql b/postgres/queries/payees.sql index 811b1c5..c421005 100644 --- a/postgres/queries/payees.sql +++ b/postgres/queries/payees.sql @@ -6,4 +6,5 @@ RETURNING *; -- name: GetPayees :many SELECT payees.* FROM payees -WHERE payees.budget_id = $1; \ No newline at end of file +WHERE payees.budget_id = $1 +ORDER BY name; \ No newline at end of file diff --git a/web/transaction.html b/web/transaction.html index 3b2a17b..9300fcf 100644 --- a/web/transaction.html +++ b/web/transaction.html @@ -36,11 +36,17 @@ + +
+ +