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
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()
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'
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)