from django.shortcuts import render, get_object_or_404, redirect from django.utils import timezone from django.contrib import messages from django.contrib.auth import login from django.contrib.auth.decorators import login_required from django.http import HttpResponseForbidden from .forms import CreateOfferForm, RegistrationForm from .models import PflaenzliUser, Offer, Wish from .mail import send_offer_email from .upload import generate_unique_filename def list_offers(request, filters=None): offers = Offer.objects.all() return render(request, "offer/search.html", {"offers": offers}) @login_required def create_offer(request): if request.method == "POST": form = CreateOfferForm(request.POST, request.FILES) if form.is_valid(): offer = form.save(commit=False) offer.image.name = generate_unique_filename(form.cleaned_data['image'].name) offer.user = request.user offer.title = offer.title.title() offer.save() messages.success(request, "Offer uploaded successfully!") return redirect("offer_detail", offer.id) else: form = CreateOfferForm() return render(request, "basic_form.html", {"form": form, "button_label": "Create", "title": "Create Offer"}) @ login_required def offer_detail(request, offer_id): offer = get_object_or_404(Offer, id=offer_id) return render(request, "offer/detail.html", {"offer": offer, "wishes": ["Monstera", "Tradescantia"]}) @login_required def offer_delete(request, offer_id): offer = get_object_or_404(Offer, id=offer_id) if offer.user != request.user: return HttpResponseForbidden() offer.delete() messages.success(request, "Offer deleted successfully!") return redirect("list_offers") @login_required def offer_edit(request, offer_id): offer = get_object_or_404(Offer, id=offer_id) if offer.user != request.user: return HttpResponseForbidden() if request.method == "POST": form = CreateOfferForm(request.POST, request.FILES, instance=offer) if form.is_valid(): offer = form.save(commit=False) offer.image.name = generate_unique_filename(form.cleaned_data['image'].name) offer.user = request.user offer.save() messages.success(request, "Offer updated successfully!") return redirect("offer_detail", offer.id) else: form = CreateOfferForm(instance=offer) return render(request, "basic_form.html", {"form": form, "button_label": "Update", "title": "Edit Offer"}) @login_required def offer_trade(request, offer_id): offer = get_object_or_404(Offer, id=offer_id) sender = request.user recipient = offer.user if sender != recipient: send_offer_email(request, offer, sender, recipient) messages.success(request, f"{recipient.username} was successfully notified") else: messages.error(request, "You can't trade with yourself!") return redirect("offer_detail", offer_id) def user_detail(request, user_id): user = get_object_or_404(PflaenzliUser, id=user_id) offers = Offer.objects.filter(user=user_id) wishes = Wish.objects.filter(user=user_id) return render(request, "user/public.html", {"user": user, "offers": offers, "wishes": wishes}) def register_user(request): if request.method == "POST": form = RegistrationForm(request.POST) if form.is_valid(): user = form.save() login(request, user) return redirect("index") else: form = RegistrationForm() return render(request, "basic_form.html", {"form": form, "button_label": "Register", "title": "Registeration"})