From ce553f9aed4c9d098578fa0688e45fd6724c1c92 Mon Sep 17 00:00:00 2001 From: Yoga Pangestu Date: Sun, 28 Jun 2026 18:11:26 +0700 Subject: [PATCH] refactor: remove unused inventory stock warning components and service logic --- .../Admin/Master/ProductController.php | 3 - .../Admin/Master/RawMaterialController.php | 4 - .../Master/MasterInventoryService.php | 108 --------------- .../master/MasterOutOfStockCatalogSection.vue | 127 ------------------ .../js/pages/admin/master/products/Index.vue | 9 -- .../admin/master/raw-materials/Index.vue | 21 --- 6 files changed, 272 deletions(-) delete mode 100644 app/Services/Master/MasterInventoryService.php delete mode 100644 resources/js/components/master/MasterOutOfStockCatalogSection.vue diff --git a/app/Http/Controllers/Admin/Master/ProductController.php b/app/Http/Controllers/Admin/Master/ProductController.php index f3515d3..f9eeb80 100644 --- a/app/Http/Controllers/Admin/Master/ProductController.php +++ b/app/Http/Controllers/Admin/Master/ProductController.php @@ -9,7 +9,6 @@ use App\Http\Requests\Admin\ToggleStatusRequest; use App\Models\Product; use App\Services\Master\CategoryService; -use App\Services\Master\MasterInventoryService; use App\Services\Master\ProductService; use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; @@ -23,7 +22,6 @@ class ProductController extends Controller public function __construct( private readonly ProductService $productService, private readonly CategoryService $categoryService, - private readonly MasterInventoryService $masterInventoryService, ) {} public function index(Request $request): Response @@ -36,7 +34,6 @@ public function index(Request $request): Response return Inertia::render('admin/master/products/Index', [ 'products' => $this->productService->paginateForIndex($tableQuery, $isActive, $categoryId, $stockStatus), 'categories' => $this->categoryService->getSelectOptions(), - 'outOfStockGroups' => $this->masterInventoryService->outOfStockProductGroups(), 'filters' => $this->dataTableFilters($tableQuery, [ 'is_active' => $isActive, 'category_id' => $categoryId, diff --git a/app/Http/Controllers/Admin/Master/RawMaterialController.php b/app/Http/Controllers/Admin/Master/RawMaterialController.php index b26f3fd..b4121f3 100644 --- a/app/Http/Controllers/Admin/Master/RawMaterialController.php +++ b/app/Http/Controllers/Admin/Master/RawMaterialController.php @@ -9,7 +9,6 @@ use App\Http\Requests\Admin\Master\RawMaterialRequest; use App\Http\Requests\Admin\ToggleStatusRequest; use App\Models\RawMaterial; -use App\Services\Master\MasterInventoryService; use App\Services\Master\RawMaterialService; use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; @@ -22,7 +21,6 @@ class RawMaterialController extends Controller public function __construct( private readonly RawMaterialService $rawMaterialService, - private readonly MasterInventoryService $masterInventoryService, ) {} public function index(Request $request): Response @@ -33,8 +31,6 @@ public function index(Request $request): Response return Inertia::render('admin/master/raw-materials/Index', [ 'rawMaterials' => $this->rawMaterialService->paginateForIndex($tableQuery, $isActive, $stockStatus), - 'outOfStockGroups' => $this->masterInventoryService->outOfStockRawMaterialGroups(), - 'lowStockGroups' => $this->masterInventoryService->lowStockRawMaterialGroups(), 'filters' => $this->dataTableFilters($tableQuery, [ 'is_active' => $isActive, 'stock_status' => $stockStatus, diff --git a/app/Services/Master/MasterInventoryService.php b/app/Services/Master/MasterInventoryService.php deleted file mode 100644 index 3261027..0000000 --- a/app/Services/Master/MasterInventoryService.php +++ /dev/null @@ -1,108 +0,0 @@ -where('is_active', true) - ->whereHas('variants', fn (Builder $query) => $query->where('stock', '<=', 0)) - ->with([ - 'variants' => fn ($query) => $query - ->where('stock', '<=', 0) - ->with('media') - ->orderBy('name'), - ]) - ->orderBy('name') - ->limit($limit) - ->get() - ->map(fn (Product $product) => [ - 'id' => $product->id, - 'name' => $product->name, - 'edit_url' => route('admin.master.products.edit', $product), - 'variants' => $product->variants->map(fn (ProductVariant $variant) => [ - 'id' => $variant->id, - 'name' => $variant->name, - 'stock_formatted' => $variant->stock_formatted, - 'images' => MediaPresenter::collection($variant, 'images'), - ])->values()->all(), - ]) - ->filter(fn (array $group) => $group['variants'] !== []) - ->values() - ->all(); - } - - public function outOfStockRawMaterialGroups(int $limit = 50): array - { - return $this->rawMaterialGroupsWithStockFilter( - fn (Builder $query) => $query->where('stock', '<=', 0), - $limit, - ); - } - - public function lowStockRawMaterialGroups(int $limit = 50): array - { - $minStock = [ - RawMaterialUnit::YARD->value => 20, - RawMaterialUnit::METER->value => 10, - RawMaterialUnit::KILOGRAM->value => 5, - ]; - - return $this->rawMaterialGroupsWithStockFilter( - function (Builder $query) use ($minStock): void { - $query->where('stock', '>', 0)->where(function (Builder $query) use ($minStock): void { - foreach (RawMaterialUnit::cases() as $unit) { - $query->orWhere(function (Builder $query) use ($unit, $minStock): void { - $query->whereHas( - 'rawMaterial', - fn (Builder $rawMaterialQuery) => $rawMaterialQuery->where('unit', $unit), - )->where('stock', '<', $minStock[$unit->value]); - }); - } - }); - }, - $limit, - ); - } - - private function rawMaterialGroupsWithStockFilter(callable $priceConstraint, int $limit): array - { - return RawMaterial::query() - ->where('is_active', true) - ->whereHas('prices', $priceConstraint) - ->with([ - 'prices' => function ($query) use ($priceConstraint): void { - $priceConstraint($query); - $query->with('media')->orderBy('variant'); - }, - ]) - ->orderBy('name') - ->limit($limit) - ->get() - ->map(fn (RawMaterial $rawMaterial) => [ - 'id' => $rawMaterial->id, - 'name' => $rawMaterial->name, - 'edit_url' => route('admin.master.raw_materials.edit', $rawMaterial), - 'unit_label' => $rawMaterial->unit_label, - 'variants' => $rawMaterial->prices->map(fn (RawMaterialPrice $price) => [ - 'id' => $price->id, - 'name' => $price->variant, - 'stock_formatted' => $price->stock_formatted, - 'images' => MediaPresenter::collection($price, 'images'), - ])->values()->all(), - ]) - ->filter(fn (array $group) => $group['variants'] !== []) - ->values() - ->all(); - } -} diff --git a/resources/js/components/master/MasterOutOfStockCatalogSection.vue b/resources/js/components/master/MasterOutOfStockCatalogSection.vue deleted file mode 100644 index 5809ff6..0000000 --- a/resources/js/components/master/MasterOutOfStockCatalogSection.vue +++ /dev/null @@ -1,127 +0,0 @@ - - - diff --git a/resources/js/pages/admin/master/products/Index.vue b/resources/js/pages/admin/master/products/Index.vue index d6a36ba..c9cbfcf 100644 --- a/resources/js/pages/admin/master/products/Index.vue +++ b/resources/js/pages/admin/master/products/Index.vue @@ -11,8 +11,6 @@ import { StockStatus } from '@/constants/stock-status'; import AdminLayout from '@/layouts/AdminLayout.vue'; import type { DataTableFilterDef } from '@/types/data-table'; import type { CategoryOption, PaginatedProducts } from '@/types/product'; -import type { MasterOutOfStockGroup } from '@/types/master-inventory'; -import MasterOutOfStockCatalogSection from '@/components/master/MasterOutOfStockCatalogSection.vue'; import { Head } from '@inertiajs/vue3'; import { computed, ref, watch } from 'vue'; import { index, create } from '@/routes/admin/master/products'; @@ -21,7 +19,6 @@ import ProductGroupedTable from './table/ProductGroupedTable.vue'; const props = defineProps<{ products: PaginatedProducts; categories: CategoryOption[]; - outOfStockGroups: MasterOutOfStockGroup[]; filters: { search: string; sort?: string; @@ -122,12 +119,6 @@ watch( /> - diff --git a/resources/js/pages/admin/master/raw-materials/Index.vue b/resources/js/pages/admin/master/raw-materials/Index.vue index ca71689..a3251bc 100644 --- a/resources/js/pages/admin/master/raw-materials/Index.vue +++ b/resources/js/pages/admin/master/raw-materials/Index.vue @@ -11,8 +11,6 @@ import { StockStatus } from '@/constants/stock-status'; import AdminLayout from '@/layouts/AdminLayout.vue'; import type { DataTableFilterDef } from '@/types/data-table'; import type { PaginatedRawMaterials } from '@/types/raw-material'; -import type { MasterOutOfStockGroup } from '@/types/master-inventory'; -import MasterOutOfStockCatalogSection from '@/components/master/MasterOutOfStockCatalogSection.vue'; import { Head } from '@inertiajs/vue3'; import { computed, ref, watch } from 'vue'; import { index, create } from '@/routes/admin/master/raw_materials'; @@ -20,8 +18,6 @@ import RawMaterialGroupedTable from './table/RawMaterialGroupedTable.vue'; const props = defineProps<{ rawMaterials: PaginatedRawMaterials; - outOfStockGroups: MasterOutOfStockGroup[]; - lowStockGroups: MasterOutOfStockGroup[]; filters: { search: string; sort?: string; @@ -112,23 +108,6 @@ watch( /> -
- - -