Files
midrandbooks/MidrandBookshop/Components/Pages/Checkout.razor
T
Khwezi Mngoma 234fb0f2f3
continuous-integration/drone/pr Build is passing
Stable checkout page
2026-06-11 14:24:42 +02:00

66 lines
3.7 KiB
Plaintext

@page "/checkout"
@inject NavigationManager Navigation
@rendermode InteractiveServer
@attribute [Authorize]
<div class="container py-5">
<h2 class="fw-bold mb-4">Checkout</h2>
<div class="row g-5">
<div class="col-lg-8">
<div class="card border-0 shadow-sm p-4 mb-4">
<h5 class="fw-bold mb-3">Your Items</h5>
@foreach (var item in ShoppingCart.Items)
{
<div class="d-flex align-items-center justify-content-between pb-3 border-bottom mb-3">
<div><h6 class="mb-0">@item.Product!.Name</h6><small class="text-muted">@($"{item.Author!.Name} {item.Author.LastName}")</small></div>
<div class="d-flex align-items-center gap-3">
<div class="d-flex border rounded-pill">
<button class="btn btn-sm px-2" @onclick="() => ChangeQuantity(item, -1)">-</button>
<span class="px-2 pt-1">@item.Quantity</span>
<button class="btn btn-sm px-2" @onclick="() => ChangeQuantity(item, 1)">+</button>
</div>
<button class="btn btn-sm text-danger" @onclick="() => RemoveFromCart(item)">Remove</button>
</div>
</div>
}
</div>
<div class="card border-0 shadow-sm p-4 mb-4">
<h5 class="fw-bold mb-3">Shipping Method</h5>
<div class="form-check mb-2">
<input class="form-check-input" type="radio" name="shipping" id="pickup"
checked=@(ShippingCost == 0) @onclick="() => ShippingCost = 0">
<label class="form-check-label" for="pickup">Pickup from Bookshop (Free)</label>
</div>
<div class="form-check">
<input class="form-check-input" type="radio" name="shipping" id="delivery"
checked=@(ShippingCost == 60) @onclick="() => ShippingCost = 60">
<label class="form-check-label" for="delivery">Home Delivery (R60.00)</label>
</div>
</div>
<div class="card border-0 shadow-sm p-4">
<h5 class="fw-bold mb-3">Shipping Address</h5>
<div class="form-check mb-3">
<input class="form-check-input" type="checkbox" id="sameAsBilling" @bind="IsSameAddress">
<label class="form-check-label" for="sameAsBilling">Billing address same as shipping</label>
</div>
</div>
</div>
<div class="col-lg-4">
<div class="card border-0 shadow-sm p-4 sticky-top" style="top: 100px;">
<h5 class="fw-bold mb-3">Order Summary</h5>
<div class="d-flex justify-content-between mb-2"><span>Subtotal</span><span>R @ShoppingCart.TotalAmount.ToString("F2")</span></div>
<div class="d-flex justify-content-between mb-2"><span>VAT (15%)</span><span>R @ShoppingCart.TotalVat.ToString("F2")</span></div>
<div class="d-flex justify-content-between mb-2"><span>Shipping</span><span>R @($"{ShippingCost:F2}")</span></div>
<hr />
<div class="d-flex justify-content-between mb-4">
<span class="fw-bold">Total Due</span>
<h4 class="fw-bold">R @($"{ShoppingCart.TotalAmount + ShoppingCart.TotalVat + ShippingCost:F2}")</h4>
</div>
<button class="btn btn-dark w-100 py-3 rounded-pill" @onclick="CompletePurchase">Complete Purchase</button>
</div>
</div>
</div>
</div>