From 729e343a74f61b11a46dd736a7124b3492166476 Mon Sep 17 00:00:00 2001 From: Ruidy Date: Sun, 19 Jan 2025 20:12:35 +0100 Subject: [PATCH] feat: fetch payments with the booking --- internal/repository/booking/pg_store.go | 2 +- internal/server/handle_bookings.go | 38 +++--- internal/server/handle_payments.go | 14 +- internal/view/booking_by_id.templ | 6 +- internal/view/booking_by_id_templ.go | 26 ++-- internal/view/booking_viewmodel.go | 8 +- internal/view/item_list.templ | 15 +++ internal/view/item_list_templ.go | 49 ++++++- internal/view/item_list_viewmodel.go | 3 +- internal/view/item_viewmodel.go | 7 - internal/view/line_item.templ | 17 +-- internal/view/line_item_templ.go | 164 ++++++++---------------- 12 files changed, 166 insertions(+), 183 deletions(-) diff --git a/internal/repository/booking/pg_store.go b/internal/repository/booking/pg_store.go index 5977d9e..8c00abb 100644 --- a/internal/repository/booking/pg_store.go +++ b/internal/repository/booking/pg_store.go @@ -82,7 +82,7 @@ func (ps *PgStore) CardTotal(from, to time.Time) (float64, error) { func (ps *PgStore) Get(id int) *booking.Booking { var b booking.Booking - ps.db.Preload("Items").First(&b, id) + ps.db.Preload("Items").Preload("Payments").First(&b, id) return &b } diff --git a/internal/server/handle_bookings.go b/internal/server/handle_bookings.go index 8196368..9085154 100644 --- a/internal/server/handle_bookings.go +++ b/internal/server/handle_bookings.go @@ -138,24 +138,26 @@ func handleBookingPage(bs *booking.Service, hc *config.Host) echo.HandlerFunc { PdfUrl: templ.SafeURL(fmt.Sprintf("%s/pdf/%d", constant.RouteBooking, b.Id)), CancelUrl: fmt.Sprintf("%s/%d/cancel", constant.RouteBooking, b.Id), PaymentUrl: fmt.Sprintf("%s/%d", constant.RoutePayment, b.Id), - Items: u.Map(b.Items, func(i booking.Item) view.ItemViewModel { - return view.ItemViewModel{ - Id: strconv.Itoa(i.Id), - Item: i.Item, - Quantity: strconv.Itoa(i.Quantity), - Price: strconv.FormatFloat(i.Price, 'f', 2, 64), - SubTotal: strconv.FormatFloat(i.Price*float64(i.Quantity), 'f', 2, 64), - PaymentStatus: i.PaymentStatus, - ItemUrl: fmt.Sprintf("%s/%d", constant.RouteItem, i.Id), - Payments: []view.Payment{ - { - Amount: "12.00", - PaymentMethod: "Card", - PaymentUrl: fmt.Sprintf("%s/%d", constant.RoutePayment, b.Id), - }, - }, - } - }), + Items: view.ItemListViewModel{ + Items: u.Map(b.Items, func(i booking.Item) view.ItemViewModel { + return view.ItemViewModel{ + Id: strconv.Itoa(i.Id), + Item: i.Item, + Quantity: strconv.Itoa(i.Quantity), + Price: strconv.FormatFloat(i.Price, 'f', 2, 64), + SubTotal: strconv.FormatFloat(i.Price*float64(i.Quantity), 'f', 2, 64), + PaymentStatus: i.PaymentStatus, + ItemUrl: fmt.Sprintf("%s/%d", constant.RouteItem, i.Id), + } + }), + Payments: u.Map(b.Payments, func(p booking.Payment) view.Payment { + return view.Payment{ + Amount: strconv.FormatFloat(p.Amount, 'f', 2, 64), + PaymentMethod: p.PaymentMethod, + PaymentUrl: fmt.Sprintf("%s/%d", constant.RoutePayment, p.ID), + } + }), + }, Total: strconv.FormatFloat(u.Reduce(b.Items, func(i booking.Item, sum float64) float64 { return sum + i.Price*float64(i.Quantity) }, 0.0), 'f', 2, 64), diff --git a/internal/server/handle_payments.go b/internal/server/handle_payments.go index 31559d2..a2737fc 100644 --- a/internal/server/handle_payments.go +++ b/internal/server/handle_payments.go @@ -47,13 +47,13 @@ func handleCreatePayment(bs *booking.Service) echo.HandlerFunc { SubTotal: strconv.FormatFloat(i.Price*float64(i.Quantity), 'f', 2, 64), PaymentStatus: i.PaymentStatus, ItemUrl: fmt.Sprintf("%s/%d", constant.RouteItem, i.Id), - Payments: u.Map(b.Payments, func(p booking.Payment) view.Payment { - return view.Payment{ - Amount: strconv.FormatFloat(p.Amount, 'f', 2, 64), - PaymentMethod: p.PaymentMethod, - PaymentUrl: fmt.Sprintf("%s/%d", constant.RoutePayment, p.ID), - } - }), + } + }), + Payments: u.Map(b.Payments, func(p booking.Payment) view.Payment { + return view.Payment{ + Amount: strconv.FormatFloat(p.Amount, 'f', 2, 64), + PaymentMethod: p.PaymentMethod, + PaymentUrl: fmt.Sprintf("%s/%d", constant.RoutePayment, p.ID), } }), })) diff --git a/internal/view/booking_by_id.templ b/internal/view/booking_by_id.templ index 575e62e..ffe6b98 100644 --- a/internal/view/booking_by_id.templ +++ b/internal/view/booking_by_id.templ @@ -45,11 +45,7 @@ templ BookingById(booking *BookingViewModel) { - - for _, item := range booking.Items { - @LineItem(&item) - } - + @ItemList(booking.Items) Total: diff --git a/internal/view/booking_by_id_templ.go b/internal/view/booking_by_id_templ.go index 02c2212..ae88c5e 100644 --- a/internal/view/booking_by_id_templ.go +++ b/internal/view/booking_by_id_templ.go @@ -117,24 +117,22 @@ func BookingById(booking *BookingViewModel) templ.Component { if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 9, "

Line Items

") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 9, "

Line Items

ItemQuantityPrice (€)Payment MethodPayment StatusSub-total (€)
") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - for _, item := range booking.Items { - templ_7745c5c3_Err = LineItem(&item).Render(ctx, templ_7745c5c3_Buffer) - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } + templ_7745c5c3_Err = ItemList(booking.Items).Render(ctx, templ_7745c5c3_Buffer) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 10, " + + + + + + + + + } + } } diff --git a/internal/view/item_list_templ.go b/internal/view/item_list_templ.go index 68e8cb5..77383ed 100644 --- a/internal/view/item_list_templ.go +++ b/internal/view/item_list_templ.go @@ -39,7 +39,54 @@ func ItemList(itemList ItemListViewModel) templ.Component { return templ_7745c5c3_Err } } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 2, "") + if len(itemList.Payments) > 0 { + for _, payment := range itemList.Payments { + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 2, "") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + } + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 6, "") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } diff --git a/internal/view/item_list_viewmodel.go b/internal/view/item_list_viewmodel.go index 9f30fd9..7070c0f 100644 --- a/internal/view/item_list_viewmodel.go +++ b/internal/view/item_list_viewmodel.go @@ -1,5 +1,6 @@ package view type ItemListViewModel struct { - Items []ItemViewModel + Items []ItemViewModel + Payments []Payment } diff --git a/internal/view/item_viewmodel.go b/internal/view/item_viewmodel.go index 151fb0e..63c9824 100644 --- a/internal/view/item_viewmodel.go +++ b/internal/view/item_viewmodel.go @@ -8,11 +8,4 @@ type ItemViewModel struct { SubTotal string PaymentStatus string ItemUrl string - Payments []Payment -} - -type Payment struct { - Amount string - PaymentMethod string - PaymentUrl string } diff --git a/internal/view/line_item.templ b/internal/view/line_item.templ index 477319d..7a6c1f5 100644 --- a/internal/view/line_item.templ +++ b/internal/view/line_item.templ @@ -12,21 +12,6 @@ templ LineItem(item *ItemViewModel) { - if len(item.Payments) >0 { - for _,payment := range item.Payments { - - - - - - - - - - } - } } templ LineItemForm(item *ItemViewModel) { @@ -35,7 +20,7 @@ templ LineItemForm(item *ItemViewModel) { - + ") - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - } - } return nil }) } @@ -178,103 +131,90 @@ func LineItemForm(item *ItemViewModel) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var11 := templ.GetChildren(ctx) - if templ_7745c5c3_Var11 == nil { - templ_7745c5c3_Var11 = templ.NopComponent + templ_7745c5c3_Var8 := templ.GetChildren(ctx) + if templ_7745c5c3_Var8 == nil { + templ_7745c5c3_Var8 = templ.NopComponent } ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 12, "") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 14, "") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err }
ItemQuantityPrice (€)Payment MethodPayment StatusSub-total (€)
Total:") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 10, "
Total:") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } var templ_7745c5c3_Var7 string templ_7745c5c3_Var7, templ_7745c5c3_Err = templ.JoinStringErrs(booking.Total) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/view/booking_by_id.templ`, Line: 56, Col: 26} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/view/booking_by_id.templ`, Line: 52, Col: 26} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var7)) if templ_7745c5c3_Err != nil { @@ -147,7 +145,7 @@ func BookingById(booking *BookingViewModel) templ.Component { var templ_7745c5c3_Var8 string templ_7745c5c3_Var8, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%s/items", booking.Url)) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/view/booking_by_id.templ`, Line: 72, Col: 51} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/view/booking_by_id.templ`, Line: 68, Col: 51} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var8)) if templ_7745c5c3_Err != nil { @@ -165,7 +163,7 @@ func BookingById(booking *BookingViewModel) templ.Component { var templ_7745c5c3_Var9 string templ_7745c5c3_Var9, templ_7745c5c3_Err = templ.JoinStringErrs(item) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/view/booking_by_id.templ`, Line: 84, Col: 28} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/view/booking_by_id.templ`, Line: 80, Col: 28} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var9)) if templ_7745c5c3_Err != nil { @@ -178,7 +176,7 @@ func BookingById(booking *BookingViewModel) templ.Component { var templ_7745c5c3_Var10 string templ_7745c5c3_Var10, templ_7745c5c3_Err = templ.JoinStringErrs(item) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/view/booking_by_id.templ`, Line: 84, Col: 37} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/view/booking_by_id.templ`, Line: 80, Col: 37} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var10)) if templ_7745c5c3_Err != nil { @@ -201,7 +199,7 @@ func BookingById(booking *BookingViewModel) templ.Component { var templ_7745c5c3_Var11 string templ_7745c5c3_Var11, templ_7745c5c3_Err = templ.JoinStringErrs(paymentMethod) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/view/booking_by_id.templ`, Line: 120, Col: 37} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/view/booking_by_id.templ`, Line: 116, Col: 37} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var11)) if templ_7745c5c3_Err != nil { @@ -214,7 +212,7 @@ func BookingById(booking *BookingViewModel) templ.Component { var templ_7745c5c3_Var12 string templ_7745c5c3_Var12, templ_7745c5c3_Err = templ.JoinStringErrs(paymentMethod) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/view/booking_by_id.templ`, Line: 120, Col: 55} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/view/booking_by_id.templ`, Line: 116, Col: 55} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var12)) if templ_7745c5c3_Err != nil { @@ -271,7 +269,7 @@ func PaymentModal(paymentUrl string) templ.Component { var templ_7745c5c3_Var14 string templ_7745c5c3_Var14, templ_7745c5c3_Err = templ.JoinStringErrs(paymentUrl) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/view/booking_by_id.templ`, Line: 142, Col: 24} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/view/booking_by_id.templ`, Line: 138, Col: 24} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var14)) if templ_7745c5c3_Err != nil { diff --git a/internal/view/booking_viewmodel.go b/internal/view/booking_viewmodel.go index 13c3fe3..74961aa 100644 --- a/internal/view/booking_viewmodel.go +++ b/internal/view/booking_viewmodel.go @@ -15,7 +15,7 @@ type BookingViewModel struct { ExternalId string Platforms []string PlatformFees string - Items []ItemViewModel + Items ItemListViewModel ItemList []string PaymentMethods []string Url string @@ -24,3 +24,9 @@ type BookingViewModel struct { CancelUrl string Total string } + +type Payment struct { + Amount string + PaymentMethod string + PaymentUrl string +} diff --git a/internal/view/item_list.templ b/internal/view/item_list.templ index 3ad63f5..f08a9f4 100644 --- a/internal/view/item_list.templ +++ b/internal/view/item_list.templ @@ -5,5 +5,20 @@ templ ItemList(itemList ItemListViewModel) { for _, item := range itemList.Items { @LineItem(&item) } + if len(itemList.Payments) >0 { + for _,payment := range itemList.Payments { +
- { payment.Amount }{ payment.PaymentMethod } + +
- ") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + var templ_7745c5c3_Var2 string + templ_7745c5c3_Var2, templ_7745c5c3_Err = templ.JoinStringErrs(payment.Amount) + if templ_7745c5c3_Err != nil { + return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/view/item_list.templ`, Line: 13, Col: 27} + } + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var2)) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 3, "") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + var templ_7745c5c3_Var3 string + templ_7745c5c3_Var3, templ_7745c5c3_Err = templ.JoinStringErrs(payment.PaymentMethod) + if templ_7745c5c3_Err != nil { + return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/view/item_list.templ`, Line: 14, Col: 32} + } + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var3)) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 4, "
- { payment.Amount }{ payment.PaymentMethod } - -
{ item.SubTotal } diff --git a/internal/view/line_item_templ.go b/internal/view/line_item_templ.go index eea89d8..b36a42c 100644 --- a/internal/view/line_item_templ.go +++ b/internal/view/line_item_templ.go @@ -111,53 +111,6 @@ func LineItem(item *ItemViewModel) templ.Component { 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, 8, "
- ") - 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: 20, 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, 9, "") - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - var templ_7745c5c3_Var9 string - 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: 21, 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, 10, "
") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } var templ_7745c5c3_Var14 string - templ_7745c5c3_Var14, templ_7745c5c3_Err = templ.JoinStringErrs(item.Quantity) + templ_7745c5c3_Var14, 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: 36, Col: 80} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/view/line_item.templ`, Line: 25, Col: 22} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var14)) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 15, "\" name=\"quantity\" form=\"edit-item\">") - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - var templ_7745c5c3_Var18 string - 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: 40, 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, 19, "