diff --git a/backend/order/tasks.py b/backend/order/tasks.py index d50f0ca..9dd8466 100644 --- a/backend/order/tasks.py +++ b/backend/order/tasks.py @@ -134,50 +134,39 @@ def send_shop_order_invoice_telegram_task(shop_order_id, chat_id, bot_token): Returns: Success or error message """ - import asyncio - import io - from telegram import Bot - from telegram.error import TelegramError + import telebot from .invoice_generator import generate_shop_order_invoice from .models import ShopOrderModel - + try: # Get the shop order shop_order = ShopOrderModel.objects.get(pk=shop_order_id) - - # Generate invoice PDF + + # Generate invoice PDF (should return a file-like object) pdf_buffer = generate_shop_order_invoice(shop_order_id) - - # Reset buffer position - pdf_buffer.seek(0) - - # Send via Telegram - async def send_invoice(): - bot = Bot(token=bot_token) - await bot.send_document( - chat_id=chat_id, - document=pdf_buffer, - filename=f'invoice_shop_order_{shop_order_id}.pdf', - caption=f'فاکتور سفارش #{shop_order_id}\n{shop_order.shop.shop_name}' - ) - - # Run async function - create new event loop for Celery context - loop = asyncio.new_event_loop() - asyncio.set_event_loop(loop) - try: - loop.run_until_complete(send_invoice()) - finally: - loop.close() - + if hasattr(pdf_buffer, 'seek'): + pdf_buffer.seek(0) + + caption = f'فاکتور سفارش #{shop_order_id}\n{shop_order.shop.shop_name}' + + # Initialize bot and send document + bot = telebot.TeleBot(bot_token) + bot.send_document( + chat_id=chat_id, + document=pdf_buffer, + caption=caption, + visible_file_name=f'invoice_shop_order_{shop_order_id}.pdf' + ) + logging.info(f'Successfully sent shop order invoice {shop_order_id} to Telegram chat {chat_id}') return f'Invoice sent successfully to chat {chat_id}' - + except ShopOrderModel.DoesNotExist: error_msg = f'ShopOrderModel with id {shop_order_id} does not exist' logging.error(error_msg) return error_msg - except TelegramError as e: - error_msg = f'Telegram error sending invoice {shop_order_id}: {str(e)}' + except telebot.apihelper.ApiException as e: + error_msg = f'Telegram API error sending invoice {shop_order_id}: {str(e)}' logging.error(error_msg) return error_msg except Exception as e: