Invoice system working

This commit is contained in:
twotalesanimation
2025-12-30 22:10:30 +02:00
parent e8e9b1f03c
commit 94b90f603d
36 changed files with 6523 additions and 53 deletions
+123
View File
@@ -2,8 +2,10 @@
use App\Models\Order;
use App\Services\InvoiceService;
use App\Services\MailjetService;
use Illuminate\Support\Facades\Route;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\View;
// Test route to generate and view an invoice
// Usage: http://localhost:8000/test-invoice/{order_number}
@@ -50,3 +52,124 @@ Route::get('/test-invoice/{orderNumber}', function ($orderNumber) {
], 500);
}
})->name('test-invoice');
// Test route to send an invoice email via Mailjet
// Usage: http://localhost:8000/test-email/{order_number}/{email}
Route::get('/test-email/{orderNumber}/{email}', function ($orderNumber, $email) {
$order = Order::where('order_number', $orderNumber)->first();
if (!$order) {
return response()->json(['error' => 'Order not found'], 404);
}
try {
// Generate invoice
$invoicePath = InvoiceService::generateInvoice($order);
$fullPath = storage_path('app/public/' . $invoicePath);
if (!file_exists($fullPath)) {
return response()->json([
'error' => 'Invoice file not found',
'path' => $invoicePath,
'full_path' => $fullPath,
], 500);
}
// Send email directly via Mailjet (no queue needed)
$mailjetService = new MailjetService();
$customerName = $order->customer_name ?? explode('@', $email)[0];
// Generate basic HTML for email
$htmlContent = <<<HTML
<html>
<head>
<style>
body { font-family: Arial, sans-serif; color: #333; }
.header { background-color: #f5f5f5; padding: 20px; text-align: center; }
.content { padding: 20px; }
.footer { background-color: #f5f5f5; padding: 20px; text-align: center; font-size: 12px; }
table { width: 100%; border-collapse: collapse; margin: 20px 0; }
th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }
th { background-color: #f5f5f5; }
</style>
</head>
<body>
<div class="header">
<h1>Invoice #{$order->order_number}</h1>
</div>
<div class="content">
<p>Dear {$customerName},</p>
<p>Please find your invoice attached to this email.</p>
<h3>Order Details</h3>
<table>
<tr>
<th>Order Number</th>
<td>{$order->order_number}</td>
</tr>
<tr>
<th>Order Date</th>
<td>{$order->created_at->format('d M Y')}</td>
</tr>
<tr>
<th>Total Amount</th>
<td>R {$order->total}</td>
</tr>
</table>
<p>Thank you for your order!</p>
</div>
<div class="footer">
<p>&copy; 2025 ADDITIONAL DESIGN. All rights reserved.</p>
</div>
</body>
</html>
HTML;
$success = $mailjetService->send(
toEmail: $email,
toName: $customerName,
subject: 'Invoice #' . $order->order_number . ' - ADDITIONAL DESIGN',
htmlContent: $htmlContent,
attachments: [$fullPath]
);
if ($success) {
Log::info('Test email sent successfully via Mailjet', [
'order_number' => $orderNumber,
'test_email' => $email,
'invoice_path' => $invoicePath,
]);
return response()->json([
'success' => true,
'message' => 'Email sent successfully to ' . $email,
'order_number' => $orderNumber,
'test_email' => $email,
'invoice_path' => $invoicePath,
]);
} else {
Log::warning('Test email send returned false', [
'order_number' => $orderNumber,
'test_email' => $email,
]);
return response()->json([
'success' => false,
'message' => 'Failed to send email - check logs',
'order_number' => $orderNumber,
'test_email' => $email,
], 500);
}
} catch (\Exception $e) {
Log::error('Test email error', [
'order_number' => $orderNumber,
'email' => $email,
'error' => $e->getMessage(),
'trace' => $e->getTraceAsString(),
]);
return response()->json([
'error' => 'Failed to dispatch test email',
'message' => $e->getMessage()
], 500);
}
})->name('test-email');