diff --git a/internal/booking/service.go b/internal/booking/service.go index 387c132..dbabbcf 100644 --- a/internal/booking/service.go +++ b/internal/booking/service.go @@ -20,9 +20,16 @@ func NewService(db *gorm.DB) *Service { return &Service{db: db} } -func (bs Service) All() []*Booking { - bookings := make([]*Booking, 0) - _ = bs.db.Order("id desc").Find(&bookings) +func (bs Service) All() []*Line { + bookings := make([]*Line, 0) + bs.db.Raw(` + select bookings.id, customer_name, "from", "to", platform, sum(price) as total + from bookings + join items on bookings.id = items.booking_id + group by bookings.id + order by id desc; + `). + Scan(&bookings) return bookings } diff --git a/internal/server/handle_bookings.go b/internal/server/handle_bookings.go index 2d66487..962bd3c 100644 --- a/internal/server/handle_bookings.go +++ b/internal/server/handle_bookings.go @@ -22,14 +22,15 @@ func handleListBookingPage(bs *booking.Service, hc *config.Host) echo.HandlerFun return func(c echo.Context) error { bookings := bs.All() - bvm := u.Map(bookings, func(b *booking.Booking) *views.ListBookingsViewModel { + bvm := u.Map(bookings, func(b *booking.Line) *views.ListBookingsViewModel { return &views.ListBookingsViewModel{ Id: b.InvoiceNumber(hc), Url: templ.SafeURL(fmt.Sprintf("%s/%d", constants.RouteBooking, b.Id)), From: b.From.Format("2006-01-02"), To: b.To.Format("2006-01-02"), Platform: b.Platform, - Name: b.Name, + Name: b.CustomerName, + Total: strconv.FormatFloat(b.Total, 'f', 2, 64), } }) diff --git a/internal/views/bookings_list.templ b/internal/views/bookings_list.templ index 045406f..dc2061b 100644 --- a/internal/views/bookings_list.templ +++ b/internal/views/bookings_list.templ @@ -5,6 +5,7 @@ type ListBookingsViewModel struct { Url templ.SafeURL From string To string + Total string Name string Platform string } @@ -36,7 +37,7 @@ templ ListBookings(bookings []*ListBookingsViewModel) { { b.Name } - + { b.Total } { b.From } { b.To } { b.Platform } diff --git a/internal/views/bookings_list_templ.go b/internal/views/bookings_list_templ.go index 0c9e6eb..0a1295e 100644 --- a/internal/views/bookings_list_templ.go +++ b/internal/views/bookings_list_templ.go @@ -15,6 +15,7 @@ type ListBookingsViewModel struct { Url templ.SafeURL From string To string + Total string Name string Platform string } @@ -59,7 +60,7 @@ func ListBookings(bookings []*ListBookingsViewModel) templ.Component { var templ_7745c5c3_Var4 string templ_7745c5c3_Var4, templ_7745c5c3_Err = templ.JoinStringErrs(b.Id) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/views/bookings_list.templ`, Line: 34, Col: 15} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/views/bookings_list.templ`, Line: 35, Col: 15} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var4)) if templ_7745c5c3_Err != nil { @@ -72,20 +73,20 @@ func ListBookings(bookings []*ListBookingsViewModel) templ.Component { var templ_7745c5c3_Var5 string templ_7745c5c3_Var5, templ_7745c5c3_Err = templ.JoinStringErrs(b.Name) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/views/bookings_list.templ`, Line: 37, Col: 19} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/views/bookings_list.templ`, Line: 38, Col: 19} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var5)) 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 } var templ_7745c5c3_Var6 string - templ_7745c5c3_Var6, templ_7745c5c3_Err = templ.JoinStringErrs(b.From) + templ_7745c5c3_Var6, templ_7745c5c3_Err = templ.JoinStringErrs(b.Total) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/views/bookings_list.templ`, Line: 39, Col: 19} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/views/bookings_list.templ`, Line: 39, Col: 20} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var6)) if templ_7745c5c3_Err != nil { @@ -96,9 +97,9 @@ func ListBookings(bookings []*ListBookingsViewModel) templ.Component { return templ_7745c5c3_Err } var templ_7745c5c3_Var7 string - templ_7745c5c3_Var7, templ_7745c5c3_Err = templ.JoinStringErrs(b.To) + templ_7745c5c3_Var7, templ_7745c5c3_Err = templ.JoinStringErrs(b.From) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/views/bookings_list.templ`, Line: 40, Col: 17} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/views/bookings_list.templ`, Line: 40, Col: 19} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var7)) if templ_7745c5c3_Err != nil { @@ -109,14 +110,27 @@ func ListBookings(bookings []*ListBookingsViewModel) templ.Component { return templ_7745c5c3_Err } var templ_7745c5c3_Var8 string - templ_7745c5c3_Var8, templ_7745c5c3_Err = templ.JoinStringErrs(b.Platform) + templ_7745c5c3_Var8, templ_7745c5c3_Err = templ.JoinStringErrs(b.To) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/views/bookings_list.templ`, Line: 41, Col: 23} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/views/bookings_list.templ`, Line: 41, Col: 17} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var8)) 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 + } + var templ_7745c5c3_Var9 string + templ_7745c5c3_Var9, templ_7745c5c3_Err = templ.JoinStringErrs(b.Platform) + if templ_7745c5c3_Err != nil { + return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/views/bookings_list.templ`, Line: 42, Col: 23} + } + _, 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