diff --git a/app/Http/Controllers/Admin/Master/RawMaterialController.php b/app/Http/Controllers/Admin/Master/RawMaterialController.php index b4121f3..bd98589 100644 --- a/app/Http/Controllers/Admin/Master/RawMaterialController.php +++ b/app/Http/Controllers/Admin/Master/RawMaterialController.php @@ -28,13 +28,16 @@ public function index(Request $request): Response $tableQuery = $this->parseDataTableQuery($request); $isActive = $request->string('is_active')->toString(); $stockStatus = $request->string('stock_status')->toString(); + $rawMaterialId = $request->string('raw_material_id')->toString(); return Inertia::render('admin/master/raw-materials/Index', [ - 'rawMaterials' => $this->rawMaterialService->paginateForIndex($tableQuery, $isActive, $stockStatus), + 'rawMaterials' => $this->rawMaterialService->paginateForIndex($tableQuery, $isActive, $stockStatus, $rawMaterialId), 'filters' => $this->dataTableFilters($tableQuery, [ 'is_active' => $isActive, 'stock_status' => $stockStatus, + 'raw_material_id' => $rawMaterialId, ]), + 'rawMaterialsList' => RawMaterial::query()->orderBy('name')->get(['id', 'name'])->map(fn ($r) => ['value' => (string) $r->id, 'label' => $r->name])->all(), ]); } diff --git a/app/Services/Master/RawMaterialService.php b/app/Services/Master/RawMaterialService.php index b6cf3bf..77f4773 100644 --- a/app/Services/Master/RawMaterialService.php +++ b/app/Services/Master/RawMaterialService.php @@ -30,7 +30,7 @@ public function __construct( private readonly PushNotificationService $pushNotificationService, ) {} - public function paginateForIndex(array $tableQuery, string $isActive, string $stockStatus = ''): LengthAwarePaginator + public function paginateForIndex(array $tableQuery, string $isActive, string $stockStatus = '', string $rawMaterialId = ''): LengthAwarePaginator { $query = RawMaterial::query() ->with([ @@ -41,11 +41,9 @@ public function paginateForIndex(array $tableQuery, string $isActive, string $st ]) ->when($tableQuery['search'] !== '', function (Builder $query) use ($tableQuery): void { $search = $tableQuery['search']; - $query->where(function (Builder $query) use ($search): void { - $query->where('name', 'like', "%{$search}%") - ->orWhereHas('prices', fn (Builder $query) => $query->where('variant', 'like', "%{$search}%")); - }); + $query->whereHas('prices', fn (Builder $query) => $query->where('variant', 'like', "%{$search}%")); }) + ->when($rawMaterialId !== '', fn (Builder $query) => $query->where('id', $rawMaterialId)) ->when($isActive !== '', fn (Builder $query) => $query->where('is_active', $isActive === '1')) ->when($stockStatus === 'out_of_stock', function (Builder $query): void { $query->whereHas('prices', fn (Builder $priceQuery) => $priceQuery->where('stock', '<=', 0)); diff --git a/resources/js/pages/admin/master/raw-materials/Index.vue b/resources/js/pages/admin/master/raw-materials/Index.vue index 35b42b5..6cd745f 100644 --- a/resources/js/pages/admin/master/raw-materials/Index.vue +++ b/resources/js/pages/admin/master/raw-materials/Index.vue @@ -24,7 +24,9 @@ const props = defineProps<{ direction?: 'asc' | 'desc'; is_active?: string; stock_status?: string; + raw_material_id?: string; }; + rawMaterialsList: { value: string; label: string }[]; }>(); const { can } = useCan(); @@ -34,12 +36,19 @@ const { query, setSearch, setFilter, resetFilters, syncFromServer } = useDataTableQuery({ url: index.url(), initial: { ...props.filters }, - filterKeys: ['is_active', 'stock_status'], + filterKeys: ['is_active', 'stock_status', 'raw_material_id'], + only: ['rawMaterials', 'filters'], }); useDataTableQuerySync(() => props.filters, syncFromServer); const filterDefs = computed(() => [ + { + key: 'raw_material_id', + label: 'Nama Bahan Baku', + type: 'select', + options: props.rawMaterialsList, + }, { key: 'is_active', label: 'Status', @@ -63,6 +72,7 @@ const filterDefs = computed(() => [ const filterValues = computed(() => ({ is_active: query.value.is_active ?? '', stock_status: query.value.stock_status ?? '', + raw_material_id: query.value.raw_material_id ?? '', })); const pagination = computed(() => ({