Files
Virtnet.bond/storage/framework/views/6af77c49e9dfa4d744668251ad6f1a52.php
Joseph.Rawlings 9e33470134 feat(proxmox): add statistics redirect component and route
Introduced a new Livewire component for statistics redirection and added a corresponding route to enhance navigation within the Proxmox extension. This update lays the groundwork for future statistics-related features.
2026-03-28 15:48:17 -04:00

357 lines
15 KiB
PHP

<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title><?php echo e(__('invoices.invoice', ['id' => $invoice->number])); ?></title>
<style>
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;
font-size: 14px;
color: #1a1a2e;
line-height: 1.6;
padding: 40px;
}
/* Header */
.header {
display: flex;
justify-content: space-between;
align-items: flex-start;
margin-bottom: 40px;
padding-bottom: 20px;
border-bottom: 3px solid #1A759F;
}
.header-left h1 {
font-size: 28px;
font-weight: 900;
color: #1a1a2e;
margin-bottom: 4px;
}
.header-accent {
width: 80px;
height: 4px;
background: linear-gradient(to right, #1A759F, #52B69A);
border-radius: 2px;
margin-top: 6px;
}
.status-badge {
display: inline-block;
padding: 8px 20px;
border-radius: 8px;
font-weight: 700;
font-size: 14px;
text-transform: uppercase;
letter-spacing: 0.5px;
}
.status-paid {
color: #16a34a;
border: 2px solid #16a34a;
}
.status-pending {
color: #d97706;
border: 2px solid #d97706;
}
/* Info Cards */
.info-grid {
width: 100%;
margin-bottom: 30px;
border-collapse: separate;
border-spacing: 10px;
}
.info-grid td {
vertical-align: top;
padding: 18px 22px;
border: 1px solid #e5e7eb;
border-radius: 12px;
width: 33.33%;
}
.info-label {
text-transform: uppercase;
font-weight: 900;
font-size: 11px;
letter-spacing: 1.5px;
color: #1A759F;
margin-bottom: 10px;
}
.info-name {
font-size: 16px;
font-weight: 700;
color: #1a1a2e;
margin-bottom: 6px;
}
.info-text {
font-size: 12px;
color: #6b7280;
line-height: 1.7;
}
.info-detail-row {
display: flex;
justify-content: space-between;
padding: 6px 10px;
margin-bottom: 4px;
border-radius: 6px;
}
.info-detail-row:nth-child(odd) {
background-color: #f9fafb;
}
.info-detail-label {
font-size: 12px;
color: #6b7280;
font-weight: 500;
}
.info-detail-value {
font-size: 12px;
font-weight: 700;
color: #1a1a2e;
}
/* Section Headers */
.section-title {
font-size: 18px;
font-weight: 700;
color: #1a1a2e;
margin-bottom: 14px;
padding-bottom: 8px;
border-bottom: 2px solid #f3f4f6;
}
/* Tables */
.items-table {
width: 100%;
border-collapse: collapse;
margin-bottom: 30px;
border-radius: 10px;
overflow: hidden;
border: 1px solid #e5e7eb;
}
.items-table thead tr {
background-color: #f8fafc;
border-bottom: 2px solid #e5e7eb;
}
.items-table th {
text-align: left;
font-weight: 900;
font-size: 11px;
text-transform: uppercase;
letter-spacing: 1px;
color: #1a1a2e;
padding: 14px 20px;
}
.items-table th:last-child {
text-align: right;
}
.items-table td {
padding: 14px 20px;
font-size: 13px;
color: #1a1a2e;
border-bottom: 1px solid #f3f4f6;
}
.items-table td:last-child {
text-align: right;
font-weight: 700;
}
.items-table tbody tr:last-child td {
border-bottom: none;
}
/* Totals */
.totals-wrapper {
width: 100%;
margin-bottom: 30px;
}
.totals-table {
width: 320px;
margin-left: auto;
border-collapse: collapse;
}
.totals-table td {
padding: 8px 14px;
font-size: 13px;
}
.totals-table .label {
text-transform: uppercase;
font-weight: 700;
font-size: 11px;
letter-spacing: 1px;
color: #6b7280;
}
.totals-table .value {
text-align: right;
font-weight: 700;
color: #1a1a2e;
}
.total-row td {
padding: 14px;
border-top: 2px solid #1A759F;
}
.total-row .label {
font-size: 14px;
font-weight: 900;
color: #1a1a2e;
}
.total-row .value {
font-size: 20px;
font-weight: 900;
color: #1A759F;
}
/* Footer */
.footer {
margin-top: 40px;
padding-top: 16px;
border-top: 1px solid #e5e7eb;
text-align: center;
font-size: 11px;
color: #9ca3af;
}
</style>
</head>
<body>
<!-- Header -->
<table style="width: 100%; margin-bottom: 30px; border-bottom: 3px solid #1A759F; padding-bottom: 16px;">
<tr>
<td style="vertical-align: middle;">
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if(config('settings.logo')): ?>
<img style="height: 32px; vertical-align: middle; margin-right: 8px;" src="<?php echo e(public_path('storage/' . config('settings.logo'))); ?>" alt="<?php echo e(config('app.name')); ?>">
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<span style="font-size: 22px; font-weight: 700; color: #1a1a2e; vertical-align: middle;"><?php echo e(config('app.name')); ?></span>
<div style="margin-top: 8px;">
<span style="font-size: 28px; font-weight: 900; color: #1a1a2e;"><?php echo e(__('invoices.invoice', ['id' => $invoice->number])); ?></span>
</div>
<div style="width: 80px; height: 4px; background: linear-gradient(to right, #1A759F, #52B69A); border-radius: 2px; margin-top: 6px;"></div>
</td>
<td style="text-align: right; vertical-align: middle;">
<span class="status-badge <?php echo e($invoice->status == 'paid' ? 'status-paid' : 'status-pending'); ?>">
<?php echo e($invoice->status == 'paid' ? __('invoices.paid') : __('invoices.payment_pending')); ?>
</span>
</td>
</tr>
</table>
<!-- Info Cards -->
<table class="info-grid">
<tr>
<td>
<div class="info-label"><?php echo e(__('invoices.issued_to')); ?></div>
<div class="info-name"><?php echo e($invoice->user->properties->where('parent_property.name', 'Company Name (Include Registration Number)')->first()?->value); ?></div>
<div class="info-text">
Attention: <?php echo e($invoice->user->first_name); ?> <?php echo e($invoice->user->last_name); ?><br>
<?php echo e($invoice->user->properties->where('parent_property.name', 'Property Number/House Name')->first()?->value); ?>
<?php echo e($invoice->user->properties->where('parent_property.name', 'Street Name')->first()?->value); ?><br>
<?php echo e($invoice->user->properties->where('parent_property.name', 'City')->first()?->value); ?>
<?php echo e($invoice->user->properties->where('parent_property.name', 'State/Province/Region')->first()?->value); ?>
<?php echo e($invoice->user->properties->where('parent_property.name', 'Full Postal Code')->first()?->value); ?><br>
<?php echo e($invoice->user->properties->where('parent_property.name', 'Country')->first()?->value); ?>
</div>
</td>
<td>
<div class="info-label"><?php echo e(__('invoices.bill_to')); ?></div>
<div class="info-name"><?php echo e(config('settings.company_name')); ?></div>
<div class="info-text">
<?php echo e(config('settings.company_address')); ?> <?php echo e(config('settings.company_address2')); ?><br>
<?php echo e(config('settings.company_city')); ?> <?php echo e(config('settings.company_state')); ?> <?php echo e(config('settings.company_zip')); ?><br>
<?php echo e(\Locale::getDisplayRegion('-' . config('settings.company_country'))); ?>
</div>
</td>
<td>
<div class="info-label">Invoice Details</div>
<table style="width: 100%; border-collapse: collapse;">
<tr>
<td style="padding: 6px 8px; font-size: 12px; color: #6b7280; background: #f9fafb; border-radius: 6px;"><?php echo e(__('invoices.invoice_date')); ?></td>
<td style="padding: 6px 8px; font-size: 12px; font-weight: 700; text-align: right; background: #f9fafb; border-radius: 6px;"><?php echo e($invoice->created_at->format('d M Y')); ?></td>
</tr>
<tr>
<td style="padding: 6px 8px; font-size: 12px; color: #6b7280;"><?php echo e(__('invoices.invoice_no')); ?></td>
<td style="padding: 6px 8px; font-size: 12px; font-weight: 700; text-align: right;">#<?php echo e($invoice->number); ?></td>
</tr>
</table>
</td>
</tr>
</table>
<!-- Invoice Items -->
<div class="section-title">Invoice Items</div>
<table class="items-table">
<thead>
<tr>
<th><?php echo e(__('invoices.item')); ?></th>
<th><?php echo e(__('invoices.price')); ?></th>
<th><?php echo e(__('invoices.quantity')); ?></th>
<th><?php echo e(__('invoices.total')); ?></th>
</tr>
</thead>
<tbody>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php $__currentLoopData = $invoice->items; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $item): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
<tr>
<td style="font-weight: 600;"><?php echo e($item->description); ?></td>
<td><?php echo e($item->formattedPrice); ?></td>
<td><?php echo e($item->quantity); ?></td>
<td><?php echo e($item->formattedTotal); ?></td>
</tr>
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</tbody>
</table>
<!-- Totals -->
<div class="totals-wrapper">
<table class="totals-table">
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($invoice->formattedTotal->tax > 0): ?>
<tr>
<td class="label"><?php echo e(__('invoices.subtotal')); ?></td>
<td class="value"><?php echo e($invoice->formattedTotal->format($invoice->formattedTotal->price - $invoice->formattedTotal->tax)); ?></td>
</tr>
<tr>
<td class="label"><?php echo e(\App\Classes\Settings::tax()->name); ?></td>
<td class="value"><?php echo e($invoice->formattedTotal->formatted->tax); ?></td>
</tr>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<tr class="total-row">
<td class="label"><?php echo e(__('invoices.total')); ?></td>
<td class="value"><?php echo e($invoice->formattedTotal); ?></td>
</tr>
</table>
</div>
<!-- Transactions -->
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php if($invoice->transactions->isNotEmpty()): ?>
<div class="section-title"><?php echo e(__('invoices.transactions')); ?></div>
<table class="items-table">
<thead>
<tr>
<th><?php echo e(__('invoices.date')); ?></th>
<th><?php echo e(__('invoices.transaction_id')); ?></th>
<th><?php echo e(__('invoices.gateway')); ?></th>
<th><?php echo e(__('invoices.amount')); ?></th>
</tr>
</thead>
<tbody>
<?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if BLOCK]><![endif]--><?php endif; ?><?php $__currentLoopData = $invoice->transactions; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $transaction): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
<tr>
<td style="font-weight: 600;"><?php echo e($transaction->created_at->format('d M Y H:i')); ?></td>
<td><?php echo e($transaction->transaction_id); ?></td>
<td><?php echo e($transaction->gateway?->name); ?></td>
<td><?php echo e($transaction->formattedAmount); ?></td>
</tr>
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
</tbody>
</table>
<?php endif; ?><?php if(\Livewire\Mechanisms\ExtendBlade\ExtendBlade::isRenderingLivewireComponent()): ?><!--[if ENDBLOCK]><![endif]--><?php endif; ?>
<!-- Footer -->
<div class="footer">
<?php echo e(config('settings.company_name')); ?> &bull; Generated <?php echo e(now()->format('d M Y H:i')); ?>
</div>
</body>
</html><?php /**PATH C:\Users\Owner\Virtnet.bond\resources\views\pdf\invoice.blade.php ENDPATH**/ ?>