From adac366896c89bdfe66dfe0e13838fd1836b82ff Mon Sep 17 00:00:00 2001 From: kalipso Date: Fri, 11 Apr 2025 14:39:58 +0200 Subject: [PATCH] add orders edit view --- controllers/cartItemController.go | 63 +++++++++++++++++++++++++++++++ main.go | 2 + views/header.html | 2 + 3 files changed, 67 insertions(+) diff --git a/controllers/cartItemController.go b/controllers/cartItemController.go index b55fe4b..92d1104 100644 --- a/controllers/cartItemController.go +++ b/controllers/cartItemController.go @@ -26,6 +26,8 @@ type CartItemController interface { CheckoutHandler(*gin.Context) OrderView(*gin.Context) OrderHandler(*gin.Context) + OrdersView(*gin.Context) + OrdersHandler(*gin.Context) } type cartItemController struct{} @@ -496,3 +498,64 @@ func (rc *cartItemController) OrderHandler(c *gin.Context) { c.Redirect(http.StatusFound, fmt.Sprintf("/order/%s", order.Token)) } + +func (rc *cartItemController) OrdersView(c *gin.Context) { + orders, err := repositories.Orders.GetAll() + + if err != nil { + c.HTML(http.StatusBadRequest, "error.html", gin.H{"error": "Orders doe not exist."}) + return + } + + c.HTML(http.StatusOK, "editorders.html", CreateSessionData(c, gin.H{ + "error": "", + "success": "", + "orders": orders, + })) +} + +func (rc *cartItemController) OrdersHandler(c *gin.Context) { + confirmation := c.PostForm("confirm-order") + + if confirmation == "" { + c.HTML(http.StatusBadRequest, "error.html", gin.H{"error": "Something went wrong, try again later"}) + return + } + + if confirmation != "true" { + c.HTML(http.StatusBadRequest, "error.html", gin.H{"error": "Order was not confirmed."}) + return + } + + sessionId := GetSessionId(c) + order, err := repositories.Orders.GetBySession(sessionId) + + if err != nil { + c.HTML(http.StatusBadRequest, "error.html", gin.H{"error": "Something went wrong, try again later"}) + return + } + + order.Status = models.AwaitingPayment + + err = order.Validate() + if err != nil { + c.HTML(http.StatusBadRequest, "error.html", gin.H{"error": err}) + return + } + + for idx := range order.CartItems { + order.CartItems[idx].SessionId = "0" + repositories.CartItems.Update(order.CartItems[idx]) + } + + _, err = repositories.Orders.Update(order) + + if err != nil { + c.HTML(http.StatusBadRequest, "error.html", gin.H{"error": err}) + return + } + + //TODO: cartItemRepository delete all by session - otherwise items stay in cart after completing order.. + + c.Redirect(http.StatusFound, fmt.Sprintf("/order/%s", order.Token)) +} diff --git a/main.go b/main.go index dc3e73b..4972f7c 100644 --- a/main.go +++ b/main.go @@ -98,6 +98,8 @@ func main() { viewRoutes.POST("/order", cartItemController.OrderHandler) viewRoutes.GET("/order/:token", cartItemController.OrderView) viewRoutes.GET("/order/:token/print", authValidator.RequireAuth, printController.PrintOrderView) + viewRoutes.GET("/orders", authValidator.RequireAuth, cartItemController.OrdersView) + viewRoutes.POST("/orders", authValidator.RequireAuth, cartItemController.OrdersHandler) //write middleware that redirects to homescreen on register/login/reset for logged in users viewRoutes.GET("/login", userController.LoginView) diff --git a/views/header.html b/views/header.html index 9fe7f9d..4678cc1 100644 --- a/views/header.html +++ b/views/header.html @@ -30,6 +30,8 @@ Add Item Batch Upload + Orders Tags Print