diff --git a/app/Http/Controllers/WarehouseManagement/ProductCategoriesController.php b/app/Http/Controllers/WarehouseManagement/ProductCategoriesController.php index 221e5c0..5e4aac5 100644 --- a/app/Http/Controllers/WarehouseManagement/ProductCategoriesController.php +++ b/app/Http/Controllers/WarehouseManagement/ProductCategoriesController.php @@ -24,11 +24,14 @@ class ProductCategoriesController extends Controller $data = ProductCategory::query(); return DataTables::of($data) ->addIndexColumn() + ->addColumn('parent', function ($row) { + return $row->parent ? $row->parent->name : '-'; + }) ->addColumn('action', function ($row) use ($menu) { $btn = ''; if (Auth::user()->can('delete', $menu)) { - $btn .= ''; + $btn .= ''; } if (Auth::user()->can('update', $menu)) { @@ -63,6 +66,7 @@ class ProductCategoriesController extends Controller { $validated = $request->validate([ 'name' => 'required|string|max:255', + 'parent_id' => 'nullable|exists:product_categories,id', ]); ProductCategory::create($validated); return response()->json(['success' => true, 'message' => 'Kategori berhasil ditambahkan.']); @@ -121,4 +125,10 @@ class ProductCategoriesController extends Controller ProductCategory::findOrFail($id)->delete(); return response()->json(['success' => true, 'message' => 'Kategorii berhasil dihapus.']); } + + public function getParents(Request $request) + { + $parents = ProductCategory::whereNull('parent_id')->get(['id', 'name']); + return response()->json($parents); + } } diff --git a/app/Http/Controllers/WarehouseManagement/ProductsController.php b/app/Http/Controllers/WarehouseManagement/ProductsController.php index 1766b4f..ae6372b 100644 --- a/app/Http/Controllers/WarehouseManagement/ProductsController.php +++ b/app/Http/Controllers/WarehouseManagement/ProductsController.php @@ -3,6 +3,7 @@ namespace App\Http\Controllers\WarehouseManagement; use App\Http\Controllers\Controller; +use App\Models\Dealer; use App\Models\Menu; use App\Models\Product; use App\Models\ProductCategory; @@ -34,16 +35,18 @@ class ProductsController extends Controller }); }) ->addColumn('action', function ($row) use ($menu) { - $btn = ''; + $btn = '
'; if (Auth::user()->can('delete', $menu)) { - $btn .= ''; + $btn .= ''; } - + if (Auth::user()->can('update', $menu)) { - $btn .= ''; + $btn .= 'Edit'; } - + + $btn .= '
'; + return $btn; }) ->rawColumns(['action']) @@ -59,8 +62,10 @@ class ProductsController extends Controller */ public function create() { - // - } + $categories = ProductCategory::with('children')->whereNull('parent_id')->get(); + $dealers = Dealer::all(); + return view('warehouse_management.products.create', compact('categories', 'dealers')); + } /** * Store a newly created resource in storage. @@ -70,8 +75,39 @@ class ProductsController extends Controller */ public function store(Request $request) { - // - } + $request->validate([ + 'code' => 'required|string|unique:products,code', + 'name' => 'required|string', + 'description' => 'nullable|string', + 'product_category_id' => 'required|exists:product_categories,id', + 'dealer_stock' => 'nullable|array', + 'dealer_stock.*.dealer_id' => 'required|exists:dealers,id', + 'dealer_stock.*.quantity' => 'required|integer|min:0', + ]); + + // Create product + $product = Product::create([ + 'code' => $request->code, + 'name' => $request->name, + 'description' => $request->description, + 'product_category_id' => $request->product_category_id, + ]); + + // Prepare dealer stock for pivot + $pivotData = []; + if ($request->has('dealer_stock')) { + foreach ($request->dealer_stock as $stockData) { + if (empty($stockData['dealer_id']) || !isset($stockData['quantity'])) continue; + + $pivotData[$stockData['dealer_id']] = ['quantity' => $stockData['quantity']]; + } + + // Attach dealer stock using pivot table + $product->dealers()->attach($pivotData); + } + + return redirect()->route('products.index')->with('success', 'Produk berhasil ditambahkan.'); + } /** * Display the specified resource. @@ -92,7 +128,12 @@ class ProductsController extends Controller */ public function edit($id) { - // + $product = Product::findOrFail($id); + return view('warehouse_management.products.edit', [ + 'product' => $product->load('dealers'), + 'dealers' => Dealer::all(), + 'categories' => ProductCategory::with('children')->get(), + ]); } /** @@ -102,10 +143,33 @@ class ProductsController extends Controller * @param int $id * @return \Illuminate\Http\Response */ - public function update(Request $request, $id) + public function update(Request $request, Product $product) { - // - } + $request->validate([ + 'code' => 'required|string|unique:products,code,' . $product->id, + 'name' => 'required|string', + 'description' => 'nullable|string', + 'product_category_id' => 'required|exists:product_categories,id', + 'dealer_stock' => 'nullable|array', + 'dealer_stock.*.dealer_id' => 'required|exists:dealers,id', + 'dealer_stock.*.quantity' => 'required|integer|min:0', + ]); + + $product->update($request->only(['code', 'name', 'description', 'product_category_id'])); + + // Prepare pivot sync data + $syncData = []; + if ($request->has('dealer_stock')) { + foreach ($request->dealer_stock as $item) { + $syncData[$item['dealer_id']] = ['quantity' => $item['quantity']]; + } + } + + // Sync with pivot table + $product->dealers()->sync($syncData); + + return redirect()->route('products.index')->with('success', 'Produk berhasil diperbarui.'); + } /** * Remove the specified resource from storage. @@ -113,8 +177,14 @@ class ProductsController extends Controller * @param int $id * @return \Illuminate\Http\Response */ - public function destroy($id) + public function destroy(Product $product) { - // + // Detach all dealer relationships (optional if using cascade on delete) + $product->dealers()->detach(); + + // Delete the product + $product->delete(); + + return response()->json(['success' => true, 'message' => 'Produk berhasil dihapus.']); } } diff --git a/app/Models/ProductCategory.php b/app/Models/ProductCategory.php index 4d271ea..14cc807 100644 --- a/app/Models/ProductCategory.php +++ b/app/Models/ProductCategory.php @@ -10,9 +10,17 @@ class ProductCategory extends Model { use HasFactory, SoftDeletes; - protected $fillable = ['name']; + protected $fillable = ['name','parent_id']; public function products(){ return $this->hasMany(Product::class, 'product_category_id'); } + + public function parent(){ + return $this->belongsTo(ProductCategory::class, 'parent_id'); + } + + public function children(){ + return $this->hasMany(ProductCategory::class,'parent_id'); + } } diff --git a/app/Models/Stock.php b/app/Models/Stock.php new file mode 100644 index 0000000..7ebde6b --- /dev/null +++ b/app/Models/Stock.php @@ -0,0 +1,27 @@ +belongsTo(Product::class); + } + + public function dealer() + { + return $this->belongsTo(Dealer::class); + } +} diff --git a/database/migrations/2025_06_02_095805_add_parent_id_to_product_categories_table.php b/database/migrations/2025_06_02_095805_add_parent_id_to_product_categories_table.php new file mode 100644 index 0000000..fde3f46 --- /dev/null +++ b/database/migrations/2025_06_02_095805_add_parent_id_to_product_categories_table.php @@ -0,0 +1,33 @@ +foreignId('parent_id')->nullable()->after('name')->constrained('product_categories')->nullOnDelete(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('product_categories', function (Blueprint $table) { + $table->dropForeign(['parent_id']); + $table->dropColumn('parent_id'); + }); + } +} diff --git a/database/seeders/ProductAndCategorySeeder.php b/database/seeders/ProductAndCategorySeeder.php index b6b5ab9..8fdf46a 100644 --- a/database/seeders/ProductAndCategorySeeder.php +++ b/database/seeders/ProductAndCategorySeeder.php @@ -17,33 +17,40 @@ class ProductAndCategorySeeder extends Seeder { $categories = [ 'Oli & Pelumas' => [ - ['code' => 'OLI001', 'name' => 'Oli Mesin 10W-40'], - ['code' => 'OLI002', 'name' => 'Oli Gardan'], + ['code' => 'OLI001', 'name' => 'Oli Mesin 10W-40', 'subcategory' => 'Oli Mesin'], + ['code' => 'OLI002', 'name' => 'Oli Gardan', 'subcategory' => 'Oli Gardan'], ], 'Aki & Kelistrikan' => [ - ['code' => 'AKI001', 'name' => 'Aki Kering 12V'], - ['code' => 'AKI002', 'name' => 'Regulator Rectifier'], + ['code' => 'AKI001', 'name' => 'Aki Kering 12V', 'subcategory' => 'Aki'], + ['code' => 'AKI002', 'name' => 'Regulator Rectifier', 'subcategory' => 'Kelistrikan'], ], 'Rem' => [ - ['code' => 'REM001', 'name' => 'Kampas Rem Belakang'], - ['code' => 'REM002', 'name' => 'Cakram Depan'], + ['code' => 'REM001', 'name' => 'Kampas Rem Belakang', 'subcategory' => 'Kampas Rem'], + ['code' => 'REM002', 'name' => 'Cakram Depan', 'subcategory' => 'Cakram'], ], ]; - - foreach ($categories as $categoryName => $products) { - $category = ProductCategory::firstOrCreate( - ['name' => $categoryName], + foreach ($categories as $parentName => $products) { + // Create parent category + $parent = ProductCategory::firstOrCreate( + ['name' => $parentName], ['created_at' => now(), 'updated_at' => now()] ); foreach ($products as $product) { + // Create child category (sub-category) + $child = ProductCategory::firstOrCreate( + ['name' => $product['subcategory'], 'parent_id' => $parent->id], + ['created_at' => now(), 'updated_at' => now()] + ); + + // Create product in the child category Product::updateOrCreate( ['code' => $product['code']], [ 'name' => $product['name'], 'description' => $product['name'], - 'product_category_id' => $category->id + 'product_category_id' => $child->id ] ); } diff --git a/public/js/warehouse_management/product_categories/index.js b/public/js/warehouse_management/product_categories/index.js index 55359c2..9c4fbac 100644 --- a/public/js/warehouse_management/product_categories/index.js +++ b/public/js/warehouse_management/product_categories/index.js @@ -15,7 +15,7 @@ \***********************************************************************/ /***/ (() => { -eval("function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n$.ajaxSetup({\n headers: {\n \"X-CSRF-TOKEN\": $('meta[name=\"csrf-token\"]').attr(\"content\")\n }\n});\nvar tableContainer = $(\"#product-categories-table\");\nvar url = tableContainer.data(\"url\");\nvar table = $(\"#product-categories-table\").DataTable({\n processing: true,\n serverSide: true,\n ajax: url,\n columns: [{\n data: \"DT_RowIndex\",\n name: \"DT_RowIndex\",\n orderable: false,\n searchable: false\n }, {\n data: \"name\",\n name: \"name\"\n }, {\n data: \"action\",\n name: \"action\",\n orderable: false,\n searchable: false\n }]\n});\n$(document).ready(function () {\n $(\"#addProductCategory\").click(function () {\n $(\"#productCategoryForm\")[0].reset();\n $(\"#category_id\").val(\"\");\n $(\"#modalTitle\").text(\"Tambah Kategori\");\n $(\"#productCategoryModal\").modal(\"show\");\n }); // Submit form (baik tambah maupun edit)\n\n $(\"#productCategoryForm\").submit(function (e) {\n e.preventDefault();\n var id = $(\"#category_id\").val();\n var url = id ? \"/warehouse/product_categories/\".concat(id) : \"/warehouse/product_categories\";\n var method = id ? \"PUT\" : \"POST\";\n $.ajax({\n url: url,\n method: method,\n data: _objectSpread({\n name: $(\"#name\").val(),\n _token: $('meta[name=\"csrf-token\"]').attr(\"content\")\n }, id && {\n _method: \"PUT\"\n }),\n success: function success() {\n $(\"#productCategoryModal\").modal(\"hide\");\n $(\"#product-categories-table\").DataTable().ajax.reload();\n },\n error: function error(xhr) {\n alert(\"Gagal menyimpan data\");\n console.error(xhr.responseText);\n }\n });\n });\n});\n$(document).on(\"click\", \".btn-edit-product-category\", function () {\n var id = $(this).data(\"id\");\n var url = $(this).data(\"url\");\n $.ajax({\n url: url,\n method: \"GET\",\n success: function success(response) {\n $(\"#category_id\").val(response.id);\n $(\"#name\").val(response.name);\n $(\"#modalTitle\").text(\"Edit Kategori\");\n $(\"#productCategoryModal\").modal(\"show\");\n },\n error: function error(xhr) {\n alert(\"Gagal mengambil data\");\n console.error(xhr.responseText);\n }\n });\n});\n$(document).on(\"click\", \".btn-destroy-product-category\", function () {\n var _this = this;\n\n Swal.fire({\n title: \"Hapus nama kategori?\",\n text: \"Anda tidak akan bisa mengembalikannya!\",\n showCancelButton: true,\n confirmButtonColor: \"#d33\",\n cancelButtonColor: \"#dedede\",\n confirmButtonText: \"Hapus\"\n }).then(function (result) {\n if (result.value) {\n var _url = $(_this).data(\"action\");\n\n $.ajax({\n url: _url,\n method: \"POST\",\n data: {\n _method: \"DELETE\",\n _token: $('meta[name=\"csrf-token\"]').attr(\"content\")\n },\n success: function success() {\n alert(\"Kategori berhasil dihapus.\");\n $(\"#product-categories-table\").DataTable().ajax.reload();\n },\n error: function error(xhr) {\n alert(\"Gagal menghapus kategori.\");\n console.error(xhr.responseText);\n }\n });\n }\n });\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvd2FyZWhvdXNlX21hbmFnZW1lbnQvcHJvZHVjdF9jYXRlZ29yaWVzL2luZGV4LmpzLmpzIiwibmFtZXMiOlsiJCIsImFqYXhTZXR1cCIsImhlYWRlcnMiLCJhdHRyIiwidGFibGVDb250YWluZXIiLCJ1cmwiLCJkYXRhIiwidGFibGUiLCJEYXRhVGFibGUiLCJwcm9jZXNzaW5nIiwic2VydmVyU2lkZSIsImFqYXgiLCJjb2x1bW5zIiwibmFtZSIsIm9yZGVyYWJsZSIsInNlYXJjaGFibGUiLCJkb2N1bWVudCIsInJlYWR5IiwiY2xpY2siLCJyZXNldCIsInZhbCIsInRleHQiLCJtb2RhbCIsInN1Ym1pdCIsImUiLCJwcmV2ZW50RGVmYXVsdCIsImlkIiwibWV0aG9kIiwiX3Rva2VuIiwiX21ldGhvZCIsInN1Y2Nlc3MiLCJyZWxvYWQiLCJlcnJvciIsInhociIsImFsZXJ0IiwiY29uc29sZSIsInJlc3BvbnNlVGV4dCIsIm9uIiwicmVzcG9uc2UiLCJTd2FsIiwiZmlyZSIsInRpdGxlIiwic2hvd0NhbmNlbEJ1dHRvbiIsImNvbmZpcm1CdXR0b25Db2xvciIsImNhbmNlbEJ1dHRvbkNvbG9yIiwiY29uZmlybUJ1dHRvblRleHQiLCJ0aGVuIiwicmVzdWx0IiwidmFsdWUiXSwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy93YXJlaG91c2VfbWFuYWdlbWVudC9wcm9kdWN0X2NhdGVnb3JpZXMvaW5kZXguanM/ZmM4NCJdLCJzb3VyY2VzQ29udGVudCI6WyIkLmFqYXhTZXR1cCh7XG4gICAgaGVhZGVyczoge1xuICAgICAgICBcIlgtQ1NSRi1UT0tFTlwiOiAkKCdtZXRhW25hbWU9XCJjc3JmLXRva2VuXCJdJykuYXR0cihcImNvbnRlbnRcIiksXG4gICAgfSxcbn0pO1xubGV0IHRhYmxlQ29udGFpbmVyID0gJChcIiNwcm9kdWN0LWNhdGVnb3JpZXMtdGFibGVcIik7XG5sZXQgdXJsID0gdGFibGVDb250YWluZXIuZGF0YShcInVybFwiKTtcbmxldCB0YWJsZSA9ICQoXCIjcHJvZHVjdC1jYXRlZ29yaWVzLXRhYmxlXCIpLkRhdGFUYWJsZSh7XG4gICAgcHJvY2Vzc2luZzogdHJ1ZSxcbiAgICBzZXJ2ZXJTaWRlOiB0cnVlLFxuICAgIGFqYXg6IHVybCxcbiAgICBjb2x1bW5zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRhdGE6IFwiRFRfUm93SW5kZXhcIixcbiAgICAgICAgICAgIG5hbWU6IFwiRFRfUm93SW5kZXhcIixcbiAgICAgICAgICAgIG9yZGVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgICBzZWFyY2hhYmxlOiBmYWxzZSxcbiAgICAgICAgfSxcbiAgICAgICAgeyBkYXRhOiBcIm5hbWVcIiwgbmFtZTogXCJuYW1lXCIgfSxcbiAgICAgICAgeyBkYXRhOiBcImFjdGlvblwiLCBuYW1lOiBcImFjdGlvblwiLCBvcmRlcmFibGU6IGZhbHNlLCBzZWFyY2hhYmxlOiBmYWxzZSB9LFxuICAgIF0sXG59KTtcblxuJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24gKCkge1xuICAgICQoXCIjYWRkUHJvZHVjdENhdGVnb3J5XCIpLmNsaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgJChcIiNwcm9kdWN0Q2F0ZWdvcnlGb3JtXCIpWzBdLnJlc2V0KCk7XG4gICAgICAgICQoXCIjY2F0ZWdvcnlfaWRcIikudmFsKFwiXCIpO1xuICAgICAgICAkKFwiI21vZGFsVGl0bGVcIikudGV4dChcIlRhbWJhaCBLYXRlZ29yaVwiKTtcbiAgICAgICAgJChcIiNwcm9kdWN0Q2F0ZWdvcnlNb2RhbFwiKS5tb2RhbChcInNob3dcIik7XG4gICAgfSk7XG5cbiAgICAvLyBTdWJtaXQgZm9ybSAoYmFpayB0YW1iYWggbWF1cHVuIGVkaXQpXG4gICAgJChcIiNwcm9kdWN0Q2F0ZWdvcnlGb3JtXCIpLnN1Ym1pdChmdW5jdGlvbiAoZSkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgbGV0IGlkID0gJChcIiNjYXRlZ29yeV9pZFwiKS52YWwoKTtcbiAgICAgICAgbGV0IHVybCA9IGlkXG4gICAgICAgICAgICA/IGAvd2FyZWhvdXNlL3Byb2R1Y3RfY2F0ZWdvcmllcy8ke2lkfWBcbiAgICAgICAgICAgIDogYC93YXJlaG91c2UvcHJvZHVjdF9jYXRlZ29yaWVzYDtcbiAgICAgICAgbGV0IG1ldGhvZCA9IGlkID8gXCJQVVRcIiA6IFwiUE9TVFwiO1xuXG4gICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICB1cmw6IHVybCxcbiAgICAgICAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgIG5hbWU6ICQoXCIjbmFtZVwiKS52YWwoKSxcbiAgICAgICAgICAgICAgICBfdG9rZW46ICQoJ21ldGFbbmFtZT1cImNzcmYtdG9rZW5cIl0nKS5hdHRyKFwiY29udGVudFwiKSxcbiAgICAgICAgICAgICAgICAuLi4oaWQgJiYgeyBfbWV0aG9kOiBcIlBVVFwiIH0pLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAkKFwiI3Byb2R1Y3RDYXRlZ29yeU1vZGFsXCIpLm1vZGFsKFwiaGlkZVwiKTtcbiAgICAgICAgICAgICAgICAkKFwiI3Byb2R1Y3QtY2F0ZWdvcmllcy10YWJsZVwiKS5EYXRhVGFibGUoKS5hamF4LnJlbG9hZCgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbiAoeGhyKSB7XG4gICAgICAgICAgICAgICAgYWxlcnQoXCJHYWdhbCBtZW55aW1wYW4gZGF0YVwiKTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKHhoci5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfSk7XG59KTtcbiQoZG9jdW1lbnQpLm9uKFwiY2xpY2tcIiwgXCIuYnRuLWVkaXQtcHJvZHVjdC1jYXRlZ29yeVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgaWQgPSAkKHRoaXMpLmRhdGEoXCJpZFwiKTtcbiAgICBjb25zdCB1cmwgPSAkKHRoaXMpLmRhdGEoXCJ1cmxcIik7XG4gICAgJC5hamF4KHtcbiAgICAgICAgdXJsOiB1cmwsXG4gICAgICAgIG1ldGhvZDogXCJHRVRcIixcbiAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAkKFwiI2NhdGVnb3J5X2lkXCIpLnZhbChyZXNwb25zZS5pZCk7XG4gICAgICAgICAgICAkKFwiI25hbWVcIikudmFsKHJlc3BvbnNlLm5hbWUpO1xuICAgICAgICAgICAgJChcIiNtb2RhbFRpdGxlXCIpLnRleHQoXCJFZGl0IEthdGVnb3JpXCIpO1xuICAgICAgICAgICAgJChcIiNwcm9kdWN0Q2F0ZWdvcnlNb2RhbFwiKS5tb2RhbChcInNob3dcIik7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiBmdW5jdGlvbiAoeGhyKSB7XG4gICAgICAgICAgICBhbGVydChcIkdhZ2FsIG1lbmdhbWJpbCBkYXRhXCIpO1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcih4aHIucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgfSxcbiAgICB9KTtcbn0pO1xuXG4kKGRvY3VtZW50KS5vbihcImNsaWNrXCIsIFwiLmJ0bi1kZXN0cm95LXByb2R1Y3QtY2F0ZWdvcnlcIiwgZnVuY3Rpb24gKCkge1xuICAgIFN3YWwuZmlyZSh7XG4gICAgICAgIHRpdGxlOiBcIkhhcHVzIG5hbWEga2F0ZWdvcmk/XCIsXG4gICAgICAgIHRleHQ6IFwiQW5kYSB0aWRhayBha2FuIGJpc2EgbWVuZ2VtYmFsaWthbm55YSFcIixcbiAgICAgICAgc2hvd0NhbmNlbEJ1dHRvbjogdHJ1ZSxcbiAgICAgICAgY29uZmlybUJ1dHRvbkNvbG9yOiBcIiNkMzNcIixcbiAgICAgICAgY2FuY2VsQnV0dG9uQ29sb3I6IFwiI2RlZGVkZVwiLFxuICAgICAgICBjb25maXJtQnV0dG9uVGV4dDogXCJIYXB1c1wiLFxuICAgIH0pLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICBpZiAocmVzdWx0LnZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCB1cmwgPSAkKHRoaXMpLmRhdGEoXCJhY3Rpb25cIik7XG4gICAgICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgICAgIHVybDogdXJsLFxuICAgICAgICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgICBfbWV0aG9kOiBcIkRFTEVURVwiLFxuICAgICAgICAgICAgICAgICAgICBfdG9rZW46ICQoJ21ldGFbbmFtZT1cImNzcmYtdG9rZW5cIl0nKS5hdHRyKFwiY29udGVudFwiKSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgYWxlcnQoXCJLYXRlZ29yaSBiZXJoYXNpbCBkaWhhcHVzLlwiKTtcbiAgICAgICAgICAgICAgICAgICAgJChcIiNwcm9kdWN0LWNhdGVnb3JpZXMtdGFibGVcIikuRGF0YVRhYmxlKCkuYWpheC5yZWxvYWQoKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbiAoeGhyKSB7XG4gICAgICAgICAgICAgICAgICAgIGFsZXJ0KFwiR2FnYWwgbWVuZ2hhcHVzIGthdGVnb3JpLlwiKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcih4aHIucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9KTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQUEsQ0FBQyxDQUFDQyxTQUFGLENBQVk7RUFDUkMsT0FBTyxFQUFFO0lBQ0wsZ0JBQWdCRixDQUFDLENBQUMseUJB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\n//# sourceURL=webpack-internal:///./resources/js/warehouse_management/product_categories/index.js\n"); +eval("function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n$.ajaxSetup({\n headers: {\n \"X-CSRF-TOKEN\": $('meta[name=\"csrf-token\"]').attr(\"content\")\n }\n});\nvar tableContainer = $(\"#product-categories-table\");\nvar url = tableContainer.data(\"url\");\nvar table = $(\"#product-categories-table\").DataTable({\n processing: true,\n serverSide: true,\n ajax: url,\n columns: [{\n data: \"name\",\n name: \"name\"\n }, {\n data: \"parent\",\n name: \"parent\"\n }, {\n data: \"action\",\n name: \"action\",\n orderable: false,\n searchable: false\n }]\n});\n$(document).ready(function () {\n $(\"#addProductCategory\").click(function () {\n $(\"#productCategoryForm\")[0].reset();\n $(\"#category_id\").val(\"\");\n $(\"#modalTitle\").text(\"Tambah Kategori\");\n $(\"#productCategoryModal\").modal(\"show\");\n loadParentCategories();\n }); // Submit form (baik tambah maupun edit)\n\n $(\"#productCategoryForm\").submit(function (e) {\n e.preventDefault();\n var id = $(\"#category_id\").val();\n var url = id ? \"/warehouse/product_categories/\".concat(id) : \"/warehouse/product_categories\";\n var method = id ? \"PUT\" : \"POST\";\n $.ajax({\n url: url,\n method: method,\n data: _objectSpread({\n name: $(\"#name\").val(),\n _token: $('meta[name=\"csrf-token\"]').attr(\"content\")\n }, id && {\n _method: \"PUT\"\n }),\n success: function success() {\n $(\"#productCategoryModal\").modal(\"hide\");\n $(\"#product-categories-table\").DataTable().ajax.reload();\n },\n error: function error(xhr) {\n alert(\"Gagal menyimpan data\");\n console.error(xhr.responseText);\n }\n });\n });\n});\n$(document).on(\"click\", \".btn-edit-product-category\", function () {\n var id = $(this).data(\"id\");\n var url = $(this).data(\"url\");\n $.ajax({\n url: url,\n method: \"GET\",\n success: function success(response) {\n $(\"#category_id\").val(response.id);\n $(\"#name\").val(response.name); // Get parent categories and populate select\n\n $.ajax({\n url: \"/warehouse/categories/parents\",\n // Adjust to match your route\n method: \"GET\",\n success: function success(parents) {\n var options = '';\n parents.forEach(function (parent) {\n // Avoid self-select\n if (parent.id !== response.id) {\n options += \"\");\n }\n });\n $(\"#parent_id\").html(options);\n }\n });\n $(\"#modalTitle\").text(\"Edit Kategori\");\n $(\"#productCategoryModal\").modal(\"show\");\n },\n error: function error(xhr) {\n alert(\"Gagal mengambil data\");\n console.error(xhr.responseText);\n }\n });\n});\n$(document).on(\"click\", \".btn-destroy-product-category\", function () {\n var _this = this;\n\n Swal.fire({\n title: \"Hapus nama kategori?\",\n text: \"Anda tidak akan bisa mengembalikannya!\",\n showCancelButton: true,\n confirmButtonColor: \"#d33\",\n cancelButtonColor: \"#dedede\",\n confirmButtonText: \"Hapus\"\n }).then(function (result) {\n if (result.value) {\n var _url = $(_this).data(\"action\");\n\n $.ajax({\n url: _url,\n method: \"POST\",\n data: {\n _method: \"DELETE\",\n _token: $('meta[name=\"csrf-token\"]').attr(\"content\")\n },\n success: function success() {\n alert(\"Kategori berhasil dihapus.\");\n $(\"#product-categories-table\").DataTable().ajax.reload();\n },\n error: function error(xhr) {\n alert(\"Gagal menghapus kategori.\");\n console.error(xhr.responseText);\n }\n });\n }\n });\n});\n\nfunction loadParentCategories() {\n var selectedId = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n $.ajax({\n url: \"/warehouse/categories/parents\",\n // create this route\n type: \"GET\",\n success: function success(data) {\n $(\"#parent_id\").empty().append('');\n data.forEach(function (category) {\n $(\"#parent_id\").append(\"\"));\n });\n }\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyIkIiwiYWpheFNldHVwIiwiaGVhZGVycyIsImF0dHIiLCJ0YWJsZUNvbnRhaW5lciIsInVybCIsImRhdGEiLCJ0YWJsZSIsIkRhdGFUYWJsZSIsInByb2Nlc3NpbmciLCJzZXJ2ZXJTaWRlIiwiYWpheCIsImNvbHVtbnMiLCJuYW1lIiwib3JkZXJhYmxlIiwic2VhcmNoYWJsZSIsImRvY3VtZW50IiwicmVhZHkiLCJjbGljayIsInJlc2V0IiwidmFsIiwidGV4dCIsIm1vZGFsIiwibG9hZFBhcmVudENhdGVnb3JpZXMiLCJzdWJtaXQiLCJlIiwicHJldmVudERlZmF1bHQiLCJpZCIsIm1ldGhvZCIsIl90b2tlbiIsIl9tZXRob2QiLCJzdWNjZXNzIiwicmVsb2FkIiwiZXJyb3IiLCJ4aHIiLCJhbGVydCIsImNvbnNvbGUiLCJyZXNwb25zZVRleHQiLCJvbiIsInJlc3BvbnNlIiwicGFyZW50cyIsIm9wdGlvbnMiLCJmb3JFYWNoIiwicGFyZW50IiwicGFyZW50X2lkIiwiaHRtbCIsIlN3YWwiLCJmaXJlIiwidGl0bGUiLCJzaG93Q2FuY2VsQnV0dG9uIiwiY29uZmlybUJ1dHRvbkNvbG9yIiwiY2FuY2VsQnV0dG9uQ29sb3IiLCJjb25maXJtQnV0dG9uVGV4dCIsInRoZW4iLCJyZXN1bHQiLCJ2YWx1ZSIsInNlbGVjdGVkSWQiLCJ0eXBlIiwiZW1wdHkiLCJhcHBlbmQiLCJjYXRlZ29yeSJdLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvd2FyZWhvdXNlX21hbmFnZW1lbnQvcHJvZHVjdF9jYXRlZ29yaWVzL2luZGV4LmpzP2ZjODQiXSwic291cmNlc0NvbnRlbnQiOlsiJC5hamF4U2V0dXAoe1xuICAgIGhlYWRlcnM6IHtcbiAgICAgICAgXCJYLUNTUkYtVE9LRU5cIjogJCgnbWV0YVtuYW1lPVwiY3NyZi10b2tlblwiXScpLmF0dHIoXCJjb250ZW50XCIpLFxuICAgIH0sXG59KTtcbmxldCB0YWJsZUNvbnRhaW5lciA9ICQoXCIjcHJvZHVjdC1jYXRlZ29yaWVzLXRhYmxlXCIpO1xubGV0IHVybCA9IHRhYmxlQ29udGFpbmVyLmRhdGEoXCJ1cmxcIik7XG5sZXQgdGFibGUgPSAkKFwiI3Byb2R1Y3QtY2F0ZWdvcmllcy10YWJsZVwiKS5EYXRhVGFibGUoe1xuICAgIHByb2Nlc3Npbmc6IHRydWUsXG4gICAgc2VydmVyU2lkZTogdHJ1ZSxcbiAgICBhamF4OiB1cmwsXG4gICAgY29sdW1uczogW1xuICAgICAgICB7IGRhdGE6IFwibmFtZVwiLCBuYW1lOiBcIm5hbWVcIiB9LFxuICAgICAgICB7IGRhdGE6IFwicGFyZW50XCIsIG5hbWU6IFwicGFyZW50XCIgfSxcbiAgICAgICAgeyBkYXRhOiBcImFjdGlvblwiLCBuYW1lOiBcImFjdGlvblwiLCBvcmRlcmFibGU6IGZhbHNlLCBzZWFyY2hhYmxlOiBmYWxzZSB9LFxuICAgIF0sXG59KTtcblxuJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24gKCkge1xuICAgICQoXCIjYWRkUHJvZHVjdENhdGVnb3J5XCIpLmNsaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgJChcIiNwcm9kdWN0Q2F0ZWdvcnlGb3JtXCIpWzBdLnJlc2V0KCk7XG4gICAgICAgICQoXCIjY2F0ZWdvcnlfaWRcIikudmFsKFwiXCIpO1xuICAgICAgICAkKFwiI21vZGFsVGl0bGVcIikudGV4dChcIlRhbWJhaCBLYXRlZ29yaVwiKTtcbiAgICAgICAgJChcIiNwcm9kdWN0Q2F0ZWdvcnlNb2RhbFwiKS5tb2RhbChcInNob3dcIik7XG4gICAgICAgIGxvYWRQYXJlbnRDYXRlZ29yaWVzKCk7XG4gICAgfSk7XG5cbiAgICAvLyBTdWJtaXQgZm9ybSAoYmFpayB0YW1iYWggbWF1cHVuIGVkaXQpXG4gICAgJChcIiNwcm9kdWN0Q2F0ZWdvcnlGb3JtXCIpLnN1Ym1pdChmdW5jdGlvbiAoZSkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgbGV0IGlkID0gJChcIiNjYXRlZ29yeV9pZFwiKS52YWwoKTtcbiAgICAgICAgbGV0IHVybCA9IGlkXG4gICAgICAgICAgICA/IGAvd2FyZWhvdXNlL3Byb2R1Y3RfY2F0ZWdvcmllcy8ke2lkfWBcbiAgICAgICAgICAgIDogYC93YXJlaG91c2UvcHJvZHVjdF9jYXRlZ29yaWVzYDtcbiAgICAgICAgbGV0IG1ldGhvZCA9IGlkID8gXCJQVVRcIiA6IFwiUE9TVFwiO1xuXG4gICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICB1cmw6IHVybCxcbiAgICAgICAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgIG5hbWU6ICQoXCIjbmFtZVwiKS52YWwoKSxcbiAgICAgICAgICAgICAgICBfdG9rZW46ICQoJ21ldGFbbmFtZT1cImNzcmYtdG9rZW5cIl0nKS5hdHRyKFwiY29udGVudFwiKSxcbiAgICAgICAgICAgICAgICAuLi4oaWQgJiYgeyBfbWV0aG9kOiBcIlBVVFwiIH0pLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAkKFwiI3Byb2R1Y3RDYXRlZ29yeU1vZGFsXCIpLm1vZGFsKFwiaGlkZVwiKTtcbiAgICAgICAgICAgICAgICAkKFwiI3Byb2R1Y3QtY2F0ZWdvcmllcy10YWJsZVwiKS5EYXRhVGFibGUoKS5hamF4LnJlbG9hZCgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbiAoeGhyKSB7XG4gICAgICAgICAgICAgICAgYWxlcnQoXCJHYWdhbCBtZW55aW1wYW4gZGF0YVwiKTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKHhoci5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfSk7XG59KTtcbiQoZG9jdW1lbnQpLm9uKFwiY2xpY2tcIiwgXCIuYnRuLWVkaXQtcHJvZHVjdC1jYXRlZ29yeVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgaWQgPSAkKHRoaXMpLmRhdGEoXCJpZFwiKTtcbiAgICBjb25zdCB1cmwgPSAkKHRoaXMpLmRhdGEoXCJ1cmxcIik7XG4gICAgJC5hamF4KHtcbiAgICAgICAgdXJsOiB1cmwsXG4gICAgICAgIG1ldGhvZDogXCJHRVRcIixcbiAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAkKFwiI2NhdGVnb3J5X2lkXCIpLnZhbChyZXNwb25zZS5pZCk7XG4gICAgICAgICAgICAkKFwiI25hbWVcIikudmFsKHJlc3BvbnNlLm5hbWUpO1xuICAgICAgICAgICAgLy8gR2V0IHBhcmVudCBjYXRlZ29yaWVzIGFuZCBwb3B1bGF0ZSBzZWxlY3RcbiAgICAgICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICAgICAgdXJsOiBcIi93YXJlaG91c2UvY2F0ZWdvcmllcy9wYXJlbnRzXCIsIC8vIEFkanVzdCB0byBtYXRjaCB5b3VyIHJvdXRlXG4gICAgICAgICAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChwYXJlbnRzKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBvcHRpb25zID1cbiAgICAgICAgICAgICAgICAgICAgICAgICc8b3B0aW9uIHZhbHVlPVwiXCI+LS0gVGlkYWsgYWRhIChQYXJlbnQpPC9vcHRpb24+JztcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChwYXJlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEF2b2lkIHNlbGYtc2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50LmlkICE9PSByZXNwb25zZS5pZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgKz0gYDxvcHRpb24gdmFsdWU9XCIke3BhcmVudC5pZH1cIiAke1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5wYXJlbnRfaWQgPT09IHBhcmVudC5pZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBcInNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogXCJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0+JHtwYXJlbnQubmFtZX08L29wdGlvbj5gO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgJChcIiNwYXJlbnRfaWRcIikuaHRtbChvcHRpb25zKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAkKFwiI21vZGFsVGl0bGVcIikudGV4dChcIkVkaXQgS2F0ZWdvcmlcIik7XG4gICAgICAgICAgICAkKFwiI3Byb2R1Y3RDYXRlZ29yeU1vZGFsXCIpLm1vZGFsKFwic2hvd1wiKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IGZ1bmN0aW9uICh4aHIpIHtcbiAgICAgICAgICAgIGFsZXJ0KFwiR2FnYWwgbWVuZ2FtYmlsIGRhdGFcIik7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKHhoci5yZXNwb25zZVRleHQpO1xuICAgICAgICB9LFxuICAgIH0pO1xufSk7XG5cbiQoZG9jdW1lbnQpLm9uKFwiY2xpY2tcIiwgXCIuYnRuLWRlc3Ryb3ktcHJvZHVjdC1jYXRlZ29yeVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgU3dhbC5maXJlKHtcbiAgICAgICAgdGl0bGU6IFwiSGFwdXMgbmFtYSBrYXRlZ29yaT9cIixcbiAgICAgICAgdGV4dDogXCJBbmRhIHRpZGFrIGFrYW4gYmlzYSBtZW5nZW1iYWxpa2FubnlhIVwiLFxuICAgICAgICBzaG93Q2FuY2VsQnV0dG9uOiB0cnVlLFxuICAgICAgICBjb25maXJtQnV0dG9uQ29sb3I6IFwiI2QzM1wiLFxuICAgICAgICBjYW5jZWxCdXR0b25Db2xvcjogXCIjZGVkZWRlXCIsXG4gICAgICAgIGNvbmZpcm1CdXR0b25UZXh0OiBcIkhhcHVzXCIsXG4gICAgfSkudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQudmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHVybCA9ICQodGhpcykuZGF0YShcImFjdGlvblwiKTtcbiAgICAgICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICAgICAgdXJsOiB1cmwsXG4gICAgICAgICAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgIF9tZXRob2Q6IFwiREVMRVRFXCIsXG4gICAgICAgICAgICAgICAgICAgIF90b2tlbjogJCgnbWV0YVtuYW1lPVwiY3NyZi10b2tlblwiXScpLmF0dHIoXCJjb250ZW50XCIpLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBhbGVydChcIkthdGVnb3JpIGJlcmhhc2lsIGRpaGFwdXMuXCIpO1xuICAgICAgICAgICAgICAgICAgICAkKFwiI3Byb2R1Y3QtY2F0ZWdvcmllcy10YWJsZVwiKS5EYXRhVGFibGUoKS5hamF4LnJlbG9hZCgpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uICh4aHIpIHtcbiAgICAgICAgICAgICAgICAgICAgYWxlcnQoXCJHYWdhbCBtZW5naGFwdXMga2F0ZWdvcmkuXCIpO1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKHhoci5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0pO1xufSk7XG5cbmZ1bmN0aW9uIGxvYWRQYXJlbnRDYXRlZ29yaWVzKHNlbGVjdGVkSWQgPSBudWxsKSB7XG4gICAgJC5hamF4KHtcbiAgICAgICAgdXJsOiBcIi93YXJlaG91c2UvY2F0ZWdvcmllcy9wYXJlbnRzXCIsIC8vIGNyZWF0ZSB0aGlzIHJvdXRlXG4gICAgICAgIHR5cGU6IFwiR0VUXCIsXG4gICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICAkKFwiI3BhcmVudF9pZFwiKVxuICAgICAgICAgICAgICAgIC5lbXB0eSgpXG4gICAgICAgICAgICAgICAgLmFwcGVuZChcbiAgICAgICAgICAgICAgICAgICAgJzxvcHRpb24gdmFsdWU9XCJcIj4tLSBUaWRhayBhZGEgKEthdGVnb3JpIFV0YW1hKSAtLTwvb3B0aW9uPidcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgZGF0YS5mb3JFYWNoKGZ1bmN0aW9uIChjYXRlZ29yeSkge1xuICAgICAgICAgICAgICAgICQoXCIjcGFyZW50X2lkXCIpLmFwcGVuZChcbiAgICAgICAgICAgICAgICAgICAgYDxvcHRpb24gdmFsdWU9XCIke2NhdGVnb3J5LmlkfVwiICR7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZElkID09IGNhdGVnb3J5LmlkID8gXCJzZWxlY3RlZFwiIDogXCJcIlxuICAgICAgICAgICAgICAgICAgICB9PiR7Y2F0ZWdvcnkubmFtZX08L29wdGlvbj5gXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgIH0pO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQUEsQ0FBQyxDQUFDQyxTQUFGLENBQVk7RUFDUkMsT0FBTyxFQUFFO0lBQ0wsZ0JBQWdCRixDQUFDLENBQUMseUJBQUQsQ0FBRCxDQUE2QkcsSUFBN0IsQ0FBa0MsU0FBbEM7RUFEWDtBQURELENBQVo7QUFLQSxJQUFJQyxjQUFjLEdBQUdKLENBQUMsQ0FBQywyQkFBRCxDQUF0QjtBQUNBLElBQUlLLEdBQUcsR0FBR0QsY0FBYyxDQUFDRSxJQUFmLENBQW9CLEtBQXBCLENBQVY7QUFDQSxJQUFJQyxLQUFL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SUFBTTtFQUM3Q3hELENBQUMsQ0FBQ1csSUFBRixDQUFPO0lBQ0hOLEdBQUcsRUFBRSwrQkFERjtJQUNtQztJQUN0Q29ELElBQUksRUFBRSxLQUZIO0lBR0gxQixPQUFPLEVBQUUsaUJBQVV6QixJQUFWLEVBQWdCO01BQ3JCTixDQUFDLENBQUMsWUFBRCxDQUFELENBQ0swRCxLQURMLEdBRUtDLE1BRkwsQ0FHUSw0REFIUjtNQUtBckQsSUFBSSxDQUFDb0MsT0FBTCxDQUFhLFVBQVVrQixRQUFWLEVBQW9CO1FBQzdCNUQsQ0FBQyxDQUFDLFlBQUQsQ0FBRCxDQUFnQjJELE1BQWhCLDJCQUNzQkMsUUFBUSxDQUFDakMsRUFEL0IsZ0JBRVE2QixVQUFVLElBQUlJLFFBQVEsQ0FBQ2pDLEVBQXZCLEdBQTRCLFVBQTVCLEdBQXlDLEVBRmpELGNBR1FpQyxRQUFRLENBQUMvQyxJQUhqQjtNQUtILENBTkQ7SUFPSDtFQWhCRSxDQUFQO0FBa0JIIiwiZmlsZSI6Ii4vcmVzb3VyY2VzL2pzL3dhcmVob3VzZV9tYW5hZ2VtZW50L3Byb2R1Y3RfY2F0ZWdvcmllcy9pbmRleC5qcy5qcyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./resources/js/warehouse_management/product_categories/index.js\n"); /***/ }) diff --git a/public/js/warehouse_management/products/create.js b/public/js/warehouse_management/products/create.js new file mode 100644 index 0000000..30c2bf7 --- /dev/null +++ b/public/js/warehouse_management/products/create.js @@ -0,0 +1,32 @@ +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +/******/ (() => { // webpackBootstrap +/******/ var __webpack_modules__ = ({ + +/***/ "./resources/js/warehouse_management/products/create.js": +/*!**************************************************************!*\ + !*** ./resources/js/warehouse_management/products/create.js ***! + \**************************************************************/ +/***/ (() => { + +eval("document.addEventListener(\"DOMContentLoaded\", function () {\n var addBtn = document.getElementById(\"addDealerRow\");\n var dealerRows = document.getElementById(\"dynamicDealerRows\"); // Get dealer data from Blade\n\n var dealerDataDiv = document.getElementById(\"dealerData\");\n var dealers = JSON.parse(dealerDataDiv.getAttribute(\"data-dealers\")); // 👈 this reads JSON from Blade\n\n var rowCount = 0;\n\n function createDealerRow(index) {\n var dealerOptions = dealers.map(function (d) {\n return \"\");\n }).join(\"\");\n return \"\\n
\\n
\\n \\n
\\n
\\n \\n
\\n
\\n \\n
\\n
\\n \");\n }\n\n addBtn.addEventListener(\"click\", function () {\n dealerRows.insertAdjacentHTML(\"beforeend\", createDealerRow(rowCount));\n rowCount++;\n });\n dealerRows.addEventListener(\"click\", function (e) {\n if (e.target.classList.contains(\"removeDealerRow\")) {\n e.target.closest(\".dealer-row\").remove();\n }\n });\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkb2N1bWVudCIsImFkZEV2ZW50TGlzdGVuZXIiLCJhZGRCdG4iLCJnZXRFbGVtZW50QnlJZCIsImRlYWxlclJvd3MiLCJkZWFsZXJEYXRhRGl2IiwiZGVhbGVycyIsIkpTT04iLCJwYXJzZSIsImdldEF0dHJpYnV0ZSIsInJvd0NvdW50IiwiY3JlYXRlRGVhbGVyUm93IiwiaW5kZXgiLCJkZWFsZXJPcHRpb25zIiwibWFwIiwiZCIsImlkIiwibmFtZSIsImpvaW4iLCJpbnNlcnRBZGphY2VudEhUTUwiLCJlIiwidGFyZ2V0IiwiY2xhc3NMaXN0IiwiY29udGFpbnMiLCJjbG9zZXN0IiwicmVtb3ZlIl0sInNvdXJjZXMiOlsid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy93YXJlaG91c2VfbWFuYWdlbWVudC9wcm9kdWN0cy9jcmVhdGUuanM/MWQyNyJdLCJzb3VyY2VzQ29udGVudCI6WyJkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiRE9NQ29udGVudExvYWRlZFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgYWRkQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhZGREZWFsZXJSb3dcIik7XG4gICAgY29uc3QgZGVhbGVyUm93cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZHluYW1pY0RlYWxlclJvd3NcIik7XG5cbiAgICAvLyBHZXQgZGVhbGVyIGRhdGEgZnJvbSBCbGFkZVxuICAgIGNvbnN0IGRlYWxlckRhdGFEaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImRlYWxlckRhdGFcIik7XG4gICAgY29uc3QgZGVhbGVycyA9IEpTT04ucGFyc2UoZGVhbGVyRGF0YURpdi5nZXRBdHRyaWJ1dGUoXCJkYXRhLWRlYWxlcnNcIikpOyAvLyDwn5GIIHRoaXMgcmVhZHMgSlNPTiBmcm9tIEJsYWRlXG5cbiAgICBsZXQgcm93Q291bnQgPSAwO1xuXG4gICAgZnVuY3Rpb24gY3JlYXRlRGVhbGVyUm93KGluZGV4KSB7XG4gICAgICAgIGNvbnN0IGRlYWxlck9wdGlvbnMgPSBkZWFsZXJzXG4gICAgICAgICAgICAubWFwKChkKSA9PiBgPG9wdGlvbiB2YWx1ZT1cIiR7ZC5pZH1cIj4ke2QubmFtZX08L29wdGlvbj5gKVxuICAgICAgICAgICAgLmpvaW4oXCJcIik7XG4gICAgICAgIHJldHVybiBgXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93IGFsaWduLWl0ZW1zLWNlbnRlciBkZWFsZXItcm93XCIgZGF0YS1pbmRleD1cIiR7aW5kZXh9XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNVwiPlxuICAgICAgICAgICAgICAgICAgPHNlbGVjdCBuYW1lPVwiZGVhbGVyX3N0b2NrWyR7aW5kZXh9XVtkZWFsZXJfaWRdXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiByZXF1aXJlZD5cbiAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCI+LS0gUGlsaWggRGVhbGVyIC0tPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgJHtkZWFsZXJPcHRpb25zfVxuICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgbmFtZT1cImRlYWxlcl9zdG9ja1ske2luZGV4fV1bcXVhbnRpdHldXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiB2YWx1ZT1cIjFcIiBtaW49XCIxXCIgcmVxdWlyZWQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTNcIj5cbiAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1kYW5nZXIgYnRuLXNtIHJlbW92ZURlYWxlclJvd1wiPkhhcHVzPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgYDtcbiAgICB9XG5cbiAgICBhZGRCdG4uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZGVhbGVyUm93cy5pbnNlcnRBZGphY2VudEhUTUwoXCJiZWZvcmVlbmRcIiwgY3JlYXRlRGVhbGVyUm93KHJvd0NvdW50KSk7XG4gICAgICAgIHJvd0NvdW50Kys7XG4gICAgfSk7XG5cbiAgICBkZWFsZXJSb3dzLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICBpZiAoZS50YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKFwicmVtb3ZlRGVhbGVyUm93XCIpKSB7XG4gICAgICAgICAgICBlLnRhcmdldC5jbG9zZXN0KFwiLmRlYWxlci1yb3dcIikucmVtb3ZlKCk7XG4gICAgICAgIH1cbiAgICB9KTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQUEsUUFBUSxDQUFDQyxnQkFBVCxDQUEwQixrQkFBMUIsRUFBOEMsWUFBWTtFQUN0RCxJQUFNQyxNQUFNLEdBQUdGLFFBQVEsQ0FBQ0csY0FBVCxDQUF3QixjQUF4QixDQUFmO0VBQ0EsSUFBTUMsVUFBVSxHQUFHSixRQUFRLENBQUNHLGNBQVQsQ0FBd0IsbUJBQXhCLENBQW5CLENBRnNELENBSXREOztFQUNBLElBQU1FLGFBQWEsR0FBR0wsUUFBUSxDQUFDRyxjQUFULENBQXdCLFlBQXhCLENBQXRCO0VBQ0EsSUFBTUcsT0FBTyxHQUFHQyxJQUFJLENBQUNDLEtBQUwsQ0FBV0gsYUFBYSxDQUFDSSxZQUFkLENBQTJCLGNBQTNCLENBQVgsQ0FBaEIsQ0FOc0QsQ0FNa0I7O0VBRXhFLElBQUlDLFFBQVEsR0FBRyxDQUFmOztFQUVBLFNBQVNDLGVBQVQsQ0FBeUJDLEtBQXpCLEVBQWdDO0lBQzVCLElBQU1DLGFBQWEsR0FBR1AsT0FBTyxDQUN4QlEsR0FEaUIsQ0FDYixVQUFDQyxDQUFEO01BQUEsaUNBQXlCQSxDQUFDLENBQUNDLEVBQTNCLGdCQUFrQ0QsQ0FBQyxDQUFDRSxJQUFwQztJQUFBLENBRGEsRUFFakJDLElBRmlCLENBRVosRUFGWSxDQUF0QjtJQUdBLHNHQUMwRU4sS0FEMUUsd0dBR3VDQSxLQUh2QywwSkFLZ0JDLGFBTGhCLHVLQVNvREQsS0FUcEQ7RUFnQkg7O0VBRURWLE1BQU0sQ0FBQ0QsZ0JBQVAsQ0FBd0IsT0FBeEIsRUFBaUMsWUFBWTtJQUN6Q0csVUFBVSxDQUFDZSxrQkFBWCxDQUE4QixXQUE5QixFQUEyQ1IsZUFBZSxDQUFDRCxRQUFELENBQTFEO0lBQ0FBLFFBQVE7RUFDWCxDQUhEO0VBS0FOLFVBQVUsQ0FBQ0gsZ0JBQVgsQ0FBNEIsT0FBNUIsRUFBcUMsVUFBVW1CLENBQVYsRUFBYTtJQUM5QyxJQUFJQSxDQUFDLENBQUNDLE1BQUYsQ0FBU0MsU0FBVCxDQUFtQkMsUUFBbkIsQ0FBNEIsaUJBQTVCLENBQUosRUFBb0Q7TUFDaERILENBQUMsQ0FBQ0MsTUFBRixDQUFTRyxPQUFULENBQWlCLGFBQWpCLEVBQWdDQyxNQUFoQztJQUNIO0VBQ0osQ0FKRDtBQUtILENBMUNEIiwiZmlsZSI6Ii4vcmVzb3VyY2VzL2pzL3dhcmVob3VzZV9tYW5hZ2VtZW50L3Byb2R1Y3RzL2NyZWF0ZS5qcy5qcyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./resources/js/warehouse_management/products/create.js\n"); + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ +/******/ // startup +/******/ // Load entry module and return exports +/******/ // This entry module can't be inlined because the eval-source-map devtool is used. +/******/ var __webpack_exports__ = {}; +/******/ __webpack_modules__["./resources/js/warehouse_management/products/create.js"](); +/******/ +/******/ })() +; \ No newline at end of file diff --git a/public/js/warehouse_management/products/edit.js b/public/js/warehouse_management/products/edit.js new file mode 100644 index 0000000..ad8b808 --- /dev/null +++ b/public/js/warehouse_management/products/edit.js @@ -0,0 +1,32 @@ +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +/******/ (() => { // webpackBootstrap +/******/ var __webpack_modules__ = ({ + +/***/ "./resources/js/warehouse_management/products/edit.js": +/*!************************************************************!*\ + !*** ./resources/js/warehouse_management/products/edit.js ***! + \************************************************************/ +/***/ (() => { + +eval("document.addEventListener(\"DOMContentLoaded\", function () {\n var dealerRowContainer = document.getElementById(\"dynamicDealerRows\");\n var addDealerButton = document.getElementById(\"addDealerRow\"); // Initial index from existing dealer rows\n\n var rowIndex = dealerRowContainer.querySelectorAll(\".dealer-stock-row\").length;\n addDealerButton.addEventListener(\"click\", function () {\n var newRow = document.createElement(\"div\");\n newRow.className = \"form-group row align-items-center dealer-stock-row\";\n newRow.innerHTML = \"\\n
\\n \\n
\\n
\\n \\n
\\n
\\n \\n
\\n \");\n dealerRowContainer.appendChild(newRow);\n rowIndex++;\n }); // Handle removal of dealer row\n\n dealerRowContainer.addEventListener(\"click\", function (event) {\n if (event.target && event.target.classList.contains(\"remove-dealer-row\")) {\n event.target.closest(\".dealer-stock-row\").remove();\n }\n }); // Function to generate dealer \");\n }).join(\"\");\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvd2FyZWhvdXNlX21hbmFnZW1lbnQvcHJvZHVjdHMvZWRpdC5qcy5qcyIsIm5hbWVzIjpbImRvY3VtZW50IiwiYWRkRXZlbnRMaXN0ZW5lciIsImRlYWxlclJvd0NvbnRhaW5lciIsImdldEVsZW1lbnRCeUlkIiwiYWRkRGVhbGVyQnV0dG9uIiwicm93SW5kZXgiLCJxdWVyeVNlbGVjdG9yQWxsIiwibGVuZ3RoIiwibmV3Um93IiwiY3JlYXRlRWxlbWVudCIsImNsYXNzTmFtZSIsImlubmVySFRNTCIsImdlbmVyYXRlRGVhbGVyT3B0aW9ucyIsImFwcGVuZENoaWxkIiwiZXZlbnQiLCJ0YXJnZXQiLCJjbGFzc0xpc3QiLCJjb250YWlucyIsImNsb3Nlc3QiLCJyZW1vdmUiLCJkZWFsZXJEYXRhRGl2IiwiZGVhbGVycyIsIkpTT04iLCJwYXJzZSIsImdldEF0dHJpYnV0ZSIsIm1hcCIsImQiLCJpZCIsIm5hbWUiLCJqb2luIl0sInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvd2FyZWhvdXNlX21hbmFnZW1lbnQvcHJvZHVjdHMvZWRpdC5qcz81YTM4Il0sInNvdXJjZXNDb250ZW50IjpbImRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJET01Db250ZW50TG9hZGVkXCIsIGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgZGVhbGVyUm93Q29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJkeW5hbWljRGVhbGVyUm93c1wiKTtcbiAgICBsZXQgYWRkRGVhbGVyQnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhZGREZWFsZXJSb3dcIik7XG5cbiAgICAvLyBJbml0aWFsIGluZGV4IGZyb20gZXhpc3RpbmcgZGVhbGVyIHJvd3NcbiAgICBsZXQgcm93SW5kZXggPVxuICAgICAgICBkZWFsZXJSb3dDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChcIi5kZWFsZXItc3RvY2stcm93XCIpLmxlbmd0aDtcblxuICAgIGFkZERlYWxlckJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBuZXdSb3cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICBuZXdSb3cuY2xhc3NOYW1lID0gXCJmb3JtLWdyb3VwIHJvdyBhbGlnbi1pdGVtcy1jZW50ZXIgZGVhbGVyLXN0b2NrLXJvd1wiO1xuICAgICAgICBuZXdSb3cuaW5uZXJIVE1MID0gYFxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxuICAgICAgICAgICAgICA8c2VsZWN0IG5hbWU9XCJkZWFsZXJfc3RvY2tbJHtyb3dJbmRleH1dW2RlYWxlcl9pZF1cIiBjbGFzcz1cImZvcm0tY29udHJvbFwiPlxuICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPi0tIFBpbGloIERlYWxlciAtLTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgJHtnZW5lcmF0ZURlYWxlck9wdGlvbnMoKX1cbiAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgbmFtZT1cImRlYWxlcl9zdG9ja1ske3Jvd0luZGV4fV1bcXVhbnRpdHldXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiB2YWx1ZT1cIjFcIiBtaW49XCIxXCIgcmVxdWlyZWQgcGxhY2Vob2xkZXI9XCJKdW1sYWggU3Rva1wiIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0yXCI+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1kYW5nZXIgYnRuLXNtIHJlbW92ZS1kZWFsZXItcm93XCI+IEhhcHVzIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgYDtcbiAgICAgICAgZGVhbGVyUm93Q29udGFpbmVyLmFwcGVuZENoaWxkKG5ld1Jvdyk7XG4gICAgICAgIHJvd0luZGV4Kys7XG4gICAgfSk7XG5cbiAgICAvLyBIYW5kbGUgcmVtb3ZhbCBvZiBkZWFsZXIgcm93XG4gICAgZGVhbGVyUm93Q29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgZXZlbnQudGFyZ2V0ICYmXG4gICAgICAgICAgICBldmVudC50YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKFwicmVtb3ZlLWRlYWxlci1yb3dcIilcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBldmVudC50YXJnZXQuY2xvc2VzdChcIi5kZWFsZXItc3RvY2stcm93XCIpLnJlbW92ZSgpO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBGdW5jdGlvbiB0byBnZW5lcmF0ZSBkZWFsZXIgPG9wdGlvbj4gZWxlbWVudHMgZHluYW1pY2FsbHlcbiAgICBmdW5jdGlvbiBnZW5lcmF0ZURlYWxlck9wdGlvbnMoKSB7XG4gICAgICAgIGNvbnN0IGRlYWxlckRhdGFEaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImRlYWxlckRhdGFcIik7XG4gICAgICAgIGNvbnN0IGRlYWxlcnMgPSBKU09OLnBhcnNlKGRlYWxlckRhdGFEaXYuZ2V0QXR0cmlidXRlKFwiZGF0YS1kZWFsZXJzXCIpKTtcbiAgICAgICAgcmV0dXJuIGRlYWxlcnNcbiAgICAgICAgICAgIC5tYXAoKGQpID0+IGA8b3B0aW9uIHZhbHVlPVwiJHtkLmlkfVwiPiR7ZC5uYW1lfTwvb3B0aW9uPmApXG4gICAgICAgICAgICAuam9pbihcIlwiKTtcbiAgICB9XG59KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUFBLFFBQVEsQ0FBQ0MsZ0JBQVQsQ0FBMEIsa0JBQTFCLEVBQThDLFlBQVk7RUFDdEQsSUFBSUMsa0JBQWtCLEdBQUdGLFFBQVEsQ0FBQ0csY0FBVCxDQUF3QixtQkFBeEIsQ0FBekI7RUFDQSxJQUFJQyxlQUFlLEdBQUdKLFFBQVEsQ0FBQ0csY0FBVCxDQUF3QixjQUF4QixDQUF0QixDQUZzRCxDQUl0RDs7RUFDQSxJQUFJRSxRQUFRLEdBQ1JILGtCQUFrQixDQUFDSSxnQkFBbkIsQ0FBb0MsbUJBQXBDLEVBQXlEQyxNQUQ3RDtFQUdBSCxlQUFlLENBQUNILGdCQUFoQixDQUFpQyxPQUFqQyxFQUEwQyxZQUFZO0lBQ2xELElBQU1PLE1BQU0sR0FBR1IsUUFBUSxDQUFDUyxhQUFULENBQXVCLEtBQXZCLENBQWY7SUFDQUQsTUFBTSxDQUFDRSxTQUFQLEdBQW1CLG9EQUFuQjtJQUNBRixNQUFNLENBQUNHLFNBQVAsNkZBRW1DTixRQUZuQyx5SUFJWU8scUJBQXFCLEVBSmpDLHVKQVFnRFAsUUFSaEQ7SUFjQUgsa0JBQWtCLENBQUNXLFdBQW5CLENBQStCTCxNQUEvQjtJQUNBSCxRQUFRO0VBQ1gsQ0FuQkQsRUFSc0QsQ0E2QnREOztFQUNBSCxrQkFBa0IsQ0FBQ0QsZ0JBQW5CLENBQW9DLE9BQXBDLEVBQTZDLFVBQVVhLEtBQVYsRUFBaUI7SUFDMUQsSUFDSUEsS0FBSyxDQUFDQyxNQUFOLElBQ0FELEtBQUssQ0FBQ0MsTUFBTixDQUFhQyxTQUFiLENBQXVCQyxRQUF2QixDQUFnQyxtQkFBaEMsQ0FGSixFQUdFO01BQ0VILEtBQUssQ0FBQ0MsTUFBTixDQUFhRyxPQUFiLENBQXFCLG1CQUFyQixFQUEwQ0MsTUFBMUM7SUFDSDtFQUNKLENBUEQsRUE5QnNELENBdUN0RDs7RUFDQSxTQUFTUCxxQkFBVCxHQUFpQztJQUM3QixJQUFNUSxhQUFhLEdBQUdwQixRQUFRLENBQUNHLGNBQVQsQ0FBd0IsWUFBeEIsQ0FBdEI7SUFDQSxJQUFNa0IsT0FBTyxHQUFHQyxJQUFJLENBQUNDLEtBQUwsQ0FBV0gsYUFBYSxDQUFDSSxZQUFkLENBQTJCLGNBQTNCLENBQVgsQ0FBaEI7SUFDQSxPQUFPSCxPQUFPLENBQ1RJLEdBREUsQ0FDRSxVQUFDQyxDQUFEO01BQUEsaUNBQXlCQSxDQUFDLENBQUNDLEVBQTNCLGdCQUFrQ0QsQ0FBQyxDQUFDRSxJQUFwQztJQUFBLENBREYsRUFFRkMsSUFGRSxDQUVHLEVBRkgsQ0FBUDtFQUdIO0FBQ0osQ0EvQ0QifQ==\n//# sourceURL=webpack-internal:///./resources/js/warehouse_management/products/edit.js\n"); + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ +/******/ // startup +/******/ // Load entry module and return exports +/******/ // This entry module can't be inlined because the eval-source-map devtool is used. +/******/ var __webpack_exports__ = {}; +/******/ __webpack_modules__["./resources/js/warehouse_management/products/edit.js"](); +/******/ +/******/ })() +; \ No newline at end of file diff --git a/public/js/warehouse_management/products/index.js b/public/js/warehouse_management/products/index.js index bb95efa..3805235 100644 --- a/public/js/warehouse_management/products/index.js +++ b/public/js/warehouse_management/products/index.js @@ -15,7 +15,7 @@ \*************************************************************/ /***/ (() => { -eval("function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n$.ajaxSetup({\n headers: {\n \"X-CSRF-TOKEN\": $('meta[name=\"csrf-token\"]').attr(\"content\")\n }\n});\nvar tableContainer = $(\"#products-table\");\nvar url = tableContainer.data(\"url\");\nvar table = $(\"#products-table\").DataTable({\n processing: true,\n serverSide: true,\n ajax: url,\n columns: [{\n data: \"DT_RowIndex\",\n name: \"DT_RowIndex\",\n orderable: false,\n searchable: false\n }, {\n data: \"code\",\n name: \"code\"\n }, {\n data: \"name\",\n name: \"name\"\n }, {\n data: \"category_name\",\n name: \"category.name\"\n }, {\n data: \"total_stock\",\n name: \"total_stock\"\n }, {\n data: \"action\",\n name: \"action\",\n orderable: false,\n searchable: false\n }]\n});\n$(document).ready(function () {\n $(\"#addProductCategory\").click(function () {\n $(\"#productCategoryForm\")[0].reset();\n $(\"#category_id\").val(\"\");\n $(\"#modalTitle\").text(\"Tambah Kategori\");\n $(\"#productCategoryModal\").modal(\"show\");\n }); // Submit form (baik tambah maupun edit)\n\n $(\"#productCategoryForm\").submit(function (e) {\n e.preventDefault();\n var id = $(\"#category_id\").val();\n var url = id ? \"/warehouse/product_categories/\".concat(id) : \"/warehouse/product_categories\";\n var method = id ? \"PUT\" : \"POST\";\n $.ajax({\n url: url,\n method: method,\n data: _objectSpread({\n name: $(\"#name\").val(),\n _token: $('meta[name=\"csrf-token\"]').attr(\"content\")\n }, id && {\n _method: \"PUT\"\n }),\n success: function success() {\n $(\"#productCategoryModal\").modal(\"hide\");\n $(\"#product-categories-table\").DataTable().ajax.reload();\n },\n error: function error(xhr) {\n alert(\"Gagal menyimpan data\");\n console.error(xhr.responseText);\n }\n });\n });\n});\n$(document).on(\"click\", \".btn-edit-product-category\", function () {\n var id = $(this).data(\"id\");\n var url = $(this).data(\"url\");\n $.ajax({\n url: url,\n method: \"GET\",\n success: function success(response) {\n $(\"#category_id\").val(response.id);\n $(\"#name\").val(response.name);\n $(\"#modalTitle\").text(\"Edit Kategori\");\n $(\"#productCategoryModal\").modal(\"show\");\n },\n error: function error(xhr) {\n alert(\"Gagal mengambil data\");\n console.error(xhr.responseText);\n }\n });\n});\n$(document).on(\"click\", \".btn-destroy-product-category\", function () {\n var _this = this;\n\n Swal.fire({\n title: \"Hapus nama kategori?\",\n text: \"Anda tidak akan bisa mengembalikannya!\",\n showCancelButton: true,\n confirmButtonColor: \"#d33\",\n cancelButtonColor: \"#dedede\",\n confirmButtonText: \"Hapus\"\n }).then(function (result) {\n if (result.value) {\n var _url = $(_this).data(\"action\");\n\n $.ajax({\n url: _url,\n method: \"POST\",\n data: {\n _method: \"DELETE\",\n _token: $('meta[name=\"csrf-token\"]').attr(\"content\")\n },\n success: function success() {\n alert(\"Kategori berhasil dihapus.\");\n $(\"#product-categories-table\").DataTable().ajax.reload();\n },\n error: function error(xhr) {\n alert(\"Gagal menghapus kategori.\");\n console.error(xhr.responseText);\n }\n });\n }\n });\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvd2FyZWhvdXNlX21hbmFnZW1lbnQvcHJvZHVjdHMvaW5kZXguanMuanMiLCJuYW1lcyI6WyIkIiwiYWpheFNldHVwIiwiaGVhZGVycyIsImF0dHIiLCJ0YWJsZUNvbnRhaW5lciIsInVybCIsImRhdGEiLCJ0YWJsZSIsIkRhdGFUYWJsZSIsInByb2Nlc3NpbmciLCJzZXJ2ZXJTaWRlIiwiYWpheCIsImNvbHVtbnMiLCJuYW1lIiwib3JkZXJhYmxlIiwic2VhcmNoYWJsZSIsImRvY3VtZW50IiwicmVhZHkiLCJjbGljayIsInJlc2V0IiwidmFsIiwidGV4dCIsIm1vZGFsIiwic3VibWl0IiwiZSIsInByZXZlbnREZWZhdWx0IiwiaWQiLCJtZXRob2QiLCJfdG9rZW4iLCJfbWV0aG9kIiwic3VjY2VzcyIsInJlbG9hZCIsImVycm9yIiwieGhyIiwiYWxlcnQiLCJjb25zb2xlIiwicmVzcG9uc2VUZXh0Iiwib24iLCJyZXNwb25zZSIsIlN3YWwiLCJmaXJlIiwidGl0bGUiLCJzaG93Q2FuY2VsQnV0dG9uIiwiY29uZmlybUJ1dHRvbkNvbG9yIiwiY2FuY2VsQnV0dG9uQ29sb3IiLCJjb25maXJtQnV0dG9uVGV4dCIsInRoZW4iLCJyZXN1bHQiLCJ2YWx1ZSJdLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL3dhcmVob3VzZV9tYW5hZ2VtZW50L3Byb2R1Y3RzL2luZGV4LmpzP2ZjZDYiXSwic291cmNlc0NvbnRlbnQiOlsiJC5hamF4U2V0dXAoe1xuICAgIGhlYWRlcnM6IHtcbiAgICAgICAgXCJYLUNTUkYtVE9LRU5cIjogJCgnbWV0YVtuYW1lPVwiY3NyZi10b2tlblwiXScpLmF0dHIoXCJjb250ZW50XCIpLFxuICAgIH0sXG59KTtcbmxldCB0YWJsZUNvbnRhaW5lciA9ICQoXCIjcHJvZHVjdHMtdGFibGVcIik7XG5sZXQgdXJsID0gdGFibGVDb250YWluZXIuZGF0YShcInVybFwiKTtcbmxldCB0YWJsZSA9ICQoXCIjcHJvZHVjdHMtdGFibGVcIikuRGF0YVRhYmxlKHtcbiAgICBwcm9jZXNzaW5nOiB0cnVlLFxuICAgIHNlcnZlclNpZGU6IHRydWUsXG4gICAgYWpheDogdXJsLFxuICAgIGNvbHVtbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgZGF0YTogXCJEVF9Sb3dJbmRleFwiLFxuICAgICAgICAgICAgbmFtZTogXCJEVF9Sb3dJbmRleFwiLFxuICAgICAgICAgICAgb3JkZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIHNlYXJjaGFibGU6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgICB7IGRhdGE6IFwiY29kZVwiLCBuYW1lOiBcImNvZGVcIiB9LFxuICAgICAgICB7IGRhdGE6IFwibmFtZVwiLCBuYW1lOiBcIm5hbWVcIiB9LFxuICAgICAgICB7IGRhdGE6IFwiY2F0ZWdvcnlfbmFtZVwiLCBuYW1lOiBcImNhdGVnb3J5Lm5hbWVcIiB9LFxuICAgICAgICB7IGRhdGE6IFwidG90YWxfc3RvY2tcIiwgbmFtZTogXCJ0b3RhbF9zdG9ja1wiIH0sXG4gICAgICAgIHsgZGF0YTogXCJhY3Rpb25cIiwgbmFtZTogXCJhY3Rpb25cIiwgb3JkZXJhYmxlOiBmYWxzZSwgc2VhcmNoYWJsZTogZmFsc2UgfSxcbiAgICBdLFxufSk7XG5cbiQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uICgpIHtcbiAgICAkKFwiI2FkZFByb2R1Y3RDYXRlZ29yeVwiKS5jbGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICQoXCIjcHJvZHVjdENhdGVnb3J5Rm9ybVwiKVswXS5yZXNldCgpO1xuICAgICAgICAkKFwiI2NhdGVnb3J5X2lkXCIpLnZhbChcIlwiKTtcbiAgICAgICAgJChcIiNtb2RhbFRpdGxlXCIpLnRleHQoXCJUYW1iYWggS2F0ZWdvcmlcIik7XG4gICAgICAgICQoXCIjcHJvZHVjdENhdGVnb3J5TW9kYWxcIikubW9kYWwoXCJzaG93XCIpO1xuICAgIH0pO1xuXG4gICAgLy8gU3VibWl0IGZvcm0gKGJhaWsgdGFtYmFoIG1hdXB1biBlZGl0KVxuICAgICQoXCIjcHJvZHVjdENhdGVnb3J5Rm9ybVwiKS5zdWJtaXQoZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgIGxldCBpZCA9ICQoXCIjY2F0ZWdvcnlfaWRcIikudmFsKCk7XG4gICAgICAgIGxldCB1cmwgPSBpZFxuICAgICAgICAgICAgPyBgL3dhcmVob3VzZS9wcm9kdWN0X2NhdGVnb3JpZXMvJHtpZH1gXG4gICAgICAgICAgICA6IGAvd2FyZWhvdXNlL3Byb2R1Y3RfY2F0ZWdvcmllc2A7XG4gICAgICAgIGxldCBtZXRob2QgPSBpZCA/IFwiUFVUXCIgOiBcIlBPU1RcIjtcblxuICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgdXJsOiB1cmwsXG4gICAgICAgICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICBuYW1lOiAkKFwiI25hbWVcIikudmFsKCksXG4gICAgICAgICAgICAgICAgX3Rva2VuOiAkKCdtZXRhW25hbWU9XCJjc3JmLXRva2VuXCJdJykuYXR0cihcImNvbnRlbnRcIiksXG4gICAgICAgICAgICAgICAgLi4uKGlkICYmIHsgX21ldGhvZDogXCJQVVRcIiB9KSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgJChcIiNwcm9kdWN0Q2F0ZWdvcnlNb2RhbFwiKS5tb2RhbChcImhpZGVcIik7XG4gICAgICAgICAgICAgICAgJChcIiNwcm9kdWN0LWNhdGVnb3JpZXMtdGFibGVcIikuRGF0YVRhYmxlKCkuYWpheC5yZWxvYWQoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKHhocikge1xuICAgICAgICAgICAgICAgIGFsZXJ0KFwiR2FnYWwgbWVueWltcGFuIGRhdGFcIik7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcih4aHIucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH0pO1xufSk7XG4kKGRvY3VtZW50KS5vbihcImNsaWNrXCIsIFwiLmJ0bi1lZGl0LXByb2R1Y3QtY2F0ZWdvcnlcIiwgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGlkID0gJCh0aGlzKS5kYXRhKFwiaWRcIik7XG4gICAgY29uc3QgdXJsID0gJCh0aGlzKS5kYXRhKFwidXJsXCIpO1xuICAgICQuYWpheCh7XG4gICAgICAgIHVybDogdXJsLFxuICAgICAgICBtZXRob2Q6IFwiR0VUXCIsXG4gICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgICAgICAgJChcIiNjYXRlZ29yeV9pZFwiKS52YWwocmVzcG9uc2UuaWQpO1xuICAgICAgICAgICAgJChcIiNuYW1lXCIpLnZhbChyZXNwb25zZS5uYW1lKTtcbiAgICAgICAgICAgICQoXCIjbW9kYWxUaXRsZVwiKS50ZXh0KFwiRWRpdCBLYXRlZ29yaVwiKTtcbiAgICAgICAgICAgICQoXCIjcHJvZHVjdENhdGVnb3J5TW9kYWxcIikubW9kYWwoXCJzaG93XCIpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogZnVuY3Rpb24gKHhocikge1xuICAgICAgICAgICAgYWxlcnQoXCJHYWdhbCBtZW5nYW1iaWwgZGF0YVwiKTtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoeGhyLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgIH0sXG4gICAgfSk7XG59KTtcblxuJChkb2N1bWVudCkub24oXCJjbGlja1wiLCBcIi5idG4tZGVzdHJveS1wcm9kdWN0LWNhdGVnb3J5XCIsIGZ1bmN0aW9uICgpIHtcbiAgICBTd2FsLmZpcmUoe1xuICAgICAgICB0aXRsZTogXCJIYXB1cyBuYW1hIGthdGVnb3JpP1wiLFxuICAgICAgICB0ZXh0OiBcIkFuZGEgdGlkYWsgYWthbiBiaXNhIG1lbmdlbWJhbGlrYW5ueWEhXCIsXG4gICAgICAgIHNob3dDYW5jZWxCdXR0b246IHRydWUsXG4gICAgICAgIGNvbmZpcm1CdXR0b25Db2xvcjogXCIjZDMzXCIsXG4gICAgICAgIGNhbmNlbEJ1dHRvbkNvbG9yOiBcIiNkZWRlZGVcIixcbiAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6IFwiSGFwdXNcIixcbiAgICB9KS50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdC52YWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgdXJsID0gJCh0aGlzKS5kYXRhKFwiYWN0aW9uXCIpO1xuICAgICAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgICAgICB1cmw6IHVybCxcbiAgICAgICAgICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgX21ldGhvZDogXCJERUxFVEVcIixcbiAgICAgICAgICAgICAgICAgICAgX3Rva2VuOiAkKCdtZXRhW25hbWU9XCJjc3JmLXRva2VuXCJdJykuYXR0cihcImNvbnRlbnRcIiksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGFsZXJ0KFwiS2F0ZWdvcmkgYmVyaGFzaWwgZGloYXB1cy5cIik7XG4gICAgICAgICAgICAgICAgICAgICQoXCIjcHJvZHVjdC1jYXRlZ29yaWVzLXRhYmxlXCIpLkRhdGFUYWJsZSgpLmFqYXgucmVsb2FkKCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKHhocikge1xuICAgICAgICAgICAgICAgICAgICBhbGVydChcIkdhZ2FsIG1lbmdoYXB1cyBrYXRlZ29yaS5cIik7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoeGhyLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAg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\n//# sourceURL=webpack-internal:///./resources/js/warehouse_management/products/index.js\n"); +eval("$.ajaxSetup({\n headers: {\n \"X-CSRF-TOKEN\": $('meta[name=\"csrf-token\"]').attr(\"content\")\n }\n});\nvar tableContainer = $(\"#products-table\");\nvar url = tableContainer.data(\"url\");\nvar table = $(\"#products-table\").DataTable({\n processing: true,\n serverSide: true,\n ajax: url,\n columns: [{\n data: \"code\",\n name: \"code\"\n }, {\n data: \"name\",\n name: \"name\"\n }, {\n data: \"category_name\",\n name: \"category.name\"\n }, {\n data: \"total_stock\",\n name: \"total_stock\"\n }, {\n data: \"action\",\n name: \"action\",\n orderable: false,\n searchable: false\n }]\n});\n$(document).on(\"click\", \".btn-destroy-product\", function () {\n var _this = this;\n\n Swal.fire({\n title: \"Hapus produk?\",\n text: \"Anda tidak akan bisa mengembalikannya!\",\n showCancelButton: true,\n confirmButtonColor: \"#d33\",\n cancelButtonColor: \"#dedede\",\n confirmButtonText: \"Hapus\"\n }).then(function (result) {\n if (result.value) {\n var _url = $(_this).data(\"action\");\n\n $.ajax({\n url: _url,\n method: \"POST\",\n data: {\n _method: \"DELETE\",\n _token: $('meta[name=\"csrf-token\"]').attr(\"content\")\n },\n success: function success() {\n alert(\"Produk berhasil dihapus.\");\n $(\"#products-table\").DataTable().ajax.reload();\n },\n error: function error(xhr) {\n alert(\"Gagal menghapus produk.\");\n console.error(xhr.responseText);\n }\n });\n }\n });\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvd2FyZWhvdXNlX21hbmFnZW1lbnQvcHJvZHVjdHMvaW5kZXguanMuanMiLCJuYW1lcyI6WyIkIiwiYWpheFNldHVwIiwiaGVhZGVycyIsImF0dHIiLCJ0YWJsZUNvbnRhaW5lciIsInVybCIsImRhdGEiLCJ0YWJsZSIsIkRhdGFUYWJsZSIsInByb2Nlc3NpbmciLCJzZXJ2ZXJTaWRlIiwiYWpheCIsImNvbHVtbnMiLCJuYW1lIiwib3JkZXJhYmxlIiwic2VhcmNoYWJsZSIsImRvY3VtZW50Iiwib24iLCJTd2FsIiwiZmlyZSIsInRpdGxlIiwidGV4dCIsInNob3dDYW5jZWxCdXR0b24iLCJjb25maXJtQnV0dG9uQ29sb3IiLCJjYW5jZWxCdXR0b25Db2xvciIsImNvbmZpcm1CdXR0b25UZXh0IiwidGhlbiIsInJlc3VsdCIsInZhbHVlIiwibWV0aG9kIiwiX21ldGhvZCIsIl90b2tlbiIsInN1Y2Nlc3MiLCJhbGVydCIsInJlbG9hZCIsImVycm9yIiwieGhyIiwiY29uc29sZSIsInJlc3BvbnNlVGV4dCJdLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL3dhcmVob3VzZV9tYW5hZ2VtZW50L3Byb2R1Y3RzL2luZGV4LmpzP2ZjZDYiXSwic291cmNlc0NvbnRlbnQiOlsiJC5hamF4U2V0dXAoe1xuICAgIGhlYWRlcnM6IHtcbiAgICAgICAgXCJYLUNTUkYtVE9LRU5cIjogJCgnbWV0YVtuYW1lPVwiY3NyZi10b2tlblwiXScpLmF0dHIoXCJjb250ZW50XCIpLFxuICAgIH0sXG59KTtcbmxldCB0YWJsZUNvbnRhaW5lciA9ICQoXCIjcHJvZHVjdHMtdGFibGVcIik7XG5sZXQgdXJsID0gdGFibGVDb250YWluZXIuZGF0YShcInVybFwiKTtcbmxldCB0YWJsZSA9ICQoXCIjcHJvZHVjdHMtdGFibGVcIikuRGF0YVRhYmxlKHtcbiAgICBwcm9jZXNzaW5nOiB0cnVlLFxuICAgIHNlcnZlclNpZGU6IHRydWUsXG4gICAgYWpheDogdXJsLFxuICAgIGNvbHVtbnM6IFtcbiAgICAgICAgeyBkYXRhOiBcImNvZGVcIiwgbmFtZTogXCJjb2RlXCIgfSxcbiAgICAgICAgeyBkYXRhOiBcIm5hbWVcIiwgbmFtZTogXCJuYW1lXCIgfSxcbiAgICAgICAgeyBkYXRhOiBcImNhdGVnb3J5X25hbWVcIiwgbmFtZTogXCJjYXRlZ29yeS5uYW1lXCIgfSxcbiAgICAgICAgeyBkYXRhOiBcInRvdGFsX3N0b2NrXCIsIG5hbWU6IFwidG90YWxfc3RvY2tcIiB9LFxuICAgICAgICB7IGRhdGE6IFwiYWN0aW9uXCIsIG5hbWU6IFwiYWN0aW9uXCIsIG9yZGVyYWJsZTogZmFsc2UsIHNlYXJjaGFibGU6IGZhbHNlIH0sXG4gICAgXSxcbn0pO1xuXG4kKGRvY3VtZW50KS5vbihcImNsaWNrXCIsIFwiLmJ0bi1kZXN0cm95LXByb2R1Y3RcIiwgZnVuY3Rpb24gKCkge1xuICAgIFN3YWwuZmlyZSh7XG4gICAgICAgIHRpdGxlOiBcIkhhcHVzIHByb2R1az9cIixcbiAgICAgICAgdGV4dDogXCJBbmRhIHRpZGFrIGFrYW4gYmlzYSBtZW5nZW1iYWxpa2FubnlhIVwiLFxuICAgICAgICBzaG93Q2FuY2VsQnV0dG9uOiB0cnVlLFxuICAgICAgICBjb25maXJtQnV0dG9uQ29sb3I6IFwiI2QzM1wiLFxuICAgICAgICBjYW5jZWxCdXR0b25Db2xvcjogXCIjZGVkZWRlXCIsXG4gICAgICAgIGNvbmZpcm1CdXR0b25UZXh0OiBcIkhhcHVzXCIsXG4gICAgfSkudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQudmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHVybCA9ICQodGhpcykuZGF0YShcImFjdGlvblwiKTtcbiAgICAgICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICAgICAgdXJsOiB1cmwsXG4gICAgICAgICAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgIF9tZXRob2Q6IFwiREVMRVRFXCIsXG4gICAgICAgICAgICAgICAgICAgIF90b2tlbjogJCgnbWV0YVtuYW1lPVwiY3NyZi10b2tlblwiXScpLmF0dHIoXCJjb250ZW50XCIpLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBhbGVydChcIlByb2R1ayBiZXJoYXNpbCBkaWhhcHVzLlwiKTtcbiAgICAgICAgICAgICAgICAgICAgJChcIiNwcm9kdWN0cy10YWJsZVwiKS5EYXRhVGFibGUoKS5hamF4LnJlbG9hZCgpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uICh4aHIpIHtcbiAgICAgICAgICAgICAgICAgICAgYWxlcnQoXCJHYWdhbCBtZW5naGFwdXMgcHJvZHVrLlwiKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcih4aHIucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9KTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQUEsQ0FBQyxDQUFDQyxTQUFGLENBQVk7RUFDUkMsT0FBTyxFQUFFO0lBQ0wsZ0JBQWdCRixDQUFDLENBQUMseUJBQUQsQ0FBRCxDQUE2QkcsSUFBN0IsQ0FBa0MsU0FBbEM7RUFEWDtBQURELENBQVo7QUFLQSxJQUFJQyxjQUFjLEdBQUdKLENBQUMsQ0FBQyxpQkFBRCxDQUF0QjtBQUNBLElBQUlLLEdBQUcsR0FBR0QsY0FBYyxDQUFDRSxJQUFmLENBQW9CLEtBQXBCLENBQVY7QUFDQSxJQUFJQyxLQUFLLEdBQUdQLENBQUMsQ0FBQyxpQkFBRCxDQUFELENBQXFCUSxTQUFyQixDQUErQjtFQUN2Q0MsVUFBVSxFQUFFLElBRDJCO0VBRXZDQyxVQUFVLEVBQUUsSUFGMkI7RUFHdkNDLElBQUksRUFBRU4sR0FIaUM7RUFJdkNPLE9BQU8sRUFBRSxDQUNMO0lBQUVOLElBQUksRUFBRSxNQUFSO0lBQWdCTyxJQUFJLEVBQUU7RUFBdEIsQ0FESyxFQUVMO0lBQUVQLElBQUksRUFBRSxNQUFSO0lBQWdCTyxJQUFJLEVBQUU7RUFBdEIsQ0FGSyxFQUdMO0lBQUVQLElBQUksRUFBRSxlQUFSO0lBQXlCTyxJQUFJLEVBQUU7RUFBL0IsQ0FISyxFQUlMO0lBQUVQLElBQUksRUFBRSxhQUFSO0lBQXVCTyxJQUFJLEVBQUU7RUFBN0IsQ0FKSyxFQUtMO0lBQUVQLElBQUksRUFBRSxRQUFSO0lBQWtCTyxJQUFJLEVBQUUsUUFBeEI7SUFBa0NDLFNBQVMsRUFBRSxLQUE3QztJQUFvREMsVUFBVSxFQUFFO0VBQWhFLENBTEs7QUFKOEIsQ0FBL0IsQ0FBWjtBQWFBZixDQUFDLENBQUNnQixRQUFELENBQUQsQ0FBWUMsRUFBWixDQUFlLE9BQWYsRUFBd0Isc0JBQXhCLEVBQWdELFlBQVk7RUFBQTs7RUFDeERDLElBQUksQ0FBQ0MsSUFBTCxDQUFVO0lBQ05DLEtBQUssRUFBRSxlQUREO0lBRU5DLElBQUksRUFBRSx3Q0FGQTtJQUdOQyxnQkFBZ0IsRUFBRSxJQUhaO0lBSU5DLGtCQUFrQixFQUFFLE1BSmQ7SUFLTkMsaUJBQWlCLEVBQUUsU0FMYjtJQU1OQyxpQkFBaUIsRUFBRTtFQU5iLENBQVYsRUFPR0MsSUFQSCxDQU9RLFVBQUNDLE1BQUQsRUFBWTtJQUNoQixJQUFJQSxNQUFNLENBQUNDLEtBQVgsRUFBa0I7TUFDZCxJQUFNdkIsSUFBRyxHQUFHTCxDQUFDLENBQUMsS0FBRCxDQUFELENBQVFNLElBQVIsQ0FBYSxRQUFiLENBQVo7O01BQ0FOLENBQUMsQ0FBQ1csSUFBRixDQUFPO1FBQ0hOLEdBQUcsRUFBRUEsSUFERjtRQUVId0IsTUFBTSxFQUFFLE1BRkw7UUFHSHZCLElBQUksRUFBRTtVQUNGd0IsT0FBTyxFQUFFLFFBRFA7VUFFRkMsTUFBTSxFQUFFL0IsQ0FBQyxDQUFDLHlCQUFELENBQUQsQ0FBNkJHLElBQTdCLENBQWtDLFNBQWxDO1FBRk4sQ0FISDtRQU9INkIsT0FBTyxFQUFFLG1CQUFZO1VBQ2pCQyxLQUFLLENBQUMsMEJBQUQsQ0FBTDtVQUNBakMsQ0FBQyxDQUFDLGlCQUFELENBQUQsQ0FBcUJRLFNBQXJCLEdBQWlDRyxJQUFqQyxDQUFzQ3VCLE1BQXRDO1FBQ0gsQ0FWRTtRQVdIQyxLQUFLLEVBQUUsZUFBVUMsR0FBVixFQUFlO1VBQ2xCSCxLQUFLLENBQUMseUJBQUQsQ0FBTDtVQUNBSSxPQUFPLENBQUNGLEtBQVIsQ0FBY0MsR0FBRyxDQUFDRSxZQUFsQjtRQUNIO01BZEUsQ0FBUDtJQWdCSDtFQUNKLENBM0JEO0FBNEJILENBN0JEIn0=\n//# sourceURL=webpack-internal:///./resources/js/warehouse_management/products/index.js\n"); /***/ }) diff --git a/public/mix-manifest.json b/public/mix-manifest.json index 8f1a7ab..619cc73 100644 --- a/public/mix-manifest.json +++ b/public/mix-manifest.json @@ -2,5 +2,7 @@ "/js/app.js": "/js/app.js", "/js/warehouse_management/product_categories/index.js": "/js/warehouse_management/product_categories/index.js", "/js/warehouse_management/products/index.js": "/js/warehouse_management/products/index.js", + "/js/warehouse_management/products/create.js": "/js/warehouse_management/products/create.js", + "/js/warehouse_management/products/edit.js": "/js/warehouse_management/products/edit.js", "/css/app.css": "/css/app.css" } diff --git a/resources/js/warehouse_management/product_categories/index.js b/resources/js/warehouse_management/product_categories/index.js index 2a5b455..8575a78 100644 --- a/resources/js/warehouse_management/product_categories/index.js +++ b/resources/js/warehouse_management/product_categories/index.js @@ -10,13 +10,8 @@ let table = $("#product-categories-table").DataTable({ serverSide: true, ajax: url, columns: [ - { - data: "DT_RowIndex", - name: "DT_RowIndex", - orderable: false, - searchable: false, - }, { data: "name", name: "name" }, + { data: "parent", name: "parent" }, { data: "action", name: "action", orderable: false, searchable: false }, ], }); @@ -27,6 +22,7 @@ $(document).ready(function () { $("#category_id").val(""); $("#modalTitle").text("Tambah Kategori"); $("#productCategoryModal").modal("show"); + loadParentCategories(); }); // Submit form (baik tambah maupun edit) @@ -67,6 +63,26 @@ $(document).on("click", ".btn-edit-product-category", function () { success: function (response) { $("#category_id").val(response.id); $("#name").val(response.name); + // Get parent categories and populate select + $.ajax({ + url: "/warehouse/categories/parents", // Adjust to match your route + method: "GET", + success: function (parents) { + let options = + ''; + parents.forEach(function (parent) { + // Avoid self-select + if (parent.id !== response.id) { + options += ``; + } + }); + $("#parent_id").html(options); + }, + }); $("#modalTitle").text("Edit Kategori"); $("#productCategoryModal").modal("show"); }, @@ -107,3 +123,24 @@ $(document).on("click", ".btn-destroy-product-category", function () { } }); }); + +function loadParentCategories(selectedId = null) { + $.ajax({ + url: "/warehouse/categories/parents", // create this route + type: "GET", + success: function (data) { + $("#parent_id") + .empty() + .append( + '' + ); + data.forEach(function (category) { + $("#parent_id").append( + `` + ); + }); + }, + }); +} diff --git a/resources/js/warehouse_management/products/create.js b/resources/js/warehouse_management/products/create.js new file mode 100644 index 0000000..312830f --- /dev/null +++ b/resources/js/warehouse_management/products/create.js @@ -0,0 +1,43 @@ +document.addEventListener("DOMContentLoaded", function () { + const addBtn = document.getElementById("addDealerRow"); + const dealerRows = document.getElementById("dynamicDealerRows"); + + // Get dealer data from Blade + const dealerDataDiv = document.getElementById("dealerData"); + const dealers = JSON.parse(dealerDataDiv.getAttribute("data-dealers")); // 👈 this reads JSON from Blade + + let rowCount = 0; + + function createDealerRow(index) { + const dealerOptions = dealers + .map((d) => ``) + .join(""); + return ` +
+
+ +
+
+ +
+
+ +
+
+ `; + } + + addBtn.addEventListener("click", function () { + dealerRows.insertAdjacentHTML("beforeend", createDealerRow(rowCount)); + rowCount++; + }); + + dealerRows.addEventListener("click", function (e) { + if (e.target.classList.contains("removeDealerRow")) { + e.target.closest(".dealer-row").remove(); + } + }); +}); diff --git a/resources/js/warehouse_management/products/edit.js b/resources/js/warehouse_management/products/edit.js new file mode 100644 index 0000000..dcd6aca --- /dev/null +++ b/resources/js/warehouse_management/products/edit.js @@ -0,0 +1,48 @@ +document.addEventListener("DOMContentLoaded", function () { + let dealerRowContainer = document.getElementById("dynamicDealerRows"); + let addDealerButton = document.getElementById("addDealerRow"); + + // Initial index from existing dealer rows + let rowIndex = + dealerRowContainer.querySelectorAll(".dealer-stock-row").length; + + addDealerButton.addEventListener("click", function () { + const newRow = document.createElement("div"); + newRow.className = "form-group row align-items-center dealer-stock-row"; + newRow.innerHTML = ` +
+ +
+
+ +
+
+ +
+ `; + dealerRowContainer.appendChild(newRow); + rowIndex++; + }); + + // Handle removal of dealer row + dealerRowContainer.addEventListener("click", function (event) { + if ( + event.target && + event.target.classList.contains("remove-dealer-row") + ) { + event.target.closest(".dealer-stock-row").remove(); + } + }); + + // Function to generate dealer `) + .join(""); + } +}); diff --git a/resources/js/warehouse_management/products/index.js b/resources/js/warehouse_management/products/index.js index f36ac28..5d35582 100644 --- a/resources/js/warehouse_management/products/index.js +++ b/resources/js/warehouse_management/products/index.js @@ -10,12 +10,6 @@ let table = $("#products-table").DataTable({ serverSide: true, ajax: url, columns: [ - { - data: "DT_RowIndex", - name: "DT_RowIndex", - orderable: false, - searchable: false, - }, { data: "code", name: "code" }, { data: "name", name: "name" }, { data: "category_name", name: "category.name" }, @@ -24,65 +18,9 @@ let table = $("#products-table").DataTable({ ], }); -$(document).ready(function () { - $("#addProductCategory").click(function () { - $("#productCategoryForm")[0].reset(); - $("#category_id").val(""); - $("#modalTitle").text("Tambah Kategori"); - $("#productCategoryModal").modal("show"); - }); - - // Submit form (baik tambah maupun edit) - $("#productCategoryForm").submit(function (e) { - e.preventDefault(); - - let id = $("#category_id").val(); - let url = id - ? `/warehouse/product_categories/${id}` - : `/warehouse/product_categories`; - let method = id ? "PUT" : "POST"; - - $.ajax({ - url: url, - method: method, - data: { - name: $("#name").val(), - _token: $('meta[name="csrf-token"]').attr("content"), - ...(id && { _method: "PUT" }), - }, - success: function () { - $("#productCategoryModal").modal("hide"); - $("#product-categories-table").DataTable().ajax.reload(); - }, - error: function (xhr) { - alert("Gagal menyimpan data"); - console.error(xhr.responseText); - }, - }); - }); -}); -$(document).on("click", ".btn-edit-product-category", function () { - const id = $(this).data("id"); - const url = $(this).data("url"); - $.ajax({ - url: url, - method: "GET", - success: function (response) { - $("#category_id").val(response.id); - $("#name").val(response.name); - $("#modalTitle").text("Edit Kategori"); - $("#productCategoryModal").modal("show"); - }, - error: function (xhr) { - alert("Gagal mengambil data"); - console.error(xhr.responseText); - }, - }); -}); - -$(document).on("click", ".btn-destroy-product-category", function () { +$(document).on("click", ".btn-destroy-product", function () { Swal.fire({ - title: "Hapus nama kategori?", + title: "Hapus produk?", text: "Anda tidak akan bisa mengembalikannya!", showCancelButton: true, confirmButtonColor: "#d33", @@ -99,11 +37,11 @@ $(document).on("click", ".btn-destroy-product-category", function () { _token: $('meta[name="csrf-token"]').attr("content"), }, success: function () { - alert("Kategori berhasil dihapus."); - $("#product-categories-table").DataTable().ajax.reload(); + alert("Produk berhasil dihapus."); + $("#products-table").DataTable().ajax.reload(); }, error: function (xhr) { - alert("Gagal menghapus kategori."); + alert("Gagal menghapus produk."); console.error(xhr.responseText); }, }); diff --git a/resources/views/warehouse_management/product_categories/index.blade.php b/resources/views/warehouse_management/product_categories/index.blade.php index d2f4a91..1a5ca87 100644 --- a/resources/views/warehouse_management/product_categories/index.blade.php +++ b/resources/views/warehouse_management/product_categories/index.blade.php @@ -8,7 +8,7 @@

- Kategori Produk + Tabel Kategori Produk

@can('create', $menus['product_categories.index']) @@ -28,8 +28,8 @@ - + @@ -51,11 +51,18 @@ - {{-- end modal --}} @endsection diff --git a/resources/views/warehouse_management/products/create.blade.php b/resources/views/warehouse_management/products/create.blade.php index 924825e..16ee38b 100644 --- a/resources/views/warehouse_management/products/create.blade.php +++ b/resources/views/warehouse_management/products/create.blade.php @@ -1,37 +1,73 @@ @extends('layouts.backapp') @section('content') -
-
-
- - - -

- Tambah Produk -

-
-
- -
-
- +
+
+
+ + + +

Tambah Produk

+
+
+ +
+
+ @csrf + + {{-- Product Info --}} +
+ + +
+ +
+ + +
+ +
+ + +
+ + {{-- Product Category --}} +
+ + +
+ + {{-- Dynamic Dealer Stock Section --}} +
+
+ +
+ + +
+ + {{-- Submit --}} +
+ + Batal +
+
-
- -
NO Nama KategoriParent Aksi
- - - - - - - - - -
NOKodeNamaAddressStok
- - - +@endsection + +@section('javascripts') + @endsection \ No newline at end of file diff --git a/resources/views/warehouse_management/products/edit.blade.php b/resources/views/warehouse_management/products/edit.blade.php new file mode 100644 index 0000000..f711f5e --- /dev/null +++ b/resources/views/warehouse_management/products/edit.blade.php @@ -0,0 +1,95 @@ +@extends('layouts.backapp') + +@section('content') +
+
+
+ + + +

Tambah Produk

+
+
+ +
+
+ @csrf + @method('PUT') {{-- Correctly spoof PUT method --}} + + {{-- Product Info --}} +
+ + +
+ +
+ + +
+ +
+ + +
+ + {{-- Product Category --}} +
+ + +
+ + {{-- Stok per Dealer --}} +
+
+ +
+ @foreach($product->dealers as $index => $dealer) +
+
+ +
+
+ +
+
+ +
+
+ @endforeach +
+ + +
+ + {{-- Submit --}} +
+ + Batal +
+
+
+
+@endsection + +@section('javascripts') + +@endsection \ No newline at end of file diff --git a/resources/views/warehouse_management/products/index.blade.php b/resources/views/warehouse_management/products/index.blade.php index d5208c7..324a821 100644 --- a/resources/views/warehouse_management/products/index.blade.php +++ b/resources/views/warehouse_management/products/index.blade.php @@ -8,14 +8,14 @@

- Produk + Tabel Produk

@can('create', $menus['product_categories.index'])
- + Tambah
@@ -28,7 +28,6 @@ - diff --git a/routes/web.php b/routes/web.php index 2939e3f..230e0b0 100644 --- a/routes/web.php +++ b/routes/web.php @@ -206,6 +206,7 @@ Route::group(['middleware' => 'auth'], function() { Route::prefix('warehouse')->group(function (){ Route::resource('products', ProductsController::class); Route::resource('product_categories', ProductCategoriesController::class); + Route::get('categories/parents', [ProductCategoriesController::class, 'getParents']); }); }); diff --git a/webpack.mix.js b/webpack.mix.js index 28be5a0..181f80b 100644 --- a/webpack.mix.js +++ b/webpack.mix.js @@ -21,4 +21,12 @@ mix.js("resources/js/app.js", "public/js") "resources/js/warehouse_management/products/index.js", "public/js/warehouse_management/products" ) + .js( + "resources/js/warehouse_management/products/create.js", + "public/js/warehouse_management/products" + ) + .js( + "resources/js/warehouse_management/products/edit.js", + "public/js/warehouse_management/products" + ) .sourceMaps();
NO Kode Nama Kategori