feat: add Products form to admin
This commit is contained in:
@@ -1,10 +1,12 @@
|
||||
from django.contrib.auth.decorators import login_required
|
||||
from django.contrib.auth.models import User
|
||||
from django.shortcuts import redirect, render
|
||||
|
||||
from django.shortcuts import redirect, render, get_object_or_404
|
||||
from home.models import ChatMessage
|
||||
from purchase.models import PurchasableProduct
|
||||
from django.views.decorators.http import require_http_methods
|
||||
|
||||
|
||||
# Chat admin + user views (restored)
|
||||
@login_required
|
||||
def admin_chat_dashboard(request):
|
||||
chats = ChatMessage.get_all_user_senders()
|
||||
@@ -41,3 +43,60 @@ def user_chat_send(request, user_id):
|
||||
if request.user.is_staff:
|
||||
return redirect("admin_chat", user_id=user_id)
|
||||
return redirect("user_chat")
|
||||
|
||||
|
||||
# PurchasableProduct admin views
|
||||
@login_required
|
||||
def admin_purchase_dashboard(request):
|
||||
products = PurchasableProduct.objects.all().order_by("-created_at")
|
||||
return render(
|
||||
request, "purchase/admin/admin_purchase_dashboard.html", {"products": products}
|
||||
)
|
||||
|
||||
|
||||
@login_required
|
||||
@require_http_methods(["GET", "POST"])
|
||||
def admin_purchase(request, product_id=None):
|
||||
product = None
|
||||
if product_id:
|
||||
product = get_object_or_404(PurchasableProduct, id=product_id)
|
||||
|
||||
if request.method == "POST":
|
||||
# Handle create/update/delete actions
|
||||
action = request.POST.get("action")
|
||||
name = request.POST.get("name", "").strip()
|
||||
description = request.POST.get("description", "").strip()
|
||||
price = request.POST.get("price_cents")
|
||||
currency = request.POST.get("currency", "pln").strip()
|
||||
|
||||
if action == "delete" and product:
|
||||
product.delete()
|
||||
return redirect("admin_purchase_dashboard")
|
||||
|
||||
# Create or update
|
||||
if not name or not price:
|
||||
# Simple validation: require name and price
|
||||
error = "Name and price are required"
|
||||
return render(
|
||||
request,
|
||||
"purchase/admin/admin_purchase.html",
|
||||
{"product": product, "error": error},
|
||||
)
|
||||
|
||||
price_cents = int(price)
|
||||
if product:
|
||||
product.name = name
|
||||
product.description = description
|
||||
product.price_cents = price_cents
|
||||
product.currency = currency
|
||||
product.save()
|
||||
else:
|
||||
PurchasableProduct.objects.create(
|
||||
name=name,
|
||||
description=description,
|
||||
price_cents=price_cents,
|
||||
currency=currency,
|
||||
)
|
||||
return redirect("admin_purchase_dashboard")
|
||||
|
||||
return render(request, "purchase/admin/admin_purchase.html", {"product": product})
|
||||
|
||||
Reference in New Issue
Block a user