Exemple #1
0
def get_cart_reply(token, chat_id):
    cart = moltin.get_cart_items(token, chat_id)
    message = ''
    keyboard = []
    for product in cart['items']:
        keyboard.append([
            InlineKeyboardButton(f"Убрать из корзины {product['name']}",
                                 callback_data=f"remove,{product['id']}")
        ])

        product_output = dedent(f'''
            Пицца {product['name']}
            {product['description']}
            По цене {product['price']} руб

            У вас {product['quantity']} за {product['amount']} руб''')
        message = dedent(f'''{message}
        {product_output}''')

    keyboard.append([InlineKeyboardButton('Меню', callback_data='menu')])
    keyboard.append([
        InlineKeyboardButton('Выбор доставки', callback_data='delivery_choice')
    ])
    reply_markup = InlineKeyboardMarkup(keyboard)

    message = dedent(f'''
    {message}\n\nВсего к оплате: {cart["total_amount"]} руб''')

    return reply_markup, message, cart
Exemple #2
0
def send_cart_keyboard(bot, chat_id):
    token = moltin_token()
    cart = moltin.get_a_cart(token, chat_id)
    cart_items = moltin.get_cart_items(token, chat_id)
    menu_button = [[InlineKeyboardButton('◀️ Меню', callback_data='menu')]]
    pay_button = [[InlineKeyboardButton('🤑 Оплатить', callback_data='pay')]]

    if not cart_items:
        bot.send_message(
            chat_id=chat_id,
            text='В корзине ничего нет :(',
            reply_markup=InlineKeyboardMarkup(menu_button),
        )

        return

    cart_items_formatted = moltin.get_formatted_cart_items(cart, cart_items)
    keyboard = [[
        InlineKeyboardButton(f'❌ Удалить {product["name"]}',
                             callback_data=product['id'])
    ] for product in cart_items] + pay_button + menu_button

    reply_markup = InlineKeyboardMarkup(keyboard)
    bot.send_message(chat_id=chat_id,
                     text=cart_items_formatted,
                     reply_markup=reply_markup,
                     parse_mode=telegram.ParseMode.MARKDOWN)
def get_cart_reply(access_token, cart_id):
    cart_items = get_cart_items(access_token, cart_id)
    cart_total_price = get_cart_total_price(access_token, cart_id)

    keyboard = [[
        InlineKeyboardButton(f'Remove {product["name"]} from the cart',
                             callback_data=product['id'])
    ] for product in cart_items]
    keyboard.extend([
        [InlineKeyboardButton('Checkout', callback_data='pay')],
        [InlineKeyboardButton('Back to menu', callback_data='menu')],
    ])
    reply_markup = InlineKeyboardMarkup(keyboard)

    reply = dedent('\n'.join(f'''

        {product["name"]}
        {product["description"]}
        {product["meta"]["display_price"]["with_tax"]["unit"]["formatted"]} per kg
        {product["quantity"]}kg in cart for {product["meta"]["display_price"]["with_tax"]["value"]["formatted"]}'''
                             for product in cart_items))

    cart_reply = '\n'.join([reply, f'Total: {cart_total_price}'])

    return cart_reply, reply_markup
def get_cart_keyboard(sender_id, token):
    user = f'fb_{sender_id}'
    cart = moltin.get_cart_items(token, user)

    elements = get_cart_keyboard_content(cart)
    params = {'access_token': env('PAGE_ACCESS_TOKEN')}
    headers = {'Content-Type': 'application/json'}
    request_content = {
            'recipient': {
                'id': sender_id
            },
            'message': {
                'attachment': {
                    'type': 'template',
                    'payload': {
                        'template_type': 'generic',
                        'image_aspect_ratio': 'square',
                        'elements': elements
                    }
                }
            }
        }
    url = 'https://graph.facebook.com/v2.6/me/messages'
    response = requests.post(url, params=params, headers=headers, json=request_content)
    response.raise_for_status()
