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, " ")
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, "
")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 21, "Save | ")
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) {
+
+
+
+
+
Modal body text goes here.
+
+
+
+
+}
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 body text goes here.
")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ return nil
+ })
+}
+
+var _ = templruntime.GeneratedTemplate