Exemple #1
0
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)
Exemple #2
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)
Exemple #3
0
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)
Exemple #4
0
def cat_on_site(request, link: str = None):
    """Странички каталога
       :param link: ссылка на рубрику (без /cat/ префикса)
    """
    mh_vars = cat_vars.copy()
    kwargs = {
        'q_string': {
            'by': 30,
        },
    }
    context = get_cat_for_site(request, link, **kwargs)
    if not context.get(settings.DEFAULT_CATALOGUE_TAG):
        raise Http404
    containers = {}

    if request.is_ajax():
        return JsonResponse(context, safe=False)
    template = 'web/cat/%slist.html' % (mh_vars['template_prefix'], )

    page = SearchLink(context['q_string'], request, containers)
    if page:
        context['page'] = page
    context['containers'] = containers

    return render(request, template, context)
Exemple #5
0
def product_on_site(request, product_id: int):
    """Страничка товара/услуги
       :param product_id: ид товара/услуги
    """
    mh_vars = cat_vars.copy()
    context = get_product_for_site(request, product_id)
    if not context.get('product'):
        raise Http404
    q_string = {}
    containers = {}

    photos = {}
    # Разбивка фоток
    for photo in context.get('photos', []):
        if not photo.name:
            photo.name = "0"
        if not photo.name in photos:
            photos[photo.name] = []
        photos[photo.name].append(photo)
    context['photo_sections'] = photos

    if photos:
        context['photo_main_section_id'] = list(photos.keys())[0]

    if request.is_ajax():
        return JsonResponse(context, safe=False)
    template = 'web/cat/%sproduct.html' % (mh_vars['template_prefix'], )

    page = SearchLink(q_string, request, containers)
    context['page'] = page
    context['containers'] = containers

    return render(request, template, context)
Exemple #6
0
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)
Exemple #7
0
def cat_on_site(request, link: str = None):
    """Странички каталога
       :param link: ссылка на рубрику (без /cat/ префикса)
    """
    mh_vars = cat_vars.copy()
    kwargs = {
        'q_string': {
            'by': 30,
        },
    }
    context = get_cat_for_site(request, link, **kwargs)
    if not context.get(settings.DEFAULT_CATALOGUE_TAG):
        raise Http404
    containers = {}

    if request.is_ajax():
        # Если запрос по фасетному поиску,
        # отдаем отрендеренный шаблон
        if request.GET.get('ff'):
            context = {
                'plp': render_to_string('web/cat/plp.html', context),
                'my_paginator': context['my_paginator'],
            }
        return JsonResponse(context, safe=False)
    template = 'web/cat/%slist.html' % (mh_vars['template_prefix'], )

    page = SearchLink(context['q_string'], request, containers)
    if page:
        context['page'] = page
    context['containers'] = containers

    return render(request, template, context)
Exemple #8
0
def registration(request):
    """Страничка для регистрации"""
    mh_vars = reg_vars.copy()
    context = {}
    q_string = {}
    containers = {}

    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=mh_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)
Exemple #9
0
    def show_sitemap(self, request):
        """Формирование ссылок для карты сайта
           :param request: HttpRequest
           TODO: постраничная навигация
           TODO: выполнять кроном и ложить в кэш/файл
        """
        managers = self.get_menu_managers()

        context = {}
        q_string = {}
        containers = {}

        # для перевода
        all_containers = []
        all_blocks = []

        for key, manager in managers.items():
            query = Blocks.objects.filter(
                container__in=manager['containers']).order_by('position')
            manager['structure'] = []
            for container in manager['containers']:
                menus = []
                blocks = [
                    block for block in query if block.container_id == container
                ]

                recursive_fill(blocks, menus, parents='')
                sort_voca(menus)
                container = Containers.objects.filter(pk=container).first()
                all_containers.append(container)
                all_blocks += blocks
                manager['structure'].append({
                    'container': container,
                    'blocks': menus
                })

        # Переводим блоки/контейнеры
        if settings.IS_DOMAINS and request:
            domains = get_domains()
            domain = get_domain(request, domains)
            if domain:
                domains = [domain]
                get_translate(all_blocks, domains)
                translate_rows(all_blocks, domain)
                get_translate(all_containers, domains)
                translate_rows(all_containers, domain)

        context['managers'] = managers
        page = SearchLink(q_string, request, containers)
        if not page:
            page = Blocks(name='Карта сайта')
        context['breadcrumbs'] = [{
            'name': page.name,
            'link': '/sitemap/',
        }]
        context['page'] = page
        context['containers'] = containers
        template = 'sitemap_html.html'
        return render(request, template, context)
