def admin_orders_panel_page(request, page): context = get_base_context(request, "Панель управления заказами") if not have_access(request, "orders:see"): return redirect('permission_error') orders_on_page = 25 orders = [] orders_dbase = [{'order': order, 'product_photo': order.product.photo.split(sep=",")[0] if order.product != None else ""} for order in Orders.objects.all()] if len(request.GET) > 0: change_orders = request.GET.get('change', '') status_filter = request.GET.get('filter', '') if change_orders != "": if have_access(request, "orders:edit"): change_orders = change_orders.split(sep=",")[:-1] for change_order in change_orders: order_attrs = change_order.split(sep="-") if len(Orders.objects.filter(id=int(order_attrs[0]))) > 0: order = Orders.objects.get(id=int(order_attrs[0])) order.status = order_attrs[1] order.save() return redirect('orders_panel', page=page) else: return redirect("permission_error") if status_filter != "": orders_dbase = [{'order': order, 'product_photo': order.product.photo.split(sep=",")[0] if order.product != None else ""} for order in Orders.objects.filter(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, 'admin/orders_panel.html', context=context)
def admin_main_panel_page(request): context = get_base_context(request, "Главная панель управления") if not have_access(request, ""): return redirect('permission_error') context['number_of_products'] = len(Product.objects.all()) context['orders'] = { 'total': len(Orders.objects.all()), 'done': len(Orders.objects.filter(status='d')), 'accept': len(Orders.objects.filter(status='a')), 'new': len(Orders.objects.filter(status='p')) } admins = User.objects.filter(is_superuser=True) context['admins'] = { 'count': len(admins), 'profiles': admins } context['comments'] = { 'с_total': len(Comment.objects.all()), 'c1_total': len(Comment1.objects.all()), 'с_today': len([comment for comment in Comment.objects.all() if datetime.date.today() == (comment.time + datetime.timedelta(seconds=10800)).date()]), 'с1_today': len([comment for comment in Comment1.objects.all() if datetime.date.today() == (comment.time + datetime.timedelta(seconds=10800)).date()]) } return render(request, 'admin/admin_panel.html', context=context)
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)
def admin_appoint_page(request, id): if len(UserProfile.objects.filter(id=id)) == 0: return redirect('404') if not have_access(request, "admins:create") or UserProfile.objects.get(id=request.user.id).id == int(id): return redirect('permission_error') user = UserProfile.objects.get(id=id) context = get_base_context(request, "Назначить нового администратора") if len(AdminProfile.objects.filter(user=user)) > 0: context['edit_user_admin'] = AdminProfile.objects.get(user=user) context['user_profile'] = user if request.method == "POST": products = { 'see': request.POST.get('ProductsCanSee'), 'create': request.POST.get('ProductsCanCreate'), 'edit': request.POST.get('ProductsCanEdit'), 'remove': request.POST.get('ProductsCanRemove'), 'distribute': request.POST.get('ProductsCanDistribute') } orders = { 'see': request.POST.get('OrdersCanSee'), 'check': request.POST.get('OrdersCanCheck'), 'edit': request.POST.get('ProductsCanEdit') } comments = { 'see': request.POST.get('CommentsCanSee'), 'delete': request.POST.get('CommentsCanDelete') } admins = { 'see': request.POST.get('AdminsCanSee'), 'ban': request.POST.get('AdminsCanBanUsers'), 'create_admin':request.POST.get('AdminsCanCreateAdmin'), 'demote_admin': request.POST.get('AdminsCanDemoteAdmin'), 'edit_products': request.POST.get('AdminsCanEditProducts'), 'edit_orders': request.POST.get('AdminsCanEditOrders'), 'edit_comments': request.POST.get('AdminsCanEditComments'), 'edit_admins': request.POST.get('AdminsCanEditAdmins') } if len(AdminProfile.objects.filter(user_id=id)) > 0: admin_profile = AdminProfile.objects.get(user_id=id) if have_access(request, "admins:products"): admin_profile.see_products_panel=bool(products['see']) admin_profile.can_create_products=bool(products['create']) admin_profile.can_edit_products=bool(products['edit']) admin_profile.can_remove_products=bool(products['remove']) admin_profile.can_distribute_products=bool(products['distribute']) if have_access(request, "admins:orders"): admin_profile.see_orders_panel=bool(orders['see']) admin_profile.can_check_orders_info=bool(orders['check']) admin_profile.can_edit_orders=bool(orders['edit']) if have_access(request, "admins:comments"): admin_profile.see_comments_panel=bool(comments['see']) admin_profile.can_delete_comments=bool(comments['delete']) if have_access(request, "admins:admins"): admin_profile.see_admins_panel=bool(admins['see']) admin_profile.can_ban_users=bool(admins['ban']) admin_profile.can_create_admins=bool(admins['create_admin']) admin_profile.can_demote_admins=bool(admins['demote_admin']) admin_profile.can_edit_products_section=bool(admins['edit_products']) admin_profile.can_edit_orders_section=bool(admins['edit_orders']) admin_profile.can_edit_comments_section=bool(admins['edit_comments']) admin_profile.can_edit_admins_section=bool(admins['edit_admins']) else: admin_profile = AdminProfile(see_products_panel=bool(products['see']), can_create_products=bool(products['create']), can_edit_products=bool(products['edit']), can_remove_products=bool(products['remove']), can_distribute_products=bool(products['distribute']), see_orders_panel=bool(orders['see']), can_check_orders_info=bool(orders['check']), can_edit_orders=bool(orders['edit']), see_comments_panel=bool(comments['see']), can_delete_comments=bool(comments['delete']),see_admins_panel=bool(admins['see']), can_ban_users=bool(admins['ban']), can_create_admins=bool(admins['create_admin']), can_demote_admins=bool(admins['demote_admin']), can_edit_products_section=bool(admins['edit_products']), can_edit_orders_section=bool(admins['edit_orders']), can_edit_comments_section=bool(admins['edit_comments']), can_edit_admins_section=bool(admins['edit_admins']), user=user) user.user.is_superuser = True user.user.save() admin_profile.save() return redirect("admin_appoint", id=id) elif len(request.GET) > 0: action = request.GET.get('action', 'nothing') if action == "demote": if have_access(request, "admins:demote"): if len(AdminProfile.objects.filter(user_id=id)) > 0: admin_profile = AdminProfile.objects.get(user_id=id) admin_profile.delete() user.user.is_superuser = False user.user.save() return redirect("admin_appoint", id=id) else: return redirect("permission_error") return render(request, 'admin/appoint_admin.html', context=context)
def admin_products_panel_page(request, page): context = get_base_context(request, "Панель управления товарами") if not have_access(request, "products:see"): return redirect('permission_error') products_on_page = 25 products = [] products_dbase = list(Product.objects.all()) if len(request.GET) > 0: delete_id = int(request.GET.get('delete', "-1")) distribute = request.GET.get('distribute', "-1") search = request.GET.get('search', "") if search != "": words = search.split() new_products = [] for product in products_dbase: score = 0 for word in words: if product.name.lower().find(word.lower()) != -1: score += 1 if score > 0: new_products.append({'product': product, 'score': score}) new_products = sorted(new_products, key=lambda x: x['score'], reverse=True) products_dbase = [product['product'] for product in new_products] else: if distribute != "-1": if have_access(request, "products:distribute"): val, product_id = map(int, distribute.split(sep=",")) if len(Product.objects.filter(id=product_id)) > 0: product = Product.objects.get(id=product_id) product.is_distributing = val product.save() else: return redirect('permission_error') if len(Product.objects.filter(id=delete_id)) > 0: if have_access(request, "products:remove"): product = Product.objects.get(id=delete_id) for order in Orders.objects.filter(product=product.id): if order.status == 'p': order.status = 'c' order.cancel_reason = 'Товар удалён' order.save() product.delete() check_existing_tags() else: return redirect("permission_error") return redirect('products_panel', page=page) if len(products_dbase) != 0: if len(products_dbase) <= products_on_page * (int(page) - 1): return redirect('404') range_from = products_on_page * (int(page) - 1) range_to = range_from + products_on_page if range_from + products_on_page < len(products_dbase) else range_from + (len(products_dbase) - range_from) for i in range(range_from, range_to): products.append({'product': products_dbase[i], 'sold': len(Orders.objects.filter(product=products_dbase[i].id)), 'photo': products_dbase[i].photo.split(",")[0]}) context['products'] = products context['pages'] = { 'max': len(products_dbase) // products_on_page if (len(products_dbase) / products_on_page) % 1 == 0 else len(products_dbase) // products_on_page + 1, 'current': int(page) } return render(request, 'admin/products_panel.html', context=context)
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)
def admin_comments_panel_page(request, page): context = get_base_context(request, "Панель управления комментариями") if not have_access(request, "comments:see"): return redirect('permission_error') comments_on_page = 25 comments = [] comments1 = [] comments_dbase = Comment.objects.all() comments1_dbase = Comment1.objects.all() context['comments_count'] = len(comments_dbase) context['comments1_count'] = len(comments1_dbase) if len(request.GET) > 0: time_filter = request.GET.get('filter', '') delete = request.GET.get('delete', '-1') if delete != '-1': if have_access(request, "comments:delete"): del_type, del_id = delete.split(sep=',') del_type = int(del_type) del_id = int(del_id) if del_type: if len(Comment1.objects.filter(id=del_id)) > 0: comment = Comment1.objects.get(id=del_id) comment.delete() else: if len(Comment.objects.filter(id=del_id)) > 0: comment = Comment.objects.get(id=del_id) comment.delete() return redirect('comments_panel', page=page) return redirect('permission_error') if time_filter != "": if time_filter == "today": comments_dbase = [comment for comment in Comment.objects.all() if datetime.date.today() == (comment.time + datetime.timedelta(seconds=10800)).date()] comments1_dbase = [comment for comment in Comment1.objects.all() if datetime.date.today() == (comment.time + datetime.timedelta(seconds=10800)).date()] else: if re.match('\d{2}\.\d{2}\.\d{4}', time_filter) != None: comments_dbase = [comment for comment in Comment.objects.all() if datetime.datetime.strptime(time_filter, "%d.%m.%Y").date() == (comment.time + datetime.timedelta(seconds=10800)).date()] comments1_dbase = [comment for comment in Comment1.objects.all() if datetime.date.today() == (comment.time + datetime.timedelta(seconds=10800)).date()] else: comments_dbase = [] comments1_dbase = [] if len(comments_dbase) > comments_on_page * (int(page) - 1): range_from = comments_on_page * (int(page) - 1) range_to = range_from + comments_on_page if range_from + comments_on_page < len(comments_dbase) else range_from + (len(comments_dbase) - range_from) for i in range(range_from, range_to): comments.append(comments_dbase[i]) if len(comments1_dbase) > comments_on_page * (int(page) - 1): range_from = comments_on_page * (int(page) - 1) range_to = range_from + comments_on_page if range_from + comments_on_page < len(comments1_dbase) else range_from + (len(comments1_dbase) - range_from) for i in range(range_from, range_to): comments1.append(comments1_dbase[i]) if not comments and not comments1: return redirect('404') context['comments'] = reversed(comments) context['comments1'] = reversed(comments1) context['cur_comments_count'] = len(comments) context['cur_comments1_count'] = len(comments1) context['pages'] = { 'max': len(comments_dbase) // comments_on_page if (len(comments_dbase) / comments_on_page) % 1 == 0 else len(comments_dbase) // comments_on_page + 1, 'current': int(page) } return render(request, 'admin/comments_panel.html', context=context)