예제 #1
0
def login(request):
    """Авторизация пользователя"""
    context = {}
    q_string = {}
    containers = {}
    result = login_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': 'Регистрация',
        '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)
예제 #2
0
def confirm_phone(request):
    """Запрос на подтверждение телефона,
       проверка кода подтверждения телефона
    """
    result = {}
    shopper = get_shopper(request)
    if not shopper:
        # Упрощенная регистрация по телефону
        if request.GET.get('digits'):
            if request.session.get('confirm_phone') and request.GET[
                    'digits'] == request.session['confirm_phone']:
                new_user = Shopper.objects.create(
                    phone=request.session['phone'],
                    name='Гость',
                )
                save_user_to_request(request, new_user)
                if phone_confirmed(request):  # Тел подтвержден
                    result['success'] = 1
                    fs_shopper(request)
                return JsonResponse(result, safe=False)
        result = prepare_session(request, request.GET.get('phone'))
        return JsonResponse(result, safe=False)
    if request.GET.get('digits'):
        if request.session.get('confirm_phone') and request.GET[
                'digits'] == request.session['confirm_phone']:
            if phone_confirmed(request):  # Тел подтвержден
                result['success'] = 1
                fs_shopper(request)
        return JsonResponse(result, safe=False)
    result = prepare_session(request)
    return JsonResponse(result, safe=False)
예제 #3
0
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)
예제 #4
0
def show_profile(request):
    """Личный кабинет пользователя"""
    mh_vars = profile_vars.copy()
    context = {
        'fs_server': settings.FREESWITCH_DOMAIN,
        'tab': request.GET.get('tab'),
    }
    q_string = {}
    containers = {}
    shopper = get_shopper(request)
    if not shopper:
        return redirect(reverse('%s:%s' % (CUR_APP, 'login')))

    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)
예제 #5
0
def create_new_order(request, shopper, cart, comments: str = None):
    """Оформление заказа пользователем,
       нажатие кнопки на сайте Оформить заказ
       :param request: HttpRequest
       :param shopper: покупатель
       :param cart: корзинка пользователя
       :param comments: комментарий к заказу (доп инфа)
    """
    if not shopper or not cart or not shopper.id:
        return {}

    fields = (
        'name',
        'first_name',
        'last_name',
        'middle_name',
        'email',
        'phone',
        'address',
    )

    if not request.method == 'POST':
        return {
            'shopper_data': {
                field: getattr(shopper, field)
                for field in fields if getattr(shopper, field)
            }
        }

    new_order = None
    errors = []

    # Подтверждение заказа
    shopper_data = {}
    for field in fields:
        value = request.POST.get(field)
        shopper_value = getattr(shopper, field)
        if not value and shopper_value:
            value = shopper_value
        elif value and not shopper_value:
            Shopper.objects.filter(pk=shopper.id).update(**{field: value})
            setattr(shopper, field, value)
        shopper_data[field] = value

    save_user_to_request(request, shopper)

    email = check_email(shopper_data['email'])
    if not email:
        errors.append('Неправильно указан email')
    phone = check_phone(shopper_data['phone'])
    if not phone:
        errors.append('Неправильно указан телефон')
    if not shopper_data['name']:
        errors.append('Укажите как к вам обращаться')
    if not errors:
        # Оформление заказа
        promocode = None
        if cart.get('promocode'):
            promocode_id = request.session.get('promocode')
            promocode = PromoCodes.objects.filter(pk=promocode_id).first()
        new_order = Orders.objects.create(
            total=cart['total_with_discount'],
            discount=cart['discount'],
            promocode=promocode,
            shopper=shopper,
            shopper_ip=get_request_ip(request),
            shopper_name=shopper_data['name'],
            shopper_email=shopper_data['email'],
            shopper_phone=shopper_data['phone'],
            shopper_address=shopper_data['address'],
            state=2,
            comments=comments,
        )
        purchases = cart.get('purchases')
        for purchase in purchases:
            Purchases.objects.filter(pk=purchase.id).update(order=new_order,
                                                            cost=purchase.cost)
        if 'promocode' in request.session:
            del request.session['promocode']

        scheme = 'https://' if request.is_secure() else 'http://'
        domain = '%s%s' % (scheme, request.META['HTTP_HOST'])
        notify_about_order(new_order, purchases, domain=domain)
    return {
        'order': new_order,
        'errors': errors,
        'shopper_data': shopper_data,
    }