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
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')