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')
|
->with('media')
|
||||||
->when($tableQuery['search'] !== '', function ($query) use ($tableQuery): void {
|
->when($tableQuery['search'] !== '', function ($query) use ($tableQuery): void {
|
||||||
$query->where('variant', 'like', "%{$tableQuery['search']}%");
|
$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 {
|
->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));
|
$query->whereHas('prices', fn (Builder $priceQuery) => $priceQuery->where('stock', '<=', 0));
|
||||||
})
|
})
|
||||||
->when($stockStatus === 'low_stock', function (Builder $query): void {
|
->when($stockStatus === 'low_stock', function (Builder $query): void {
|
||||||
$minStock = [
|
$query->where(function (Builder $query): void {
|
||||||
RawMaterialUnit::YARD->value => 20,
|
$query->where('unit', RawMaterialUnit::YARD->value)
|
||||||
RawMaterialUnit::METER->value => 10,
|
->whereHas('prices', fn (Builder $q) => $q->where('stock', '>', 0)->where('stock', '<', 20));
|
||||||
RawMaterialUnit::KILOGRAM->value => 5,
|
})->orWhere(function (Builder $query): void {
|
||||||
];
|
$query->where('unit', RawMaterialUnit::METER->value)
|
||||||
|
->whereHas('prices', fn (Builder $q) => $q->where('stock', '>', 0)->where('stock', '<', 10));
|
||||||
$query->whereHas('prices', function (Builder $priceQuery) use ($minStock): void {
|
})->orWhere(function (Builder $query): void {
|
||||||
$priceQuery->where('stock', '>', 0)->where(function (Builder $priceQuery) use ($minStock): void {
|
$query->where('unit', RawMaterialUnit::KILOGRAM->value)
|
||||||
foreach (RawMaterialUnit::cases() as $unit) {
|
->whereHas('prices', fn (Builder $q) => $q->where('stock', '>', 0)->where('stock', '<', 5));
|
||||||
$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]);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user