def save(self):
        order = Order.objects.get(id=self.checkout.storage['order_id'])

        order.comment = self.request.POST.get('comment', '').strip()

        # Выбор пользователем типа оплаты
        payment_type = self.request.POST.get('payment')
        if payment_type not in ('cash', 'robokassa'):
            payment_type = None

        # Нет доставки - заказ оптового покупателя
        if not order.delivery:
            self.checkout.storage['is_payed'] = True
            order.status = Order.STATUS_PAYMENT_WAITING
            order.is_emails_sended = True
            order.save()
            self.checkout.save()

            send_order_mails(order, self.request.user)
            self.checkout.storage['is_notified'] = True

            return

        # Самовывоз - не нужна оплата
        # Оплата наличкой - не нужна оплата
        elif payment_type == 'cash':
            self.checkout.storage['is_payed'] = True
            order.payment_type = Order.PAYMENT_CASHPICK
            order.status = Order.STATUS_PAYED
            order.is_emails_sended = True
            order.save()
            self.checkout.save()

            send_order_mails(order, self.request.user)
            self.checkout.storage['is_notified'] = True

            return

        order.payment_type = Order.PAYMENT_ROBOKASSA
        order.save()

        form = RobokassaForm(initial={
            'OutSum': order.net,
            'InvId': order.id,
            'Desc': u'Заказ №%s в интернет-магазине «Томат»' % order.id,
            'Email': self.request.user.email,
            'Culture': 'ru',
        })
        if settings.DEBUG:
            form.target = reverse('checkout.views.rk_test_start')
            url = form.get_redirect_url()
        else:
            url = form.get_redirect_url()

        self.checkout.save()

        return HttpResponseRedirect(url)
    def process(self, extra_context=None):
        order = Order.objects.get(id=self.checkout.storage['order_id'])
        items = OrderItem.objects.filter(order=order).select_related('product')

        self.checkout.storage.clean(self.request)
        self.request.session[Cart.SESSION_KEY] = Cart()

        if not order.is_emails_sended:
            send_order_mails(order, self.request.user)
            Order.objects.filter(pk=order.pk).update(is_emails_sended=True)

        extra_context = {
            'order': order,
            'items': items,
        }

        response = super(ReceiptStep, self).process(extra_context)

        return response
Example #3
0
def receive_result(request):
    """ обработчик для ResultURL. """

    form = ResultURLForm(request.POST)
    if form.is_valid():
        id, sum = form.cleaned_data['InvId'], form.cleaned_data['OutSum']

        # сохраняем данные об успешном уведомлении в базе, чтобы
        # можно было выполнить дополнительную проверку на странице успешного
        # заказа
        notification = SuccessNotification.objects.create(InvId=id, OutSum=sum)

        order = Order.objects.get(id=id)
        order.status = Order.STATUS_PAYED
        order.net = float(sum)
        logger.info('Order #%d had payed. Sum: %s' % (order.id, order.net))
        if not order.is_emails_sended:
            send_order_mails(order, order.user)
            order.is_emails_sended = True
        order.save()

        return HttpResponse('OK%s' % id)

    return HttpResponse('error: bad signature')