fix: Refactor send_shop_order_invoice_telegram_task to use telebot for Telegram API integration
This commit is contained in:
+21
-32
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user