def edit_category(category_id: int): form = CategoryForm() all_categories = dishservice.get_all_categories() form.parent.choices = [(c.id, '{}'.format(c.get_nested_names())) for c in all_categories] form.parent.choices.insert(0, (0, 'Нет')) form.parent.choices.sort(key=lambda tup: tup[1]) if form.validate_on_submit(): name_ru = form.name_ru.data image = form.image.data parent_id = form.parent.data dishservice.update_category(category_id, name_ru, parent_id, image) flash('Категория {} изменена'.format(name_ru), category='success') if parent_id != 0: return redirect( url_for('admin.show_category', category_id=parent_id)) else: return redirect(url_for('admin.catalog')) category = dishservice.get_category_by_id(category_id) form.fill_from_object(category) return render_template('admin/edit_category.html', title='{}'.format(category.name), area='catalog', form=form, category=category)
def back_to_the_catalog(chat_id, language, message_text=None, parent_category_id=None): parent_category = dishservice.get_category_by_id(parent_category_id) bot.send_chat_action(chat_id, 'typing') if not message_text: catalog_message = strings.get_string('catalog.start', language) else: catalog_message = message_text if parent_category: catalog_message = strings.from_category_name(parent_category, language) categories = parent_category.get_siblings(include_self=True).order_by( DishCategory.name.asc()).all() category_keyboard = keyboards.from_dish_categories( categories, language) bot.send_message(chat_id, catalog_message, reply_markup=category_keyboard) if parent_category.parent: bot.register_next_step_handler_by_chat_id( chat_id, catalog_processor, parent_category_id=parent_category.parent.id) else: bot.register_next_step_handler_by_chat_id(chat_id, catalog_processor) return categories = dishservice.get_parent_categories(sort_by_number=True) category_keyboard = keyboards.from_dish_categories(categories, language) bot.send_message(chat_id, catalog_message, reply_markup=category_keyboard, parse_mode='HTML') bot.register_next_step_handler_by_chat_id(chat_id, catalog_processor)
def category_dishes(category_id: int): category = dishservice.get_category_by_id(category_id) dishes = category.dishes.order_by(Dish.number.asc()).all() return render_template('admin/category_dishes.html', title='{}'.format(category.name), area='catalog', category=category, dishes=dishes)
def remove_category(category_id: int): cat = dishservice.get_category_by_id(category_id) if cat.parent: redirect_to_url = url_for('admin.show_category', category_id=cat.parent.id) else: redirect_to_url = url_for('admin.catalog') dishservice.remove_category(category_id) flash('Категория удалена', category='success') return redirect(redirect_to_url)
def show_category(category_id: int): category = dishservice.get_category_by_id(category_id) categories = category.get_children().order_by( DishCategory.number.asc()).all() return render_template('admin/category.html', title='{}'.format(category.name), area='catalog', category=category, categories=categories)
def category(category_id: int): form = CategoryForm() if form.validate_on_submit(): name_ru = form.name_ru.data name_uz = form.name_uz.data dishservice.update_category(category_id, name_ru, name_uz) flash('Категория {} | {} изменена'.format(name_ru, name_uz), category='success') return redirect(url_for('admin.catalog')) category = dishservice.get_category_by_id(category_id) form.fill_from_object(category) return render_template('admin/category.html', title='{} | {}'.format(category.name, category.name_uz), area='catalog', form=form, category=category)
def edit_category(category_id: int): form = CategoryForm() all_categories = dishservice.get_all_categories() form.parent.choices = [(c.id, '{} | {}'.format(c.name, c.name_uz)) for c in all_categories] form.parent.choices.insert(0, (0, 'Нет')) if form.validate_on_submit(): name_ru = form.name_ru.data name_uz = form.name_uz.data image = form.image.data parent_id = form.parent.data dishservice.update_category(category_id, name_ru, name_uz, parent_id, image) flash('Категория {} | {} изменена'.format(name_ru, name_uz), category='success') return redirect(url_for('admin.catalog')) category = dishservice.get_category_by_id(category_id) form.fill_from_object(category) return render_template('admin/edit_category.html', title='{} | {}'.format(category.name, category.name_uz), area='catalog', form=form, category=category)
def catalog_processor(message: Message, **kwargs): def send_category(category, message, keyboard): if category.image_path or category.image_id: if category.image_path and not category.image_id: try: image = open(category.image_path, 'rb') except FileNotFoundError: bot.send_message(chat_id=chat_id, text=message, reply_markup=keyboard) else: sent_message = bot.send_photo(chat_id=chat_id, photo=image, caption=message, reply_markup=keyboard) dishservice.set_category_image_id( category, sent_message.photo[-1].file_id) elif category.image_id: bot.send_photo(chat_id=chat_id, photo=category.image_id, caption=message, reply_markup=keyboard) else: bot.send_message(chat_id=chat_id, text=message, reply_markup=keyboard) chat_id = message.chat.id if message.successful_payment: bot.register_next_step_handler_by_chat_id(chat_id, catalog_processor) return user_id = message.from_user.id language = userservice.get_user_language(user_id) def error(): if message.text == '/start': registration.welcome(message) return error_message = strings.get_string('catalog.error', language) bot.send_message(chat_id, error_message) bot.register_next_step_handler_by_chat_id(chat_id, catalog_processor) if not message.text: error() return if strings.get_string('go_back', language) in message.text: parent_category_id = kwargs.get('parent_category_id', None) if not parent_category_id: botutils.to_main_menu(chat_id, language) return back_to_the_catalog(chat_id, language, parent_category_id=parent_category_id) elif strings.get_string('go_to_menu', language) in message.text: botutils.to_main_menu(chat_id, language) ##MENU elif strings.get_string('catalog.cart', language) in message.text: user_cart.cart_processor(message) elif strings.get_string('catalog.make_order', language) in message.text: orders.order_processor(message) else: category_name = message.text parent_category = dishservice.get_category_by_id( kwargs.get('parent_category_id', None)) category = dishservice.get_category_by_name(category_name, language, parent_category) if not category: error() return if category.get_children().count() > 0: categories = category.get_children().order_by( DishCategory.name.asc()).all() catalog_message = strings.from_category_name(category, language) category_keyboard = keyboards.from_dish_categories( categories, language) send_category(category, catalog_message, category_keyboard) bot.register_next_step_handler_by_chat_id( chat_id, catalog_processor, parent_category_id=category.id) elif category.dishes.count() > 0: dishes = category.dishes.filter(Dish.is_hidden == False).order_by( Dish.number.asc()) dish_message = strings.get_string('catalog.choose_dish', language) dishes_keyboard = keyboards.from_dishes(dishes, language) send_category(category, dish_message, dishes_keyboard) bot.register_next_step_handler_by_chat_id(chat_id, choose_dish_processor, category_id=category.id) else: empty_message = strings.get_string('catalog.empty', language) bot.send_message(chat_id, empty_message) if category.parent: bot.register_next_step_handler_by_chat_id( chat_id, catalog_processor, parent_category_id=category.parent.id) else: bot.register_next_step_handler_by_chat_id( chat_id, catalog_processor)
def choose_dish_processor(message: Message, **kwargs): chat_id = message.chat.id user_id = message.from_user.id language = userservice.get_user_language(user_id) def error(): if message.text == '/start': registration.welcome(message) return error_message = strings.get_string('catalog.dish_error', language) bot.send_message(chat_id, error_message) bot.register_next_step_handler_by_chat_id(chat_id, choose_dish_processor) if not message.text: error() return if strings.get_string('go_back', language) in message.text: if 'category_id' in kwargs: category_id = kwargs.get('category_id') back_to_the_catalog(chat_id, language, parent_category_id=category_id) return back_to_the_catalog(chat_id, language) elif strings.get_string('go_to_menu', language) in message.text: botutils.to_main_menu(chat_id, language) ##MENU elif strings.get_string('catalog.cart', language) in message.text: user_cart.cart_processor(message, choose_dish_processor) else: dish_name = message.text dish = dishservice.get_dish_by_name( dish_name, language, dishservice.get_category_by_id(kwargs.get('category_id'))) if not dish: error() return userservice.set_current_user_dish(user_id, dish.id) dish_info = strings.from_dish(dish, language) dish_keyboard = keyboards.get_keyboard('catalog.dish_keyboard', language) msg_id = None if dish.image_id or dish.image_path: if dish.image_path and not dish.image_id: try: image = open(dish.image_path, 'rb') except FileNotFoundError: bot.send_message(chat_id, dish_info, reply_markup=dish_keyboard, parse_mode='HTMLS') else: sent_message = bot.send_photo(chat_id, image, caption=dish_info, reply_markup=dish_keyboard, parse_mode='HTML') dishservice.set_dish_image_id( dish, sent_message.photo[-1].file_id) msg_id = sent_message.message_id elif dish.image_id: msg_id = bot.send_photo(chat_id, dish.image_id, caption=dish_info, reply_markup=dish_keyboard, parse_mode='HTML').message_id else: msg_id = bot.send_message(chat_id, dish_info, reply_markup=dish_keyboard, parse_mode='HTML').message_id bot.register_next_step_handler_by_chat_id(chat_id, dish_action_processor, message_id=msg_id)