From fc0fcfb24f3fe625ab96f77a9443dd5c9c5f5b2c Mon Sep 17 00:00:00 2001 From: Flatlogic Bot Date: Fri, 13 Mar 2026 19:32:45 +0000 Subject: [PATCH] version backend3 --- core/__pycache__/urls.cpython-311.pyc | Bin 1141 -> 1475 bytes core/__pycache__/views.cpython-311.pyc | Bin 4936 -> 6741 bytes core/templates/core/cart.html | 44 ++++++++++++++++++++++++ core/templates/core/index.html | 4 ++- core/templates/core/product_detail.html | 8 ++--- core/urls.py | 16 +++++++-- core/views.py | 35 ++++++++++++++++++- 7 files changed, 98 insertions(+), 9 deletions(-) create mode 100644 core/templates/core/cart.html diff --git a/core/__pycache__/urls.cpython-311.pyc b/core/__pycache__/urls.cpython-311.pyc index 3518efb0949e258c49a118dbe11f75324ca6d271..2e2dd18c64ec924d135a53a3fd31b30081802e91 100644 GIT binary patch delta 593 zcmey$ahO|uIWI340}w1v-IBS1nStRkhyw$BP{!xJiR#u8x!h6Qxja!kxx7)lj0{W+ zsf;PCsaz>+6Ay^8a-?#nZ~__ZTtIQ=EWU|L%o+J6-Z5t6oGid7$;_T20#YTK%9|nv zVu+`5q)31mlBsMdQb2~hbSh7Z%o_G(KqssQVhBj*isDa^4Q9}ko1DO?qs4KHJ253C zz9c_BIkBkZ7JpJ{Wol7;N@8(FQhs7l$}LWiaC}*2YWd`Oj5=yXsk!-Osqtw=`MD4c z0>!C0IVd_9inu4=W0Ys)nf#BjCV>NJYn33}Jbj3A{UT5>RI!2#*DvA(v4y~Fpj-59 zGV@BT3bO6=i`YRDq7X%3i;?7bfpUJD0+VMlh4U2g069e4+7c3z*D-GoxWU5F;L;&JL34rj1s1)FEP7X1^uS^lIAv#4Z;-vf rVtC+u=sos<>qH<;0D1W8K4gU7YU!4 delta 371 zcmX@i{gp#~IWI340}wn(*^;@CiGkrUhyw%MP{wDIiR#u)j0{W+sf;PCsT?V6YuJ}D zGcc?MVh8}saHMjkaAK9=0?IRIaZlV}&d5FSg)t-hWEn5EaOZ06r^Gd7=vhDPXxF$C-)c{@epGlk@* p`HVnZEIV0+#YpD?L)-=8&dYRqn)!e zbMKwUx%bX|x8=v(>K(7Qia_}&{#BygcTL?$f4#Q#LCAN7oUYfZ0UIr;onkB9W{!&wrEMtOYQ8G9(d`Qv>32$-&GYUK z+G^f%4_2fuPtT@ZsJI)U79cGEM4+%R4z<{@kn;S=(-t%Cos(?MsOeG<9C`tTcAvvm zH$o3U%*A$KdnZ8IJI+$tr4fB-Bz5Vc?x;JO=DX^1wazwCTSo9B1QFWJ@6|54$E@~s zMP9}Mdv_AFaCepcHKU|?f%)E}p%L6grQk7msDJ!s{=n}L43gx`N3^k>OOV^3cW+fU z!|R@k5g`V>O+gCPDH*}w^St>pT{le(LF3ojYQhw#8N4CvcmA--iXqWB9MkbsD@7C6 z&JEs_jW}35$uW29+WR zQG|Yga#e-&gq9Xz;4x!md05ki^wf~O;z^JVLQRhWWXYo1_^E5YtDv@7YFkll%l4M! zz|5hCa>E08y5Z(To>_8pQEtw5FZ$Qd9=jI09?HH_3WaY>elVG@n(wqit;JC57k(?W zGuxf3wS@JhhNf)qmDgrpvV`!Wybk_yxG0AULYURVlK<_p4?%K+fXm?TlsqNoFEk($ zjV6e>#Me(h?I#|*z)cY5H8_JmKmeaG*Qo6aS7kZ^-g(9s{85KH4>B_}k%(W83G8(+ zVaE`TBcL~7w1!MWCxRnLH#-5aHgU?;EIyW+h!34*sWFG^H$dquD&m}3@|fBGCD!Gi zJyCGgz*kbLXKM>eU8!kH&Nbt^DZOa98}4{^ zpCXqjI$sm#xQt7On*^M+vMkXg!*v_TxQB$;1+vfOc-+Z5%)=P(v&lAD&CQQKmxW0Xvm8IeF@%TlJ z?Zb(c?o>Q|G^O`UCLoO!7>c=_EVhHmwmpNU7*-7T;_S-40Nv2Fvl+m-q6bg`Aq6#E z0;mMnH0JG^=qf2{wx<+Wm+dP>Hs7iGr0Qekma;@7af1z(yDnEXdw7WxJsTE-_19Am zgRuv}*!<~2FlGfiiouRtZ%OfAJ@WpM{J_`S3jG7c{=vdqqgMZDp(X*Jr6h|=vY;eO zO6caE*voG)V=U! zdlzN@?AAiKWq!bt+lz90L1<40;CSD3s$CxLzQ@-U7Vp@zO-~ORS8+44V9#1sJuN88s){usE{G1Jx8M zOm1dTWK^8Ilw~cW^5kGvJx2A(O{~}1)IpMJljGU+8MQa}v%O^mYO3Y1VAP$wjUyH& zE6M4qYy?th3?ig}L@^7HPym7=X^@Z>nAqIN`IVVbYjQd795%2@g~^h9w)PevNid%Y z#Bv4^EHUtv4cnga1Q%aLd;*;}B^GYDfAu1aKwRv(`KE*;qX2^pqZ8u?FbP%<01|Of=l}o! diff --git a/core/templates/core/cart.html b/core/templates/core/cart.html new file mode 100644 index 0000000..5587fcc --- /dev/null +++ b/core/templates/core/cart.html @@ -0,0 +1,44 @@ +{% extends "base.html" %} + +{% block title %}Shopping Cart | Ethio-gebeya{% endblock %} + +{% block content %} +
+

Shopping Cart

+ + {% if items %} + + + + + + + + + + + + {% for item in items %} + + + + + + + + {% endfor %} + +
ProductQuantityPriceSubtotalAction
{{ item.product.name }}{{ item.quantity }}{{ item.product.price }} ETB{{ item.subtotal }} ETBRemove
+
+

Total: {{ total_price }} ETB

+ Proceed to Checkout +
+ {% else %} +

Your cart is empty.

+ {% endif %} + + +
+{% endblock %} diff --git a/core/templates/core/index.html b/core/templates/core/index.html index 1d9f8c7..6b5a5d3 100644 --- a/core/templates/core/index.html +++ b/core/templates/core/index.html @@ -15,6 +15,7 @@

{{ product.description|truncatewords:20 }}

Price: {{ product.price }} ETB

View Details + Add to Cart @@ -27,6 +28,7 @@ {% else %} Sign In {% endif %} + View Cart -{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/core/templates/core/product_detail.html b/core/templates/core/product_detail.html index e2fa822..3a4e041 100644 --- a/core/templates/core/product_detail.html +++ b/core/templates/core/product_detail.html @@ -11,13 +11,11 @@

Price: {{ product.price }} ETB

Stock: {{ product.stock }}

-
- {% csrf_token %} - -
+ Add to Cart Back to catalog + View Cart -{% endblock %} +{% endblock %} \ No newline at end of file diff --git a/core/urls.py b/core/urls.py index 1a873df..4b180d5 100644 --- a/core/urls.py +++ b/core/urls.py @@ -1,7 +1,16 @@ from django.urls import path 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 = [ path("", home, name="home"), @@ -11,4 +20,7 @@ urlpatterns = [ path("dashboard/", dashboard_redirect, name="dashboard"), path("dashboard/buyer/", buyer_dashboard, name="buyer_dashboard"), path("dashboard/seller/", seller_dashboard, name="seller_dashboard"), -] \ No newline at end of file + path("cart/", cart_view, name="cart_view"), + path("cart/add//", add_to_cart, name="add_to_cart"), + path("cart/remove//", remove_from_cart, name="remove_from_cart"), +] diff --git a/core/views.py b/core/views.py index 6c06c6d..f2dc7d0 100644 --- a/core/views.py +++ b/core/views.py @@ -87,4 +87,37 @@ def seller_dashboard(request): "total_revenue": sales_summary["total_revenue"] or 0, "recent_sales": recent_sales, } - return render(request, "core/seller_dashboard.html", context) \ No newline at end of file + 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)