Example #1
0
def create_order_page(request, id):
    if len(Product.objects.filter(id=id)) == 0:
        return redirect('404')

    context = get_base_context(request, "Оформление заказа")
    user_info = get_user_info(request, user=request.user)
    product = Product.objects.get(id=id)

    if request.method == "POST":
        count = int(request.POST.get('count'))
        size = request.POST.get('size')
        phone = request.POST.get('phone_number')
        price = count * product.price
        wishes = request.POST.get('wishes')

        new_order = Orders(customer=user_info,
                           product=product,
                           count=count,
                           size=size,
                           phone=phone,
                           time=datetime.datetime.now(),
                           price=price,
                           customer_status="n",
                           customer_wishes=wishes)
        new_order.save()

        return redirect('show_order', id=new_order.id)

    else:
        context['order_number'] = len(Orders.objects.all()) + 1
        context['product'] = product
        context['user_info'] = user_info
        context['photo'] = product.photo.split(sep=',')[0]

    return render(request, 'create_order.html', context=context)
Example #2
0
def account_settings_page(request):
    context = get_base_context(request, "Настройки")
    context['user_info'] = get_user_info(request, user=request.user)

    if request.method == 'POST':
        user = User.objects.get(username=request.user)
        user_info = get_user_info(request, user=user.username)

        passwd_is_changed = False
        phone_is_changed = False
        fname = request.POST.get('first_name')
        lname = request.POST.get('last_name')
        d_of_b = request.POST.get('date_of_birth')
        email = request.POST.get('email')
        phone = request.POST.get('phone')
        old_pass = request.POST.get('old_passwd')
        new_pass = request.POST.get('new_passwd')

        user.first_name = fname
        user.last_name = lname
        user.email = email

        if user_info.phone_number != phone:
            user_info.phone_number = phone
            phone_is_changed = True

        if d_of_b != "":
            user_info.date_of_birth = d_of_b

        if user.check_password(old_pass):
            user.set_password(new_pass)
            passwd_is_changed = True
        else:
            if old_pass != "":
                context['errors'].append("Старый пароль неверный")

        user.save()
        user_info.save()

        if passwd_is_changed or phone_is_changed:
            return redirect('login') if passwd_is_changed else redirect('settings')

    return render(request, 'settings.html', context=context)
Example #3
0
def upload_file(request):
    context = get_base_context(request, "Загрузка фотографии")

    if request.method == 'POST':
        user_profile = get_user_info(request, user=request.user)
        uploaded_photo = request.FILES['document']
        url = upload_photo(uploaded_photo, uploaded_photo.name, user_profile.photo)
        user_profile.photo = url
        user_profile.save()

        return redirect('settings')

    return render(request, 'upload.html', context=context)
Example #4
0
def create_comment_page(request, info):
    c_type, item_id = map(int, info.split(sep=","))

    if request.method == "POST":
        comment_text = request.POST.get('comment_text', '')

        if c_type == 0:
            if len(Product.objects.filter(id=item_id)) > 0:
                product = Product.objects.get(id=item_id)

                Comment(author=get_user_info(request, request.user),
                        product=product,
                        text=comment_text,
                        time=datetime.datetime.now(
                            tz=pytz.timezone('Europe/Moscow'))).save()

                return redirect('product', id=item_id)
        elif c_type == 1:
            if len(Orders.objects.filter(id=item_id)) > 0:
                order = Orders.objects.get(id=item_id)

                if order.customer_id == get_user_info(request,
                                                      request.user).id:
                    if order.status == "d":
                        Comment1(author=get_user_info(request, request.user),
                                 product=order.product,
                                 text=comment_text,
                                 time=datetime.datetime.now(
                                     tz=pytz.timezone('Europe/Moscow')),
                                 order=order).save()
                        order.customer_status = "dc" if order.customer_status == "d" else "ndc"
                        order.save()
                        return redirect('my_orders', 1)

                return redirect('permission_error')

    return redirect('404')
Example #5
0
def delete_comment_page(request, comment):
    comment_type, comment_id = map(int, comment.split(sep=","))
    user_info = get_user_info(request, request.user)

    if comment_type:
        if Comment1.objects.filter(id=comment_id):
            comment = Comment1.objects.get(id=comment_id)
    else:
        if Comment.objects.filter(id=comment_id):
            comment = Comment.objects.get(id=comment_id)

    if comment.author.id == user_info.id:
        comment.delete()
        return HttpResponseRedirect(
            request.GET.get('next', '/profile/' + str(user_info.id)))

    return redirect('permission_error')
