diff --git a/app/Services/Manage/PurchaseService.php b/app/Services/Manage/PurchaseService.php index 7616b57..385fcba 100644 --- a/app/Services/Manage/PurchaseService.php +++ b/app/Services/Manage/PurchaseService.php @@ -35,19 +35,39 @@ public function __construct( public function paginateForIndex(array $tableQuery): LengthAwarePaginator { + $search = $tableQuery['search']; + $searchId = $tableQuery['search_id'] ?? ''; + $query = Purchase::query() ->with([ 'supplier:id,name', 'createdBy.profile', 'pendingOwnerVerificationRequest.submittedBy.profile', - 'items.rawMaterialPrice.rawMaterial:id,name,unit', 'media', - ]) - ->when(($tableQuery['search_id'] ?? '') !== '', function (Builder $query) use ($tableQuery): void { - $query->where('purchases.id', $tableQuery['search_id']); + ]); + + if ($searchId === '' && $search !== '') { + $query->with(['items' => function ($query) use ($search): void { + $query + ->with('rawMaterialPrice.rawMaterial:id,name,unit') + ->where(function ($query) use ($search): void { + $query->whereHas('rawMaterialPrice', function ($query) use ($search): void { + $query->where('variant', 'like', "%{$search}%") + ->orWhereHas('rawMaterial', function ($query) use ($search): void { + $query->where('name', 'like', "%{$search}%"); + }); + }); + }); + }]); + } else { + $query->with('items.rawMaterialPrice.rawMaterial:id,name,unit'); + } + + $query + ->when($searchId !== '', function (Builder $query) use ($searchId): void { + $query->where('purchases.id', $searchId); }) - ->when(($tableQuery['search_id'] ?? '') === '' && $tableQuery['search'] !== '', function (Builder $query) use ($tableQuery): void { - $search = $tableQuery['search']; + ->when($searchId === '' && $search !== '', function (Builder $query) use ($search): void { $query->where(function (Builder $query) use ($search): void { $query->where('notes', 'like', "%{$search}%") ->orWhereHas('supplier', fn (Builder $query) => $query->where('name', 'like', "%{$search}%"))