77 lines
2.8 KiB
Python
77 lines
2.8 KiB
Python
@login_required
|
|
def send_invoice_whatsapp(request):
|
|
if request.method != 'POST':
|
|
return JsonResponse({'success': False, 'error': 'Method not allowed'})
|
|
|
|
try:
|
|
# Handle JSON payload
|
|
data = json.loads(request.body)
|
|
sale_id = data.get('sale_id')
|
|
phone = data.get('phone')
|
|
pdf_data = data.get('pdf_data') # Base64 string
|
|
except json.JSONDecodeError:
|
|
# Fallback to Form Data
|
|
sale_id = request.POST.get('sale_id')
|
|
phone = request.POST.get('phone')
|
|
pdf_data = None
|
|
|
|
if not sale_id:
|
|
return JsonResponse({'success': False, 'error': 'Sale ID missing'})
|
|
|
|
sale = get_object_or_404(Sale, pk=sale_id)
|
|
|
|
if not phone:
|
|
if sale.customer and sale.customer.phone:
|
|
phone = sale.customer.phone
|
|
else:
|
|
return JsonResponse({'success': False, 'error': 'Phone number missing'})
|
|
|
|
try:
|
|
# If PDF data is present, save and send document
|
|
if pdf_data:
|
|
# Remove header if present (data:application/pdf;base64,)
|
|
if ',' in pdf_data:
|
|
pdf_data = pdf_data.split(',')[1]
|
|
|
|
file_data = base64.b64decode(pdf_data)
|
|
dir_path = os.path.join(django_settings.MEDIA_ROOT, 'temp_invoices')
|
|
os.makedirs(dir_path, exist_ok=True)
|
|
|
|
filename = f"invoice_{sale.id}_{int(timezone.now().timestamp())}.pdf"
|
|
file_path = os.path.join(dir_path, filename)
|
|
|
|
with open(file_path, 'wb') as f:
|
|
f.write(file_data)
|
|
|
|
# Construct URL
|
|
file_url = request.build_absolute_uri(django_settings.MEDIA_URL + 'temp_invoices/' + filename)
|
|
|
|
success, response_msg = send_whatsapp_document(phone, file_url, caption=f"Invoice #{sale.invoice_number or sale.id}")
|
|
|
|
else:
|
|
# Fallback to Text Link
|
|
receipt_url = request.build_absolute_uri(reverse('sale_receipt', args=[sale.pk]))
|
|
|
|
message = (
|
|
f"Hello {sale.customer.name if sale.customer else 'Guest'},
|
|
"
|
|
f"Here is your invoice #{sale.invoice_number or sale.id}.
|
|
"
|
|
f"Total: {sale.total_amount}
|
|
"
|
|
f"View Invoice: {receipt_url}
|
|
"
|
|
f"Thank you for your business!"
|
|
)
|
|
|
|
success, response_msg = send_whatsapp_message(phone, message)
|
|
|
|
if success:
|
|
return JsonResponse({'success': True, 'message': response_msg})
|
|
else:
|
|
return JsonResponse({'success': False, 'error': response_msg})
|
|
|
|
except Exception as e:
|
|
logger.error(f"WhatsApp Error: {e}")
|
|
return JsonResponse({'success': False, 'error': str(e)}) # Changed to str(e) for clarity
|