Example #6
0
def show_order_page(request, id):
    if len(Orders.objects.filter(id=id)) > 0:
        order = Orders.objects.get(id=id)
    else:
        return redirect('404')

    if not have_access(request,
                       "orders:check") and order.customer.id != get_user_info(
                           request, request.user).id:
        return redirect('permission_error')

    context = get_base_context(request, "Заказ №" + str(order.id))
    context['order'] = order
    if order.product != None:
        context['photo'] = order.product.photo.split(sep=',')[0]

    return render(request, 'show_order.html', context=context)
Example #7
0
def account_banned_page(request, username=""):
    user = User.objects.get(username=username)
    context = get_base_context(request, "Ваш аккаунт заблокирован!")
    user_info = get_user_info(request, user)
    context['reason'] = user_info.ban_reason
    context['user'] = user
    context[
        'report_status'] = "not reported" if user_info.is_reported == 0 else "report cancelled" if user_info.is_reported == -1 else "reported"
    context['user_profile'] = user_info

    if user_info.is_reported == 0:
        if request.method == "POST":
            report_text = request.POST.get('report_text', '')

            user_info.is_reported = 1
            user_info.report_text = report_text
            user_info.save()
            return redirect('account_banned', username=username)

    return render(request, "registration/account_banned.html", context=context)
Example #8
0
def orders_list_page(request, id):
    if len(User.objects.filter(id=id)) == 0:
        return redirect('404')

    user = User.objects.get(id=id)
    user_info = get_user_info(request, user=user.username)

    context = get_base_context(request, "Все заказы")
    context['user_info'] = user_info
    context['orders'] = [{
        'order':
        order,
        'comment':
        Comment1.objects.get(
            product=order.product, author=user_info, order=order) if len(
                Comment1.objects.filter(product=order.product,
                                        author=user_info,
                                        order=order)) else None
    } for order in Orders.objects.filter(customer=user_info)]
    context['orders_count'] = len(context['orders'])

    return render(request, 'orders_list.html', context=context)
Example #9
0
def user_login(request, action=""):
    context = get_base_context(request, "Авторизация")
    context['next'] = request.GET.get('next', '/')

    if request.POST:
        username = request.POST.get('username', "")
        password = request.POST.get('password', "")

        user = authenticate(username=username, password=password)
        if user is not None:
            if user.is_active:
                user_profile = get_user_info(request, user)

                if user_profile.is_banned:
                    return redirect("account_banned", username=user.username)
                else:
                    login(request, user)

                    if user.is_superuser:
                        return redirect('admin_panel')

                return HttpResponseRedirect(request.POST['next'])

    return render(request, 'registration/login.html', context=context)
Example #10
0
def my_orders_page(request, page):
    context = get_base_context(request, "Мои заказы")

    user = request.user
    user_info = get_user_info(request, user)

    orders_on_page = 25
    orders = []
    orders_dbase = [{'order': order, 'product_photo': order.product.photo.split(sep=",")[0] if order.product else "" } for order in Orders.objects.filter(customer_id=user_info.id)]

    if len(request.GET) > 0:
        status_filter = request.GET.get('filter', '')
        search = request.GET.get('search', "")
        confirmation = request.GET.get('confirmation', '-1')

        if confirmation != "-1":
            order_id, val = map(int, confirmation.split(sep=","))

            if len(Orders.objects.filter(id=order_id)) > 0:
                order = Orders.objects.get(id=order_id)
                if not val:
                    order.customer_status = "c"
                    order.status = "c"
                    order.cancel_reason = "отменено покупателем"
                else:
                    order.customer_status = "d" if order.customer_status != "ndc" else "dc"
                order.save()

                return redirect('my_orders', page=page)

        if search != "":
            words = search.split()
            new_orders = []

            for order in orders_dbase:
                if order['order'].product == None:
                    continue

                score = 0

                for word in words:
                    if order['order'].product.name.lower().find(word.lower()) != -1:
                        score += 1

                if score > 0:
                    new_orders.append({'order': order, 'score': score})

            new_orders = sorted(new_orders, key=lambda x: x['score'])
            orders_dbase = [order['order'] for order in new_orders]

        if status_filter != "":
            orders_dbase = [{'order': order, 'product_photo': order.product.photo.split(sep=",")[0] if order.product else "" } for order in Orders.objects.filter(customer_id=user_info.id, status=status_filter)]


    if len(orders_dbase) != 0:
        if len(orders_dbase) <= orders_on_page * (int(page) - 1):
            return redirect('404')

        range_from = orders_on_page * (int(page) - 1)
        range_to = range_from + orders_on_page if range_from + orders_on_page < len(orders_dbase) else range_from + (len(orders_dbase) - range_from)

        for i in range(range_from, range_to):
            orders.append(orders_dbase[i])

    context['orders'] = reversed(orders)
    context['pages'] = {
        'max': len(orders_dbase) // orders_on_page  if (len(orders_dbase) / orders_on_page) % 1 == 0 else len(orders_dbase) // orders_on_page + 1,
        'current': int(page)
    }


    return render(request, "my_orders.html", context=context)
