diff --git a/controllers/cartItemController.go b/controllers/cartItemController.go index 5212ca5..d7d1e3d 100644 --- a/controllers/cartItemController.go +++ b/controllers/cartItemController.go @@ -21,6 +21,7 @@ type CartItemController interface { DeleteItemHandler(*gin.Context) EditItemHandler(*gin.Context) CheckoutView(*gin.Context) + CheckoutHandler(*gin.Context) } type cartItemController struct {} @@ -29,6 +30,15 @@ func NewCartItemController() CartItemController { return &cartItemController{} } + +func GetShippingMethods() []models.Shipping { + return []models.Shipping{ + { Id: "germany", Name: "Germany (DHL)", Price: 3.99 }, + { Id: "international", Name: "International (DHL)", Price: 5.99 }, + { Id: "pickup", Name: "Pickup", Price: 0.00 }, + } +} + func generateSessionId() string { bytes := make([]byte, 16) // 16 bytes = 128 bits _, err := rand.Read(bytes) @@ -151,6 +161,7 @@ func (rc *cartItemController) CartItemView(c *gin.Context) { data := CreateSessionData(c, gin.H{ "cartItems": cartItems, "priceTotal": fmt.Sprintf("%.2f", priceTotal), //round 2 decimals + "shipping": GetShippingMethods(), }) c.HTML(http.StatusOK, "cart.html", data) @@ -229,5 +240,14 @@ func (rc *cartItemController) EditItemHandler(c *gin.Context) { } func (rc *cartItemController) CheckoutView(c *gin.Context) { - c.HTML(http.StatusOK, "checkout.html", gin.H{}) + shippingMethod := c.Query("shippingMethod") + + c.HTML(http.StatusOK, "checkout.html", gin.H{ + "askAddress": (shippingMethod != "pickup"), + "shippingMethod": shippingMethod, + }) +} + +func (rc *cartItemController) CheckoutHandler(*gin.Context) { + } diff --git a/controllers/shopItemController.go b/controllers/shopItemController.go index 0d41d1d..079a0e3 100644 --- a/controllers/shopItemController.go +++ b/controllers/shopItemController.go @@ -126,8 +126,6 @@ func (rc *shopItemController) NewShopItemFromForm(ctx *gin.Context) (models.Shop }) } - // Convert the price string to float64 - shopItem := models.ShopItem{ Name: name, Abstract: abstract, @@ -151,7 +149,6 @@ func (rc *shopItemController) NewShopItemFromForm(ctx *gin.Context) (models.Shop } return shopItem, nil - //return services.ShopItems.NewShopItem(name, abstract, description, price, tagIds) } func (rc *shopItemController) GetBasePrice(variants []models.ItemVariant) float64 { diff --git a/main.go b/main.go index 74e7a25..6699cf1 100644 --- a/main.go +++ b/main.go @@ -90,6 +90,7 @@ func main() { viewRoutes.POST("/cart/delete", cartItemController.DeleteItemHandler) viewRoutes.POST("/cart/edit", cartItemController.EditItemHandler) viewRoutes.GET("/checkout", cartItemController.CheckoutView) + viewRoutes.POST("/checkout", cartItemController.CheckoutHandler) //write middleware that redirects to homescreen on register/login/reset for logged in users viewRoutes.GET("/login", userController.LoginView) diff --git a/models/cart.go b/models/cart.go index 53c3917..4ae4f14 100644 --- a/models/cart.go +++ b/models/cart.go @@ -24,6 +24,12 @@ type AddressInfo struct { Country string `json:"country"` } +type Shipping struct { + Id string `json:"name"` + Name string `json:"name"` + Price float64 `json:"price"` +} + type Order struct { gorm.Model Status OrderStatus `json:"status"` @@ -31,6 +37,7 @@ type Order struct { CartItems []CartItem `json:"cartitems"` Email string `json:"email"` Comment string `json:"comment"` + Shipping } type CartItem struct { diff --git a/static/output.css b/static/output.css index 6acff7f..583e2a3 100644 --- a/static/output.css +++ b/static/output.css @@ -1128,6 +1128,11 @@ video { line-height: 1rem; } +.text-sm\/8 { + font-size: 0.875rem; + line-height: 2rem; +} + .font-bold { font-weight: 700; } diff --git a/views/cart.html b/views/cart.html index 3d0ba82..373981d 100644 --- a/views/cart.html +++ b/views/cart.html @@ -64,20 +64,34 @@ - -
+
Subtotal
{{ .data.priceTotal }}€
+ + +
+
+

Select shipping method

+ +
+ +

Shipping calculated at checkout

- Checkout +
+
diff --git a/views/checkout.html b/views/checkout.html index 4f65eed..a05914b 100644 --- a/views/checkout.html +++ b/views/checkout.html @@ -9,6 +9,8 @@
+ + {{ if .askAddress }}
@@ -54,11 +56,14 @@
+ {{ end }} +
+

Without E-Mail you wont receive an order confirmation.

- +
@@ -68,17 +73,6 @@
- -
- - -
-

{{ .data.error }}