feat: enhance stock filtering in paginateForIndex method to improve inventory management
This commit is contained in:
parent
bb17bf6ad4
commit
c16cfac861
@ -37,6 +37,24 @@ public function paginateForIndex(array $tableQuery, string $isActive, string $st
|
||||
->with('media')
|
||||
->when($tableQuery['search'] !== '', function ($query) use ($tableQuery): void {
|
||||
$query->where('variant', 'like', "%{$tableQuery['search']}%");
|
||||
})
|
||||
->when($stockStatus === 'out_of_stock', fn ($q) => $q->where('stock', '<=', 0))
|
||||
->when($stockStatus === 'low_stock', function ($q): void {
|
||||
$q->where('stock', '>', 0)
|
||||
->where(function ($q): void {
|
||||
$q->orWhere(function ($q): void {
|
||||
$q->whereHas('rawMaterial', fn ($q) => $q->where('unit', RawMaterialUnit::YARD->value))
|
||||
->where('stock', '<', 20);
|
||||
})
|
||||
->orWhere(function ($q): void {
|
||||
$q->whereHas('rawMaterial', fn ($q) => $q->where('unit', RawMaterialUnit::METER->value))
|
||||
->where('stock', '<', 10);
|
||||
})
|
||||
->orWhere(function ($q): void {
|
||||
$q->whereHas('rawMaterial', fn ($q) => $q->where('unit', RawMaterialUnit::KILOGRAM->value))
|
||||
->where('stock', '<', 5);
|
||||
});
|
||||
});
|
||||
}),
|
||||
])
|
||||
->when(($tableQuery['search_id'] ?? '') !== '', function (Builder $query) use ($tableQuery): void {
|
||||
@ -52,21 +70,15 @@ public function paginateForIndex(array $tableQuery, string $isActive, string $st
|
||||
$query->whereHas('prices', fn (Builder $priceQuery) => $priceQuery->where('stock', '<=', 0));
|
||||
})
|
||||
->when($stockStatus === 'low_stock', function (Builder $query): void {
|
||||
$minStock = [
|
||||
RawMaterialUnit::YARD->value => 20,
|
||||
RawMaterialUnit::METER->value => 10,
|
||||
RawMaterialUnit::KILOGRAM->value => 5,
|
||||
];
|
||||
|
||||
$query->whereHas('prices', function (Builder $priceQuery) use ($minStock): void {
|
||||
$priceQuery->where('stock', '>', 0)->where(function (Builder $priceQuery) use ($minStock): void {
|
||||
foreach (RawMaterialUnit::cases() as $unit) {
|
||||
$priceQuery->orWhere(function (Builder $priceQuery) use ($unit, $minStock): void {
|
||||
$priceQuery->whereHas('rawMaterial', fn (Builder $rawMaterialQuery) => $rawMaterialQuery->where('unit', $unit->value))
|
||||
->where('stock', '<', $minStock[$unit->value]);
|
||||
});
|
||||
}
|
||||
});
|
||||
$query->where(function (Builder $query): void {
|
||||
$query->where('unit', RawMaterialUnit::YARD->value)
|
||||
->whereHas('prices', fn (Builder $q) => $q->where('stock', '>', 0)->where('stock', '<', 20));
|
||||
})->orWhere(function (Builder $query): void {
|
||||
$query->where('unit', RawMaterialUnit::METER->value)
|
||||
->whereHas('prices', fn (Builder $q) => $q->where('stock', '>', 0)->where('stock', '<', 10));
|
||||
})->orWhere(function (Builder $query): void {
|
||||
$query->where('unit', RawMaterialUnit::KILOGRAM->value)
|
||||
->whereHas('prices', fn (Builder $q) => $q->where('stock', '>', 0)->where('stock', '<', 5));
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user