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