def ajax_cart(request): """Аякс-корзинка""" result = {} shopper = get_shopper(request) result['cart'] = calc_cart(shopper, min_info=False) result['request'] = request return result
def show_cart(request): """Оформление заказа - Корзинка""" mh_vars = cart_vars.copy() context = {} q_string = {} containers = {} shopper = get_shopper(request) if request.is_ajax(): return JsonResponse(context, safe=False) template = 'web/order/cart.html' page = SearchLink(q_string, request, containers) if not page: page = Blocks(name=mh_vars['singular_obj']) context['breadcrumbs'] = [{ 'name': 'Корзина', 'link': reverse('%s:%s' % (CUR_APP, 'show_cart')), }] context['page'] = page context['containers'] = containers context['cart'] = calc_cart(shopper, min_info=False) return render(request, template, context)
def checkout(request): """Оформление заказа - Подтверждение заказа""" mh_vars = order_vars.copy() context = {} q_string = {} containers = {} shopper = get_shopper(request) if request.is_ajax(): return JsonResponse(context, safe=False) template = 'web/order/checkout.html' page = SearchLink(q_string, request, containers) if not page: page = Blocks(name=order_vars['singular_obj']) context['breadcrumbs'] = [{ 'name': 'Подтверждение заказа', 'link': reverse('%s:%s' % (CUR_APP, 'checkout')), }] context['page'] = page context['containers'] = containers cart = calc_cart(shopper, min_info=False) context['cart'] = cart # Оформление заказа context.update(**create_new_order(request, shopper, cart)) if 'order' in context and context['order']: template = 'web/order/confirmed.html' return render(request, template, context)
def show_order(request, order_id: int): """Просмотр оформленного заказа""" mh_vars = order_vars.copy() context = {} q_string = {} containers = {} shopper = get_shopper(request) if request.is_ajax(): return JsonResponse(context, safe=False) template = 'web/order/order.html' page = SearchLink(q_string, request, containers) if not page: page = Blocks(name=mh_vars['singular_obj']) context['breadcrumbs'] = [{ 'name': 'Заказ', 'link': reverse('%s:%s' % (CUR_APP, 'show_order'), kwargs={'order_id': order_id}), }] context['page'] = page context['containers'] = containers result = get_order(shopper, order_id) context['cart'] = result.get('cart', {}) context['cart']['purchases'] = result.get('purchases', []) context['order'] = result.get('order') return render(request, template, context)
def checkout(request): """Оформление заказа - Подтверждение заказа""" mh_vars = order_vars.copy() context = {} q_string = {} containers = {} shopper = get_shopper(request) if request.is_ajax(): return JsonResponse(context, safe=False) template = 'web/order/checkout.html' page = SearchLink(q_string, request, containers) if not page: page = Blocks(name=order_vars['singular_obj']) context['breadcrumbs'] = [{ 'name': 'Подтверждение заказа', 'link': reverse('%s:%s' % (CUR_APP, 'checkout')), }] context['page'] = page context['containers'] = containers cart = calc_cart(shopper, min_info=False) context['cart'] = cart # Оформление заказа comments = None wrist_size = request.POST.get('wrist_size') birthday = request.POST.get('birthday') if wrist_size or birthday: comments = [] if wrist_size: comments.append('Размер запястья %s' % wrist_size) if birthday: comments.append('День рождения %s' % birthday) comments = ', '.join(comments) context.update(**create_new_order(request, shopper, cart, comments)) if 'order' in context and context['order']: template = 'web/order/confirmed.html' payment = YandexKassa().create_payment( domain='%s%s' % ('https://' if request.is_secure() else 'http://', request.META['HTTP_HOST']), summa='%s' % context['order'].total, desc='Оплата заказа №%s' % context['order'].id, ) if 'confirmation' in payment: context['yandex_payment_link'] = payment['confirmation'][ 'confirmation_url'] Transactions.objects.create(order=context['order'], uuid=payment['id'], ptype=1) return render(request, template, context)
def get_pickup_point(request, *args, **kwargs): """Получение точки вывоза для пользователя :param request: HttpRequest """ result = {} shopper = get_shopper(request) if shopper: pickup_point = PickupPoint.objects.select_related( 'shopper', 'order', 'address').filter(order__isnull=True, shopper=shopper).first() if pickup_point: result = object_fields(pickup_point, only_fields=pp_only_fields, fk_only_keys=pp_fk_keys) return JsonResponse(result, safe=False)
def payment(request, provider: str, action: str): """Оплата заказа :param request: HttpRequest :param provider: sbrf/ :param action: success/fail """ mh_vars = payment_vars.copy() context = { 'provider': provider, 'action': action, } q_string = {} containers = {} shopper = get_shopper(request) if request.is_ajax(): return JsonResponse(context, safe=False) template = 'web/order/payment.html' page = SearchLink(q_string, request, containers) if not page: page = Blocks(name=order_vars['singular_obj']) kwargs = { 'provider': provider, 'action':action, } context['breadcrumbs'] = [{ 'name': 'Оплата заказа', 'link': reverse('%s:%s' % (CUR_APP, 'payment'), kwargs=kwargs), }] context['page'] = page context['containers'] = containers if request.GET.get('orderId'): order_id = request.GET['orderId'] order = Orders.objects.filter(shopper=shopper, external_number=order_id).first() if order: sber = SberPaymentProovider() order_status = sber.get_order_status(order.external_number, order.id) context['order_status'] = order_status context['order'] = order return render(request, template, context)
def set_pickup_point(request, *args, **kwargs): """Задание точки вывоза для пользователя :param request: HttpRequest """ result = {} point_id = request.GET.get('point_id') shopper = get_shopper(request) if shopper and point_id: address = Address.objects.filter(pk=point_id).first() if address: analog = PickupPoint.objects.filter(order__isnull=True, shopper=shopper).first() if analog: analog.address = address else: analog = PickupPoint(shopper=shopper, address=address) analog.save() result['success'] = 1 return JsonResponse(result, safe=False)
def checkout(request): """Оформление заказа - Подтверждение заказа""" mh_vars = order_vars.copy() context = {} q_string = {} containers = {} shopper = get_shopper(request) if request.is_ajax(): return JsonResponse(context, safe=False) template = 'web/order/checkout.html' page = SearchLink(q_string, request, containers) if not page: page = Blocks(name=order_vars['singular_obj']) context['breadcrumbs'] = [{ 'name': 'Подтверждение заказа', 'link': reverse('%s:%s' % (CUR_APP, 'checkout')), }] context['page'] = page context['containers'] = containers cart = calc_cart(shopper, min_info=False) context['cart'] = cart # Оформление заказа context.update(**create_new_order(request, shopper, cart)) if 'order' in context and context['order']: template = 'web/order/confirmed.html' # Если пользователь вернулся # на страничку оформленного заказа, # например, для оплаты if request.GET.get('order_id'): order_id = request.GET['order_id'] if order_id.isdigit(): order = Orders.objects.filter(pk=order_id, shopper=shopper).first() if order: template = 'web/order/confirmed.html' context['order'] = order return render(request, template, context)
def registration(request): """Страничка для регистрации""" mh_vars = reg_vars.copy() context = {} q_string = {} containers = {} shopper = get_shopper(request) if shopper: return redirect(reverse('%s:%s' % (CUR_APP, 'show_profile'))) # ----------- # регистрация # ----------- if request.method == 'POST': result = register_from_site(request) if isinstance(result, list): context['errors'] = result else: save_user_to_request(request, result) context['shopper'] = result.to_dict() context['redirect'] = reverse('%s:%s' % (CUR_APP, 'show_profile')) if request.is_ajax(): return JsonResponse(context, safe=False) template = 'web/login/registration.html' page = SearchLink(q_string, request, containers) if not page: page = Blocks(name=reg_vars['singular_obj']) context['breadcrumbs'] = [{ 'name': mh_vars['singular_obj'], 'link': reverse('%s:%s' % (CUR_APP, 'registration')), }] context['page'] = page context['containers'] = containers context['vk_link'] = VK().get_auth_user_link() context['yandex_link'] = Yandex().get_auth_user_link() return render(request, template, context)
def show_profile(request): """Личный кабинет пользователя""" mh_vars = profile_vars.copy() context = {} q_string = {} containers = {} shopper = get_shopper(request) if not shopper: return redirect(reverse('%s:%s' % (CUR_APP, 'registration'))) if request.method == 'POST': result = update_profile_from_site(request) if isinstance(result, list): context['errors'] = result else: save_user_to_request(request, result) context['shopper'] = result.to_dict() context['redirect'] = reverse('%s:%s' % (CUR_APP, 'show_profile')) if request.is_ajax(): return JsonResponse(context, safe=False) template = 'web/login/profile.html' page = SearchLink(q_string, request, containers) if not page: page = Blocks(name=mh_vars['singular_obj']) context['breadcrumbs'] = [{ 'name': 'Ваш аккаунт', 'link': reverse('%s:%s' % (CUR_APP, 'show_profile')), }] context['page'] = page context['containers'] = containers context['shopper'] = shopper context['orders'] = Orders.objects.filter( shopper=shopper).order_by('-created')[:50] return render(request, template, context)
def transaction_success(request): """Оформление заказа - Успешная оплата""" mh_vars = order_vars.copy() context = {} q_string = {} containers = {} shopper = get_shopper(request) page = SearchLink(q_string, request, containers) if not page: page = Blocks(name=order_vars['singular_obj']) context['breadcrumbs'] = [{ 'name': 'Заказ оплачен', 'link': reverse('%s:%s' % (CUR_APP, 'transaction_success')), }] context['page'] = page context['containers'] = containers template = 'web/order/transaction_success.html' return render(request, template, context)
def checkout(request): """Оформление заказа - Подтверждение заказа""" mh_vars = order_vars.copy() context = {} q_string = {} containers = {} shopper = get_shopper(request) if request.is_ajax(): return JsonResponse(context, safe=False) template = 'web/order/checkout.html' page = SearchLink(q_string, request, containers) if not page: page = Blocks(name=order_vars['singular_obj']) context['breadcrumbs'] = [{ 'name': 'Подтверждение заказа', 'link': reverse('%s:%s' % (CUR_APP, 'checkout')), }] context['page'] = page context['containers'] = containers cart = calc_cart(shopper, min_info=False) context['cart'] = cart # Оформление заказа context.update(**create_new_order(request, shopper, cart)) if 'order' in context and context['order']: template = 'web/order/confirmed.html' # Если пользователь вернулся # на страничку оформленного заказа, # например, для оплаты if request.GET.get('order_id'): order_id = request.GET['order_id'] if order_id.isdigit(): order = Orders.objects.filter(pk=order_id, shopper=shopper).first() if order: template = 'web/order/confirmed.html' context['order'] = order sber = SberPaymentProovider() order_status = sber.get_order_status(order.external_number, order.id) context['order_status'] = order_status # ----------------------------------------- # Если пользователь пытается оплатить заказ # ----------------------------------------- if 'order' in context and request.GET.get('pay') == 'sbrf': order = context['order'] scheme = 'http://' if request.is_secure(): scheme = 'https://' host = '%s%s' % (scheme, request.META['HTTP_HOST']) env = '' if settings.DEBUG: env = 'test_%s' % str(time.time()) params = { 'amount': int(order.total * 100), 'orderNumber': '%s%s' % (env, order.id), 'returnUrl': '%s/payment/sbrf/success/' % host, 'failUrl': '%s/payment/sbrf/fail/' % host, #'description': 'Тестовый заказ', 'clientId': shopper.id, 'email': shopper.email, 'phone': shopper.phone, } sber = SberPaymentProovider() register_order = sber.register_do(**params) context.update(register_order) # ------------------------ # Переадресация на форму и # запись номера заказа # ------------------------ if 'formUrl' in register_order: Orders.objects.filter(pk=order.id).update(external_number=register_order['orderId']) return redirect(register_order['formUrl']) return render(request, template, context)