sackey e839d40a99
Some checks are pending
linter / quality (push) Waiting to run
tests / ci (push) Waiting to run
Initial commit
2025-07-30 17:15:50 +00:00

94 lines
2.4 KiB
PHP

<?php
namespace App\Livewire\Inventory\StockMovements;
use App\Models\StockMovement;
use App\Models\Part;
use Livewire\Component;
use Livewire\WithPagination;
class Index extends Component
{
use WithPagination;
public $search = '';
public $typeFilter = '';
public $partFilter = '';
public $dateFrom = '';
public $dateTo = '';
public $sortBy = 'created_at';
public $sortDirection = 'desc';
protected $queryString = [
'search' => ['except' => ''],
'typeFilter' => ['except' => ''],
'partFilter' => ['except' => ''],
'dateFrom' => ['except' => ''],
'dateTo' => ['except' => ''],
'sortBy' => ['except' => 'created_at'],
'sortDirection' => ['except' => 'desc'],
];
public function updatingSearch()
{
$this->resetPage();
}
public function sortBy($field)
{
if ($this->sortBy === $field) {
$this->sortDirection = $this->sortDirection === 'asc' ? 'desc' : 'asc';
} else {
$this->sortBy = $field;
$this->sortDirection = 'asc';
}
}
public function clearFilters()
{
$this->reset(['search', 'typeFilter', 'partFilter', 'dateFrom', 'dateTo']);
$this->resetPage();
}
public function render()
{
$query = StockMovement::with(['part', 'createdBy']);
// Apply search
if ($this->search) {
$query->whereHas('part', function ($q) {
$q->where('name', 'like', '%' . $this->search . '%')
->orWhere('part_number', 'like', '%' . $this->search . '%');
});
}
// Apply filters
if ($this->typeFilter !== '') {
$query->where('movement_type', $this->typeFilter);
}
if ($this->partFilter !== '') {
$query->where('part_id', $this->partFilter);
}
if ($this->dateFrom) {
$query->whereDate('created_at', '>=', $this->dateFrom);
}
if ($this->dateTo) {
$query->whereDate('created_at', '<=', $this->dateTo);
}
// Apply sorting
$query->orderBy($this->sortBy, $this->sortDirection);
$movements = $query->paginate(20);
$parts = Part::orderBy('name')->get();
return view('livewire.inventory.stock-movements.index', [
'movements' => $movements,
'parts' => $parts,
]);
}
}