def checkout_view(request, template_name='checkout/checkout.html'): """Представление для оформления заказа""" if cart.is_empty(request): cart_url = urlresolvers.reverse('show_cart') return HttpResponseRedirect(cart_url) if request.method == 'POST': postdata = request.POST.copy() form = CheckoutForm(postdata) if form.is_valid(): response = checkout.process(request) order_number = response.get('order_number', 0) error_message = response.get('message', '') if order_number: request.session['order_number'] = order_number receipt_url = urlresolvers.reverse('checkout_receipt') return HttpResponseRedirect(receipt_url) else: error_message = _(u'Correct the errors below') if request.user.is_authenticated(): user_profile = profile.retrieve(request) form = CheckoutForm(instance=user_profile) else: form = CheckoutForm() else: form = CheckoutForm() page_title = _(u'Checkout') return render_to_response(template_name, locals(), context_instance=RequestContext(request))
def create_order(request, transaction_id): """ Если POST запрос к платежной системе успешен, создаем новый заказ содержащий товары из корзины Сохраняем заказ с идентификатором транзации который вернет шлюз платежной системы В конце делаем очистку корзины """ order = Order() checkout_form = CheckoutForm(request.POST, instance=order) order = checkout_form.save(commit=False) order.transaction_id = transaction_id order.ip_address = request.META.get('REMOTE_ADDR') order.user = None if request.user.is_authenticated(): order.user = request.user order.status = Order.SUBMITTED order.save() if order.pk: # Если заказ сохранен cart_items = cart.get_cart_items(request) for ci in cart_items: # Создаем товар в заказе для каждого товара в корзине oi = OrderItem() oi.order = order oi.quantity = ci.quantity oi.price = ci.price oi.product = ci.product oi.save() # Очищаем корзину после оформления заказа cart.empty_cart(request) # Сохраняем введенные данные для будующих заказов if request.user.is_authenticated(): profile.set(request) # Сохраняем информацию о профиле пользователя if request.user.is_authenticated(): profile.set(request) # Возвращаем объект - новый заказа return order