diff --git a/internal/server/handle_bookings.go b/internal/server/handle_bookings.go index 68c29fc..7598eda 100644 --- a/internal/server/handle_bookings.go +++ b/internal/server/handle_bookings.go @@ -140,6 +140,7 @@ func handleBookingPage(bs *booking.Service, hc *config.Host) echo.HandlerFunc { Items: u.Map(b.Items, func(i booking.Item) view.ItemViewModel { return view.ItemViewModel{ Id: strconv.Itoa(i.Id), + BookingId: strconv.Itoa(b.Id), Item: i.Item, Quantity: strconv.Itoa(i.Quantity), Price: strconv.FormatFloat(i.Price, 'f', 2, 64), diff --git a/internal/server/handle_payments.go b/internal/server/handle_payments.go new file mode 100644 index 0000000..4c3d1a2 --- /dev/null +++ b/internal/server/handle_payments.go @@ -0,0 +1,27 @@ +package server + +import ( + "log" + "net/http" + "strconv" + + "github.com/labstack/echo/v4" + + "github.com/rjNemo/rentease/internal/service/booking" + "github.com/rjNemo/rentease/internal/view" +) + +func handleCreatePaymentModal(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 + } + + b := bs.One(id) + log.Println(b) + + return renderTempl(c, http.StatusOK, view.PaymentModal(b.Id)) + } +} diff --git a/internal/server/routes.go b/internal/server/routes.go index 75106d8..e03fced 100644 --- a/internal/server/routes.go +++ b/internal/server/routes.go @@ -22,6 +22,7 @@ func (s Server) MountHandlers() { private := s.Router.Group("") private.Use(MakeAuthMiddleware(s.as)) + private.GET("/bookings", handleBookingListPage(s.bs, s.hc)) private.GET("/bookings/new", handleBookingCreatePage(s.hc)) private.POST("/bookings/new", handleBookingCreate(s.bs)) @@ -30,10 +31,14 @@ func (s Server) MountHandlers() { private.PATCH("/bookings/:id/cancel", handleBookingCancel(s.bs)) private.POST("/bookings/:id/items", handleCreateItem(s.bs, s.hc)) private.GET("/bookings/pdf/:id", handlePdfCreateInvoice(s.bs, s.hc)) + private.POST("/items/:id", handleItemPay(s.bs)) private.PUT("/items/:id", handleItemUpdate(s.bs)) private.GET("/items/:id", handleLineItemForm(s.bs)) + private.GET("/reports", handleReportsPage()) private.GET("/reports/do", handleReportCompute(s.bs, s.hc)) private.GET("/reports/pdf", handlePdfCreateReport(s.bs)) + + private.GET("/payments/modal/:id", handleCreatePaymentModal(s.bs)) } diff --git a/internal/view/item_viewmodel.go b/internal/view/item_viewmodel.go index 151fb0e..92e72d7 100644 --- a/internal/view/item_viewmodel.go +++ b/internal/view/item_viewmodel.go @@ -2,6 +2,7 @@ package view type ItemViewModel struct { Id string + BookingId string Item string Quantity string Price string diff --git a/internal/view/line_item.templ b/internal/view/line_item.templ index 263162e..05abc7f 100644 --- a/internal/view/line_item.templ +++ b/internal/view/line_item.templ @@ -11,7 +11,36 @@ templ LineItem(item *ItemViewModel) { if item.PaymentStatus != "Completed" { - + + + + } diff --git a/internal/view/line_item_templ.go b/internal/view/line_item_templ.go index 01ec3f8..cc06391 100644 --- a/internal/view/line_item_templ.go +++ b/internal/view/line_item_templ.go @@ -112,70 +112,57 @@ func LineItem(item *ItemViewModel) templ.Component { return templ_7745c5c3_Err } if item.PaymentStatus != "Completed" { - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 8, "") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 8, "

Add Payment

") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 10, "") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 9, "") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } if len(item.Payments) > 0 { for _, payment := range item.Payments { - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 11, "- ") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 10, "- ") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + var templ_7745c5c3_Var8 string + templ_7745c5c3_Var8, templ_7745c5c3_Err = templ.JoinStringErrs(payment.Amount) + if templ_7745c5c3_Err != nil { + return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/view/line_item.templ`, Line: 52, Col: 26} + } + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var8)) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 11, "") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } var templ_7745c5c3_Var9 string - templ_7745c5c3_Var9, templ_7745c5c3_Err = templ.JoinStringErrs(payment.Amount) + templ_7745c5c3_Var9, templ_7745c5c3_Err = templ.JoinStringErrs(payment.PaymentMethod) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/view/line_item.templ`, Line: 23, Col: 26} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/view/line_item.templ`, Line: 53, Col: 31} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var9)) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 12, "") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 12, "") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 13, "\" hx-target=\"closest tr\" hx-swap=\"outerHTML\">Edit") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -201,103 +188,103 @@ func LineItemForm(item *ItemViewModel) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var12 := templ.GetChildren(ctx) - if templ_7745c5c3_Var12 == nil { - templ_7745c5c3_Var12 = templ.NopComponent + templ_7745c5c3_Var11 := templ.GetChildren(ctx) + if templ_7745c5c3_Var11 == nil { + templ_7745c5c3_Var11 = templ.NopComponent } ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 15, "
") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } var templ_7745c5c3_Var18 string - templ_7745c5c3_Var18, templ_7745c5c3_Err = templ.JoinStringErrs(item.PaymentStatus) + templ_7745c5c3_Var18, 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: 42, Col: 85} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/view/line_item.templ`, Line: 72, Col: 22} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var18)) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 21, "\" name=\"PaymentStatus\" form=\"edit-item\">") - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - var templ_7745c5c3_Var19 string - templ_7745c5c3_Var19, 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: 43, Col: 22} - } - _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var19)) - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 22, "
") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 21, "") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } diff --git a/internal/view/payment_modal.templ b/internal/view/payment_modal.templ new file mode 100644 index 0000000..bfe51a0 --- /dev/null +++ b/internal/view/payment_modal.templ @@ -0,0 +1,17 @@ +package view + +templ PaymentModal(bid int) { + +} diff --git a/internal/view/payment_modal_templ.go b/internal/view/payment_modal_templ.go new file mode 100644 index 0000000..2a65bc2 --- /dev/null +++ b/internal/view/payment_modal_templ.go @@ -0,0 +1,40 @@ +// Code generated by templ - DO NOT EDIT. + +// templ: version: v0.3.819 +package view + +//lint:file-ignore SA4006 This context is only used if a nested component is present. + +import "github.com/a-h/templ" +import templruntime "github.com/a-h/templ/runtime" + +func PaymentModal(bid int) templ.Component { + return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context + if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { + return templ_7745c5c3_CtxErr + } + templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) + if !templ_7745c5c3_IsBuffer { + defer func() { + templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer) + if templ_7745c5c3_Err == nil { + templ_7745c5c3_Err = templ_7745c5c3_BufErr + } + }() + } + ctx = templ.InitializeContext(ctx) + templ_7745c5c3_Var1 := templ.GetChildren(ctx) + if templ_7745c5c3_Var1 == nil { + templ_7745c5c3_Var1 = templ.NopComponent + } + ctx = templ.ClearChildren(ctx) + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 1, "
Modal title

Modal body text goes here.

") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + return nil + }) +} + +var _ = templruntime.GeneratedTemplate