38086-vm/core/patch_views.py
2026-02-10 12:23:20 +00:00

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