From b89a760aa3710a6ced11194543d120ff1c503816 Mon Sep 17 00:00:00 2001 From: Ruidy Date: Fri, 22 Mar 2024 15:19:55 +0100 Subject: [PATCH] get line form on click edit button --- internal/booking/service.go | 6 ++ internal/server/handle_bookings.go | 22 +++++++ internal/server/routes.go | 1 + internal/view/line_item.templ | 18 +++++- internal/view/line_item_templ.go | 95 +++++++++++++++++++++++++++++- 5 files changed, 140 insertions(+), 2 deletions(-) diff --git a/internal/booking/service.go b/internal/booking/service.go index b47b6a3..6a271be 100644 --- a/internal/booking/service.go +++ b/internal/booking/service.go @@ -92,6 +92,12 @@ func (bs Service) PayItem(id int) *Item { return i } +func (bs Service) OneItem(id int) *Item { + i := &Item{Id: id} + bs.db.First(i) + return i +} + type Report struct { Lines []*Line Total float64 diff --git a/internal/server/handle_bookings.go b/internal/server/handle_bookings.go index aac07ac..52fd01a 100644 --- a/internal/server/handle_bookings.go +++ b/internal/server/handle_bookings.go @@ -167,6 +167,28 @@ func handleUpdateBooking(bs *booking.Service, hc *config.Host) echo.HandlerFunc } } +func handleLineItemForm(bs *booking.Service) echo.HandlerFunc { + return func(c echo.Context) error { + idStr := c.Param("id") + id, err := strconv.Atoi(idStr) + if err != nil { + return err + } + i := bs.OneItem(id) + form := view.LineItemForm(&view.ItemViewModel{ + Id: strconv.Itoa(i.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), + }) + return renderTempl(c, http.StatusOK, form) + } +} + func handleCreateItem(bs *booking.Service) echo.HandlerFunc { return func(c echo.Context) error { bookingIdStr := c.Param("id") diff --git a/internal/server/routes.go b/internal/server/routes.go index e839fa8..76deae7 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.GET("/items/:id", handleLineItemForm(s.bs)) s.Router.GET("/bookings/pdf/:id", handleCreateInvoicePdf(s.bs, s.ps, s.hc)) s.Router.GET("/reports", handleReportsPage()) s.Router.GET("/reports/do", handleComputeReport(s.bs, s.hc)) diff --git a/internal/view/line_item.templ b/internal/view/line_item.templ index 5fcd793..0ddd280 100644 --- a/internal/view/line_item.templ +++ b/internal/view/line_item.templ @@ -9,10 +9,26 @@ templ LineItem(item *ItemViewModel) { { item.PaymentStatus } { item.SubTotal } - + if item.PaymentStatus != "Completed" { } } + +templ LineItemForm(item *ItemViewModel) { + +
+ + + + + + { item.SubTotal } + + + +
+ +} diff --git a/internal/view/line_item_templ.go b/internal/view/line_item_templ.go index 82ec05f..99795a6 100644 --- a/internal/view/line_item_templ.go +++ b/internal/view/line_item_templ.go @@ -101,7 +101,15 @@ func LineItem(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 } @@ -129,3 +137,88 @@ func LineItem(item *ItemViewModel) templ.Component { return templ_7745c5c3_Err }) } + +func LineItemForm(item *ItemViewModel) templ.Component { + return templ.ComponentFunc(func(ctx context.Context, templ_7745c5c3_W io.Writer) (templ_7745c5c3_Err error) { + templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templ_7745c5c3_W.(*bytes.Buffer) + if !templ_7745c5c3_IsBuffer { + templ_7745c5c3_Buffer = templ.GetBuffer() + defer templ.ReleaseBuffer(templ_7745c5c3_Buffer) + } + ctx = templ.InitializeContext(ctx) + templ_7745c5c3_Var8 := templ.GetChildren(ctx) + if templ_7745c5c3_Var8 == nil { + templ_7745c5c3_Var8 = templ.NopComponent + } + ctx = templ.ClearChildren(ctx) + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("
") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + var templ_7745c5c3_Var9 string + templ_7745c5c3_Var9, templ_7745c5c3_Err = templ.JoinStringErrs(item.SubTotal) + if templ_7745c5c3_Err != nil { + return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/view/line_item.templ`, Line: 27, Col: 22} + } + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var9)) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("
") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + if !templ_7745c5c3_IsBuffer { + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteTo(templ_7745c5c3_W) + } + return templ_7745c5c3_Err + }) +}