import os import platform from django import get_version as django_version from django.shortcuts import render, get_object_or_404, redirect from django.contrib.auth.decorators import login_required from django.utils import timezone from .models import Category, Shop, Product def home(request): """Render the marketplace landing page with search and filter.""" categories = Category.objects.all() # Get query parameters query = request.GET.get('q', '') category_slug = request.GET.get('category', '') products = Product.objects.filter(is_active=True).order_by('-created_at') if query: products = products.filter(name__icontains=query) if category_slug: products = products.filter(category__slug=category_slug) featured_products = products[:12] # Show more products on home context = { "categories": categories, "featured_products": featured_products, "query": query, "selected_category": category_slug, "current_time": timezone.now(), } return render(request, "core/index.html", context) def product_detail(request, slug): """Render the product detail page.""" product = get_object_or_404(Product, slug=slug, is_active=True) return render(request, "core/product_detail.html", {"product": product}) def shop_list(request): """Render a list of all shops.""" shops = Shop.objects.all().order_by('name') return render(request, "core/shop_list.html", {"shops": shops}) def shop_detail(request, slug): """Render a specific shop's page with its products.""" shop = get_object_or_404(Shop, slug=slug) products = Product.objects.filter(shop=shop, is_active=True) return render(request, "core/shop_detail.html", {"shop": shop, "products": products}) @login_required def dashboard(request): """Seller dashboard showing their shops and products.""" shops = Shop.objects.filter(owner=request.user) products = Product.objects.filter(shop__owner=request.user).order_by('-created_at') context = { "shops": shops, "products": products, } return render(request, "core/dashboard/index.html", context) @login_required def shop_add(request): """Add a new shop.""" if request.method == "POST": name = request.POST.get('name') description = request.POST.get('description') whatsapp_number = request.POST.get('whatsapp_number') logo = request.FILES.get('logo') Shop.objects.create( owner=request.user, name=name, description=description, whatsapp_number=whatsapp_number, logo=logo ) return redirect('dashboard') return render(request, "core/dashboard/shop_form.html", { "title": "Tambah Toko Baru" }) @login_required def shop_edit(request, pk): """Edit an existing shop.""" shop = get_object_or_404(Shop, pk=pk, owner=request.user) if request.method == "POST": shop.name = request.POST.get('name') shop.description = request.POST.get('description') shop.whatsapp_number = request.POST.get('whatsapp_number') if request.FILES.get('logo'): shop.logo = request.FILES.get('logo') shop.save() return redirect('dashboard') return render(request, "core/dashboard/shop_form.html", { "shop": shop, "title": "Edit Toko" }) @login_required def product_add(request): """Add a new product.""" shops = Shop.objects.filter(owner=request.user) categories = Category.objects.all() if request.method == "POST": shop_id = request.POST.get('shop') category_id = request.POST.get('category') name = request.POST.get('name') description = request.POST.get('description') price = request.POST.get('price') stock = request.POST.get('stock') image = request.FILES.get('image') shop = get_object_or_404(Shop, id=shop_id, owner=request.user) category = get_object_or_404(Category, id=category_id) Product.objects.create( shop=shop, category=category, name=name, description=description, price=price, stock=stock, image=image ) return redirect('dashboard') return render(request, "core/dashboard/product_form.html", { "shops": shops, "categories": categories, "title": "Tambah Produk Baru" }) @login_required def product_edit(request, pk): """Edit an existing product.""" product = get_object_or_404(Product, pk=pk, shop__owner=request.user) shops = Shop.objects.filter(owner=request.user) categories = Category.objects.all() if request.method == "POST": product.shop = get_object_or_404(Shop, id=request.POST.get('shop'), owner=request.user) product.category = get_object_or_404(Category, id=request.POST.get('category')) product.name = request.POST.get('name') product.description = request.POST.get('description') product.price = request.POST.get('price') product.stock = request.POST.get('stock') if request.FILES.get('image'): product.image = request.FILES.get('image') product.save() return redirect('dashboard') return render(request, "core/dashboard/product_form.html", { "product": product, "shops": shops, "categories": categories, "title": "Edit Produk" }) @login_required def product_delete(request, pk): """Delete a product.""" product = get_object_or_404(Product, pk=pk, shop__owner=request.user) if request.method == "POST": product.delete() return redirect('dashboard')