version backend3
This commit is contained in:
parent
7cf53e9789
commit
fc0fcfb24f
Binary file not shown.
Binary file not shown.
44
core/templates/core/cart.html
Normal file
44
core/templates/core/cart.html
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
{% extends "base.html" %}
|
||||||
|
|
||||||
|
{% block title %}Shopping Cart | Ethio-gebeya{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<main class="container py-4">
|
||||||
|
<h1 class="mb-4">Shopping Cart</h1>
|
||||||
|
|
||||||
|
{% if items %}
|
||||||
|
<table class="table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Product</th>
|
||||||
|
<th>Quantity</th>
|
||||||
|
<th>Price</th>
|
||||||
|
<th>Subtotal</th>
|
||||||
|
<th>Action</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
{% for item in items %}
|
||||||
|
<tr>
|
||||||
|
<td>{{ item.product.name }}</td>
|
||||||
|
<td>{{ item.quantity }}</td>
|
||||||
|
<td>{{ item.product.price }} ETB</td>
|
||||||
|
<td>{{ item.subtotal }} ETB</td>
|
||||||
|
<td><a href="{% url 'remove_from_cart' item.product.pk %}" class="btn btn-danger btn-sm">Remove</a></td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<div class="mt-3">
|
||||||
|
<h4>Total: {{ total_price }} ETB</h4>
|
||||||
|
<a href="#" class="btn btn-primary">Proceed to Checkout</a>
|
||||||
|
</div>
|
||||||
|
{% else %}
|
||||||
|
<p>Your cart is empty.</p>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
<div class="mt-4">
|
||||||
|
<a href="{% url 'home' %}" class="btn btn-secondary">Continue Shopping</a>
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
{% endblock %}
|
||||||
@ -15,6 +15,7 @@
|
|||||||
<p class="card-text text-muted">{{ product.description|truncatewords:20 }}</p>
|
<p class="card-text text-muted">{{ product.description|truncatewords:20 }}</p>
|
||||||
<p class="card-text fw-bold">Price: {{ product.price }} ETB</p>
|
<p class="card-text fw-bold">Price: {{ product.price }} ETB</p>
|
||||||
<a href="{% url 'product_detail' product.pk %}" class="btn btn-primary">View Details</a>
|
<a href="{% url 'product_detail' product.pk %}" class="btn btn-primary">View Details</a>
|
||||||
|
<a href="{% url 'add_to_cart' product.pk %}" class="btn btn-success">Add to Cart</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -27,6 +28,7 @@
|
|||||||
{% else %}
|
{% else %}
|
||||||
<a class="btn btn-primary" href="{% url 'login' %}">Sign In</a>
|
<a class="btn btn-primary" href="{% url 'login' %}">Sign In</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
<a class="btn btn-info" href="{% url 'cart_view' %}">View Cart</a>
|
||||||
</div>
|
</div>
|
||||||
</main>
|
</main>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|||||||
@ -11,13 +11,11 @@
|
|||||||
<p class="h4 text-primary">Price: {{ product.price }} ETB</p>
|
<p class="h4 text-primary">Price: {{ product.price }} ETB</p>
|
||||||
<p>Stock: {{ product.stock }}</p>
|
<p>Stock: {{ product.stock }}</p>
|
||||||
|
|
||||||
<form method="post" action="#">
|
<a href="{% url 'add_to_cart' product.pk %}" class="btn btn-primary btn-lg">Add to Cart</a>
|
||||||
{% csrf_token %}
|
|
||||||
<button type="submit" class="btn btn-primary btn-lg">Add to Cart</button>
|
|
||||||
</form>
|
|
||||||
|
|
||||||
<a href="{% url 'home' %}" class="btn btn-link mt-3">Back to catalog</a>
|
<a href="{% url 'home' %}" class="btn btn-link mt-3">Back to catalog</a>
|
||||||
|
<a href="{% url 'cart_view' %}" class="btn btn-info mt-3">View Cart</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</main>
|
</main>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
16
core/urls.py
16
core/urls.py
@ -1,7 +1,16 @@
|
|||||||
from django.urls import path
|
from django.urls import path
|
||||||
from django.contrib.auth.views import LoginView, LogoutView
|
from django.contrib.auth.views import LoginView, LogoutView
|
||||||
|
|
||||||
from .views import buyer_dashboard, dashboard_redirect, home, product_detail, seller_dashboard
|
from .views import (
|
||||||
|
add_to_cart,
|
||||||
|
buyer_dashboard,
|
||||||
|
cart_view,
|
||||||
|
dashboard_redirect,
|
||||||
|
home,
|
||||||
|
product_detail,
|
||||||
|
remove_from_cart,
|
||||||
|
seller_dashboard,
|
||||||
|
)
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
path("", home, name="home"),
|
path("", home, name="home"),
|
||||||
@ -11,4 +20,7 @@ urlpatterns = [
|
|||||||
path("dashboard/", dashboard_redirect, name="dashboard"),
|
path("dashboard/", dashboard_redirect, name="dashboard"),
|
||||||
path("dashboard/buyer/", buyer_dashboard, name="buyer_dashboard"),
|
path("dashboard/buyer/", buyer_dashboard, name="buyer_dashboard"),
|
||||||
path("dashboard/seller/", seller_dashboard, name="seller_dashboard"),
|
path("dashboard/seller/", seller_dashboard, name="seller_dashboard"),
|
||||||
]
|
path("cart/", cart_view, name="cart_view"),
|
||||||
|
path("cart/add/<int:pk>/", add_to_cart, name="add_to_cart"),
|
||||||
|
path("cart/remove/<int:pk>/", remove_from_cart, name="remove_from_cart"),
|
||||||
|
]
|
||||||
|
|||||||
@ -87,4 +87,37 @@ def seller_dashboard(request):
|
|||||||
"total_revenue": sales_summary["total_revenue"] or 0,
|
"total_revenue": sales_summary["total_revenue"] or 0,
|
||||||
"recent_sales": recent_sales,
|
"recent_sales": recent_sales,
|
||||||
}
|
}
|
||||||
return render(request, "core/seller_dashboard.html", context)
|
return render(request, "core/seller_dashboard.html", context)
|
||||||
|
|
||||||
|
|
||||||
|
def add_to_cart(request, pk):
|
||||||
|
product = get_object_or_404(Product, pk=pk)
|
||||||
|
cart = request.session.get("cart", {})
|
||||||
|
product_id = str(pk)
|
||||||
|
cart[product_id] = cart.get(product_id, 0) + 1
|
||||||
|
request.session["cart"] = cart
|
||||||
|
return redirect("home")
|
||||||
|
|
||||||
|
|
||||||
|
def remove_from_cart(request, pk):
|
||||||
|
cart = request.session.get("cart", {})
|
||||||
|
product_id = str(pk)
|
||||||
|
if product_id in cart:
|
||||||
|
del cart[product_id]
|
||||||
|
request.session["cart"] = cart
|
||||||
|
return redirect("cart_view")
|
||||||
|
|
||||||
|
|
||||||
|
def cart_view(request):
|
||||||
|
cart = request.session.get("cart", {})
|
||||||
|
items = []
|
||||||
|
total_price = 0
|
||||||
|
for product_id, quantity in cart.items():
|
||||||
|
try:
|
||||||
|
product = Product.objects.get(pk=product_id)
|
||||||
|
items.append({"product": product, "quantity": quantity, "subtotal": product.price * quantity})
|
||||||
|
total_price += product.price * quantity
|
||||||
|
except Product.DoesNotExist:
|
||||||
|
continue
|
||||||
|
context = {"items": items, "total_price": total_price}
|
||||||
|
return render(request, "core/cart.html", context)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user