Exemple #5
0
def show_cart(query, bot, update):
    products = moltin.get_cart_items(query.message.chat_id)

    list_reply = []
    total = sum([
        product['meta']['display_price']['with_tax']['value']['amount']
        for product in products
    ])
    for product in products:
        name = product['name']
        description = product['description']
        numbers = product['quantity']
        price = product['meta']['display_price']['with_tax']
        price_per_kg = price['unit']['formatted']
        total_price = price['value']['formatted']
        list_reply.append(
            f"{name}\n{description}\n{price_per_kg} per kg\n{numbers}kg in cart for {total_price}\n\n"
        )
    list_reply.append(f'Total price: ${total / 100:.2f}')
    reply = ''.join(list_reply)

    keyboard = [[
        InlineKeyboardButton(f"Удалить товар {product['name']}",
                             callback_data=product['id'])
    ] for product in products]
    keyboard.append([InlineKeyboardButton('В меню', callback_data='menu')])
    keyboard.append([InlineKeyboardButton('Оплата', callback_data='payment')])
    reply_markup = InlineKeyboardMarkup(keyboard)

    bot.send_message(text=reply,
                     reply_markup=reply_markup,
                     chat_id=query.message.chat_id)
    bot.delete_message(chat_id=query.message.chat_id,
                       message_id=query.message.message_id)
def handle_cart(bot, update):
    items_message = "Cart is empty."
    callback_query = update.callback_query
    chat_id = str(callback_query.message.chat_id)

    if 'delete' in update.callback_query.data:
        product_name, deleted_product_id = get_product_name_and_cart_item(
            update.callback_query.data)
        moltin.delete_item(moltin.delete_item_cart_url,
                           headers,
                           chat_id=chat_id,
                           cart_item=deleted_product_id)
        bot.answer_callback_query(callback_query_id=update.callback_query.id,
                                  text=f"{product_name} was deleted.",
                                  show_alert=False)

    cart_products = moltin.get_cart_items(moltin.operation_cart_url,
                                          headers,
                                          chat_id=chat_id)
    message = []
    for product in cart_products['data']:
        message.append(product['name'])
        message.append(product['description'])
        message.append(
            f"{product['meta']['display_price']['without_tax']['unit']['formatted']} per kg"
        )
        message.append(
            f"{product['quantity']} kg in cart for {product['meta']['display_price']['without_tax']['value']['formatted']}"
        )
        message.append(' ')
        items_message = '\n'.join(message)
    total = moltin.get_cart_total(moltin.cart_url, headers, chat_id=chat_id)
    total_cost = total['data']['meta']['display_price']['without_tax'][
        'formatted']

    menu_btn = []
    for product in cart_products['data']:
        menu_btn.append([
            InlineKeyboardButton(
                f"remove from cart {product['name']}",
                callback_data=f"{product['name'], product['id']}, delete")
        ])

    menu_btn.append(
        [InlineKeyboardButton(f"payment", callback_data="to_payment")])
    menu_btn.append(
        [InlineKeyboardButton(f"back to menu", callback_data="/start")])
    reply_markup = InlineKeyboardMarkup(menu_btn)

    bot.sendMessage(chat_id=update.callback_query.message.chat_id,
                    text=f'{items_message}\nTotal: {total_cost}',
                    reply_markup=reply_markup)

    bot.delete_message(chat_id=callback_query.message.chat_id,
                       message_id=callback_query.message.message_id)

    return 'HANDLE_CART'
Exemple #7
0
def update_cart(bot, update, access_token):
    query = update.callback_query

    button_menu = [InlineKeyboardButton("Меню", callback_data="Меню")]
    button_pay = [InlineKeyboardButton("Оплатить", callback_data="Оплатить")]

    cart_items = moltin.get_cart_items(access_token, query.message.chat_id)
    cart = moltin.get_cart(access_token, query.message.chat_id)
    total_price = cart['data']['meta']['display_price']['with_tax']['formatted']

    products_in_cart = []
    keyboard = []
    for product_in_cart in cart_items['data']:
        product_name = product_in_cart['name']
        description = product_in_cart['description']
        price = product_in_cart['meta']['display_price']['with_tax']['unit']['formatted']
        quantity = product_in_cart['quantity']
        all_price = product_in_cart['meta']['display_price']['with_tax']['value']['formatted']

        button = [InlineKeyboardButton(f'Убрать из корзины {product_name}', callback_data=product_in_cart['id'])]
        keyboard.append(button)
        products_in_cart.append(f'{product_name}\n'
                                f'{description}\n'
                                f'{price}per kg\n'
                                f'{quantity}kg in cart for {all_price}\n\n')

    keyboard.append(button_menu)
    keyboard.append(button_pay)
    reply_markup = InlineKeyboardMarkup(keyboard)
    cart_text = ''.join(products_in_cart)

    telegram_bot.del_old_message(bot, update)
    bot.send_message(chat_id=query.message.chat_id, text=f'{cart_text}\n'
                                                         f'*Всего на сумму:\n'
                                                         f'{total_price}*', reply_markup=reply_markup,
                                                         parse_mode=ParseMode.MARKDOWN)