From 28866ac5fbae80314ecc079b8e445ca90cf36f2d Mon Sep 17 00:00:00 2001 From: Ruidy Date: Fri, 22 Mar 2024 21:45:57 +0100 Subject: [PATCH] update line item --- internal/booking/service.go | 12 +++++++++++ internal/server/handle_bookings.go | 32 ++++++++++++++++++++++++++++++ internal/server/routes.go | 1 + internal/view/line_item.templ | 14 ++++++------- internal/view/line_item_templ.go | 14 ++++++------- 5 files changed, 59 insertions(+), 14 deletions(-) diff --git a/internal/booking/service.go b/internal/booking/service.go index 6a271be..961f990 100644 --- a/internal/booking/service.go +++ b/internal/booking/service.go @@ -98,6 +98,18 @@ func (bs Service) OneItem(id int) *Item { return i } +func (bs Service) UpdateItem(id int, item string, qty int, price float64, paymentMethod, paymentStatus string) *Item { + i := new(Item) + bs.db.Model(i).Clauses(clause.Returning{}).Where("id = ?", id).Updates(map[string]any{ + "item": item, + "payment_method": paymentMethod, + "payment_status": paymentStatus, + "quantity": qty, + "price": price, + }) + return i +} + type Report struct { Lines []*Line Total float64 diff --git a/internal/server/handle_bookings.go b/internal/server/handle_bookings.go index 52fd01a..476d0d6 100644 --- a/internal/server/handle_bookings.go +++ b/internal/server/handle_bookings.go @@ -243,3 +243,35 @@ func handlePayItem(bs *booking.Service) echo.HandlerFunc { })) } } + +func handleUpdateItem(bs *booking.Service) echo.HandlerFunc { + return func(c echo.Context) error { + type updateItem struct { + Item string `form:"item"` + PaymentMethod string `form:"paymentMethod"` + PaymentStatus string `form:"paymentStatus"` + Id int `param:"id"` + Quantity int `form:"quantity"` + Price float64 `form:"price"` + } + ui := new(updateItem) + + if err := c.Bind(ui); err != nil { + log.Warn(err) + return err + } + + i := bs.UpdateItem(ui.Id, ui.Item, ui.Quantity, ui.Price, ui.PaymentMethod, ui.PaymentStatus) + + return renderTempl(c, http.StatusCreated, view.LineItem(&view.ItemViewModel{ + Id: strconv.Itoa(ui.Id), + Item: i.Item, + Quantity: strconv.Itoa(i.Quantity), + Price: strconv.FormatFloat(i.Price, 'f', 2, 64), + PaymentMethod: i.PaymentMethod, + PaymentStatus: i.PaymentStatus, + SubTotal: strconv.FormatFloat(i.Price*float64(i.Quantity), 'f', 2, 64), + ItemUrl: fmt.Sprintf("%s/%d", constant.RouteItem, i.Id), + })) + } +} diff --git a/internal/server/routes.go b/internal/server/routes.go index 76deae7..d5704d2 100644 --- a/internal/server/routes.go +++ b/internal/server/routes.go @@ -12,6 +12,7 @@ func (s Server) MountHandlers() { s.Router.PUT("/bookings/:id", handleUpdateBooking(s.bs, s.hc)) s.Router.POST("/bookings/:id/items", handleCreateItem(s.bs)) s.Router.POST("/items/:id", handlePayItem(s.bs)) + s.Router.PUT("/items/:id", handleUpdateItem(s.bs)) s.Router.GET("/items/:id", handleLineItemForm(s.bs)) s.Router.GET("/bookings/pdf/:id", handleCreateInvoicePdf(s.bs, s.ps, s.hc)) s.Router.GET("/reports", handleReportsPage()) diff --git a/internal/view/line_item.templ b/internal/view/line_item.templ index 0ddd280..d76187d 100644 --- a/internal/view/line_item.templ +++ b/internal/view/line_item.templ @@ -19,15 +19,15 @@ templ LineItem(item *ItemViewModel) { templ LineItemForm(item *ItemViewModel) { -
- - - - - + + + + + + { item.SubTotal } - +
diff --git a/internal/view/line_item_templ.go b/internal/view/line_item_templ.go index 99795a6..31145a0 100644 --- a/internal/view/line_item_templ.go +++ b/internal/view/line_item_templ.go @@ -159,7 +159,7 @@ func LineItemForm(item *ItemViewModel) templ.Component { if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("\">") + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("\" name=\"PaymentStatus\" form=\"edit-item\">") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -212,7 +212,7 @@ func LineItemForm(item *ItemViewModel) templ.Component { if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("") + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err }