Exemple #10
0
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)
Exemple #11
0
def demo(request):
    """Страничка для разработки"""
    mh_vars = demo_vars.copy()
    context = {}
    q_string = {}
    containers = {}

    if request.is_ajax():
        return JsonResponse(context, safe=False)
    template = 'web/demo.html'

    page = SearchLink(q_string, request, containers)
    context['page'] = page
    context['containers'] = containers

    return render(request, template, context)
Exemple #12
0
def home(request):
    """Главная страничка сайта"""
    mh_vars = main_vars.copy()
    context = {}
    q_string = {}
    containers = {}

    if request.is_ajax():
        return JsonResponse(context, safe=False)
    template = 'web/main.html'

    page = SearchLink(q_string, request, containers)
    context['page'] = page
    context['containers'] = containers

    return render(request, template, context)
Exemple #13
0
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)
Exemple #14
0
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)
Exemple #15
0
def product_on_site(request, product_id: int):
    """Страничка товара/услуги
       :param product_id: ид товара/услуги
    """
    mh_vars = cat_vars.copy()
    context = get_product_for_site(request, product_id)
    if not context.get('product'):
        raise Http404
    q_string = {}
    containers = {}

    if request.is_ajax():
        return JsonResponse(context, safe=False)
    template = 'web/cat/%sproduct.html' % (mh_vars['template_prefix'], )

    page = SearchLink(q_string, request, containers)
    context['page'] = page
    context['containers'] = containers

    return render(request, template, context)
Exemple #16
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)
Exemple #17
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)
Exemple #18
0
def phones_cat(request, link: str = None):
    """Странички каталога телефонов
       :param link: ссылка на рубрику (без /phones/ префикса)
    """
    mh_vars = cat_vars.copy()
    kwargs = {
        'q_string': {
            'by': 10,
        },
    }
    context = get_phones_for_site(request, link, **kwargs)
    containers = {}

    if request.is_ajax():
        return JsonResponse(context, safe=False)
    template = 'web/phones/%slist.html' % (mh_vars['template_prefix'], )

    page = SearchLink(context['q_string'], request, containers)
    if page:
        context['page'] = page
    context['containers'] = containers

    return render(request, template, context)
