This repository has been archived on 2024-01-13. You can view files and clone it, but cannot push or open issues or pull requests.
arka-mvp/order/views.py

96 lines
3.2 KiB
Python

import traceback
from django.http import HttpResponseRedirect
from django.shortcuts import render
from django.urls import reverse
from .forms import *
from django.contrib.auth.decorators import login_required
def orders_list(request):
if request.user.is_authenticated:
orders = Order.get_all_for_user(request.user)
return render(request, 'orders/orders-list.html', {'orders': orders[:50]})
else:
return HttpResponseRedirect('/accounts/register')
def order_create(request):
if request.user.is_authenticated:
if request.method == 'POST':
order = Order(owner=request.user)
form = BaseOrderCreationForm(request.POST, instance=order)
if form.is_valid():
form.save()
# сохраним файлы
files = request.FILES.getlist('images')
for img in files[:OrderImage.MAX_IMAGES]:
OrderImage(order=order, image=img).save()
return HttpResponseRedirect('/orders/')
else:
form = BaseOrderCreationForm()
else:
if request.method == 'POST':
order = Order()
form = UnregisteredUserOrderCreationForm(request.POST, instance=order)
if form.is_valid():
form.save()
# сохраним файлы
files = request.FILES.getlist('images')
for img in files[:OrderImage.MAX_IMAGES]:
OrderImage(order=order, image=img).save()
return HttpResponseRedirect('/dev')
else:
form = UnregisteredUserOrderCreationForm()
return render(request, 'orders/order-create.html', {'form': form})
@login_required
def order_view(request, order_id):
render_vars = {}
try:
order = Order.get_all_for_user(request.user)
order = order.select_related('address_city').get(id=order_id)
render_vars["order"] = order
render_vars["images"] = OrderImage.objects.filter(order=order)
render_vars["can_responde"] = order.owner_id != request.user.id
if render_vars["can_responde"]:
render_vars["respondes_count"] = OrderRespond.objects.filter(order_id=order_id).count()
render_vars["is_responde"] = OrderRespond.objects.filter(user_id=request.user.id, order_id=order_id).count() > 0
render_vars["respond_users"] = OrderRespond.objects.filter(order_id=order_id).\
select_related('user').order_by('create_time')
except Exception:
traceback.print_exc()
render_vars["order"] = None
return render(request, 'orders/order-view.html', render_vars)
@login_required
def order_respond(request, order_id):
try:
if request.method == 'POST':
action = None
if "action" in request.POST:
action = request.POST["action"]
if action == "respond":
r = OrderRespond(order_id=order_id, user=request.user)
r.save()
if action == "unrespond":
OrderRespond.objects.filter(order_id=order_id, user=request.user).delete()
except Exception:
traceback.print_exc()
return HttpResponseRedirect(f'/orders/view/{order_id}')