Example #11
0
def admin_admins_panel_page(request, page):
    context = get_base_context(request, "Панель управления пользователями")

    if not have_access(request, "admins:see"):
        return redirect('permission_error')

    users_on_page = 25
    users = []
    users_dbase = UserProfile.objects.all()

    if len(request.GET) > 0:
        search = request.GET.get('search', "")
        ban = request.GET.get('ban', "-1")
        ban_report = request.GET.get('ban_report', "-1")
        status_filter = request.GET.get('filter', '')

        if search != "":
            words = search.split()
            new_users = []

            for user in users_dbase:
                score = 0

                for word in words:
                    if user.user.first_name.lower().find(word.lower()) != -1:
                        score += 1
                    if user.user.last_name.lower().find(word.lower()) != -1:
                        score += 1

                if score > 0:
                    new_users.append({'user': user, 'score': score})

            new_users = sorted(new_users, key=lambda x: x['score'], reverse=True)

            users_dbase = [user['user'] for user in new_users]

        elif status_filter != "":
            if status_filter == "banned":
                users_dbase = UserProfile.objects.filter(is_banned=True)
            elif status_filter == "admins":
                users_dbase = [item  for item in users_dbase if item.user.is_superuser]

        elif ban != "-1":
            if have_access(request, "admins:ban"):
                val, user_id, reason = ban.split(sep=",")
                val = int(val)
                user_id = int(user_id)
                if len(User.objects.filter(id=user_id)) > 0:
                    user = User.objects.get(id=user_id)
                    user_profile = get_user_info(request, user)
                    user_profile.is_banned = val
                    user_profile.is_reported = 0
                    user_profile.report_text = ""
                    user_profile.ban_reason = reason
                    user.save()
                    user_profile.save()

                return redirect('admins_panel', page=page)
            return redirect('permission_error')

        if ban_report != "-1":
            if have_access(request, "admins:ban"):
                val, user_id = map(int, ban_report.split(sep=","))

                if len(User.objects.filter(id=user_id)) > 0:
                    user = User.objects.get(id=user_id)
                    user_profile = get_user_info(request, user)
                    if val:
                        user_profile.is_banned = 0
                        user_profile.is_reported = 0
                        user_profile.ban_reason = ""
                        user_profile.report_text = ""
                    else:
                        user_profile.is_reported = -1

                    user_profile.save()

                return redirect('admins_panel', page=page)
            return redirect("permission_error")


    if len(users_dbase) != 0:
        if len(users_dbase) <= users_on_page * (int(page) - 1):
            return redirect('404')

        range_from = users_on_page * (int(page) - 1)
        range_to = range_from + users_on_page if range_from + users_on_page < len(users_dbase) else range_from + (len(users_dbase) - range_from)

        for i in range(range_from, range_to):
            users.append(users_dbase[i])

    context['users'] = users
    context['pages'] = {
        'max': len(users_dbase) // users_on_page  if (len(users_dbase) / users_on_page) % 1 == 0 else len(users_dbase) // users_on_page + 1,
        'current': int(page)
    }

    return render(request, 'admin/admins_panel.html', context=context)