Exemple #19
0
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)
Exemple #20
0
def DefaultFeedback(request, **kwargs):
    """Контакты и форма обратной связи
       kwargs['fv']:
       fv => array дополнительной информации для письма
       ------------------------------------------------
       Любое количество полей с его описанием принимаем
       из main.views.FeedBack
       kwargs['fields'] = [{"name":"value"}, ...]
       name - название input/select...
       value - описание что за поле
       соответственно, вытаскиваем из POST по name и
       описание будет value:request.POST['name']
       -------------------------------------------------
       kwargs['additional_emails'] = True =>
       принимаем request.POST.get("additional_emails)
       kwargs['additional_emails_condition'] = "223.ru"
       => условие - в email должно быть это выражение
       -------------------------------------------------
       kwargs['additional_conds'] - доп. валидация
       kwargs['additional_conds'] = [
         {"name":"sms", "error":u"Неправильный смс-код", "value":"1234"},
         ..., ]
    """
    q_string = kwargs.get('q_string', {})
    breadcrumbs = kwargs.get('breadcrumbs', [])
    result = {'errors': []}
    # -----------------------------------
    # Принудительная попытка отправки,
    # даже если не все гладко - например,
    # не все поля заполнены
    # -----------------------------------
    force_send = kwargs.get('force_send') == True
    do_not_send = kwargs.get('do_not_send') == True

    isError = None
    if not breadcrumbs:
        breadcrumbs.append({
            'name': 'Обратная связь',
            'link': '/feedback/',
        })
    if request.method == "GET":
        product = kwargs.get('product')
        q_string['recall'] = kwargs.get('recall')
        containers = {}
        context = {}
        template = kwargs.get('template', 'web/main_stat.html')
        page = SearchLink(q_string, request, containers)
        context['page'] = page
        context['q_string'] = q_string
        context['breadcrumbs'] = breadcrumbs
        context['containers'] = containers
        context['product'] = product
        return render(request, template, context)
    # -------------------
    # Дополнительные поля
    # -------------------
    fields = kwargs.get('fields', [])

    feedback_vars = feedback_form(request, q_string, fields=fields)
    for required_key in ('name', 'phone', 'msg'):
        if not required_key in feedback_vars:
            result['error'] = required_key
            isError = 1

    # ------------------------------------
    # Принудительная отправка даже
    # при незаполненных обязательных полях
    # ------------------------------------
    if force_send:
        isError = None
        if 'error' in result:
            del result['error']

    # ------------------------
    # Проверка по доп условиям
    # ------------------------
    additional_conds = kwargs.get('additional_conds', [])
    for acond in additional_conds:
        v = request.POST.get(acond['name'])
        if not v == acond['value']:
            result['errors'].append(acond['error'])
            result['error'] = acond['name']
            isError = 1

    if not isError:
        result['success'] = 1
        title = kwargs.get('title')
        if title:
            feedback_vars['title'] = title

        fv = kwargs.get('fv', [])
        for item in fv:
            feedback_vars['result'] += item

        logger.info('\n[--- SENDING EMAIL ---]' +
                    '\n[TITLE]:%s' % feedback_vars['title'] +
                    '\n[MSG]: %s' % feedback_vars['result'] +
                    '\n[SENDER]: %s' % feedback_vars['sender'] +
                    '\n[EMAILS]: %s' % feedback_vars['emails'] +
                    '\n[---------------------]')

        mail = EmailMessage(feedback_vars['title'], feedback_vars['result'],
                            feedback_vars['sender'], feedback_vars['emails'])
        mail.content_subtype = 'html'
        if feedback_vars['file']:
            mail.attach(feedback_vars['file']['name'],
                        feedback_vars['file']['content'],
                        feedback_vars['file']['content_type'])
        if not do_not_send:
            try:
                mail.send()
            except Exception as e:
                result['error'] = str(e)
        else:
            logger.info(json_pretty_print(feedback_vars))
    # ---------------------------
    # Не возвращаем  HttpResponse
    # ---------------------------
    if kwargs.get('dummy'):
        return {'feedback_vars': feedback_vars, 'result': result}

    return JsonResponse(result, safe=False)
Exemple #21
0
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)
Exemple #22
0
def product_on_site(request, product_id: int):
    """Страничка товара/услуги
       :param product_id: ид товара/услуги
    """
    colors = (
        '6',  #'Зеленый',
        '1',  #'Красный',
        '2',  #'Черный',
        '3',  #'Живые фото',
        '8',  #'Серебристый',
        '7',  #'Серый',
        '5',  #'Синий',
        '4',  #'Желтый',
    )
    live_photos_id = '3'

    mh_vars = cat_vars.copy()
    context = get_product_for_site(request, product_id)
    if not context.get('product'):
        raise Http404
    q_string = {}
    containers = {}

    photos = {}
    sorted_photos = []
    main_section = None
    z = 0

    main_color = '0'
    product_color = ProductColor.objects.filter(product=product_id).first()
    if product_color:
        main_color = product_color.color

    # Разбивка фоток
    for photo in context.get('photos', []):
        if not photo.name:
            photo.name = '0'
        if not photo.name in photos:
            photos[photo.name] = []
        photos[photo.name].append(photo)

        if photo.name in colors:
            ind = colors.index(photo.name)
            if not main_section == 0 or main_section > ind:
                main_section = z
        z += 1

    sorted_photos = [{
        'section_id': color,
        'photos': photos[color],
    } for color in colors if color in photos and color != live_photos_id]

    context['live_photos'] = photos.get(live_photos_id)
    context['photo_sections'] = sorted_photos

    if sorted_photos:
        context['photo_main_section_id'] = main_color or sorted_photos[0][
            'section_id']

    if request.is_ajax():
        return JsonResponse(context, safe=False)
    template = 'web/cat/%sproduct.html' % (mh_vars['template_prefix'], )

    page = SearchLink(q_string, request, containers)
    context['page'] = page
    context['containers'] = containers

    return render(request, template, context)