Added locator invoice validation livewire page and table

This commit is contained in:
dhanabalan
2025-07-01 14:42:55 +05:30
parent d3ebee5020
commit 95436af7da
3 changed files with 185 additions and 0 deletions

View File

@@ -0,0 +1,56 @@
<?php
namespace App\Livewire;
use App\Models\LocatorInvoiceValidation;
use Livewire\Component;
class LocatorInvoiceDataTable extends Component
{
public $plantId;
public $invoiceNumber;
public $records = [];
public bool $showRemoveSerialsModal = false;
public $matchedSerialNumbersForRemoval;
protected $listeners = [
'loadData' => 'loadlocatorInvoiceData',
];
public function loadlocatorInvoiceData($invoiceNumber, $plantId)
{
$this->plantId = $plantId;
$this->invoiceNumber = $invoiceNumber;
$this->records = LocatorInvoiceValidation::query()
->where('plant_id', $plantId)
->where('invoice_number', $invoiceNumber)
->where(function ($query) {
$query->where('scanned_status', '=', '')
->orWhereNull('scanned_status');
})
->orderBy('created_at', 'asc')
// ->orderByDesc('created_at')
->get()
->map(function ($record) {
return [
'created_at' => $record->created_at,
'created_by' => $record->created_by ?? '',
'serial_number' => $record->serial_number,
'pallet_number' => $record->pallet_number,
'locator_number' => $record->locator_number,
'scanned_status' => $record->scanned_status,
'scanned_at' => $record->scanned_at,
'scanned_by' => $record->scanned_by ?? '',
];
})
->toArray();
}
public function render()
{
return view('livewire.locator-invoice-data-table');
}
}

View File

@@ -0,0 +1,84 @@
{{-- <x-filament::page>
<form wire:submit.prevent="create" class="space-y-6">
{{-- Form Section --}}
{{-- <div class="filament-form space-y-6">
{{ $this->form }}
</div> --}}
{{-- Livewire Component (Invoice Table) --}}
{{-- <div class="bg-white shadow rounded-xl p-4">
<livewire:locator-invoice-data-table />
</div> --}}
{{-- Heading after Livewire component (optional) --}}
{{-- <h2>hello</h2> --}}
{{-- Actions --}}
{{-- <div class="filament-actions mt-6">
<x-filament::actions>
@foreach ($this->getFormActions() as $action)
{{ $action }}
@endforeach
</x-filament::actions>
</div>
</form>
</x-filament::page> --}}
<!-- Test button to manually trigger the modal -->
<x-filament::page>
<form wire:submit.prevent="create" class="space-y-6">
{{-- Form Section --}}
<div class="filament-form space-y-6">
{{ $this->form }}
</div>
{{-- Livewire Component (Invoice Table) --}}
<div class="bg-white shadow rounded-xl p-4">
<livewire:locator-invoice-data-table />
</div>
{{-- Actions --}}
<div class="filament-actions mt-6">
<x-filament::actions>
@foreach ($this->getFormActions() as $action)
{{ $action }}
@endforeach
</x-filament::actions>
</div>
</form>
{{-- Modal for removing matched serials --}}
<x-filament::modal wire:model="showRemoveSerialsModal">
<h1>hello</h1>
<x-slot name="title">
Remove Matched Serials from Pallet Validation?
</x-slot>
<x-slot name="content">
<div style="color: red; font-weight: bold;">
<!-- TEMPORARY INDICATOR -->
MODAL IS OPENED!
</div>
<div>
<p>The following serial numbers exist in both tables and will be removed from Pallet Validation if you proceed:</p>
<ul>
@foreach ($matchedSerialNumbersForRemoval as $serial)
<li>{{ $serial }}</li>
@endforeach
</ul>
</div>
</x-slot>
<x-slot name="footer">
<x-filament::button wire:click="removeMatchedSerials" color="danger">
Yes, Remove
</x-filament::button>
<x-filament::button wire:click="$set('showRemoveSerialsModal', false)">
No, Cancel
</x-filament::button>
</x-slot>
</x-filament::modal>
</x-filament::page>

View File

@@ -0,0 +1,45 @@
<div class="p-4">
<h2 class="text-lg font-bold mb-4 text-gray-700 uppercase tracking-wider">
INVOICE DATA TABLE:
</h2>
<div class="overflow-x-auto rounded-lg shadow">
<table class="w-full divide-y divide-gray-200 text-sm text-center">
<thead class="bg-gray-100 text-s font-semibold uppercase text-gray-700">
<tr>
<th class="border px-4 py-2">No</th>
<th class="border px-4 py-2">Created Datetime</th>
<th class="border px-4 py-2">Created By</th>
<th class="border px-4 py-2">Serial Number</th>
<th class="border px-4 py-2">Pallet Number</th>
<th class="border px-4 py-2">Locator Number</th>
<th class="border px-4 py-2">Scanned Status</th>
<th class="border px-4 py-2">Scanned Datetime</th>
<th class="border px-4 py-2">Scanned By</th>
</tr>
</thead>
<tbody class="divide-y divide-gray-100">
@forelse ($records as $index => $record)
<tr class="hover:bg-gray-50">
<td class="border px-4 py-2">{{ $index + 1 }}</td>
<td class="border px-4 py-2 whitespace-nowrap">{{ $record['created_at'] ?? '' }}</td>
<td class="border px-4 py-2">{{ $record['created_by'] ?? '' }}</td>
<td class="border px-4 py-2">{{ $record['serial_number'] ?? '' }}</td>
<td class="border px-4 py-2">{{ $record['pallet_number'] ?? '' }}</td>
<td class="border px-4 py-2">{{ $record['locator_number'] ?? '' }}</td>
<td class="border px-4 py-2">{{ $record['scanned_status'] ?? '' }}</td>
<td class="border px-4 py-2 whitespace-nowrap">{{ $record['scanned_at'] ?? '' }}</td>
<td class="border px-4 py-2">{{ $record['scanned_by'] ?? '' }}</td>
</tr>
@empty
<tr>
<td colspan="9" class="px-4 py-4 text-center text-gray-500">
No records found.
</td>
</tr>
@endforelse
</tbody>
</table>
</div>
</div>