Add all files
This commit is contained in:
10
resources/css/filament/admin/tailwind.config.js
Normal file
10
resources/css/filament/admin/tailwind.config.js
Normal file
@@ -0,0 +1,10 @@
|
||||
import preset from '../../../../vendor/filament/filament/tailwind.config.preset'
|
||||
|
||||
export default {
|
||||
presets: [preset],
|
||||
content: [
|
||||
'./app/Admin/**/*.php',
|
||||
'./resources/views/admin/**/*.blade.php',
|
||||
'./vendor/filament/**/*.blade.php',
|
||||
],
|
||||
}
|
||||
3
resources/css/filament/admin/theme.css
Normal file
3
resources/css/filament/admin/theme.css
Normal file
@@ -0,0 +1,3 @@
|
||||
@import '../../../../vendor/filament/filament/resources/css/theme.css';
|
||||
|
||||
@config 'tailwind.config.js';
|
||||
75
resources/views/admin/actions/audits.blade.php
Normal file
75
resources/views/admin/actions/audits.blade.php
Normal file
@@ -0,0 +1,75 @@
|
||||
@php
|
||||
$audits = $record->audits;
|
||||
// Also get the child audits
|
||||
if (get_class($record) === 'App\Models\Product') {
|
||||
$record->plans->each(function ($plan) use (&$audits) {
|
||||
$audits = $audits->merge($plan->audits->map(function ($audit) use ($plan) {
|
||||
$audit->event = 'Plan ' . $plan->name . ' ' . $audit->event;
|
||||
return $audit;
|
||||
}));
|
||||
$plan->prices->each(function ($price) use (&$audits, $plan) {
|
||||
$audits = $audits->merge($price->audits->map(function ($audit) use ($price, $plan) {
|
||||
$audit->event = 'Price from Plan ' . $plan->name . ' ' . $audit->event;
|
||||
return $audit;
|
||||
}));
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// sort
|
||||
$audits = $audits->sortByDesc('created_at');
|
||||
@endphp
|
||||
|
||||
<div class="flex flex-col h-full space-y-4">
|
||||
|
||||
<x-filament::grid class="gap-4">
|
||||
|
||||
@foreach ($audits as $audit)
|
||||
<div
|
||||
class="fi-in-repeatable-item block rounded-xl bg-white p-4 shadow-sm ring-1 ring-gray-950/5 dark:bg-white/5 dark:ring-white/10">
|
||||
<div class="flex gap-x-3">
|
||||
<div class="flex-grow space-y-2 pt-[6px]">
|
||||
<div class="flex gap-x-2 items-center justify-between">
|
||||
<div class="flex gap-x-2 items-center">
|
||||
<div class="text-sm font-medium text-gray-950 dark:text-white">
|
||||
{{ $audit->user->name }}
|
||||
</div>
|
||||
<div class="text-xs text-gray-950 dark:text-white">
|
||||
{{ $audit->created_at->diffForHumans() }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="text-xs text-gray-950 dark:text-white">
|
||||
{{ $audit->created_at->format('Y-m-d H:i:s') }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="text-sm text-gray-950 dark:text-white">
|
||||
{{ $audit->event }}
|
||||
|
||||
@if(count($audit->getModified()) === 0)
|
||||
<span class="text-xs text-gray-950 dark:text-white">
|
||||
(No changes)
|
||||
</span>
|
||||
@else
|
||||
@foreach ($audit->getModified() as $key => $value)
|
||||
<div class="my-2 p-2 bg-background-secondary rounded">
|
||||
<span class="font-semibold">{{ $key }}</span> changed from
|
||||
<div class="flex flex-wrap items-center gap-2">
|
||||
<span class="text-red-300 p-1 rounded">
|
||||
<code>{{ $value['old'] ?? '' }}</code>
|
||||
</span>
|
||||
<span class="font-medium">to</span>
|
||||
<span class="text-green-300 p-1 rounded">
|
||||
<code>{{ $value['new'] ?? '' }}</code>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
@endforeach
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endforeach
|
||||
|
||||
</x-filament::grid>
|
||||
</div>
|
||||
@@ -0,0 +1 @@
|
||||
<iframe srcdoc="{{ $getRecord()->body }}" style="width: 100%; height: 700px; border: none;"></iframe>
|
||||
12
resources/views/admin/infolists/components/json.blade.php
Normal file
12
resources/views/admin/infolists/components/json.blade.php
Normal file
@@ -0,0 +1,12 @@
|
||||
<div class="fi-in-entry-wrp">
|
||||
<div class="grid gap-y-2">
|
||||
<div class="flex items-center gap-x-3 justify-between">
|
||||
<dt class="fi-in-entry-wrp-label inline-flex items-center gap-x-3">
|
||||
<span class="text-sm font-medium leading-6 text-gray-950 dark:text-white">
|
||||
{{ $entry->getLabel() }}
|
||||
</span>
|
||||
</dt>
|
||||
</div>
|
||||
<pre style="overflow-x: auto;"><code>{{ json_encode($getState(), JSON_PRETTY_PRINT) }}</code></pre>
|
||||
</div>
|
||||
</div>
|
||||
10
resources/views/admin/pages/settings.blade.php
Normal file
10
resources/views/admin/pages/settings.blade.php
Normal file
@@ -0,0 +1,10 @@
|
||||
<x-filament-panels::page>
|
||||
|
||||
<x-filament-panels::form id="settings" wire:submit="save">
|
||||
|
||||
{{ $this->form }}
|
||||
|
||||
<x-filament-panels::form.actions :actions="$this->getFormActions()" />
|
||||
|
||||
</x-filament-panels::form>
|
||||
</x-filament-panels::page>
|
||||
63
resources/views/admin/pages/updates.blade.php
Normal file
63
resources/views/admin/pages/updates.blade.php
Normal file
@@ -0,0 +1,63 @@
|
||||
<x-filament-panels::page>
|
||||
@assets
|
||||
<script src="https://cdn.jsdelivr.net/npm/ansi_up@5.0.0/ansi_up.min.js"></script>
|
||||
@endassets
|
||||
@if(config('app.version') == 'beta')
|
||||
<div>
|
||||
<strong>Warning:</strong> You are using a beta version of the application. This can cause problems
|
||||
</div>
|
||||
@endif
|
||||
|
||||
|
||||
@if(config('app.version') == 'beta' && config('settings.latest_commit') != config('app.commit'))
|
||||
<div class="flex flex-col gap-1">
|
||||
<div>
|
||||
<strong>Latest commit:</strong> {{ config('settings.latest_commit') }}
|
||||
</div>
|
||||
<div>
|
||||
<strong>Your commit:</strong> {{ config('app.commit') }}
|
||||
</div>
|
||||
<p>See <a
|
||||
href="https://paymenter.org/docs/installation/updating">https://paymenter.org/docs/installation/updating</a>
|
||||
on how to update</p>
|
||||
|
||||
<p class="mt-2">OR try the web updater (This is a beta feature, use at your own risk)</p>
|
||||
<div class="mt-2">
|
||||
{{ $this->update }}
|
||||
</div>
|
||||
</div>
|
||||
@elseif(config('app.version') != config('settings.latest_version') && config('app.version') != 'beta')
|
||||
<div class="flex flex-col gap-1">
|
||||
<div>
|
||||
<strong>Latest version:</strong> {{ config('settings.latest_version') }}
|
||||
</div>
|
||||
<div>
|
||||
<strong>Your version:</strong> {{ config('app.version') }}
|
||||
</div>
|
||||
<!-- <p>See <a
|
||||
href="https://paymenter.org/docs/installation/updating">https://paymenter.org/docs/installation/updating</a>
|
||||
on how to update</p>
|
||||
|
||||
<p class="mt-2">OR try the web updater (This is a beta feature, use at your own risk)</p>
|
||||
<div class="mt-2">
|
||||
{{ $this->update }}
|
||||
</div>--><p>Do not inadvertently run any updates as this is a forked version of the software. Please refer to the documentation or support channels for guidance on updating.
|
||||
Updating without proper instructions may lead to unexpected issues. Please refer to <b>Adekabang</b> for support and update instructions.
|
||||
</p>
|
||||
</div>
|
||||
@else
|
||||
<div class="flex flex-col gap-1">
|
||||
<div>
|
||||
<strong>Latest version:</strong> {{ config('settings.latest_version') }}
|
||||
</div>
|
||||
<div>
|
||||
<strong>Your version:</strong> {{ config('app.version') }}
|
||||
</div>
|
||||
<p>You are up to date!</p>
|
||||
</div>
|
||||
@endif
|
||||
<code>
|
||||
<pre id="update-result" class="mt-2" x-data="{ output: '' }" x-html="output" x-on:update-completed.window="output = (new AnsiUp()).ansi_to_html($event.detail[0].output);">
|
||||
</pre>
|
||||
</code>
|
||||
</x-filament-panels::page>
|
||||
@@ -0,0 +1,50 @@
|
||||
<x-filament-panels::page>
|
||||
<div class="md:grid grid-cols-4 flex flex-col gap-4" wire:poll.5s>
|
||||
<div class="md:col-span-3">
|
||||
<div class="flex flex-col gap-4 max-h-[60vh] overflow-y-auto pr-4">
|
||||
@foreach ($this->record->messages()->with('user')->get() as $index => $message)
|
||||
<div
|
||||
class="bg-background-secondary hover:bg-background-secondary/80 border border-neutral p-4 rounded-lg w-full max-w-[80%] {{ $message->user_id === $this->record->user_id ? 'ml-auto' : 'mr-auto' }}"
|
||||
@if ($loop->last) x-data x-init="$el.scrollIntoView()" @endif>
|
||||
<div class="flex justify-between">
|
||||
<div>
|
||||
<a class="text-lg font-semibold hover:underline"
|
||||
href="{{ App\Admin\Resources\UserResource::getUrl('edit', ['record' => $message->user]) }}">
|
||||
{{ $message->user->name }}
|
||||
</a>
|
||||
</div>
|
||||
<div>
|
||||
@can('delete', $message)
|
||||
<button wire:click="deleteMessage({{ $message->id }})"
|
||||
class="dark:text-danger-300 text-danger-600 p-0">
|
||||
Delete
|
||||
</button>
|
||||
@endcan
|
||||
</div>
|
||||
</div>
|
||||
<p class="text-sm text-gray-500">{{ $message->created_at->diffForHumans() }}</p>
|
||||
<div class="mt-2 prose dark:prose-invert" style="word-break: break-all;">{!! Str::markdown(e($message->message), [
|
||||
'allow_unsafe_links' => false,
|
||||
'renderer' => [
|
||||
'soft_break' => "<br>"
|
||||
]
|
||||
]) !!}</div>
|
||||
</div>
|
||||
@endforeach
|
||||
</div>
|
||||
<!-- Reply Form -->
|
||||
<div class="mt-4">
|
||||
<x-filament-panels::form id="form"
|
||||
:wire:key="$this->getId() . '.forms.' . $this->getFormStatePath()" wire:submit="save">
|
||||
|
||||
{{ $this->form }}
|
||||
|
||||
<x-filament-panels::form.actions :actions="$this->getCachedFormActions()" :full-width="$this->hasFullWidthFormActions()" />
|
||||
</x-filament-panels::form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="md:order-last order-first w-full col-span-3 sm:col-auto">{{ $this->infolist }}</div>
|
||||
|
||||
</div>
|
||||
</x-filament-panels::page>
|
||||
33
resources/views/admin/widgets/active-users.blade.php
Normal file
33
resources/views/admin/widgets/active-users.blade.php
Normal file
@@ -0,0 +1,33 @@
|
||||
{{-- Had to put a lot outside the <a> since it would always trigger redirect, layout shouldn't be changed at all --}}
|
||||
<x-filament-widgets::widget>
|
||||
<x-filament::section heading="Active Users ({{ $onlineCount }})">
|
||||
@foreach($sessions as $session)
|
||||
@if(!$session->user)
|
||||
@continue
|
||||
@endif
|
||||
<div class="flex flex-row justify-between w-full items-center space-x-4">
|
||||
<a href="{{ \App\Admin\Resources\UserResource::getUrl('edit', ['record' => $session->user]) }}" wire:navigate class="flex-grow">
|
||||
<div>
|
||||
<h2 class="font-bold">{{ $session->user->name }}</h2>
|
||||
<div class="text-sm mb-2">
|
||||
{{ $session->user->email }}
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
<div class="text-right min-w-[140px]">
|
||||
<p class="text-sm text-base">{{ $session->last_activity->diffForHumans() }}</p>
|
||||
<p
|
||||
class="text-xs text-gray-400 dark:text-gray-500 cursor-pointer hover:text-primary-500 transition-colors select-none"
|
||||
x-data="{ copied: false }"
|
||||
x-on:click="
|
||||
navigator.clipboard.writeText('{{ $session->ip_address }}');
|
||||
copied = true;
|
||||
setTimeout(() => copied = false, 2000);
|
||||
"
|
||||
x-text="copied ? 'Copied!' : '{{ $session->ip_address }}'"
|
||||
></p>
|
||||
</div>
|
||||
</div>
|
||||
@endforeach
|
||||
</x-filament::section>
|
||||
</x-filament-widgets::widget>
|
||||
3
resources/views/components/bloading.blade.php
Normal file
3
resources/views/components/bloading.blade.php
Normal file
@@ -0,0 +1,3 @@
|
||||
<div>
|
||||
<!-- Simplicity is an acquired taste. - Katharine Gerould -->
|
||||
</div>
|
||||
3
resources/views/components/button/danger.blade.php
Normal file
3
resources/views/components/button/danger.blade.php
Normal file
@@ -0,0 +1,3 @@
|
||||
<div>
|
||||
<!-- You must be the change you wish to see in the world. - Mahatma Gandhi -->
|
||||
</div>
|
||||
3
resources/views/components/button/primary.blade.php
Normal file
3
resources/views/components/button/primary.blade.php
Normal file
@@ -0,0 +1,3 @@
|
||||
<div>
|
||||
<!-- It is not the man who has too little, but the man who craves more, that is poor. - Seneca -->
|
||||
</div>
|
||||
3
resources/views/components/button/secondary.blade.php
Normal file
3
resources/views/components/button/secondary.blade.php
Normal file
@@ -0,0 +1,3 @@
|
||||
<div>
|
||||
<!-- Always remember that you are absolutely unique. Just like everyone else. - Margaret Mead -->
|
||||
</div>
|
||||
34
resources/views/components/captcha.blade.php
Normal file
34
resources/views/components/captcha.blade.php
Normal file
@@ -0,0 +1,34 @@
|
||||
@assets
|
||||
<script src="https://challenges.cloudflare.com/turnstile/v0/api.js?render=explicit"></script>
|
||||
@endassets
|
||||
|
||||
<div id="cf-turnstile"></div>
|
||||
|
||||
<script>
|
||||
function renderTurnstile() {
|
||||
const isDarkMode = localStorage.getItem('_x_darkMode') === 'true';
|
||||
const theme = isDarkMode ? 'dark' : 'light';
|
||||
|
||||
turnstile.render('#cf-turnstile', {
|
||||
sitekey: '{{ config('settings.captcha_site_key') }}',
|
||||
size: 'flexible',
|
||||
theme: theme,
|
||||
callback: token => @this.set('captcha', token, false),
|
||||
});
|
||||
}
|
||||
|
||||
document.addEventListener('livewire:initialized', () => {
|
||||
// On livewire validation error reset captcha
|
||||
Livewire.hook('request', ({ succeed }) => {
|
||||
succeed(() => {
|
||||
turnstile.reset();
|
||||
});
|
||||
})
|
||||
});
|
||||
</script>
|
||||
|
||||
@script
|
||||
<script>
|
||||
renderTurnstile();
|
||||
</script>
|
||||
@endscript
|
||||
3
resources/views/components/dropdown.blade.php
Normal file
3
resources/views/components/dropdown.blade.php
Normal file
@@ -0,0 +1,3 @@
|
||||
<div>
|
||||
<!-- Well begun is half done. - Aristotle -->
|
||||
</div>
|
||||
3
resources/views/components/form/checkbox.blade.php
Normal file
3
resources/views/components/form/checkbox.blade.php
Normal file
@@ -0,0 +1,3 @@
|
||||
<div>
|
||||
<!-- I begin to speak only when I am certain what I will say is not better left unsaid. - Cato the Younger -->
|
||||
</div>
|
||||
3
resources/views/components/form/input.blade.php
Normal file
3
resources/views/components/form/input.blade.php
Normal file
@@ -0,0 +1,3 @@
|
||||
<div>
|
||||
<!-- Order your soul. Reduce your wants. - Augustine -->
|
||||
</div>
|
||||
3
resources/views/components/form/select.blade.php
Normal file
3
resources/views/components/form/select.blade.php
Normal file
@@ -0,0 +1,3 @@
|
||||
<div>
|
||||
<!-- You must be the change you wish to see in the world. - Mahatma Gandhi -->
|
||||
</div>
|
||||
3
resources/views/components/loading.blade.php
Normal file
3
resources/views/components/loading.blade.php
Normal file
@@ -0,0 +1,3 @@
|
||||
<div>
|
||||
<!-- Simplicity is the ultimate sophistication. - Leonardo da Vinci -->
|
||||
</div>
|
||||
3
resources/views/components/mail/base.blade.php
Normal file
3
resources/views/components/mail/base.blade.php
Normal file
@@ -0,0 +1,3 @@
|
||||
<x-mail.layout>
|
||||
{!! Illuminate\View\Compilers\BladeCompiler::render($body, $data) !!}
|
||||
</x-mail.layout>
|
||||
3
resources/views/components/mail/layout.blade.php
Normal file
3
resources/views/components/mail/layout.blade.php
Normal file
@@ -0,0 +1,3 @@
|
||||
{!! Illuminate\View\Compilers\BladeCompiler::render(config('settings.mail_header', null)) !!}
|
||||
{!! Str::markdown($slot) !!}
|
||||
{!! Illuminate\View\Compilers\BladeCompiler::render(config('settings.mail_footer', null)) !!}
|
||||
3
resources/views/components/modal.blade.php
Normal file
3
resources/views/components/modal.blade.php
Normal file
@@ -0,0 +1,3 @@
|
||||
<div>
|
||||
<!-- Simplicity is the essence of happiness. - Cedric Bledsoe -->
|
||||
</div>
|
||||
@@ -0,0 +1,3 @@
|
||||
<div>
|
||||
<!-- Always remember that you are absolutely unique. Just like everyone else. - Margaret Mead -->
|
||||
</div>
|
||||
3
resources/views/components/navigation/link.blade.php
Normal file
3
resources/views/components/navigation/link.blade.php
Normal file
@@ -0,0 +1,3 @@
|
||||
<a {{ $attributes->merge(['class' => 'text-blue-600 hover:underline']) }}>
|
||||
{{ $slot }}
|
||||
</a>
|
||||
155
resources/views/pdf/invoice.blade.php
Normal file
155
resources/views/pdf/invoice.blade.php
Normal file
@@ -0,0 +1,155 @@
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta http-equiv="X-UA-Compatible" content="ie=edge">
|
||||
<title>{{ __('invoices.invoice', ['id' => $invoice->number]) }}</title>
|
||||
<style>
|
||||
body {
|
||||
font-family:
|
||||
system-ui,
|
||||
-apple-system,
|
||||
/* Firefox supports this but not yet `system-ui` */
|
||||
'Segoe UI',
|
||||
Roboto,
|
||||
Helvetica,
|
||||
Arial,
|
||||
sans-serif,
|
||||
'Apple Color Emoji',
|
||||
'Segoe UI Emoji';
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
table {
|
||||
width: 100%;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
table th {
|
||||
text-align: left;
|
||||
color: #999;
|
||||
border-bottom: 2px solid #ddd;
|
||||
padding: 10px 0 15px 0;
|
||||
font-size: 0.75em;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
table td {
|
||||
padding: 15px 0;
|
||||
}
|
||||
|
||||
table th:last-child {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
table tr td {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
table tr td:last-child {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.invoice-items tbody tr:first-child td {
|
||||
padding-top: 10px;
|
||||
}
|
||||
|
||||
.invoice-info {
|
||||
font-size: 0.875em;
|
||||
}
|
||||
|
||||
.invoice-info td {
|
||||
padding: 2px 0;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
@if(config('settings.logo'))
|
||||
<div style="margin: 20px 0 70px 0;">
|
||||
<img style="height: 30px" src="{{ public_path('storage/' . config('settings.logo')) }}"
|
||||
alt="{{ config('app.name') }}">
|
||||
</div>
|
||||
@endif
|
||||
|
||||
<!-- Invoice status -->
|
||||
<div style="margin-bottom: 20px;font-size: 20px">
|
||||
<strong>{{ __('invoices.status') }}:</strong><span
|
||||
style="@if($invoice->status == 'paid') color: green; @else color: orange; @endif">
|
||||
{{ ucfirst($invoice->status) }}
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<table class="invoice-info">
|
||||
<tr>
|
||||
<td rowspan="2" style="font-size: 1em;vertical-align: top;">
|
||||
<strong>{{ __('invoices.issued_to') }}</strong><br>
|
||||
{{ $invoice->user->name }} <br />
|
||||
@foreach($invoice->user->properties()->with('parent_property')->whereHas('parent_property', function
|
||||
($query) {
|
||||
$query->where('show_on_invoice', true);
|
||||
})->get() as $property)
|
||||
{{ $property->value }} <br />
|
||||
@endforeach
|
||||
</td>
|
||||
<td>
|
||||
<strong>{{ strtoupper(__('invoices.bill_to')) }}</strong> <br />
|
||||
{{ config('settings.company_name') }} <br />
|
||||
{{ config('settings.company_address') }} {{ config('settings.company_address2') }} <br />
|
||||
{{ config('settings.company_zip') }} {{ config('settings.company_city') }} <br />
|
||||
{{ config('settings.company_state') }} {{ config('settings.company_country') }} <br />
|
||||
{{ config('settings.company_tax_id') }} <br />
|
||||
{{ config('settings.company_id') }} <br />
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<p>{{ __('invoices.invoice_date') }}: <strong>{{ $invoice->created_at->format('d/m/Y') }}</strong></p>
|
||||
<p>{{ __('invoices.invoice_no') }}: <strong>{{ $invoice->number }}</strong></p>
|
||||
|
||||
<table style="margin-top: 40px;" class="invoice-items">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{{ __('invoices.item') }}</th>
|
||||
<th style="width: 100px">{{ __('invoices.quantity') }}</th>
|
||||
<th>{{ __('invoices.unit_price') }}</th>
|
||||
<th>{{ __('invoices.total') }}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach($invoice->items as $item)
|
||||
<tr>
|
||||
<td>{{ $item->description }}</td>
|
||||
<td>{{ $item->quantity }}</td>
|
||||
<td>{{ $item->formattedPrice }}</td>
|
||||
<td>{{ $item->formattedTotal }}</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
@if($invoice->transactions->count() > 0)
|
||||
<table style="margin-top: 80px;" class="invoice-items">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{{ __('invoices.transaction_id') }}</th>
|
||||
<th>{{ __('invoices.payment_date') }}</th>
|
||||
<th>{{ __('invoices.amount') }}</th>
|
||||
<th>{{ __('invoices.payment_method') }}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach($invoice->transactions as $transaction)
|
||||
<tr>
|
||||
<td>{{ $transaction->transaction_id }}</td>
|
||||
<td>{{ $transaction->created_at->format('d/m/Y') }}</td>
|
||||
<td>{{ $transaction->formattedAmount }}</td>
|
||||
<td>{{ $transaction->gateway ? $transaction->gateway->name : '' }}</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
</tbody>
|
||||
</table>
|
||||
@endif
|
||||
</body>
|
||||
|
||||
</html>
|
||||
4
resources/views/vendor/filament/components/navigation/breadcrumb.blade.php
vendored
Normal file
4
resources/views/vendor/filament/components/navigation/breadcrumb.blade.php
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
<div class="text-sm text-gray-500">
|
||||
{{ $slot }}
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user