コード例 #1
0
ファイル: catalog.py プロジェクト: VID-STUDY/KrepostBot
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)
コード例 #2
0
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)
コード例 #3
0
ファイル: catalog.py プロジェクト: VID-STUDY/KrepostBot
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)
コード例 #4
0
ファイル: catalog.py プロジェクト: maxwell882000/RastamagBot
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)
コード例 #5
0
ファイル: catalog.py プロジェクト: VID-STUDY/KrepostBot
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)
コード例 #6
0
ファイル: catalog.py プロジェクト: maxwell882000/HomeCooking
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)
コード例 #7
0
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)
コード例 #8
0
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)
コード例 #9
0
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)