';
+
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